flrig-2.0.04/0000775000175000017500000000000014511461606007707 500000000000000flrig-2.0.04/src/0000775000175000017500000000000014511461606010476 500000000000000flrig-2.0.04/src/support/0000775000175000017500000000000014511461606012212 500000000000000flrig-2.0.04/src/support/mingw.c0000664000175000017500000001720514502041135013413 00000000000000// ---------------------------------------------------------------------------- // mingw.c // // The following routines were copied from git-1.6.1.2/compat/mingw.c: // git_vsnprintf git_snprintf sleep mingw_getcwd mingw_getenv mingw_rename // // The uname routine was adapted from libgw32c 0.4. // // The rest: // Copyright (C) 2009 // Stelios Bounanos, M0GLD // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" #include #include "util.h" /* default mode for stdin, stdout and stderr */ unsigned int _CRT_fmode = _O_BINARY; /******************************************************************************/ #if SNPRINTF_RETURNS_BOGUS /* * The size parameter specifies the available space, i.e. includes * the trailing NUL byte; but Windows's vsnprintf expects the * number of characters to write without the trailing NUL. */ #define SNPRINTF_SIZE_CORR 1 #undef vsnprintf int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap) { char *s; int ret = -1; if (maxsize > 0) { ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap); if (ret == maxsize-1) ret = -1; /* Windows does not NUL-terminate if result fills buffer */ str[maxsize-1] = 0; } if (ret != -1) return ret; s = NULL; if (maxsize < 128) maxsize = 128; while (ret == -1) { maxsize *= 4; str = (char *)realloc(s, maxsize); if (! str) break; s = str; ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap); if (ret == maxsize-1) ret = -1; } free(s); return ret; } int git_snprintf(char *str, size_t maxsize, const char *format, ...) { va_list ap; int ret; va_start(ap, format); ret = git_vsnprintf(str, maxsize, format, ap); va_end(ap); return ret; } #endif /* SNPRINTF_RETURNS_BOGUS */ unsigned sleep(unsigned seconds) { Sleep(seconds*1000); return 0; } #undef getcwd char *mingw_getcwd(char *pointer, int len) { int i; char *ret = getcwd(pointer, len); if (!ret) return ret; for (i = 0; pointer[i]; i++) if (pointer[i] == '\\') pointer[i] = '/'; return ret; } #undef getenv char *mingw_getenv(const char *name) { char *result = getenv(name); if (!result && !strcmp(name, "TMPDIR")) { /* on Windows it is TMP and TEMP */ result = getenv("TMP"); if (!result) result = getenv("TEMP"); } return result; } #undef rename int mingw_rename(const char *pold, const char *pnew) { DWORD attrs; /* * Try native rename() first to get errno right. * It is based on MoveFile(), which cannot overwrite existing files. */ if (!rename(pold, pnew)) return 0; if (errno != EEXIST) return -1; if (MoveFileEx(pold, pnew, MOVEFILE_REPLACE_EXISTING)) return 0; /* TODO: translate more errors */ if (GetLastError() == ERROR_ACCESS_DENIED && (attrs = GetFileAttributes(pnew)) != INVALID_FILE_ATTRIBUTES) { if (attrs & FILE_ATTRIBUTE_DIRECTORY) { errno = EISDIR; return -1; } if ((attrs & FILE_ATTRIBUTE_READONLY) && SetFileAttributes(pnew, attrs & ~FILE_ATTRIBUTE_READONLY)) { if (MoveFileEx(pold, pnew, MOVEFILE_REPLACE_EXISTING)) return 0; /* revert file attributes on failure */ SetFileAttributes(pnew, attrs); } } errno = EACCES; return -1; } /******************************************************************************/ __attribute__((constructor)) static void wsa_init(void) { WSADATA wsa; static int wsa_init_ = 0; if (wsa_init_) return; if (WSAStartup(MAKEWORD(2, 2), &wsa)) { fprintf(stderr, "unable to initialize winsock: error %d", WSAGetLastError()); exit(EXIT_FAILURE); } atexit((void(*)(void)) WSACleanup); wsa_init_ = 1; } int socketpair(int family, int type, int protocol, int *sv) { struct sockaddr_in addr; SOCKET sfd; int err, len = sizeof(addr); if (sv == NULL || family != AF_INET || type != SOCK_STREAM || protocol) { WSASetLastError(WSAEINVAL); return SOCKET_ERROR; } sv[0] = sv[1] = INVALID_SOCKET; if ((sfd = socket(family, type, 0)) == INVALID_SOCKET) return SOCKET_ERROR; memset(&addr, 0, sizeof(addr)); addr.sin_family = family; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = 0; /* any port */ if ((err = bind(sfd, (const struct sockaddr*)&addr, sizeof(addr))) == SOCKET_ERROR) { err = WSAGetLastError(); closesocket(sfd); WSASetLastError(err); return SOCKET_ERROR; } if ((err = getsockname(sfd, (struct sockaddr*)&addr, &len)) == SOCKET_ERROR) { err = WSAGetLastError(); closesocket(sfd); WSASetLastError(err); return SOCKET_ERROR; } do { if (listen(sfd, 1) == SOCKET_ERROR) break; if ((sv[0] = WSASocket(family, type, 0, NULL, 0, 0)) == INVALID_SOCKET) break; if (connect(sv[0], (const struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) break; if ((sv[1] = accept(sfd, NULL, NULL)) == INVALID_SOCKET) break; closesocket(sfd); return 0; } while (0); /* error */ err = WSAGetLastError(); closesocket(sfd); closesocket(sv[0]); closesocket(sv[1]); WSASetLastError(err); return SOCKET_ERROR; } /******************************************************************************/ int nanosleep(const struct timespec *req, struct timespec *rem) { if (unlikely(req->tv_nsec < 0 || req->tv_nsec < 0L || req->tv_nsec > 999999999L)) { errno = EINVAL; return -1; } Sleep(req->tv_sec * 1000 + req->tv_nsec / 1000000L); if (unlikely(rem)) { rem->tv_sec = 0; rem->tv_nsec = 0L; } return 0; } /* BOOL GetOsInfo(LPSTR OsName, LPSTR Release, LPSTR Version); BOOL GetMachInfo(LPSTR MachineName, LPSTR ProcessorName); int uname(struct utsname *name) { char processor[1024]; if (name == NULL) { errno = EINVAL; return -1; } if (gethostname(name->nodename, sizeof(name->nodename)) < 0) { name->nodename[0] = '\0'; errno = ENOSYS; return -1; } if (!GetOsInfo(name->sysname, name->release, name->version)) { strncpy (name->sysname, "win32", sizeof (name->sysname)); strncpy (name->release, "unknown", sizeof (name->release)); strncpy (name->version, "unknown", sizeof (name->version)); } // "windows32" is as yet the only universal windows description allowed // by config.guess and config.sub strncpy(name->sysname, "windows32", sizeof (name->sysname)); if (!GetMachInfo(name->machine, processor)) strncpy(name->machine, "i386", sizeof (name->machine)); return 0; } int getrusage(int who, struct rusage *usage) { FILETIME ct, et, kt, ut; ULARGE_INTEGER uli; if (who != RUSAGE_SELF) { errno = EINVAL; return -1; } if (!usage) { errno = EFAULT; return -1; } if (!GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut)) { errno = ENOENT; return -1; } // FILETIMEs use 100-ns units memcpy(&uli, &kt, sizeof(FILETIME)); usage->ru_stime.tv_sec = uli.QuadPart / 10000000L; usage->ru_stime.tv_usec = uli.QuadPart % 10000000L; memcpy(&uli, &ut, sizeof(FILETIME)); usage->ru_utime.tv_sec = uli.QuadPart / 10000000L; usage->ru_utime.tv_usec = uli.QuadPart % 10000000L; return 0; } */ flrig-2.0.04/src/support/init_user_interface.cxx0000664000175000017500000022261614505041060016677 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2011 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "support.h" #include "ptt.h" #include "xmlrpc_rig.h" extern bool testmode; void TRACED(update_UI_PTT, void *d) btnPTT->value(PTT); if (!PTT) { btnALC_IDD_SWR->hide(); scaleSmeter->show(); sldrRcvSignal->clear(); } else { btnALC_IDD_SWR->show(); scaleSmeter->hide(); sldrFwdPwr->clear(); sldrALC->clear(); sldrSWR->clear(); } } void TRACED(adjust_small_ui) int y = 0; mainwindow->resize( mainwindow->x(), mainwindow->y(), SMALL_MAINW, SMALL_MAINH); btnVol->hide(); sldrVOLUME->hide(); sldrRFGAIN->hide(); btnIFsh->hide(); btn_KX3_IFsh->hide(); sldrIFSHIFT->hide(); btnLOCK->hide(); btnCLRPBT->hide(); sldrINNER->hide(); btnCLRPBT->hide(); sldrOUTER->hide(); btnNotch->hide(); sldrNOTCH->hide(); sldrMICGAIN->hide(); btnPOWER->hide(); sldrPOWER->hide(); btnPOWER->hide(); sldrSQUELCH->hide(); btnNR->hide(); sldrNR->hide(); btnNOISE->hide(); btnAGC->hide(); sldrRFGAIN->redraw_label(); if (!selrig->has_power_out && !selrig->has_voltmeter) { sm_grp1->resize(FreqDispA->x(), sm_grp1->y(), FreqDispA->w(), 40); sm_grp1->color(fl_rgb_color(progStatus.bg_red, progStatus.bg_green, progStatus.bg_blue)); grpMeters->resize(sm_grp1->x()+ 2, sm_grp1->y() + 2, sm_grp1->w() - 4, sm_grp1->h() - 4); scaleSmeter->resize(grpMeters->x(), grpMeters->y() + 6, grpMeters->w(), scaleSmeter->h()); sldrRcvSignal->resize(scaleSmeter->x() + 2, scaleSmeter->y() + scaleSmeter->h() + 6, scaleSmeter->w() - 4, sldrRcvSignal->h()); sldrALC->resize(sldrRcvSignal->x(), sldrRcvSignal->y(), sldrRcvSignal->w(), sldrRcvSignal->h()); sldrIDD->resize(sldrRcvSignal->x(), sldrRcvSignal->y(), sldrRcvSignal->w(), sldrRcvSignal->h()); sldrSWR->resize(sldrRcvSignal->x(), sldrRcvSignal->y(), sldrRcvSignal->w(), sldrRcvSignal->h()); grpMeters->redraw(); sm_grp1->redraw(); sldrRcvSignal->redraw(); sldrALC->redraw(); sldrIDD->redraw(); sldrSWR->redraw(); } if (progStatus.schema == 1 && selrig->widgets[0].W != (Fl_Widget *)0) { int i = 0; while (selrig->widgets[i].W != NULL) { if (selrig->widgets[i].w != 0) selrig->widgets[i].W->resize( selrig->widgets[i].x, selrig->widgets[i].y, selrig->widgets[i].w, selrig->widgets[i].W->h() ); if (selrig->widgets[i].y > y) y = selrig->widgets[i].y; selrig->widgets[i].W->show(); selrig->widgets[i].W->redraw(); i++; } if (selrig->has_data_port) { sldrMICGAIN->label(""); sldrMICGAIN->redraw_label(); } if (selrig->has_power_control) { btnPOWER->resize( sldrPOWER->x() - 52, sldrPOWER->y(), 50, 18 ); btnPOWER->redraw(); btnPOWER->show(); } if (mnuSchema) mnuSchema->set(); } else { if (mnuSchema) mnuSchema->clear(); y = grpMeters->y() + grpMeters->h() - 18; if (selrig->has_volume_control) { y += 20; btnVol->position( 2, y); btnVol->show(); btnVol->redraw(); sldrVOLUME->resize( 54, y, 368, 18 ); sldrVOLUME->show(); sldrVOLUME->redraw(); } if (selrig->has_rf_control) { y += 20; sldrRFGAIN->resize( 54, y, 368, 18 ); sldrRFGAIN->show(); sldrRFGAIN->redraw(); } if (selrig->has_sql_control) { y += 20; sldrSQUELCH->resize( 54, y, 368, 18 ); sldrSQUELCH->show(); sldrSQUELCH->redraw(); } if (selrig->has_noise_reduction_control) { y += 20; btnNR->position( 2, y); btnNR->show(); btnNR->redraw(); sldrNR->resize( 54, y, 368, 18 ); sldrNR->show(); sldrNR->redraw(); if (xcvr_name == rig_TT599.name_) btnNR->deactivate(); } if (selrig->has_pbt_controls) { y += 20; btnLOCK->position( 2, y); if (selrig->name_ == rig_FLEX1500.name_) btnLOCK->hide(); else btnLOCK->show(); btnLOCK->redraw(); sldrINNER->resize( 54, y, 368, 18 ); sldrINNER->show(); sldrINNER->redraw(); y += 20; btnCLRPBT->position( 2, y); if (selrig->name_ == rig_FLEX1500.name_) btnCLRPBT->hide(); else btnCLRPBT->show(); btnCLRPBT->redraw(); sldrOUTER->resize( 54, y, 368, 18); sldrOUTER->show(); sldrOUTER->redraw(); } if (selrig->has_ifshift_control) { y += 20; if (xcvr_name == rig_KX3.name_) { btn_KX3_IFsh->position( 2, y ); btn_KX3_IFsh->show(); btn_KX3_IFsh->redraw(); btnIFsh->hide(); btnIFsh->redraw(); } else { btnIFsh->position( 2, y); btnIFsh->show(); btnIFsh->redraw(); btn_KX3_IFsh->hide(); btn_KX3_IFsh->redraw(); } sldrIFSHIFT->resize( 54, y, 368, 18 ); sldrIFSHIFT->show(); sldrIFSHIFT->redraw(); } if (selrig->has_notch_control) { y += 20; btnNotch->position( 2, y); btnNotch->show(); btnNotch->redraw(); sldrNOTCH->resize( 54, y, 368, 18 ); sldrNOTCH->show(); sldrNOTCH->redraw(); } if (selrig->has_micgain_control) { y += 20; sldrMICGAIN->resize( 54, y, 368, 18 ); sldrMICGAIN->show(); sldrMICGAIN->redraw(); if (selrig->has_data_port) { sldrMICGAIN->label(""); sldrMICGAIN->redraw_label(); btnDataPort->position( 2, y); btnDataPort->show(); btnDataPort->redraw(); } } else if (selrig->has_data_port) { btnDataPort->position( 214, 105); btnDataPort->show(); btnDataPort->redraw(); } if (selrig->has_power_control) { y += 20; sldrPOWER->resize( 54, y, 368, 18 ); sldrPOWER->show(); sldrPOWER->redraw(); btnPOWER->resize( 2, y, 50, 18 ); btnPOWER->show(); } } y += 20; btn_show_controls->position( btn_show_controls->x(), y ); btnAttenuator->position( btnAttenuator->x(), y); btnAttenuator->redraw(); btnPreamp->position( btnPreamp->x(), y); btnPreamp->redraw(); btnNOISE->position( btnNOISE->x(), y); btnAutoNotch->position( btnAutoNotch->x(), y); btnAutoNotch->redraw(); btnTune->position( btnTune->x(), y); btnTune->redraw(); btn_tune_on_off->position( btn_tune_on_off->x(), y); btn_tune_on_off->redraw(); cbo_preamp->resize( btnAttenuator->x(), btnAttenuator->y(), cbo_preamp->w(), btnAttenuator->h()); cbo_preamp->redraw(); if (selrig->has_noise_reduction) { btnNOISE->show(); } else { btnNOISE->hide(); } btnNOISE->redraw(); if (selrig->has_agc_control) { btnAGC->resize(btnAGC->x(), sldrRFGAIN->y(), btnAGC->w(), btnAGC->h()); btnAGC->show(); sldrRFGAIN->label(""); sldrRFGAIN->redraw_label(); } else { btnAGC->hide(); sldrRFGAIN->label(_("RF")); sldrRFGAIN->redraw_label(); } if (xcvr_name == rig_FT1000MP.name_) { y -= 20; btnTune->position( btnTune->x(), y); btnTune->redraw(); btn_tune_on_off->position( btn_tune_on_off->x(), y); btn_tune_on_off->redraw(); btnAutoNotch->position( btnAutoNotch->x(), y); btnAutoNotch->redraw(); btnPTT->position( btnPTT->x(), y); btnPTT->redraw(); } if (xcvr_name == rig_FT100D.name_ || xcvr_name == rig_FT767.name_ || xcvr_name == rig_FT817.name_ || xcvr_name == rig_FT817BB.name_ || xcvr_name == rig_FT818ND.name_ || xcvr_name == rig_FT847.name_ || xcvr_name == rig_FT857D.name_ || xcvr_name == rig_FT890.name_ || xcvr_name == rig_FT897D.name_ || xcvr_name == rig_FT920.name_ ) { y -= 20; btnPTT->position( mainwindow->w() - btnPTT->w() - btn_show_controls->w() - 10, y); btnPTT->redraw(); btn_show_controls->position( btnPTT->x() + btnPTT->w() + 5, y ); btn_show_controls->redraw(); } btnPTT->resize(btnPTT->x(), y, btnPTT->w(), 18); btnPTT->redraw(); btn_show_controls->label("@-22->"); btn_show_controls->redraw_label(); y += 20; btn_show_controls->show(); mainwindow->init_sizes(); mainwindow->size( mainwindow->w(), y); if (progStatus.tooltips) { Fl_Tooltip::enable(1); if (mnuTooltips) mnuTooltips->set(); } else { if (mnuTooltips) mnuTooltips->clear(); Fl_Tooltip::enable(0); } if (mnuVoltmeter) { if (progStatus.display_voltmeter) mnuVoltmeter->set(); else mnuVoltmeter->clear(); } if (mnuEmbedTabs) { if (progStatus.embed_tabs) mnuEmbedTabs->set(); else mnuEmbedTabs->clear(); } mainwindow->damage(); mainwindow->redraw(); } void TRACED(adjust_xig_wide) btnPreamp->show(); btnAttenuator->show(); btnNOISE->show(); btnAutoNotch->hide(); btnAGC->resize(btnAutoNotch->x(), btnAutoNotch->y(), btnAutoNotch->w(), btnAutoNotch->h()); btnAGC->show(); grp_row1b1b->add(btnAGC); btnAswapB->show(); btnSplit->show(); btnPTT->show(); btnTune->show(); int xig_y = grp_row2->y() + grp_row2->h() / 4; int xig_h = 5 * btnAGC->h() / 4; Fl_Group *xig_group = new Fl_Group( 2, xig_y, mainwindow->w() - 4, xig_h); Fl_Group *xig_gp1 = new Fl_Group( xig_group->x(), xig_group->y(), (xig_group->w() - 4) / 3, xig_h); btnVol->resize( xig_gp1->x(), xig_y, 54, xig_gp1->h()); xig_gp1->add(btnVol); sldrVOLUME->resize( xig_gp1->x() + 54, xig_y, xig_gp1->w() - 54, xig_h); xig_gp1->add(sldrVOLUME); btnVol->show(); sldrVOLUME->show(); xig_gp1->end(); xig_gp1->resizable(sldrVOLUME); Fl_Group *xig_gp2 = new Fl_Group( xig_gp1->x() + xig_gp1->w() + 2, xig_y, xig_gp1->w(), xig_h); btnPOWER->resize( xig_gp2->x(), xig_y, 54, xig_h); xig_gp2->add(btnPOWER); sldrPOWER->resize( xig_gp2->x() + 54, xig_y, xig_gp2->w() - 54, xig_h); xig_gp2->add(sldrPOWER); btnPOWER->show(); sldrPOWER->show(); xig_gp2->end(); xig_gp2->resizable(sldrPOWER); Fl_Group *xig_gp3 = new Fl_Group( xig_gp2->x() + xig_gp2->w() + 2, xig_y, xig_group->w() - 2 * xig_gp1->w() - 4, xig_h); xig_gp3->add(sldrSQUELCH); sldrSQUELCH->resize( xig_gp3->x() + 54, xig_y, xig_gp3->w() - 54, xig_h); sldrSQUELCH->label("SQL"); sldrSQUELCH->redraw_label(); sldrSQUELCH->show(); xig_gp3->end(); xig_gp3->resizable(sldrSQUELCH); xig_group->end(); grp_row2a->remove(sldrMICGAIN); grp_row2a->resize(xig_group->x(), xig_group->y(), xig_group->w(), xig_group->h()); grp_row2a->hide(); grp_row2b->remove(btnIFsh); grp_row2b->remove(btn_KX3_IFsh); grp_row2b->remove(sldrIFSHIFT); grp_row2b->resize(xig_group->x(), xig_group->y(), xig_group->w(), xig_group->h()); grp_row2b->hide(); grp_row2c->remove(sldrRFGAIN); grp_row2c->resize(xig_group->x(), xig_group->y(), xig_group->w(), xig_group->h()); grp_row2c->hide(); grp_row2->resize(xig_group->x(), xig_group->y(), xig_group->w(), xig_group->h()); grp_row2->hide(); mainwindow->remove(grp_row2); mainwindow->add(xig_group); if (progStatus.tooltips) { Fl_Tooltip::enable(1); if (mnuTooltips) mnuTooltips->set(); } else { if (mnuTooltips) mnuTooltips->clear(); Fl_Tooltip::enable(0); } if (mnuVoltmeter) { if (progStatus.display_voltmeter) mnuVoltmeter->set(); else mnuVoltmeter->clear(); } mainwindow->redraw(); return; } void TRACED(adjust_wide_ui) mainwindow->resize( progStatus.mainX, progStatus.mainY, progStatus.mainW, progStatus.mainH); mainwindow->redraw(); btnVol->show(); sldrVOLUME->show(); sldrRFGAIN->show(); if (selrig->has_ifshift_control) { if (xcvr_name != rig_KX3.name_) btnIFsh->show(); else btn_KX3_IFsh->show(); sldrIFSHIFT->show(); } if (selrig->has_pbt_controls) { if (selrig->name_ == rig_FLEX1500.name_) { sldrINNER->minimum(-4000); sldrINNER->maximum(4000); sldrINNER->step(50); sldrINNER->tooltip(_("Lower PBT control")); sldrINNER->label(_("Lower")); sldrINNER->align(FL_ALIGN_LEFT); sldrINNER->value(progStatus.pbt_inner); sldrOUTER->minimum(-4000); sldrOUTER->maximum(4000); sldrOUTER->step(50); sldrOUTER->tooltip(_("Upper PBT control")); sldrOUTER->label(_("Upper")); sldrOUTER->align(FL_ALIGN_LEFT); sldrOUTER->value(progStatus.pbt_outer); btnLOCK->hide(); btnIFsh->hide(); btnCLRPBT->hide(); sldrINNER->show(); sldrOUTER->show(); } else { btnLOCK->show(); btnLOCK->value(progStatus.pbt_lock); btnCLRPBT->show(); sldrINNER->show(); sldrOUTER->show(); sldrINNER->value(progStatus.pbt_inner); sldrINNER->redraw(); sldrOUTER->value(progStatus.pbt_outer); sldrOUTER->redraw(); } } btnNotch->show(); sldrNOTCH->show(); sldrMICGAIN->show(); sldrPOWER->show(); btnPOWER->hide(); sldrSQUELCH->show(); btnNR->show(); sldrNR->show(); btnAGC->hide(); btnDataPort->hide(); sldrRFGAIN->redraw_label(); if (!selrig->has_micgain_control) sldrMICGAIN->deactivate(); if (!selrig->has_noise_reduction) btnNR->deactivate(); if (!selrig->has_noise_reduction_control) sldrNR->deactivate(); if (xcvr_name == rig_TT550.name_) { tabs550->show(); tabsGeneric->hide(); } else { tabs550->hide(); if (selrig->has_agc_control) { btnAGC->show(); sldrRFGAIN->label(""); sldrRFGAIN->redraw_label(); } else { btnAGC->hide(); sldrRFGAIN->label(_("RF")); sldrRFGAIN->redraw_label(); } if (selrig->has_power_control) { btnPOWER->resize(sldrPOWER->x() - 52, sldrPOWER->y(), 50, 18); btnPOWER->show(); } else { sldrPOWER->deactivate(); } } if (progStatus.tooltips) { Fl_Tooltip::enable(1); if (mnuTooltips) mnuTooltips->set(); } else { if (mnuTooltips) mnuTooltips->clear(); Fl_Tooltip::enable(0); } if (mnuVoltmeter) { if (progStatus.display_voltmeter) mnuVoltmeter->set(); else mnuVoltmeter->clear(); } mainwindow->redraw(); } void TRACED(adjust_touch_ui) mainwindow->resize( mainwindow->x(), mainwindow->y(), mainwindow->w(), TOUCH_MAINH); mainwindow->redraw(); if (spnrPOWER) spnrPOWER->show(); if (sldrPOWER) sldrPOWER->show(); btnVol->show(); if (spnrVOLUME) spnrVOLUME->show(); if (sldrVOLUME) sldrVOLUME->show(); if (spnrRFGAIN) spnrRFGAIN->show(); if (sldrRFGAIN) sldrRFGAIN->show(); if (xcvr_name != rig_KX3.name_) btnIFsh->show(); else btn_KX3_IFsh->show(); if (spnrIFSHIFT) spnrIFSHIFT->show(); if (sldrIFSHIFT) sldrIFSHIFT->show(); btnNotch->show(); if (spnrNOTCH) spnrNOTCH->show(); if (sldrNOTCH) sldrNOTCH->show(); if (spnrMICGAIN) spnrMICGAIN->show(); if (sldrMICGAIN) sldrMICGAIN->show(); if (spnrSQUELCH) spnrSQUELCH->show(); if (sldrSQUELCH) sldrSQUELCH->show(); if (selrig->has_agc_control) { btnAGC->show(); sldrRFGAIN->label(""); sldrRFGAIN->redraw_label(); } else { btnAGC->hide(); sldrRFGAIN->label(_("RF")); sldrRFGAIN->redraw_label(); } btnNR->show(); if (spnrNR) spnrNR->show(); if (sldrNR) sldrNR->show(); if (xcvr_name == rig_TT550.name_) { tabs550->show(); tabsGeneric->hide(); } else { tabs550->hide(); tabsGeneric->remove(genericAux); genericAux->hide(); btnAuxDTR->hide(); btnAuxRTS->hide(); btnDataPort->hide(); if (progStatus.aux_serial_port != "NONE") { btnAuxRTS->show(); btnAuxDTR->show(); tabsGeneric->add(genericAux); genericAux->show(); } tabsGeneric->remove(genericRXB); genericRXB->hide(); if (selrig->has_rit || selrig->has_xit || selrig->has_bfo) { if (selrig->has_rit) cntRIT->show(); else cntRIT->hide(); if (selrig->has_xit) cntXIT->show(); else cntXIT->hide(); if (selrig->has_bfo) cntBFO->show(); else cntBFO->hide(); tabsGeneric->add(genericRXB); genericRXB->show(); } tabsGeneric->show(); } if (progStatus.tooltips) { Fl_Tooltip::enable(1); if (mnuTooltips) mnuTooltips->set(); } else { if (mnuTooltips) mnuTooltips->clear(); Fl_Tooltip::enable(0); } if (mnuVoltmeter) { if (progStatus.display_voltmeter) mnuVoltmeter->set(); else mnuVoltmeter->clear(); } mainwindow->init_sizes(); mainwindow->size_range(WIDE_MAINW, WIDE_MAINH, 0, WIDE_MAINH); mainwindow->redraw(); } void TRACED(adjust_control_positions) sldrRcvSignal->activate(); sigbar_SMETER->activate(); sldrALC->activate(); sigbar_ALC->activate(); sldrIDD->activate(); sigbar_IDD->activate(); sldrSWR->activate(); sigbar_SWR->activate(); sldrVoltage->activate(); sigbar_VOLTS->activate(); sldrFwdPwr->activate(); sigbar_PWR->activate(); if (!selrig->has_smeter) { sldrRcvSignal->deactivate(); sigbar_SMETER->deactivate(); } if (!selrig->has_alc_control) { sldrALC->deactivate(); sigbar_ALC->deactivate(); } if (!selrig->has_idd_control) { sldrIDD->deactivate(); sigbar_IDD->deactivate(); } if (!selrig->has_swr_control) { sldrSWR->deactivate(); sigbar_SWR->deactivate(); } if (!selrig->has_voltmeter) { sldrVoltage->deactivate(); sigbar_VOLTS->deactivate(); } if (!selrig->has_power_out) { sldrFwdPwr->deactivate(); sigbar_PWR->hide(); //deactivate(); scalePower->hide(); } switch (progStatus.UIsize) { case small_ui : adjust_small_ui(); break; case wide_ui : if (xcvr_name == rig_XIG90.name_) adjust_xig_wide(); else adjust_wide_ui(); break; case touch_ui : default : adjust_touch_ui(); break; } // change control labels / tooltips if necessary int i = 0; while (selrig->widgets[i].W != NULL) { if (!selrig->widgets[i].label.empty()) { selrig->widgets[i].W->label(selrig->widgets[i].label.c_str()); selrig->widgets[i].W->redraw_label(); } if (!selrig->widgets[i].hint.empty()) { selrig->widgets[i].W->tooltip(selrig->widgets[i].hint.c_str()); } selrig->widgets[i].W->redraw(); i++; } FreqDispA->set_hrd(progStatus.hrd_buttons); FreqDispB->set_hrd(progStatus.hrd_buttons); if (selrig->name_ == rig_FT891.name_) { // Default FT891 to only send slider updates to rig once slider // is released. This avoids a condition where once slider is // released, the slider value no longer tracks changes from // controls on the rig. progStatus.sliders_button = FL_WHEN_RELEASE; chk_sliders_button->value(false); } set_sliders_when(); } void TRACED(init_Generic_Tabs) if (hidden_tabs) { hidden_tabs->remove(tab_yaesu_bands); hidden_tabs->remove(tab_ft991_bands); hidden_tabs->remove(tab_FT8n_bands); hidden_tabs->remove(tab_FT8n_CTCSS); hidden_tabs->remove(tab_icom_bands); hidden_tabs->remove(genericCW); hidden_tabs->remove(genericQSK); hidden_tabs->remove(genericVOX); hidden_tabs->remove(genericSpeech); hidden_tabs->remove(genericRx); hidden_tabs->remove(genericMisc); hidden_tabs->remove(genericAux); hidden_tabs->remove(genericRXB); hidden_tabs->remove(genericUser_1); hidden_tabs->remove(genericUser_2); hidden_tabs->remove(genericUser_3); // hidden_tabs->remove(kx3_extras); hidden_tabs->remove(tab7610); hidden_tabs->add(tab_yaesu_bands); hidden_tabs->add(tab_ft991_bands); hidden_tabs->add(tab_FT8n_bands); hidden_tabs->add(tab_FT8n_CTCSS); hidden_tabs->add(tab_icom_bands); hidden_tabs->add(genericCW); hidden_tabs->add(genericQSK); hidden_tabs->add(genericVOX); hidden_tabs->add(genericSpeech); hidden_tabs->add(genericRx); hidden_tabs->add(genericMisc); hidden_tabs->add(genericAux); hidden_tabs->add(genericRXB); hidden_tabs->add(genericUser_1); hidden_tabs->add(genericUser_2); hidden_tabs->add(genericUser_3); // hidden_tabs->add(kx3_extras); hidden_tabs->add(tab7610); } else { tabsGeneric->remove(tab_yaesu_bands); tabsGeneric->remove(tab_ft991_bands); tabsGeneric->remove(tab_FT8n_bands); tabsGeneric->remove(tab_FT8n_CTCSS); tabsGeneric->remove(tab_icom_bands); tabsGeneric->remove(genericCW); tabsGeneric->remove(genericQSK); tabsGeneric->remove(genericVOX); tabsGeneric->remove(genericSpeech); tabsGeneric->remove(genericRx); tabsGeneric->remove(genericMisc); tabsGeneric->remove(genericAux); tabsGeneric->remove(genericRXB); tabsGeneric->remove(genericUser_1); tabsGeneric->remove(genericUser_2); tabsGeneric->remove(genericUser_3); // tabsGeneric->remove(kx3_extras); tabsGeneric->remove(tab7610); } if (selrig->has_band_selection) { if (selrig->ICOMrig || selrig->name_ == rig_XIG90.name_ || selrig->name_ == rig_X6100.name_ ) { tabsGeneric->add(tab_icom_bands); tab_icom_bands->redraw(); tab_icom_bands->show(); } else if (selrig->name_ == rig_FT857D.name_ || selrig->name_ == rig_FT897D.name_) { tabsGeneric->add(tab_FT8n_bands); tabsGeneric->add(tab_FT8n_CTCSS); tab_FT8n_bands->redraw(); tab_FT8n_CTCSS->redraw(); tab_FT8n_bands->show(); tab_FT8n_CTCSS->show(); } else if (selrig->name_ == rig_FT991A.name_) { tabsGeneric->add(tab_ft991_bands); tab_ft991_bands->redraw(); tab_ft991_bands->show(); } else { tabsGeneric->add(tab_yaesu_bands); tab_yaesu_bands->redraw(); tab_yaesu_bands->show(); } } if (selrig->has_cw_wpm || selrig->has_cw_weight || selrig->has_cw_keyer || selrig->has_cw_spot || selrig->has_cw_spot_tone ) { if (selrig->has_cw_wpm) { int min, max; selrig->get_cw_wpm_min_max(min, max); spnr_cw_wpm->minimum(min); spnr_cw_wpm->maximum(max); spnr_cw_wpm->value(progStatus.cw_wpm); spnr_cw_wpm->show(); } else spnr_cw_wpm->hide(); if (selrig->has_cw_weight) { double min, max, step; selrig->get_cw_weight_min_max_step( min, max, step ); spnr_cw_weight->minimum(min); spnr_cw_weight->maximum(max); spnr_cw_weight->step(step); spnr_cw_weight->value(progStatus.cw_weight); spnr_cw_weight->show(); } else spnr_cw_weight->hide(); if (selrig->has_cw_keyer) { btn_enable_keyer->show(); btn_enable_keyer->value(progStatus.enable_keyer); selrig->enable_keyer(); } else btn_enable_keyer->hide(); if (selrig->has_cw_spot) { btnSpot->value(progStatus.cw_spot); selrig->set_cw_spot(); btnSpot->show(); } else btnSpot->hide(); if (selrig->has_cw_spot_tone) { spnr_cw_spot_tone->show(); int min, max, step; selrig->get_cw_spot_tone_min_max_step(min, max, step); spnr_cw_spot_tone->minimum(min); spnr_cw_spot_tone->maximum(max); spnr_cw_spot_tone->step(step); spnr_cw_spot_tone->value(progStatus.cw_spot_tone); selrig->set_cw_spot_tone(); } else spnr_cw_spot_tone->hide(); tabsGeneric->add(genericCW); genericCW->redraw(); genericCW->show(); } if (selrig->has_cw_qsk) { btnBreakIn->show(); spnr_cw_delay->show(); if (selrig->has_cw_qsk) { double min, max, step; selrig->get_cw_qsk_min_max_step(min, max, step); spnr_cw_qsk->minimum(min); spnr_cw_qsk->maximum(max); spnr_cw_qsk->step(step); spnr_cw_qsk->value(progStatus.cw_qsk); spnr_cw_qsk->show(); } else spnr_cw_qsk->hide(); tabsGeneric->add(genericQSK); genericQSK->redraw(); genericQSK->show(); } if (selrig->has_vox_onoff || selrig->has_vox_gain || selrig->has_vox_hang || selrig->has_vox_on_dataport) { if (selrig->has_vox_onoff) { btn_vox->value(progStatus.vox_onoff); btn_vox->show(); selrig->set_vox_onoff(); } else btn_vox->hide(); if (selrig->has_vox_gain) { int min, max, step; selrig->get_vox_gain_min_max_step(min, max, step); spnr_vox_gain->minimum(min); spnr_vox_gain->maximum(max); spnr_vox_gain->step(step); spnr_vox_gain->value(progStatus.vox_gain); spnr_vox_gain->show(); selrig->set_vox_gain(); } else spnr_vox_gain->hide(); if (selrig->has_vox_anti) { int min, max, step; selrig->get_vox_anti_min_max_step(min, max, step); spnr_anti_vox->minimum(min); spnr_anti_vox->maximum(max); spnr_anti_vox->step(step); spnr_anti_vox->value(progStatus.vox_anti); spnr_anti_vox->show(); selrig->set_vox_anti(); } else spnr_anti_vox->hide(); if (selrig->has_vox_hang) { int min, max, step; selrig->get_vox_hang_min_max_step(min, max, step); spnr_vox_hang->minimum(min); spnr_vox_hang->maximum(max); spnr_vox_hang->step(step); spnr_vox_hang->value(progStatus.vox_hang); spnr_vox_hang->show(); selrig->set_vox_hang(); } else spnr_vox_hang->hide(); if (selrig->has_vox_on_dataport) { btn_vox_on_dataport->value(progStatus.vox_on_dataport); btn_vox_on_dataport->show(); selrig->set_vox_on_dataport(); } else btn_vox_on_dataport->hide(); tabsGeneric->add(genericVOX); genericVOX->redraw(); genericVOX->show(); } if (selrig->has_compON || selrig->has_compression ) { if (selrig->has_compON) { btnCompON->show(); btnCompON->value(progStatus.compON); } else btnCompON->hide(); if (selrig->has_compression) { int min, max, step; selrig->get_comp_min_max_step(min, max, step); spnr_compression->minimum(min); spnr_compression->maximum(max); spnr_compression->step(step); spnr_compression->show(); spnr_compression->value(progStatus.compression); selrig->set_compression(progStatus.compON, progStatus.compression); } else spnr_compression->hide(); tabsGeneric->add(genericSpeech); genericSpeech->redraw(); genericSpeech->show(); } if (selrig->has_nb_level || selrig->has_bpf_center || selrig->has_vfo_adj || selrig->has_line_out ) { if (selrig->has_nb_level) sldr_nb_level->show(); else sldr_nb_level->hide(); if (selrig->has_bpf_center) { spnr_bpf_center->value(progStatus.bpf_center); spnr_bpf_center->activate(); btn_use_bpf_center->activate(); spnr_bpf_center->show(); btn_use_bpf_center->show(); } else { spnr_bpf_center->hide(); btn_use_bpf_center->hide(); } if (selrig->has_vfo_adj) { double min, max, step; selrig->get_vfoadj_min_max_step(min, max, step); spnr_vfo_adj->minimum(min); spnr_vfo_adj->maximum(max); spnr_vfo_adj->step(step); progStatus.vfo_adj = selrig->getVfoAdj(); spnr_vfo_adj->value(progStatus.vfo_adj); spnr_vfo_adj->activate(); spnr_vfo_adj->show(); } else spnr_vfo_adj->hide(); if (selrig->has_line_out) { spnr_line_out->activate(); spnr_line_out->show(); } else { spnr_line_out->deactivate(); spnr_line_out->hide(); } tabsGeneric->add(genericRx); genericRx->redraw(); genericRx->show(); } if (selrig->has_line_out || selrig->has_xcvr_auto_on_off || selrig->can_synch_clock ) { btn_xcvr_auto_on->show(); btn_xcvr_auto_off->show(); if (selrig->has_xcvr_auto_on_off) { btn_xcvr_auto_on->value(progStatus.xcvr_auto_on); btn_xcvr_auto_off->value(progStatus.xcvr_auto_off); btn_xcvr_auto_on->activate(); btn_xcvr_auto_off->activate(); } else { btn_xcvr_auto_on->deactivate(); btn_xcvr_auto_off->deactivate(); } if (selrig->can_synch_clock) { btn_xcvr_synch_clock->show(); btn_xcvr_synch_gmt->show(); btn_xcvr_synch_now->show(); txt_xcvr_synch->show(); } else { btn_xcvr_synch_clock->hide(); btn_xcvr_synch_gmt->hide(); btn_xcvr_synch_now->hide(); txt_xcvr_synch->hide(); } btn_xcvr_synch_clock->redraw(); btn_xcvr_synch_gmt->redraw(); btn_xcvr_synch_now->redraw(); txt_xcvr_synch->redraw(); tabsGeneric->add(genericMisc); genericMisc->redraw(); genericMisc->show(); } tabsGeneric->remove(genericAux); genericAux->hide(); btnAuxDTR->hide(); btnAuxRTS->hide(); btnDataPort->hide(); if (progStatus.aux_serial_port != "NONE") { btnAuxRTS->show(); btnAuxDTR->show(); tabsGeneric->add(genericAux); genericAux->show(); } tabsGeneric->remove(genericRXB); genericRXB->hide(); if (selrig->has_rit || selrig->has_xit || selrig->has_bfo) { if (selrig->has_rit) cntRIT->show(); else cntRIT->hide(); if (selrig->has_xit) cntXIT->show(); else cntXIT->hide(); if (selrig->has_bfo) cntBFO->show(); else cntBFO->hide(); tabsGeneric->add(genericRXB); genericRXB->show(); } genericRXB->redraw(); // btnAuxDTR->hide(); // btnAuxRTS->hide(); // btnDataPort->hide(); tabsGeneric->add(genericUser_1); genericUser_1->redraw(); genericUser_1->show(); tabsGeneric->add(genericUser_2); genericUser_2->redraw(); genericUser_2->show(); tabsGeneric->add(genericUser_3); genericUser_3->redraw(); genericUser_3->show(); if (selrig->name_ == rig_IC7610.name_) { tabsGeneric->add(tab7610); tab7610->redraw(); tab7610->show(); btnAttenuator->hide(); } tabsGeneric->redraw(); tabsGeneric->show(); if (progStatus.UIsize != touch_ui) tabs_dialog->init_sizes(); poll_frequency->activate(); poll_frequency->value(progStatus.poll_frequency); poll_mode->activate(); poll_mode->value(progStatus.poll_mode); poll_bandwidth->activate(); poll_bandwidth->value(progStatus.poll_bandwidth); poll_smeter->activate(); poll_smeter->value(progStatus.poll_smeter); poll_pout->activate(); poll_pout->value(progStatus.poll_pout); poll_swr->activate(); poll_swr->value(progStatus.poll_swr); poll_alc->activate(); poll_alc->value(progStatus.poll_alc); poll_volume->activate(); poll_volume->value(progStatus.poll_volume); poll_notch->activate(); poll_notch->value(progStatus.poll_notch); poll_auto_notch->activate(); poll_auto_notch->value(progStatus.poll_auto_notch); poll_ifshift->activate(); poll_ifshift->value(progStatus.poll_ifshift); poll_power_control->activate(); poll_power_control->value(progStatus.poll_power_control); poll_pre_att->activate(); poll_pre_att->value(progStatus.poll_pre_att); poll_squelch->activate(); poll_squelch->value(progStatus.poll_squelch); poll_micgain->activate(); poll_micgain->value(progStatus.poll_micgain); poll_rfgain->activate(); poll_rfgain->value(progStatus.poll_rfgain); poll_split->activate(); poll_split->value(progStatus.poll_split); poll_noise->activate(); poll_noise->value(progStatus.poll_noise); poll_nr->activate(); poll_nr->value(progStatus.poll_nr); poll_compression->activate(); poll_compression->value(progStatus.poll_compression); if (!selrig->has_bandwidth_control) { poll_bandwidth->deactivate(); poll_bandwidth->value( progStatus.poll_bandwidth = 0 ); } if (!selrig->has_smeter) { poll_smeter->deactivate(); poll_smeter->value( progStatus.poll_smeter = 0 ); } if (!selrig->has_power_out) { poll_pout->deactivate(); poll_pout->value( progStatus.poll_pout = 0 ); } if (!selrig->has_swr_control) { poll_swr->deactivate(); poll_swr->value( progStatus.poll_swr = 0 ); } if (!selrig->has_alc_control) { poll_alc->deactivate(); poll_alc->value( progStatus.poll_alc = 0 ); } if (!selrig->has_volume_control) { poll_volume->deactivate(); poll_volume->value( progStatus.poll_volume = 0 ); } if (!selrig->has_notch_control) { poll_notch->deactivate(); poll_notch->value( progStatus.poll_notch = 0 ); } if (!selrig->has_tune_control) { poll_tuner->deactivate(); poll_tuner->value( progStatus.poll_tuner = 0 ); } if (!selrig->has_cw_break_in) { poll_break_in->deactivate(); poll_break_in->value( progStatus.poll_break_in = 0 ); } if (!selrig->has_auto_notch || xcvr_name == rig_FT1000MP.name_ ) { poll_auto_notch->deactivate(); poll_auto_notch->value( progStatus.poll_auto_notch = 0 ); } if (!selrig->has_ifshift_control) { poll_ifshift->deactivate(); poll_ifshift->value( progStatus.poll_ifshift = 0 ); } if (!selrig->has_pbt_controls) { poll_pbt->deactivate(); poll_pbt->value( progStatus.poll_pbt = 0 ); } if (!selrig->has_power_control) { poll_power_control->deactivate(); poll_power_control->value( progStatus.poll_power_control = 0 ); } if (!selrig->has_preamp_control && !selrig->has_attenuator_control) { poll_pre_att->deactivate(); poll_pre_att->value( progStatus.poll_pre_att = 0 ); } if (!selrig->has_sql_control) { poll_squelch->deactivate(); poll_squelch->value( progStatus.poll_squelch = 0 ); } if (!selrig->has_micgain_control) { poll_micgain->deactivate(); poll_micgain->value( progStatus.poll_micgain = 0 ); } if (!selrig->has_rf_control) { poll_rfgain->deactivate(); poll_rfgain->value( progStatus.poll_rfgain = 0 ); } if (!selrig->has_split) { poll_split->deactivate(); poll_split->value( progStatus.poll_split = 0 ); } if (!selrig->has_noise_control) { poll_noise->deactivate(); poll_noise->value( progStatus.poll_noise = 0 );} if (!selrig->has_noise_reduction) { poll_nr->deactivate(); poll_nr->value( progStatus.poll_nr = 0 );} if (!selrig->has_compression) { poll_compression->deactivate(); poll_compression->value( progStatus.poll_compression = 0 ); } } void TRACED(initTabs) if (xcvr_name == rig_TT550.name_) init_TT550_tabs(); else init_Generic_Tabs(); } void TRACED(init_rit) if (!cntRIT) return; if (selrig->has_rit) { int min, max, step; selrig->get_RIT_min_max_step(min, max, step); cntRIT->minimum(min); cntRIT->maximum(max); cntRIT->step(step); switch (progStatus.UIsize) { case touch_ui : cntRIT->activate(); break; case small_ui : case wide_ui : default : cntRIT->show(); } cntRIT->value(progStatus.rit_freq); } else { switch (progStatus.UIsize) { case touch_ui : cntRIT->deactivate(); break; case small_ui : case wide_ui : default : cntRIT->hide(); } } } void TRACED(init_xit) if (!cntXIT) return; if (selrig->has_xit) { int min, max, step; selrig->get_XIT_min_max_step(min, max, step); cntXIT->minimum(min); cntXIT->maximum(max); cntXIT->step(step); cntXIT->value(progStatus.xit_freq); switch (progStatus.UIsize) { case small_ui : cntXIT->show(); break; case wide_ui : case touch_ui : default : cntXIT->activate(); } } else { switch (progStatus.UIsize) { case small_ui : cntXIT->hide(); case wide_ui : case touch_ui : default : cntXIT->deactivate(); } } } void TRACED(init_bfo) if (!cntBFO) return; if (selrig->has_bfo) { int min, max, step; selrig->get_BFO_min_max_step(min, max, step); cntBFO->minimum(min); cntBFO->maximum(max); cntBFO->step(step); cntBFO->value(progStatus.bfo_freq); switch (progStatus.UIsize) { case small_ui : cntBFO->show(); break; case wide_ui : case touch_ui : default : cntBFO->activate(); } } else { switch (progStatus.UIsize) { case small_ui : cntBFO->hide(); break; case wide_ui : case touch_ui : default : cntBFO->deactivate(); } } } static void cb_pbt(Fl_Counter *, void *) { selrig->set_pbt( opFilterInner->value(), opFilterOuter->value() ); } void TRACED(init_dsp_controls) if (selrig->has_dsp_controls) { opDSP_lo->clear(); opDSP_hi->clear(); btnDSP->label(selrig->SL_label); btnDSP->redraw_label(); try { for (size_t i = 0; i < selrig->dsp_SL.size(); i++) opDSP_lo->add(selrig->dsp_SL.at(i).c_str()); opDSP_lo->tooltip(selrig->SL_tooltip); for (size_t i = 0; i < selrig->dsp_SH.size(); i++) opDSP_hi->add(selrig->dsp_SH.at(i).c_str()); opDSP_hi->tooltip(selrig->SH_tooltip); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } if (vfo->iBW > 256) { opDSP_lo->index(vfo->iBW & 0xFF); opDSP_hi->index((vfo->iBW >> 8) & 0x7F); btnDSP->show(); opDSP_hi->show(); opDSP_lo->hide(); opBW->hide(); opBW->index(0); btnFILT->hide(); } else { //if ( (xcvr_name != rig_KX3.name_ )){ opDSP_lo->index(0); opDSP_hi->index(0); btnDSP->hide(); opDSP_lo->hide(); opDSP_hi->hide(); btnFILT->hide(); opBW->show(); } } else if (selrig->has_FILTER) { btnDSP->hide(); opDSP_lo->hide(); opDSP_hi->hide(); btnFILT->show(); opBW->resize(opDSP_lo->x(), opDSP_lo->y(), opDSP_lo->w(), opDSP_lo->h()); opBW->redraw(); opBW->show(); } else { btnDSP->hide(); opDSP_lo->hide(); opDSP_hi->hide(); btnFILT->hide(); opBW->show(); if (selrig->name_ == rig_tci_sundx.name_ || selrig->name_ == rig_tci_sunpro.name_ ) { opCENTER->clear(); for (int i = 0; i < tci_nbr_centers; i++) opCENTER->add(TCI_centers[i].c_str()); opCENTER->show(); opCENTER->index(progStatus.tci_center); if (progStatus.UIsize == small_ui) { opFilterInner->resize(214, 103, 100, 18); opFilterInner->redraw(); opFilterOuter->resize(320, 103, 100, 18); opFilterOuter->redraw(); } opFilterInner->callback((Fl_Callback*)cb_pbt); opFilterInner->show(); opFilterOuter->callback((Fl_Callback*)cb_pbt); opFilterOuter->show(); } } } void TRACED(init_volume_control) if (selrig->has_volume_control) { int min, max, step; selrig->get_vol_min_max_step(min, max, step); if (spnrVOLUME) { spnrVOLUME->minimum(min); spnrVOLUME->maximum(max); spnrVOLUME->step(step); spnrVOLUME->redraw(); spnrVOLUME->activate(); } if (sldrVOLUME) { sldrVOLUME->minimum(min); sldrVOLUME->maximum(max); sldrVOLUME->step(step); sldrVOLUME->redraw(); sldrVOLUME->activate(); } switch (progStatus.UIsize) { case small_ui : btnVol->show(); if (sldrVOLUME) sldrVOLUME->show(); if (spnrVOLUME) spnrVOLUME->show(); break; case wide_ui : case touch_ui : default : btnVol->activate(); if (sldrVOLUME) sldrVOLUME->activate(); if (spnrVOLUME) spnrVOLUME->activate(); } } else { switch (progStatus.UIsize) { case small_ui : btnVol->hide(); if (sldrVOLUME) sldrVOLUME->hide(); if (spnrVOLUME) spnrVOLUME->hide(); break; case wide_ui : case touch_ui : default : btnVol->deactivate(); if (sldrVOLUME) sldrVOLUME->deactivate(); if (spnrVOLUME) spnrVOLUME->deactivate(); } } } void TRACED(set_init_volume_control) if (!selrig->has_volume_control) return; if (progStatus.use_rig_data) { progStatus.volume = selrig->get_volume_control(); if (sldrVOLUME) sldrVOLUME->value(progStatus.volume); if (sldrVOLUME) sldrVOLUME->activate(); btnVol->value(1); if (spnrVOLUME) spnrVOLUME->value(progStatus.volume); if (spnrVOLUME) spnrVOLUME->activate(); sldrVOLUME->activate(); } else { if (sldrVOLUME) sldrVOLUME->value(progStatus.volume); if (spnrVOLUME) spnrVOLUME->value(progStatus.volume); if (progStatus.spkr_on == 0) { btnVol->value(0); if (sldrVOLUME) sldrVOLUME->deactivate(); if (spnrVOLUME) spnrVOLUME->deactivate(); selrig->set_volume_control(0); } else { btnVol->value(1); if (sldrVOLUME) sldrVOLUME->activate(); if (spnrVOLUME) spnrVOLUME->activate(); selrig->set_volume_control(progStatus.volume); } } } void TRACED(init_rf_control) if (selrig->has_rf_control) { int min, max, step; selrig->get_rf_min_max_step(min, max, step); if (sldrRFGAIN) sldrRFGAIN->minimum(min); if (sldrRFGAIN) sldrRFGAIN->maximum(max); if (sldrRFGAIN) sldrRFGAIN->step(step); if (sldrRFGAIN) sldrRFGAIN->redraw(); if (spnrRFGAIN) spnrRFGAIN->minimum(min); if (spnrRFGAIN) spnrRFGAIN->maximum(max); if (spnrRFGAIN) spnrRFGAIN->step(step); if (spnrRFGAIN) spnrRFGAIN->redraw(); switch (progStatus.UIsize) { case small_ui : if (sldrRFGAIN) sldrRFGAIN->show(); if (spnrRFGAIN) spnrRFGAIN->show(); break; case wide_ui : case touch_ui : default : if (sldrRFGAIN) sldrRFGAIN->activate(); if (spnrRFGAIN) spnrRFGAIN->activate(); } } else { switch (progStatus.UIsize) { case small_ui : if (sldrRFGAIN) sldrRFGAIN->hide(); if (spnrRFGAIN) spnrRFGAIN->hide(); break; case wide_ui : case touch_ui : default : if (sldrRFGAIN) sldrRFGAIN->deactivate(); if (spnrRFGAIN) spnrRFGAIN->deactivate(); } } if (selrig->name_ == rig_ICF8101.name_) { if (sldrRFGAIN) sldrRFGAIN->deactivate(); if (spnrRFGAIN) spnrRFGAIN->deactivate(); } } void TRACED(set_init_rf_gain) if (!selrig->has_rf_control) return; if (progStatus.use_rig_data) { progStatus.rfgain = selrig->get_rf_gain(); if (sldrRFGAIN) sldrRFGAIN->value(progStatus.rfgain); if (spnrRFGAIN) spnrRFGAIN->value(progStatus.rfgain); } else { if (sldrRFGAIN) sldrRFGAIN->value(progStatus.rfgain); if (spnrRFGAIN) spnrRFGAIN->value(progStatus.rfgain); selrig->set_rf_gain(progStatus.rfgain); } } void TRACED(init_sql_control) if (selrig->has_sql_control) { int min, max, step; selrig->get_squelch_min_max_step(min, max, step); if (sldrSQUELCH) sldrSQUELCH->minimum(min); if (sldrSQUELCH) sldrSQUELCH->maximum(max); if (sldrSQUELCH) sldrSQUELCH->step(step); if (sldrSQUELCH) sldrSQUELCH->redraw(); if (spnrSQUELCH) spnrSQUELCH->minimum(min); if (spnrSQUELCH) spnrSQUELCH->maximum(max); if (spnrSQUELCH) spnrSQUELCH->step(step); if (spnrSQUELCH) spnrSQUELCH->redraw(); switch (progStatus.UIsize) { case small_ui : if (sldrSQUELCH) sldrSQUELCH->show(); if (spnrSQUELCH) spnrSQUELCH->show(); break; case wide_ui : case touch_ui : default: if (sldrSQUELCH) sldrSQUELCH->activate(); if (spnrSQUELCH) spnrSQUELCH->activate(); } } else { switch (progStatus.UIsize) { case small_ui : if (sldrSQUELCH) sldrSQUELCH->hide(); if (spnrSQUELCH) spnrSQUELCH->hide(); break; case wide_ui : case touch_ui : default : if (sldrSQUELCH) sldrSQUELCH->deactivate(); if (spnrSQUELCH) spnrSQUELCH->deactivate(); } } } void TRACED(set_init_sql_control) if (!selrig->has_sql_control) return; if (progStatus.use_rig_data) { progStatus.squelch = selrig->get_squelch(); if (sldrSQUELCH) sldrSQUELCH->value(progStatus.squelch); if (spnrSQUELCH) spnrSQUELCH->value(progStatus.squelch); } else { if (sldrSQUELCH) sldrSQUELCH->value(progStatus.squelch); if (spnrSQUELCH) spnrSQUELCH->value(progStatus.squelch); selrig->set_squelch(progStatus.squelch); } } void TRACED(set_init_noise_reduction_control) if (!selrig->has_noise_reduction_control) return; if (progStatus.use_rig_data) { progStatus.noise_reduction = selrig->get_noise_reduction(); progStatus.noise_reduction_val = selrig->get_noise_reduction_val(); btnNR->value(progStatus.noise_reduction); if (sldrNR) sldrNR->value(progStatus.noise_reduction_val); if (spnrNR) spnrNR->value(progStatus.noise_reduction_val); if (selrig->name_ == rig_FT891.name_) { // On the FT-891, the usual definitions of NB and NR buttons // as defined in FLRIG are reversed. Relabel them to match // what the user sees in the radio screens, and handle the // mapping to appropriate cat controls in the FT891.xx class. btnNR->label("NB"); btnNR->tooltip(_("Noise Blanker On/Off")); } } else { btnNR->value(progStatus.noise_reduction); if (sldrNR) sldrNR->value(progStatus.noise_reduction_val); if (spnrNR) spnrNR->value(progStatus.noise_reduction_val); selrig->set_noise_reduction(progStatus.noise_reduction); selrig->set_noise_reduction_val(progStatus.noise_reduction_val); } } void TRACED(init_noise_reduction_control) if (selrig->has_noise_reduction_control) { int min, max, step; selrig->get_nr_min_max_step(min, max, step); if (sldrNR) sldrNR->minimum(min); if (sldrNR) sldrNR->maximum(max); if (sldrNR) sldrNR->step(step); if (sldrNR) sldrNR->redraw(); if (spnrNR) spnrNR->minimum(min); if (spnrNR) spnrNR->maximum(max); if (spnrNR) spnrNR->step(step); if (spnrNR) spnrNR->redraw(); if (selrig->name_ == rig_FT891.name_) { // On the FT-891, the usual definitions of NB and NR buttons // as defined in FLRIG are reversed. Relabel them to match // what the user sees in the radio screens, and handle the // mapping to appropriate cat controls in the FT891.xx class. sldrNR->tooltip(_("Adjust noise blanker")); } switch (progStatus.UIsize) { case small_ui : btnNR->show(); if (sldrNR) sldrNR->show(); if (spnrNR) spnrNR->show(); break; case wide_ui : case touch_ui : default: btnNR->show(); if (sldrNR) sldrNR->show();//activate(); if (spnrNR) spnrNR->show();//activate(); break; } } else { switch (progStatus.UIsize) { case small_ui : btnNR->hide(); if (sldrNR) sldrNR->hide(); if (spnrNR) sldrNR->hide(); break; case wide_ui : case touch_ui : default : btnNR->hide();//deactivate(); if (sldrNR) sldrNR->hide();//deactivate(); if (spnrNR) spnrNR->hide();//deactivate(); break; } } } void TRACED(set_init_if_shift_control) if (!selrig->has_ifshift_control) return; if (progStatus.use_rig_data) { progStatus.shift = selrig->get_if_shift(progStatus.shift_val); btnIFsh->value(progStatus.shift); if (sldrIFSHIFT) sldrIFSHIFT->value(progStatus.shift_val); if (spnrIFSHIFT) spnrIFSHIFT->value(progStatus.shift_val); } else { if (progStatus.shift) { btnIFsh->value(1); if (sldrIFSHIFT) sldrIFSHIFT->value(progStatus.shift_val); if (spnrIFSHIFT) spnrIFSHIFT->value(progStatus.shift_val); selrig->set_if_shift(progStatus.shift_val); } else { btnIFsh->value(0); if (sldrIFSHIFT) sldrIFSHIFT->value(selrig->if_shift_mid); if (spnrIFSHIFT) spnrIFSHIFT->value(selrig->if_shift_mid); selrig->set_if_shift(selrig->if_shift_mid); } } } void TRACED(init_if_shift_control) if (btnLOCK) btnLOCK->hide(); if (btnCLRPBT) btnCLRPBT->hide(); if (sldrINNER) sldrINNER->hide(); if (sldrOUTER) sldrOUTER->hide(); if (btnIFsh) btnIFsh->hide(); if (sldrIFSHIFT) sldrIFSHIFT->hide(); if (spnrIFSHIFT) spnrIFSHIFT->hide(); if (selrig->has_ifshift_control) { if (xcvr_name != rig_KX3.name_) btnIFsh->show(); else btn_KX3_IFsh->show(); sldrIFSHIFT->show(); if (spnrIFSHIFT) spnrIFSHIFT->show(); int min, max, step; selrig->get_if_min_max_step(min, max, step); if (sldrIFSHIFT) sldrIFSHIFT->minimum(min); if (sldrIFSHIFT) sldrIFSHIFT->maximum(max); if (sldrIFSHIFT) sldrIFSHIFT->step(step); if (sldrIFSHIFT) sldrIFSHIFT->redraw(); if (spnrIFSHIFT) spnrIFSHIFT->minimum(min); if (spnrIFSHIFT) spnrIFSHIFT->maximum(max); if (spnrIFSHIFT) spnrIFSHIFT->step(step); if (spnrIFSHIFT) spnrIFSHIFT->redraw(); switch (progStatus.UIsize) { case small_ui : if (xcvr_name != rig_KX3.name_) btnIFsh->show(); else btn_KX3_IFsh->show(); if (sldrIFSHIFT) sldrIFSHIFT->show(); if (spnrIFSHIFT) spnrIFSHIFT->show(); break; case wide_ui : case touch_ui : default : if (xcvr_name != rig_KX3.name_) btnIFsh->activate(); if (sldrIFSHIFT) sldrIFSHIFT->activate(); if (spnrIFSHIFT) spnrIFSHIFT->activate(); break; } } else { switch (progStatus.UIsize) { case small_ui : btnIFsh->hide(); if (sldrIFSHIFT) sldrIFSHIFT->hide(); if (spnrIFSHIFT) spnrIFSHIFT->hide(); break; case wide_ui : case touch_ui : default : btnIFsh->deactivate(); if (sldrIFSHIFT) sldrIFSHIFT->deactivate(); if (spnrIFSHIFT) spnrIFSHIFT->deactivate(); break; } } if (selrig->has_pbt_controls) { if (selrig->name_ == rig_FLEX1500.name_) { sldrINNER->minimum(-4000); sldrINNER->maximum(4000); sldrINNER->step(50); sldrINNER->tooltip(_("Lower PBT control")); sldrINNER->label(_("Lower")); sldrINNER->align(FL_ALIGN_LEFT); sldrINNER->redraw_label(); sldrOUTER->minimum(-4000); sldrOUTER->maximum(4000); sldrOUTER->step(50); sldrOUTER->tooltip(_("Upper PBT control")); sldrOUTER->label(_("Upperer")); sldrOUTER->align(FL_ALIGN_LEFT); sldrOUTER->redraw_label(); btnLOCK->hide(); btnIFsh->hide(); btnCLRPBT->hide(); sldrINNER->show(); sldrOUTER->show(); } else { btnLOCK->show(); btnLOCK->value(progStatus.pbt_lock); btnCLRPBT->show(); sldrINNER->show(); sldrOUTER->show(); sldrINNER->value(progStatus.pbt_inner); sldrINNER->redraw(); sldrOUTER->value(progStatus.pbt_outer); sldrOUTER->redraw(); selrig->set_pbt_outer(progStatus.pbt_outer); selrig->set_pbt_inner(progStatus.pbt_inner); } } if (xcvr_name == rig_TS870S.name_) { if (progStatus.imode_A == RIG_TS870S::tsCW || progStatus.imode_A == RIG_TS870S::tsCWR) { btnIFsh->activate(); if (sldrIFSHIFT) sldrIFSHIFT->activate(); if (spnrIFSHIFT) spnrIFSHIFT->activate(); } else { btnIFsh->deactivate(); if (sldrIFSHIFT) sldrIFSHIFT->deactivate(); if (spnrIFSHIFT) spnrIFSHIFT->deactivate(); } } } void TRACED(init_notch_control) if (selrig->has_notch_control) { int min, max, step; selrig->get_notch_min_max_step(min, max, step); if (sldrNOTCH) sldrNOTCH->minimum(min); if (sldrNOTCH) sldrNOTCH->maximum(max); if (sldrNOTCH) sldrNOTCH->step(step); if (sldrNOTCH) sldrNOTCH->redraw(); if (spnrNOTCH) spnrNOTCH->minimum(min); if (spnrNOTCH) spnrNOTCH->maximum(max); if (spnrNOTCH) spnrNOTCH->step(step); if (spnrNOTCH) spnrNOTCH->redraw(); switch (progStatus.UIsize) { case small_ui : btnNotch->show(); if (sldrNOTCH) sldrNOTCH->show(); if (spnrNOTCH) spnrNOTCH->show(); break; case wide_ui : case touch_ui : default : btnNotch->activate(); if (sldrNOTCH) sldrNOTCH->activate(); if (spnrNOTCH) spnrNOTCH->activate(); break; } } else { switch (progStatus.UIsize) { case small_ui : btnNotch->hide(); if (sldrNOTCH) sldrNOTCH->hide(); if (spnrNOTCH) spnrNOTCH->hide(); break; case wide_ui : case touch_ui : default : btnNotch->deactivate(); if (sldrNOTCH) sldrNOTCH->deactivate(); if (spnrNOTCH) spnrNOTCH->deactivate(); break; } } } void TRACED(set_init_notch_control) if (selrig->has_notch_control) { if (progStatus.use_rig_data) { progStatus.notch = selrig->get_notch(progStatus.notch_val); btnNotch->value(progStatus.notch); if (sldrNOTCH) sldrNOTCH->value(progStatus.notch_val); if (spnrNOTCH) spnrNOTCH->value(progStatus.notch_val); } else { btnNotch->value(progStatus.notch); if (sldrNOTCH) sldrNOTCH->value(progStatus.notch_val); if (spnrNOTCH) spnrNOTCH->value(progStatus.notch_val); selrig->set_notch(progStatus.notch, progStatus.notch_val); } } } void TRACED(init_micgain_control) if (selrig->has_micgain_control) { int min = 0, max = 0, step = 0; selrig->get_mic_min_max_step(min, max, step); if (sldrMICGAIN) sldrMICGAIN->minimum(min); if (sldrMICGAIN) sldrMICGAIN->maximum(max); if (sldrMICGAIN) sldrMICGAIN->step(step); if (spnrMICGAIN) spnrMICGAIN->minimum(min); if (spnrMICGAIN) spnrMICGAIN->maximum(max); if (spnrMICGAIN) spnrMICGAIN->step(step); switch (progStatus.UIsize) { case small_ui : if (sldrMICGAIN) sldrMICGAIN->show(); if (spnrMICGAIN) spnrMICGAIN->show(); break; case wide_ui : case touch_ui : default : if (sldrMICGAIN) sldrMICGAIN->activate(); if (spnrMICGAIN) spnrMICGAIN->activate(); break; } } else { if (sldrMICGAIN) sldrMICGAIN->deactivate(); if (spnrMICGAIN) spnrMICGAIN->deactivate(); } switch (progStatus.UIsize) { case small_ui : if (sldrMICGAIN) sldrMICGAIN->hide(); if (spnrMICGAIN) spnrMICGAIN->hide(); break; case wide_ui : case touch_ui : default : if (sldrMICGAIN) sldrMICGAIN->deactivate(); if (spnrMICGAIN) spnrMICGAIN->deactivate(); } } void TRACED(set_init_micgain_control) int min, max, step; if (selrig->has_micgain_control) { if (progStatus.use_rig_data) progStatus.mic_gain = selrig->get_mic_gain(); else selrig->set_mic_gain(progStatus.mic_gain); selrig->get_mic_min_max_step(min, max, step); if (sldrMICGAIN) { sldrMICGAIN->minimum(min); sldrMICGAIN->maximum(max); sldrMICGAIN->step(step); sldrMICGAIN->value(progStatus.mic_gain); sldrMICGAIN->activate(); } if (spnrMICGAIN) { spnrMICGAIN->minimum(min); spnrMICGAIN->maximum(max); spnrMICGAIN->step(step); spnrMICGAIN->value(progStatus.mic_gain); spnrMICGAIN->activate(); } } else { if (sldrMICGAIN) sldrMICGAIN->deactivate(); if (spnrMICGAIN) sldrMICGAIN->deactivate(); } } void TRACED(init_power_control) double min, max, step; if (selrig->has_power_control) { sldrPOWER->activate(); selrig->get_pc_min_max_step(min, max, step); if (sldrPOWER) sldrPOWER->minimum(min); if (sldrPOWER) sldrPOWER->maximum(max); if (sldrPOWER) sldrPOWER->step(step); if (sldrPOWER) sldrPOWER->value(progStatus.power_level); if (sldrPOWER) sldrPOWER->show(); if (sldrPOWER) sldrPOWER->redraw(); if (spnrPOWER) spnrPOWER->minimum(min); if (spnrPOWER) spnrPOWER->maximum(max); if (spnrPOWER) spnrPOWER->step(step); if (spnrPOWER) spnrPOWER->value(progStatus.power_level); if (spnrPOWER) spnrPOWER->show(); if (spnrPOWER) spnrPOWER->redraw(); } else { if (sldrPOWER) sldrPOWER->deactivate(); if (spnrPOWER) spnrPOWER->deactivate(); } } void TRACED(set_init_power_control) if (selrig->has_power_control) { if (progStatus.use_rig_data) progStatus.power_level = selrig->get_power_control(); else selrig->set_power_control(progStatus.power_level); } set_power_controlImage(progStatus.power_level); } void TRACED(init_attenuator_control) if (selrig->has_attenuator_control) { if (selrig->name_ == rig_FT891.name_) { btnAttenuator->label("ATT"); btnAttenuator->redraw_label(); } switch (progStatus.UIsize) { case small_ui : btnAttenuator->show(); break; case wide_ui : case touch_ui : default : btnAttenuator->activate(); } } else { switch (progStatus.UIsize) { case small_ui : btnAttenuator->hide(); break; case wide_ui : case touch_ui : default : btnAttenuator->deactivate(); } } } void TRACED(set_init_attenuator_control) if (selrig->has_attenuator_control) { if (!progStatus.use_rig_data) selrig->set_attenuator(progStatus.attenuator); } } void TRACED(init_agc_control) if (selrig->has_agc_control) { btnAGC->show(); sldrRFGAIN->label(""); sldrRFGAIN->redraw_label(); } else { btnAGC->hide(); sldrRFGAIN->label(_("RF")); sldrRFGAIN->redraw_label(); } } void TRACED(init_preamp_control) if (selrig->has_preamp_control) { if (selrig->name_ == rig_FLEX1500.name_ ) { btnAttenuator->hide(); btnPreamp->hide(); cbo_preamp->show(); return; } if (selrig->name_ == rig_FT891.name_) { btnPreamp->label("IPO"); btnPreamp->redraw_label(); } if (selrig->name_ == rig_PCR1000.name_) { btnPreamp->label("AGC"); btnPreamp->redraw_label(); } switch (progStatus.UIsize) { case small_ui : btnPreamp->show(); break; case wide_ui : case touch_ui : default : btnPreamp->activate(); } if (xcvr_name == rig_IC9700.name_) { btnPreamp->tooltip("\ Internal/External preamp\n\ P0/E0 off/off\n\ P1/E0 on/off\n\ P0/E1 off/on\n\ P1/E1 on/on"); btnPreamp->label("P0/E0"); btnPreamp->redraw_label(); } else { if (selrig->name_ == rig_PCR1000.name_) { btnPreamp->tooltip("On/Off"); //Kludge necessary to get the tooltip verbiage for the PCR-1000 correct. Feel free to re-order the if-else statements } else btnPreamp->tooltip("On/Off/Level"); } } else { switch (progStatus.UIsize) { case small_ui : btnPreamp->hide(); break; case wide_ui : case touch_ui : default : btnPreamp->deactivate(); } } } void TRACED(set_init_preamp_control) if (selrig->has_preamp_control) { if (!progStatus.use_rig_data) selrig->set_preamp(progStatus.preamp); } } void TRACED(init_noise_control) int min, max, step; if (selrig->has_noise_control) { if (xcvr_name == rig_TS990.name_) { btnNOISE->label("AGC"); //Set TS990 AGC Label btnNOISE->tooltip("TS990 AGC control"); btnNR->label("NR1"); //Set TS990 NR Button btnNR->tooltip("TS990 noise reduction control"); } if (selrig->name_ == rig_FT891.name_) { // On the FT-891, the usual definitions of NB and NR buttons // as defined in FLRIG are reversed. Relabel them to match // what the user sees in the radio screens, and handle the // mapping to appropriate cat controls in the FT891.xx class. btnNOISE->label("DNR"); btnNOISE->tooltip(_("DSP Noise Reduction On/Off. See RX tab for DNR level.")); } if (selrig->name_ == rig_PCR1000.name_) { // The PCR-1000 has no Noise Blanker. This control is used to activate its UT-106 DSP // Module, which has NR and Auto-Notch features. btnNOISE->label("DSP"); btnNOISE->tooltip(_("DSP Noise Reduction On/Off. Set NR operation and level with NR section.")); } btnNOISE->show(); btnNOISE->activate(); } else { btnNOISE->hide(); btnNOISE->deactivate(); } if (selrig->has_nb_level) { selrig->get_nb_min_max_step(min, max, step); sldr_nb_level->minimum(min); sldr_nb_level->maximum(max); sldr_nb_level->step(step); sldr_nb_level->value(progStatus.nb_level); if (selrig->name_ == rig_FT891.name_) { // On the FT-891, the usual definitions of NB and NR buttons // as defined in FLRIG are reversed. Relabel them to match // what the user sees in the radio screens, and handle the // mapping to appropriate cat controls in the FT891.xx class. sldr_nb_level->label("DNR level"); sldr_nb_level->tooltip(_("Adjust DSP Noise Reduction level")); } sldr_nb_level->activate(); sldr_nb_level->redraw(); } else sldr_nb_level->deactivate(); } void TRACED(init_split_control) if (selrig->has_split || selrig->has_split_AB) { btnSplit->show(); btnSplit->activate(); } else { btnSplit->hide(); btnSplit->deactivate(); } } void TRACED(set_init_noise_control) if (selrig->has_noise_control) { if (progStatus.use_rig_data) progStatus.noise = selrig->get_noise(); else selrig->set_noise(progStatus.noise); btnNOISE->value(progStatus.noise); btnNOISE->show(); btnNOISE->activate(); } else { btnNOISE->hide(); btnNOISE->deactivate(); } } void TRACED(init_tune_control) if (selrig->has_tune_control) { switch (progStatus.UIsize) { case small_ui : btnTune->show(); btn_tune_on_off->show(); break; case wide_ui : case touch_ui : default : btnTune->activate(); btn_tune_on_off->activate(); } } else { switch (progStatus.UIsize) { case small_ui : btnTune->hide(); btn_tune_on_off->hide(); break; case wide_ui : case touch_ui : default : btnTune->deactivate(); btn_tune_on_off->deactivate(); } } } void TRACED(init_ptt_control) if (selrig->has_ptt_control || progStatus.serial_dtrptt == PTT_BOTH || progStatus.serial_dtrptt == PTT_SET || progStatus.serial_rtsptt == PTT_BOTH || progStatus.serial_rtsptt == PTT_SET || progStatus.sep_dtrptt == PTT_BOTH || progStatus.sep_dtrptt == PTT_SET || progStatus.sep_rtsptt == PTT_BOTH || progStatus.sep_rtsptt == PTT_SET) { btnPTT->activate(); } else { btnPTT->deactivate(); } } void TRACED(init_auto_notch) if (selrig->has_auto_notch) { if (xcvr_name == rig_RAY152.name_) { btnAutoNotch->label("AGC"); btnAutoNotch->tooltip("AGC on/off"); } else if (xcvr_name == rig_FT1000MP.name_) { btnAutoNotch->label("Tuner"); btnAutoNotch->tooltip("Tuner on/off"); } else if (xcvr_name == rig_FT891.name_) { btnAutoNotch->label("DNF"); btnAutoNotch->tooltip("DSP Auto notch filter on/off"); } else { btnAutoNotch->label("AN"); btnAutoNotch->tooltip("Auto notch on/off"); } switch (progStatus.UIsize) { case small_ui : btnAutoNotch->show(); break; case wide_ui : case touch_ui : default : btnAutoNotch->activate(); } } else { switch (progStatus.UIsize) { case small_ui : btnAutoNotch->hide(); break; case wide_ui : case touch_ui : default : btnAutoNotch->deactivate(); } } } void TRACED(set_init_auto_notch) if (selrig->has_auto_notch) { if (progStatus.use_rig_data) progStatus.auto_notch = selrig->get_auto_notch(); else selrig->set_auto_notch(progStatus.auto_notch); btnAutoNotch->value(progStatus.auto_notch); } } void TRACED(init_swr_control) if (selrig->has_swr_control) btnALC_IDD_SWR->activate(); else { btnALC_IDD_SWR->deactivate(); } } void TRACED(set_init_compression_control) if (selrig->has_compON || selrig->has_compression) { selrig->set_compression(progStatus.compON, progStatus.compression); if (selrig->name_ == rig_FT891.name_) { // On the FT-891, compression is called PRC, under function // menu FUNCTION-1. Set the button to match for consistency. btnCompON->label("PRC"); btnCompON->tooltip("Set speech processor for SSB modes on/off."); } } } void TRACED(set_init_break_in) if (!selrig->has_cw_break_in) return; selrig->get_break_in(); } void TRACED(init_special_controls) btnSpecial->show(); if (selrig->has_special) btnSpecial->activate(); else btnSpecial->deactivate(); } void TRACED(init_external_tuner) btn_ext_tuner->show(); if (selrig->has_ext_tuner) btn_ext_tuner->activate(); else btn_ext_tuner->deactivate(); } void TRACED(init_CIV) if (selrig->CIV) { char hexstr[8]; snprintf(hexstr, sizeof(hexstr), "0x%02X", selrig->CIV); txtCIV->value(hexstr); txtCIV->activate(); btnCIVdefault->activate(); if (selrig->name_ == rig_IC7200.name_ || selrig->name_ == rig_IC7300.name_ || selrig->name_ == rig_IC7600.name_ || selrig->name_ == rig_IC7800.name_ ) { btnUSBaudio->value(progStatus.USBaudio = true); btnUSBaudio->activate(); } else btnUSBaudio->deactivate(); } else { txtCIV->value(""); txtCIV->deactivate(); btnCIVdefault->deactivate(); btnUSBaudio->value(false); btnUSBaudio->deactivate(); } } void TRACED(init_TS990_special) if (xcvr_name == rig_TS990.name_) { // Setup TS990 Mon Button btnIFsh->label("MON"); btnIFsh->tooltip("\ Turn TX monitor on/off\n\ Slider controls TX monitor level"); } } void cb_bw_A(Fl_ComboBox *, void *) { int nubw = opBW_A->index(); guard_lock serial(&mutex_serial); selrig->set_bwA( nubw ); vfoA.iBW = nubw; // int timeout = 500; // msec // while (timeout && (selrig->get_bwA() != nubw)) { // MilliSleep(50); // timeout -= 50; // Fl::awake(); // } } void cb_bw_B(Fl_ComboBox *, void *) { int nubw = opBW_B->index(); guard_lock serial(&mutex_serial); selrig->set_bwB( nubw ); vfoB.iBW = nubw; // int timeout = 500; // msec // while (timeout && (selrig->get_bwB() != nubw)) { // MilliSleep(50); // timeout -= 50; // Fl::awake(); // } } void TRACED(init_elecraft_xcvrs) if (!(xcvr_name == rig_K3.name_ || xcvr_name == rig_KX3.name_ || xcvr_name == rig_K4.name_ ) ) return; if (xcvr_name == rig_K3.name_) { btnB->hide(); btnA->hide(); btnAswapB->hide(); btn_KX3_swapAB->hide(); btn_K3_swapAB->show(); btn_K3_A2B->show(); opBW_A->hide(); opBW_B->hide(); opBW->show(); return; } if (xcvr_name == rig_KX3.name_ || xcvr_name == rig_K4.name_) { btn_K3_swapAB->hide(); btn_K3_A2B->hide(); btn_KX3_swapAB->hide(); btn_KX3_A2B->hide(); labelMEMORY->hide(); btnB->show(); btnA->show(); btnAswapB->show(); opDSP_lo->hide(); opDSP_hi->hide(); btnDSP->hide(); btnFILT->hide(); opBW->hide(); if (progStatus.UIsize == small_ui) { opBW_A->resize(opBW->x(), opBW->y() + opBW->h(), opBW->w(), opBW->h()); opBW_A->redraw(); opBW_B->resize(opMODE->x(), opBW_A->y(), opBW_A->w(), opBW_A->h()); opBW_B->redraw(); } try { selrig->bandwidths_ = selrig->bwtable(vfo->imode); for (size_t i = 0; i < selrig->bandwidths_.size(); i++) { opBW_A->add(selrig->bandwidths_.at(i).c_str()); opBW_B->add(selrig->bandwidths_.at(i).c_str()); } opBW_A->index(vfoA.iBW); opBW_B->index(vfoB.iBW); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); opBW_A->index(0); opBW_B->index(0); } opBW_A->callback((Fl_Callback*)cb_bw_A); opBW_B->callback((Fl_Callback*)cb_bw_B); opBW_A->redraw(); opBW_A->show(); opBW_B->redraw(); opBW_B->show(); return; } } void cb_sdr2_A(Fl_Light_Button * b, void *) { guard_lock A(&mutex_serial); if (b->value()) { selrig->selectB(); btnA->label("ch B"); btnA->redraw(); } else { selrig->selectA(); btnA->label("ch A"); btnA->redraw(); } updateUI((void *)0); } void cb_sdr2_B(Fl_Light_Button * b, void *) { guard_lock B(&mutex_serial); if (b->value()) { btnB->label("Rx 2"); if (selrig->name_ == rig_tci_sundx.name_) rig_tci_sundx.set_slice(1); else rig_tci_sunpro.set_slice(1); } else { btnB->label("Rx 1"); if (selrig->name_ == rig_tci_sundx.name_) rig_tci_sundx.set_slice(0); else rig_tci_sunpro.set_slice(0); } btnB->redraw_label(); updateUI((void *)0); } void TRACED(init_sdr2) btnA->label("ch A"); btnA->redraw_label(); btnA->callback((Fl_Callback *)cb_sdr2_A); btnB->label("Rx 0"); btnB->redraw_label(); btnB->callback((Fl_Callback *)cb_sdr2_B); } extern void read_menus(); void TRACED(initRig) xcvr_online = false; RigSerial->failed(0); if (tabs_dialog && tabs_dialog->visible()) tabs_dialog->hide(); main_group->hide(); grpInitializing->size(mainwindow->w(), mainwindow->h() - grpInitializing->y()); grpInitializing->show(); grpInitializing->redraw(); mainwindow->damage(); mainwindow->redraw(); update_progress(0); Fl::check(); sldrRcvSignal->aging(progStatus.rx_peak); sldrRcvSignal->avg(progStatus.rx_avg); sldrFwdPwr->aging(progStatus.pwr_peak); sldrFwdPwr->avg(progStatus.pwr_avg); sldrSWR->aging(progStatus.pwr_peak); sldrSWR->avg(progStatus.pwr_avg); sldrALC->aging(progStatus.pwr_peak); sldrALC->avg(progStatus.pwr_avg); sldrIDD->aging(progStatus.pwr_peak); sldrIDD->avg(progStatus.pwr_avg); sldrVoltage->aging(1); sldrVoltage->avg(1); sigbar_SMETER->aging(progStatus.rx_peak); sigbar_SMETER->avg(progStatus.rx_avg); sigbar_PWR->aging(progStatus.pwr_peak); sigbar_PWR->avg(progStatus.pwr_avg); sigbar_SWR->aging(progStatus.pwr_peak); sigbar_SWR->avg(progStatus.pwr_avg); sigbar_ALC->aging(progStatus.pwr_peak); sigbar_ALC->avg(progStatus.pwr_avg); sigbar_IDD->aging(progStatus.pwr_peak); sigbar_IDD->avg(progStatus.pwr_avg); sigbar_VOLTS->aging(1); sigbar_VOLTS->avg(1); if (selrig->has_voltmeter) { sldrVoltage->show(); scaleVoltage->show(); sldrFwdPwr->hide(); scalePower->hide(); } else { sldrVoltage->hide(); scaleVoltage->hide(); } if (progStatus.use_tcpip) { try { connect_to_remote(); } catch (...) { grpInitializing->hide(); main_group->show(); mainwindow->redraw(); return; } } trace(1, "selrig->initialize()"); selrig->initialize(); // disable the serial thread { guard_lock gl_serial(&mutex_serial); trace(1, "init_rig()"); // Xcvr Auto Power on as soon as possible if (selrig->has_xcvr_auto_on_off && progStatus.xcvr_auto_on) { progress->label("Auto Start"); progress->redraw_label(); update_progress(0); selrig->set_xcvr_auto_on(); progress->label("Initializing"); progress->redraw_label(); update_progress(0); } init_special_controls(); init_external_tuner(); init_rit(); init_xit(); init_bfo(); init_dsp_controls(); init_volume_control(); init_rf_control(); init_sql_control(); init_noise_reduction_control(); init_if_shift_control(); init_notch_control(); init_micgain_control(); init_power_control(); init_attenuator_control(); init_agc_control(); init_preamp_control(); init_noise_control(); init_tune_control(); init_ptt_control(); init_auto_notch(); init_swr_control(); init_split_control(); if (selrig->name_ == rig_QCXP.name_) read_menus(); if (!testmode && xcvr_name != rig_null.name_) { trace(1, "selrig->check()"); if (!selrig->check()) { trace(1, "FAILED"); bypass_serial_thread_loop = true; xcvr_online = false; adjust_control_positions(); grpInitializing->hide(); main_group->show(); mainwindow->redraw(); show_controls(); box_xcvr_connect->color(FL_BACKGROUND2_COLOR); box_xcvr_connect->redraw(); fl_alert2(_("\ Transceiver not responding!\n\n\ Check serial (COM) port connection\n\ Open menu Config/Setup/Transceiver\n\ Press 'Update' button, reselect port\n\ Check that Baud matches transceiver baud\n\n\ Press 'Init' button.")); return; } } FreqDispA->set_precision(selrig->precision); FreqDispA->set_ndigits(selrig->ndigits); FreqDispB->set_precision(selrig->precision); FreqDispB->set_ndigits(selrig->ndigits); if (xcvr_name == rig_TT550.name_) init_TT550(); else init_generic_rig(); set_init_volume_control(); set_init_rf_gain(); set_init_sql_control(); set_init_noise_reduction_control(); set_init_if_shift_control(); set_init_micgain_control(); set_init_power_control(); set_init_attenuator_control(); set_init_preamp_control(); set_init_noise_control(); set_init_auto_notch(); set_init_notch_control(); set_init_compression_control(); set_init_break_in(); initTabs(); buildlist(); init_CIV(); selrig->post_initialize(); init_TS990_special(); init_elecraft_xcvrs(); if (selrig->name_ == rig_tci_sundx.name_ || selrig->name_ == rig_tci_sunpro.name_ ) init_sdr2(); if (selrig->has_power_control) { if (progStatus.use_rig_data) progStatus.power_level = selrig->get_power_control(); else selrig->set_power_control(progStatus.power_level); } } bypass_serial_thread_loop = false; grpInitializing->hide(); grpInitializing->redraw(); adjust_control_positions(); if (selrig->name_ == rig_TS990.name_) // UI tab issue pending real fix progStatus.show_tabs = false; show_controls(); main_group->show(); main_group->redraw(); mainwindow->damage(); mainwindow->show(); mainwindow->redraw(); Fl::flush(); xcvr_online = true; box_xcvr_connect->color(FL_GREEN); box_xcvr_connect->redraw(); if (selrig->name_ == rig_FTdx101MP.name_ || selrig->name_ == rig_IC7851.name_ ) { sldrVoltage->minimum (47); sldrVoltage->maximum (52); sigbar_VOLTS->minimum (47); sigbar_VOLTS->maximum (52); scaleVoltage->image(image_volts50); mtr_VOLTS->image(image_volts50); } else { sldrVoltage->minimum (6); sldrVoltage->maximum (16); sigbar_VOLTS->minimum (6); sigbar_VOLTS->maximum (16); scaleVoltage->image(image_voltmeter); mtr_VOLTS->image(image_voltmeter); } scaleVoltage->redraw_label(); mtr_VOLTS->redraw_label(); sldrIDD->maximum(25); sldrIDD->minimum(0); sigbar_IDD->maximum(25); sigbar_IDD->minimum(0); start_commands(); return; } void TRACED(init_title) title = PACKAGE; title += " "; title.append(selrig->name_); if (progStatus.xmlrpc_rig) title.append(" CLIENT"); mainwindow->label(title.c_str()); } void TRACED(initConfigDialog) rigbase *srig = (rigbase *)(selectRig->data()); xcvr_name = srig->name_; LOG_INFO("picked %s", xcvr_name.c_str()); if (!progStatus.loadXcvrState(xcvr_name) ) { selectCommPort->index(0); mnuBaudrate->index( srig->serial_baudrate ); btnOneStopBit->value( srig->stopbits == 1 ); btnTwoStopBit->value( srig->stopbits == 2 ); cntRigCatRetries->value( srig->serial_retries ); cntRigCatTimeout->value( srig->serial_timeout ); cntPostWriteDelay->value( srig->serial_post_write_delay ); cntWriteDelay->value( srig->serial_write_delay ); query_interval->value( srig->serloop_timing ); lbox_catptt->index( srig->serial_catptt ); lbox_rtsptt->index( srig->serial_rtsptt ); lbox_dtrptt->index( srig->serial_dtrptt ); chkrtscts->value( srig->serial_rtscts ); btnrtsplus1->value( srig->serial_rtsplus ); btndtrplus1->value( srig->serial_dtrplus ); btnrtsplus2->value( srig->serial_rtsplus ); btndtrplus2->value( srig->serial_dtrplus ); if (srig->CIV) { char hexstr[8]; snprintf(hexstr, sizeof(hexstr), "0x%02X", srig->CIV); txtCIV->value(hexstr); txtCIV->activate(); btnCIVdefault->activate(); if (xcvr_name == rig_IC7200.name_ || xcvr_name == rig_IC7300.name_ || xcvr_name == rig_IC7600.name_ || xcvr_name == rig_IC7800.name_) { btnUSBaudio->value(progStatus.USBaudio = true); btnUSBaudio->activate(); } else btnUSBaudio->deactivate(); } else { txtCIV->value(""); txtCIV->deactivate(); btnCIVdefault->deactivate(); btnUSBaudio->value(false); btnUSBaudio->deactivate(); } } else { initStatusConfigDialog(); trace(1, progStatus.info().c_str()); } } void TRACED(initStatusConfigDialog) if (progStatus.CIV) selrig->adjustCIV(progStatus.CIV); selectRig->value(xcvr_name.c_str()); mnuBaudrate->index( progStatus.serial_baudrate ); selectCommPort->value( progStatus.xcvr_serial_port.c_str() ); selectAuxPort->value( progStatus.aux_serial_port.c_str() ); selectSepPTTPort->value( progStatus.sep_serial_port.c_str() ); btnOneStopBit->value( progStatus.stopbits == 1 ); btnTwoStopBit->value( progStatus.stopbits == 2 ); cntRigCatRetries->value( progStatus.serial_retries ); cntRigCatTimeout->value( progStatus.serial_timeout ); cntPostWriteDelay->value( progStatus.serial_post_write_delay ); query_interval->value( progStatus.serloop_timing ); cntWriteDelay->value( progStatus.serial_write_delay ); lbox_catptt->index( progStatus.serial_catptt ); lbox_rtsptt->index( progStatus.serial_rtsptt ); lbox_dtrptt->index( progStatus.serial_dtrptt ); chkrtscts->value( progStatus.serial_rtscts ); btnrtsplus1->value( progStatus.serial_rtsplus ); btndtrplus1->value( progStatus.serial_dtrplus ); btnrtsplus2->value( progStatus.serial_rtsplus ); btndtrplus2->value( progStatus.serial_dtrplus ); btnSepDTRplus->value(progStatus.sep_dtrplus); lbox_sep_dtrptt->index(progStatus.sep_dtrptt); btnSepRTSplus->value(progStatus.sep_rtsplus); lbox_sep_rtsptt->index(progStatus.sep_rtsptt); if (progStatus.use_tcpip) { box_xcvr_connect->color(FL_BACKGROUND2_COLOR); box_xcvr_connect->redraw(); } else if (progStatus.xcvr_serial_port == "xml_client") { if (connect_to_client()) { progStatus.xmlrpc_rig = true; box_xcvr_connect->color(FL_GREEN); box_xcvr_connect->redraw(); } else { fl_alert2("Cannot connect to remote flrig"); LOG_WARN("Cannot connect to remote flrig"); progStatus.xmlrpc_rig = false; exit(0); } } else { if (startXcvrSerial()) { selectCommPort->value(progStatus.xcvr_serial_port.c_str()); box_xcvr_connect->color(FL_GREEN); box_xcvr_connect->redraw(); } else { if (progStatus.xcvr_serial_port == "NONE") { LOG_WARN("No comm port ... test mode"); } else if (!progStatus.xmlrpc_rig) { fl_alert2("\ Cannot open %s!\n\n\ Check serial (COM) port connection\n\ Open menu Config/Setup/Transceiver\n\ Press 'Update' button, reselect port\n\n\ Press 'Init' button.", progStatus.xcvr_serial_port.c_str()); LOG_WARN("Cannot open %s", progStatus.xcvr_serial_port.c_str()); progStatus.xcvr_serial_port = "NONE"; selectCommPort->value(progStatus.xcvr_serial_port.c_str()); } box_xcvr_connect->color(FL_BACKGROUND2_COLOR); box_xcvr_connect->redraw(); } if ( progStatus.aux_serial_port != "NONE") { if (!startAuxSerial()) { LOG_WARN("Cannot open %s", progStatus.aux_serial_port.c_str()); progStatus.aux_serial_port = "NONE"; selectAuxPort->value(progStatus.aux_serial_port.c_str()); } } if ( progStatus.sep_serial_port != "NONE") { if (!startSepSerial()) { LOG_WARN("Cannot open %s", progStatus.sep_serial_port.c_str()); progStatus.sep_serial_port = "NONE"; selectSepPTTPort->value(progStatus.sep_serial_port.c_str()); } } } if (progStatus.cmedia_ptt) open_cmedia(progStatus.cmedia_device); init_title(); initRig(); if (progStatus.tmate2_connected) tmate2_open(); } void TRACED(initRigCombo) selectRig->clear(); int i = 0; while (rigs[i] != NULL) { selectRig->add(rigs[i]->name_.c_str(), (void*)rigs[i]); i++; } selectRig->sort(); selectRig->index(selectRig->find_index(szNORIG)); } flrig-2.0.04/src/support/support.cxx0000664000175000017500000033076714505111071014401 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2011 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "icons.h" #include "support.h" #include "debug.h" #include "gettext.h" #include "rig_io.h" #include "dialogs.h" #include "rigbase.h" #include "ptt.h" #include "socket_io.h" #include "ui.h" #include "tod_clock.h" #include "rig.h" #include "rigs.h" #include "K3_ui.h" #include "KX3_ui.h" #include "K4_ui.h" #include "rigpanel.h" #include "tod_clock.h" #include "trace.h" #include "cwio.h" #include "cwioUI.h" #include "fsk.h" #include "fskioUI.h" #include "xml_server.h" #include "gpio_ptt.h" #include "cmedia.h" #include "tmate2.h" //void initTabs(); rigbase *selrig = rigs[0]; extern bool test; void init_notch_control(); int freqval = 0; XCVR_STATE vfoA = XCVR_STATE(14070000, 0, 0, UI); XCVR_STATE vfoB = XCVR_STATE(7070000, 0, 0, UI); XCVR_STATE *vfo = &vfoA; //XCVR_STATE xmlvfo = XCVR_STATE(14070000, 0, 0, UI); XCVR_STATE xcvr_vfoA, xcvr_vfoB; enum {VOL, MIC, PWR, SQL, IFSH, NOTCH, RFGAIN, NR, NB }; std::queue srvc_reqs; // Add alpha-tag to XCVR_STATE; struct ATAG_XCVR_STATE { unsigned long long freq; int imode; int iBW; int src; char alpha_tag[ATAGSIZE]; }; ATAG_XCVR_STATE oplist[LISTSIZE]; int numinlist = 0; std::vector rigmodes_; Cserial *RigSerial; Cserial *AuxSerial; Cserial *SepSerial; bool using_buttons = false; int meter_image = SWR_IMAGE; bool xcvr_online = false; // meter values passed to display functions double smtrval = 0; double pwrval = 0; double swrval = 0; double alcval = 0; double iddval = 0; double vmtrval = 0; //====================================================================== // slider change processing //====================================================================== int inhibit_nb_level = 0; int inhibit_volume = 0; int inhibit_pbt = 0; int inhibit_shift = 0; int inhibit_nr = 0; int inhibit_notch = 0; int inhibit_power = 0; int inhibit_mic = 0; int inhibit_rfgain = 0; int inhibit_squelch = 0; struct SLIDER { enum {NOTCH, SHIFT, INNER, OUTER, LOCK, VOLUME, MIC, POWER, SQUELCH, RFGAIN, NB_LEVEL, NR, NR_VAL}; int fnc; int val; }; //====================================================================== // loop for serial i/o thread // runs continuously until program is closed // only accesses the serial port if it has been successfully opened //====================================================================== bool bypass_serial_thread_loop = true; bool run_serial_thread = true; bool PTT = false; int powerlevel = 0; std::string printXCVR_STATE(XCVR_STATE data) { try { std::stringstream str; str << data.freq; str << ", " << selrig->modes_.at(data.imode); if (selrig->has_dsp_controls) { std::vector& dsplo = selrig->lotable(data.imode); std::vector& dsphi = selrig->hitable(data.imode); if (data.iBW > 256) { str << ", " << dsplo.at(data.iBW & 0x7F); str << ", " << dsphi.at((data.iBW >> 8) & 0x7F); } } else { std::vector& bwt = selrig->bwtable(data.imode); str << ", " << bwt.at(data.iBW); } str << std::endl; return str.str(); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } return ""; } std::string print_ab() { std::string s; s.assign("VFO-A: "); s.append(printXCVR_STATE(vfoA)); s.append("VFO-B: "); s.append(printXCVR_STATE(vfoB)); return s; } const char *print(XCVR_STATE data) { static std::string prstr; static char str[1024]; try { std::vector& bwt = selrig->bwtable(data.imode); std::vector& dsplo = selrig->lotable(data.imode); std::vector& dsphi = selrig->hitable(data.imode); str[0] = 0; prstr.clear(); snprintf( str, sizeof(str), "\ Data Source: %s\n\ freq ........... %llu\n\ mode ........... %d [%s]\n", data.src == XML ? "XML" : data.src == UI ? "UI" : data.src == SRVR ? "SRVR" : "RIG", data.freq, data.imode, selrig->modes_.at(data.imode).c_str()); prstr.assign(str); str[0] = 0; if (selrig->has_FILTER) { snprintf(str, sizeof(str), "\ filter ......... %s\n\ bwt index ...... %2d, [%s] [%s]\n", selrig->FILT(selrig->get_FILT(data.imode)), data.iBW, (data.iBW > 256 && selrig->has_dsp_controls) ? dsplo.at(data.iBW & 0x7F).c_str() : bwt.at(data.iBW).c_str(), (data.iBW > 256 && selrig->has_dsp_controls) ? dsphi.at((data.iBW >> 8) & 0x7F).c_str() : "" ); } else { snprintf(str, sizeof(str), "\ filter ......... %s\n\ bwt index ...... %2d, [%s]\n", selrig->FILT(selrig->get_FILT(data.imode)), data.iBW, bwt.at(data.iBW).c_str() ); } prstr.append(str); str[0] = 0; snprintf( str, sizeof(str), "\ split .......... %4d, power_control . %4.1f, volume_control %4d\n\ attenuator ..... %4d, preamp ........ %4d, rf gain ....... %4d\n\ if_shift ....... %4d, shift val ..... %4d\n\ auto notch ..... %4d, notch ......... %4d, notch value ... %4d\n\ noise .......... %4d, nr ............ %4d, nr val ........ %4d\n\ mic gain ....... %4d, agc level ..... %4d, squelch ....... %4d\n\ compression .... %4d, compON ........ %4d", data.split, data.power_control, data.volume_control, data.attenuator, data.preamp, data.rf_gain, data.if_shift, data.shift_val, data.auto_notch, data.notch, data.notch_val, data.noise, data.nr, data.nr_val, data.mic_gain, data.agc_level, data.squelch, data.compression, data.compON ); prstr.append(str); return prstr.c_str(); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } return ""; } std::string print_all() { std::string s; s.assign("\ =======================================================================\n"); s.append(print(vfoA)).append("\n"); s.append("\ -----------------------------------------------------------------------\n"); s.append(print(vfoB)).append("\n"); return s; } void read_info() { trace(1,"read_info()"); selrig->get_info(); } void TRACED(update_vfoAorB, void *d) trace(1,"update_vfoAorB()"); if (selrig->inuse == onB) { vfoB.src = RIG; vfoB.freq = selrig->get_vfoB(); vfoB.imode = selrig->get_modeB(); vfoB.iBW = selrig->get_bwB(); } else { vfoA.src = RIG; vfoA.freq = selrig->get_vfoA(); vfoA.imode = selrig->get_modeA(); vfoA.iBW = selrig->get_bwA(); } updateUI((void*)0); } void read_vfo() { if (xcvr_name == rig_K3.name_) { read_K3_vfo(); return; } // transceiver changed ? trace(1,"read_vfo()"); unsigned long long freq; static int current_vfo = onNIL; int chkvfo = selrig->get_vfoAorB(); if (current_vfo != chkvfo) { current_vfo = chkvfo; Fl::awake(updateUI); } if (current_vfo == onNIL) return; if (selrig->has_get_info) selrig->get_info(); if (selrig->inuse == onA) { // vfo-A trace(2, "vfoA active", "get vfo A"); freq = selrig->get_vfoA(); if (freq != vfoA.freq) { vfoA.freq = freq; Fl::awake(setFreqDispA); vfo = &vfoA; } if ( selrig->twovfos() ) { trace(2, "vfoA active", "get vfo B"); freq = selrig->get_vfoB(); if (freq != vfoB.freq) { vfoB.freq = freq; Fl::awake(setFreqDispB); } } } else { // vfo-B trace(2, "vfoB active", "get vfo B"); freq = selrig->get_vfoB(); if (freq != vfoB.freq) { vfoB.freq = freq; Fl::awake(setFreqDispB); vfo = &vfoB; } if ( selrig->twovfos() ) { trace(2, "vfoB active", "get vfo A"); freq = selrig->get_vfoA(); if (freq != vfoA.freq) { vfoA.freq = freq; Fl::awake(setFreqDispA); } } } Fl::awake(updateTCI); Fl::awake(updateFLEX1500); } void update_ifshift(void *d); void TRACED(updateUI, void *) setModeControl(NULL); updateBandwidthControl(NULL); highlight_vfo(NULL); int min, max, step; selrig->get_if_min_max_step(min, max, step); if (sldrIFSHIFT) sldrIFSHIFT->minimum(min); if (sldrIFSHIFT) sldrIFSHIFT->maximum(max); if (sldrIFSHIFT) sldrIFSHIFT->step(step); if (sldrIFSHIFT) sldrIFSHIFT->redraw(); if (spnrIFSHIFT) spnrIFSHIFT->minimum(min); if (spnrIFSHIFT) spnrIFSHIFT->maximum(max); if (spnrIFSHIFT) spnrIFSHIFT->step(step); if (spnrIFSHIFT) spnrIFSHIFT->redraw(); update_ifshift((void *)0); } void TRACED(setModeControl, void *) opMODE->index(vfo->imode); opMODE->redraw(); selrig->bandwidths_ = selrig->bwtable(vfo->imode); opBW->clear(); for (size_t i = 0; i < selrig->bandwidths_.size(); i++) opBW->add(selrig->bandwidths_.at(i).c_str()); if (vfo->iBW != opBW->index()) opBW->index(vfo->iBW); opBW->redraw(); opBW->show(); // enables/disables the IF shift control, depending on the mode. // the IF Shift function, is ONLY valid in CW modes, with the 870S. if (xcvr_name == rig_TS870S.name_) { if (vfo->imode == RIG_TS870S::tsCW || vfo->imode == RIG_TS870S::tsCWR) { btnIFsh->activate(); if (sldrIFSHIFT) sldrIFSHIFT->activate(); if (spnrIFSHIFT) spnrIFSHIFT->activate(); } else { btnIFsh->deactivate(); if (sldrIFSHIFT) sldrIFSHIFT->deactivate(); if (spnrIFSHIFT) spnrIFSHIFT->deactivate(); } } } void setFILTER(void *) { if (selrig->has_FILTER) { if (selrig->inuse == onB) btnFILT->label(selrig->FILT(vfoB.filter)); else btnFILT->label(selrig->FILT(vfoA.filter)); btnFILT->redraw_label(); trace(3, "Filter", (selrig->inuse == onB ? "B" : "A"), btnFILT->label()); } } // mode and bandwidth void read_mode() { if (xcvr_name == rig_K3.name_) { read_K3_mode(); return; } int nu_mode; if (selrig->inuse == onA) { rig_trace(2, "read_mode", "vfoA active"); nu_mode = selrig->get_modeA(); char resp[50]; snprintf(resp, sizeof(resp), "read: %d", nu_mode); rig_trace(1, resp); if (nu_mode != opMODE->index()) { vfoA.imode = vfo->imode = nu_mode; selrig->adjust_bandwidth(vfo->imode); Fl::awake(setModeControl); vfoA.iBW = vfo->iBW = selrig->get_bwA(); Fl::awake(updateBandwidthControl); } Fl::awake(updateTCI); Fl::awake(updateFLEX1500); if (selrig->twovfos()) { vfoB.imode = selrig->get_modeB(); vfoB.filter = selrig->get_FILT(vfoB.imode); } vfoA.filter = selrig->get_FILT(vfoA.imode); Fl::awake(setFILTER); } else { rig_trace(2, "read_mode", "vfoB active"); nu_mode = selrig->get_modeB(); if (nu_mode != opMODE->index()) { vfoB.imode = vfo->imode = nu_mode; selrig->adjust_bandwidth(vfo->imode); Fl::awake(setModeControl); vfoB.iBW = vfo->iBW = selrig->get_bwB(); Fl::awake(updateBandwidthControl); } Fl::awake(updateTCI); Fl::awake(updateFLEX1500); if (selrig->twovfos()) { vfoA.imode = selrig->get_modeA(); vfoA.filter = selrig->get_FILT(vfoA.imode); } vfoB.filter = selrig->get_FILT(vfoA.imode); Fl::awake(setFILTER); } } void TRACED(setBWControl, void *) if (selrig->has_dsp_controls) { if (vfo->iBW > 256) { opBW->hide(); opDSP_hi->index((vfo->iBW >> 8) & 0x7F); opDSP_lo->index(vfo->iBW & 0xFF); if (opDSP_lo->visible()) { opDSP_lo->redraw(); btnDSP->label(selrig->SL_label); } else { opDSP_hi->redraw(); btnDSP->label(selrig->SH_label); } btnDSP->redraw_label(); btnDSP->redraw(); btnDSP->show(); } else { opDSP_lo->index(0); opDSP_hi->index(0); opDSP_lo->hide(); opDSP_hi->hide(); btnDSP->hide(); if (vfo->iBW != opBW->index()) opBW->index(vfo->iBW); opBW->show(); opBW->redraw(); } } else { opDSP_lo->hide(); opDSP_hi->hide(); btnDSP->hide(); opBW_A->hide(); opBW_B->hide(); if (vfo->iBW != opBW->index()) opBW->index(vfo->iBW); opBW->show(); opBW->redraw(); } } void set_Kx_bandwidths(void *) { // std::cout << printXCVR_STATE(*vfo); opBW_A->index(vfoA.iBW); opBW_B->index(vfoB.iBW); opBW_A->redraw(); opBW_B->redraw(); } void TRACED(read_bandwidth) if (xcvr_name == rig_K2.name_ || xcvr_name == rig_K3.name_ ) { vfoA.iBW = vfo->iBW = selrig->get_bwA();//nu_BW; Fl::awake(setBWControl); vfoB.iBW = selrig->get_bwB();//nu_BW; return; } if (xcvr_name == rig_KX3.name_ || xcvr_name == rig_K4.name_) { vfoA.iBW = selrig->get_bwA(); vfoB.iBW = selrig->get_bwB(); Fl::awake(set_Kx_bandwidths); return; } trace(1,"read_bandwidth()"); std::stringstream s; if (selrig->inuse == onA) { s << "get_bwA(): "; vfoA.iBW = vfo->iBW = selrig->get_bwA(); } else { s << "get_bwB(): "; vfoB.iBW = vfo->iBW = selrig->get_bwB(); } s << vfo->iBW; trace(1, s.str().c_str()); Fl::awake(setBWControl); Fl::awake(updateTCI); Fl::awake(updateFLEX1500); } // read current signal level void read_smeter() { if (!selrig->has_smeter) return; int sig; { trace(1,"read_smeter()"); sig = selrig->get_smeter(); } if (sig == -1) return; smtrval = sig; Fl::awake(updateSmeter); } void read_voltmeter() { if (!selrig->has_voltmeter) return; double sig; { trace(1, "read voltage"); sig = selrig->get_voltmeter(); } vmtrval = sig; Fl::awake(updateVmeter); } int tunerval = 0; void update_UI_TUNER(void *) { btn_tune_on_off->value(tunerval); btn_tune_on_off->redraw(); } void read_tuner() { if (!selrig->has_tune_control) return; tunerval = selrig->get_tune(); if (tunerval != btn_tune_on_off->value()) { std::stringstream s; s << "tuner state: " << tunerval; trace(1, s.str().c_str()); Fl::awake(update_UI_TUNER); } } // read power out void read_power_out() { if (!selrig->has_power_out) return; int sig; { trace(1,"read_power_out()"); sig = selrig->get_power_out(); } if (sig < 0) sig = 0; pwrval = sig; Fl::awake(updateFwdPwr); } // read swr void read_swr() { if (!selrig->has_swr_control) return; int sig; { trace(1,"read_swr()"); sig = selrig->get_swr(); } if (sig < 0) sig = 0; swrval = sig; Fl::awake(updateSWR); } // alc void read_alc() { if (!selrig->has_alc_control) { return; } int sig; { trace(1,"read_alc()"); sig = selrig->get_alc(); } if (sig < 0) sig = 0; alcval = sig; Fl::awake(updateALC); } // IDD void read_idd() { if (!selrig->has_idd_control) { return; } double sig; { trace(1,"read_idd()"); sig = selrig->get_idd(); } if (sig < 0) sig = 0; iddval = sig; Fl::awake(updateIDD); } // notch void update_auto_notch(void *d) { btnAutoNotch->value(progStatus.auto_notch); } void read_auto_notch() { int val; if (!selrig->has_auto_notch) return; { trace(1,"read_auto_notch()"); val = selrig->get_auto_notch(); } if (val != progStatus.auto_notch) { progStatus.auto_notch = vfo->auto_notch = val; Fl::awake(update_auto_notch, (void*)0); } } // NOISE blanker void update_noise(void *d) { btnNOISE->value(progStatus.noise); btnNOISE->redraw(); sldr_nb_level->value(progStatus.nb_level); sldr_nb_level->redraw(); } void read_noise() { int on = 0, val = 0; if (inhibit_nb_level > 0) { inhibit_nb_level--; return; } { trace(1,"read_noise()"); on = selrig->get_noise(); val = selrig->get_nb_level(); } if ((on != progStatus.noise) || (val != progStatus.nb_level)) { vfo->noise = progStatus.noise = on; vfo->nb_level = progStatus.nb_level = val; Fl::awake(update_noise, (void*)0); } } // compression void update_compression(void *d) { if (btnCompON) btnCompON->value(progStatus.compON); if (spnr_compression) spnr_compression->value(progStatus.compression); } void read_compression() { int on = progStatus.compON; int val = progStatus.compression; if (selrig->has_compression || selrig->has_compON) { { trace(1,"read_compression()"); selrig->get_compression( on, val ); } if (on != progStatus.compON || val != progStatus.compression) { vfo->compression = progStatus.compression = val; vfo->compON = progStatus.compON = on; Fl::awake(update_compression, (void*)0); } } } // preamp - attenuator void update_preamp(void *d) { if (selrig->name_ == rig_FLEX1500.name_ ) { cbo_preamp->index(progStatus.preamp); cbo_preamp->redraw(); return; } btnPreamp->value(progStatus.preamp > 0 ? 1 : 0); btnPreamp->label(selrig->PRE_label()); btnPreamp->redraw_label(); btnPreamp->redraw(); } void update_attenuator(void *d) { if (selrig->name_ == rig_IC7610.name_) { ic7610att->index(progStatus.index_ic7610att); return; } btnAttenuator->value(progStatus.attenuator > 0 ? 1 : 0); btnAttenuator->label(selrig->ATT_label()); btnAttenuator->redraw_label(); btnAttenuator->redraw(); } void read_preamp() { int val; if (selrig->has_preamp_control) { trace(1,"read_preamp_att() 1"); val = selrig->get_preamp(); vfo->preamp = progStatus.preamp = val; Fl::awake(update_preamp, (void*)0); } } void read_att() { int val; if (selrig->has_attenuator_control) { trace(1,"read_preamp_att() 2"); val = selrig->get_attenuator(); vfo->attenuator = progStatus.attenuator = val; Fl::awake(update_attenuator, (void*)0); } } // split void update_split(void *d) { if (xcvr_name == rig_FTdx1200.name_ || xcvr_name == rig_TS480SAT.name_ || xcvr_name == rig_TS480HX.name_ || xcvr_name == rig_TS590S.name_ || xcvr_name == rig_TS590SG.name_ || xcvr_name == rig_TS890S.name_ || xcvr_name == rig_TS2000.name_ || xcvr_name == rig_TS990.name_) { switch (progStatus.split) { case 0: btnSplit->value(0); highlight_vfo(NULL); break; case 1: btnSplit->value(1); highlight_vfo(NULL); break; case 2: btnSplit->value(1); highlight_vfo(NULL); break; case 3: btnSplit->value(0); highlight_vfo(NULL); break; } } else btnSplit->value(progStatus.split); btnSplit->redraw(); } void read_split() { int val = progStatus.split; if (selrig->has_split) { val = selrig->get_split(); vfo->split = progStatus.split = val; Fl::awake(update_split, (void*)0); std::ostringstream s; s << "read_split() " << (val ? "ON" : "OFF"); trace(1, s.str().c_str()); } else { vfo->split = progStatus.split; } } // volume void update_volume(void *d) { long *nr = (long *)d; if (spnrVOLUME) { spnrVOLUME->value(progStatus.volume); spnrVOLUME->activate(); spnrVOLUME->redraw(); } if (sldrVOLUME) { sldrVOLUME->value(progStatus.volume); // Set slider to last known value sldrVOLUME->activate(); // activate it sldrVOLUME->redraw(); } if (*nr) btnVol->value(1); // Button Lit else btnVol->value(0); // Button Dark. btnVol->redraw(); } long nlzero = 0L; long nlone = 1L; void read_volume() { if (inhibit_volume > 0) { inhibit_volume--; return; } if (!selrig->has_volume_control) return; int vol; { trace(1,"read_volume()"); vol = selrig->get_volume_control(); } if (vol != progStatus.volume) { if (vol <= 1 && !btnVol->value()) return; progStatus.volume = vol; if (vol <= 1 && btnVol->value()) Fl::awake(update_volume, (void*)&nlzero); else Fl::awake(update_volume, (void*)&nlone); } } // ifshift void update_ifshift(void *d) { btnIFsh->value(progStatus.shift); btnIFsh->redraw(); if (sldrIFSHIFT) { sldrIFSHIFT->value(progStatus.shift_val); sldrIFSHIFT->redraw(); } if (spnrIFSHIFT) { spnrIFSHIFT->value(progStatus.shift_val); spnrIFSHIFT->redraw(); } } void update_pbt(void *) { if (sldrINNER) { sldrINNER->value(progStatus.pbt_inner); sldrINNER->redraw(); } if (sldrOUTER) { sldrOUTER->value(progStatus.pbt_outer); sldrOUTER->redraw(); } } void read_pbt() { progStatus.pbt_inner = selrig->get_pbt_inner(); progStatus.pbt_outer = selrig->get_pbt_outer(); Fl::awake(update_pbt, (void*)0); } void read_ifshift() { int on = 0; int val = 0; if (inhibit_shift > 0) { inhibit_shift--; return; } if (!selrig->has_ifshift_control) return; trace(1,"read_if_shift()"); on = selrig->get_if_shift(val); if (xcvr_name == rig_K3.name_ || xcvr_name == rig_KX3.name_ || xcvr_name == rig_K4.name_) { vfo->shift_val = progStatus.shift_val = val; Fl::awake(update_ifshift, (void*)0); } else if ((on != progStatus.shift) || (val != progStatus.shift_val)) { vfo->if_shift = progStatus.shift = on; vfo->shift_val = progStatus.shift_val = val; Fl::awake(update_ifshift, (void*)0); } } // noise reduction void update_nr(void *d) { btnNR->value(progStatus.noise_reduction); btnNR->redraw(); if (sldrNR) { sldrNR->value(progStatus.noise_reduction_val); sldrNR->redraw(); } if (spnrNR) { spnrNR->value(progStatus.noise_reduction_val); spnrNR->redraw(); } } void read_nr() { int on = 0; int val = 0; if (inhibit_nr > 0) { inhibit_nr--; return; } if (!selrig->has_noise_reduction) return; { trace(1,"read_nr()"); on = selrig->get_noise_reduction(); val = selrig->get_noise_reduction_val(); } if ((on != progStatus.noise_reduction) || (val != progStatus.noise_reduction_val)) { vfo->nr = progStatus.noise_reduction = on; vfo->nr_val = progStatus.noise_reduction_val = val; Fl::awake(update_nr, (void*)0); } } // manual notch void update_notch(void *d) { btnNotch->value(progStatus.notch); btnNotch->redraw(); if (sldrNOTCH) { sldrNOTCH->value(progStatus.notch_val); sldrNOTCH->redraw(); } if (spnrNOTCH) { spnrNOTCH->value(progStatus.notch_val); spnrNOTCH->redraw(); } } void read_notch() { if (!selrig->has_notch_control) return; int on = progStatus.notch; int val = progStatus.notch_val; { trace(1,"read_notch()"); on = selrig->get_notch(val); } if (on != progStatus.notch) vfo->notch = progStatus.notch = on; if (val != progStatus.notch_val) vfo->notch_val = progStatus.notch_val = val; Fl::awake(update_notch, (void*)0); } // power_control void update_power_control(void *d) { double min, max, step; if (selrig->has_power_control) { selrig->get_pc_min_max_step(min, max, step); if (sldrPOWER) { sldrPOWER->minimum(min); sldrPOWER->maximum(max); sldrPOWER->step(step); } if (spnrPOWER) { spnrPOWER->minimum(min); spnrPOWER->maximum(max); spnrPOWER->step(step); } } if (sldrPOWER) { sldrPOWER->value(progStatus.power_level); sldrPOWER->redraw(); } if (spnrPOWER) { spnrPOWER->value(progStatus.power_level); spnrPOWER->redraw(); } } void read_power_control() { if (inhibit_power > 0) { inhibit_power--; return; } if (!selrig->has_power_control) return; trace(1,"read_power_control()"); vfo->power_control = progStatus.power_level = selrig->get_power_control(); Fl::awake(update_power_control, (void*)0); } // mic gain void update_mic_gain(void *d) { if (sldrMICGAIN) { sldrMICGAIN->value(progStatus.mic_gain); sldrMICGAIN->redraw(); } if (spnrMICGAIN) { spnrMICGAIN->value(progStatus.mic_gain); spnrMICGAIN->redraw(); } } void read_mic_gain() { int val; if (inhibit_mic > 0) { inhibit_mic--; return; } if (!selrig->has_micgain_control) return; { trace(1,"read_mic_gain()"); val = selrig->get_mic_gain(); } if (val != progStatus.mic_gain || val != vfo->mic_gain || (sldrMICGAIN && val != sldrMICGAIN->value())) { vfo->mic_gain = progStatus.mic_gain = val; Fl::awake(update_mic_gain, (void*)0); } } void read_agc() { int val; if (!selrig->has_agc_control) return; trace(1,"read_agc()"); val = selrig->get_agc(); if (val != progStatus.agc_level) { vfo->agc_level = progStatus.agc_level = val; Fl::awake(setAGC); } } // rf gain void update_rfgain(void *d) { if (sldrRFGAIN) { sldrRFGAIN->value(progStatus.rfgain); sldrRFGAIN->redraw(); } if (spnrRFGAIN) { spnrRFGAIN->value(progStatus.rfgain); spnrRFGAIN->redraw(); } } void read_rfgain() { int val; if (inhibit_rfgain > 0) { inhibit_rfgain--; return; } if (selrig->has_rf_control) { trace(1,"read_rfgain"); val = selrig->get_rf_gain(); if (val != progStatus.rfgain) { progStatus.rfgain = val; Fl::awake(update_rfgain, (void*)0); } } read_agc(); } // squelch void update_squelch(void *d) { if (sldrSQUELCH) { sldrSQUELCH->value(progStatus.squelch); sldrSQUELCH->redraw(); } if (spnrSQUELCH) { spnrSQUELCH->value(progStatus.squelch); spnrSQUELCH->redraw(); } } void read_squelch() { int val; if (inhibit_squelch > 0) { inhibit_squelch--; return; } if (!selrig->has_sql_control) return; { trace(1,"read_squelch()"); val = selrig->get_squelch(); } if (val != progStatus.squelch || val != vfo->squelch || (sldrSQUELCH && val != sldrSQUELCH->value())) { vfo->squelch = progStatus.squelch = val; Fl::awake(update_squelch, (void*)0); } } void set_ptt(void *d) { if (d == (void*)0) { btnPTT->value(0); sldrSWR->hide(); sldrSWR->redraw(); sldrRcvSignal->show(); sldrRcvSignal->redraw(); btnALC_IDD_SWR->hide(); scaleSmeter->show(); } else { btnPTT->value(1); sldrRcvSignal->hide(); sldrRcvSignal->redraw(); scaleSmeter->hide(); sldrSWR->show(); sldrSWR->redraw(); if (selrig->name_ == rig_PowerSDR.name_) { btnALC_IDD_SWR->image(meter_image == SWR_IMAGE ? image_swr : image_alc40db); } else { btnALC_IDD_SWR->image(meter_image == SWR_IMAGE ? image_swr : image_alc); } btnALC_IDD_SWR->redraw(); btnALC_IDD_SWR->show(); } } void check_ptt() { if (selrig->name_ == rig_FT817.name_ || selrig->name_ == rig_FT817BB.name_ || selrig->name_ == rig_FT818ND.name_ ) { return; } int chk = ptt_state(); if (chk != PTT) { PTT = chk; Fl::awake(set_ptt, (void *)PTT); } } void check_break_in() { if (selrig->has_cw_break_in) selrig->get_break_in(); } //static bool resetrcv = true; //static bool resetxmt = true; // On early model Yaesu transceivers, the mode must be set before VFO, // since mode changes can shift frequency. // // For example, might set freq to 7123.000, but then change mode from USB // to DATA-U. This mode shift would change the VFO to 7123.700, instead // of the desired 7123.000. // // Setting VFO after the mode change will prevent this type of frequency // shifting. void yaesu891UpdateA(XCVR_STATE * newVfo) { selrig->set_modeA(newVfo->imode); selrig->set_vfoA(newVfo->freq); selrig->set_bwA(newVfo->iBW); selrig->get_modeA(); selrig->get_vfoA(); selrig->get_bwA(); } void yaesu891UpdateB(XCVR_STATE * newVfo) { selrig->set_modeB(newVfo->imode); selrig->set_vfoB(newVfo->freq); selrig->set_bwB(newVfo->iBW); selrig->get_modeB(); selrig->get_vfoB(); selrig->get_bwB(); } void FTdx10_UpdateA(XCVR_STATE * newVfo) { selrig->set_modeA(newVfo->imode); selrig->set_vfoA(newVfo->freq); selrig->set_bwA(newVfo->iBW); selrig->get_modeA(); selrig->get_vfoA(); selrig->get_bwA(); } void FTdx10_UpdateB(XCVR_STATE * newVfo) { selrig->set_modeB(newVfo->imode); selrig->set_vfoB(newVfo->freq); selrig->set_bwB(newVfo->iBW); selrig->get_modeB(); selrig->get_vfoB(); selrig->get_bwB(); } void serviceQUE() { guard_lock que_lock(&mutex_srvc_reqs, "serviceQUE"); guard_lock serial(&mutex_serial, "1"); std::queue pending; // creates an empty queue VFOQUEUE nuvals; while (!srvc_reqs.empty()) { { nuvals = srvc_reqs.front(); srvc_reqs.pop(); } if (nuvals.change == ON || nuvals.change == OFF) { // PTT processing if (selrig->ICOMmainsub && selrig->inuse == onB) { // disallowed operation Fl::awake(update_UI_PTT); return; } PTT = (nuvals.change == ON); if (nuvals.change == ON) trace(1,"ptt ON"); else trace(1,"ptt OFF"); rigPTT(PTT); { bool get = ptt_state(); int cnt = 0; while ((get != PTT) && (cnt++ < 100)) { MilliSleep(10); get = ptt_state(); } std::stringstream s; s << "ptt returned " << get << " in " << cnt * 10 << " msec"; trace(1, s.str().c_str()); Fl::awake(update_UI_PTT); } continue; } if (PTT) { if ((nuvals.vfo.iBW != 255) || (nuvals.vfo.imode != -1)) { pending.push(nuvals); continue; // while (!srvc_reqs.empty()) } } switch (nuvals.change) { case vX: if (selrig->inuse == onB) serviceB(nuvals.vfo); else serviceA(nuvals.vfo); break; case vA: serviceA(nuvals.vfo); break; case vB: serviceB(nuvals.vfo); break; case sA: // select A { selrig->selectA(); vfo = &vfoA; if (selrig->name_ == rig_FT891.name_) { // Restore mode, then freq and bandwidth after select yaesu891UpdateA(&vfoA); } if (selrig->name_ == rig_FTdx10.name_) { FTdx10_UpdateA(&vfoA); } rig_trace(2, "case sA ", printXCVR_STATE(vfoA).c_str()); Fl::awake(updateUI); } break; case sB: // select B { selrig->selectB(); vfo = &vfoB; if (selrig->name_ == rig_FT891.name_) { // Restore mode, then freq and bandwidth after select yaesu891UpdateB(&vfoB); } if (selrig->name_ == rig_FTdx10.name_) { FTdx10_UpdateB(&vfoB); } rig_trace(2, "case sB ", printXCVR_STATE(vfoB).c_str()); Fl::awake(updateUI); } break; case sON: case sOFF: { int on = 0; if (nuvals.change == sON) on = 1; trace(1, (on ? "split ON" : "split OFF")); rig_trace(2, "case sB ", printXCVR_STATE(vfoB).c_str()); if (selrig->can_split() || selrig->has_split_AB) { selrig->set_split(on); selrig->get_split(); progStatus.split = on; Fl::awake(update_split, (void *)0); if (selrig->ICOMmainsub) { selrig->selectA(); vfo = &vfoA; } } } break; case SWAP: trace(1, "execute swapab()"); rig_trace(1, "execute swapab()"); execute_swapAB(); break; case A2B: trace(1, "execute A2B()"); rig_trace(1, "execute A2B()"); execute_A2B(); break; case FA2FB: trace(1, "execute FA2FB"); rig_trace(1, "execute FA2FB"); execute_FA2FB(); break; case FB2FA: trace(1, "execute FB2FA"); rig_trace(1, "execute FB2FA"); execute_FB2FA(); break; default: trace(2, "default ", printXCVR_STATE(nuvals.vfo).c_str()); if (selrig->inuse == onB) serviceB(nuvals.vfo); else serviceA(nuvals.vfo); break; } } { while (!srvc_reqs.empty()) { pending.push(srvc_reqs.front()); srvc_reqs.pop(); } while (!pending.empty()) { srvc_reqs.push(pending.front()); pending.pop(); } } Fl::awake(updateUI); } void find_bandwidth(XCVR_STATE &nuvals) { if (nuvals.iBW == 255) return; if (!selrig->has_bandwidth_control) { nuvals.iBW = 255; return; } if (nuvals.iBW > 65536) { nuvals.iBW /= 256; nuvals.iBW /= 256; size_t i = 0; int bwval = 0; for (i = 0; i < selrig->bandwidths_.size(); i++) { if ((bwval = atol(selrig->bandwidths_[i].c_str())) == nuvals.iBW) break; if (bwval > nuvals.iBW) { i--; break; } } if (i < 0) i = 0; if (i >= selrig->bandwidths_.size()) i = selrig->bandwidths_.size() - 1; nuvals.iBW = i; } } void serviceA(XCVR_STATE nuvals) { bool A_changed; if (nuvals.freq == 0) nuvals.freq = vfoA.freq; if (nuvals.imode == -1) nuvals.imode = vfoA.imode; if (nuvals.iBW == 255) nuvals.iBW = vfoA.iBW; if (selrig->inuse == onB) { if (selrig->can_change_alt_vfo) { trace(2, "B active, set alt vfo A", printXCVR_STATE(nuvals).c_str()); rig_trace(2, "B active, set alt vfo A", printXCVR_STATE(nuvals).c_str()); if (vfoA.imode != nuvals.imode) { if (selrig->name_ == rig_FT891.name_) { // Mode change on ft891 requires mode first, so set all values yaesu891UpdateA(&nuvals); vfoA = nuvals; } else { selrig->set_modeA(nuvals.imode); selrig->get_modeA(); } A_changed = true; } if (vfoA.iBW != nuvals.iBW) { selrig->set_bwA(nuvals.iBW); selrig->get_bwA(); A_changed = true; } if (vfoA.freq != nuvals.freq) { selrig->set_vfoA(nuvals.freq); selrig->get_vfoA(); A_changed = true; } vfoA = nuvals; } else if (xcvr_name != rig_TT550.name_) { trace(2, "B active, set vfo A", printXCVR_STATE(nuvals).c_str()); rig_trace(2, "B active, set vfo A", printXCVR_STATE(nuvals).c_str()); selrig->selectA(); if (vfoA.imode != nuvals.imode) { selrig->set_modeA(nuvals.imode); selrig->get_modeA(); A_changed = true; Fl::awake(updateUI); } if (vfoA.iBW != nuvals.iBW) { selrig->set_bwA(nuvals.iBW); selrig->get_bwA(); A_changed = true; } if (vfoA.freq != nuvals.freq) { selrig->set_vfoA(nuvals.freq); selrig->get_vfoA(); A_changed = true; } selrig->selectB(); vfoA = nuvals; } if (A_changed) { Fl::awake(setFreqDispA); } return; } trace(2, "service VFO A", printXCVR_STATE(nuvals).c_str()); if ((nuvals.imode != -1) ) {//&& (vfoA.imode != nuvals.imode)) { if (selrig->name_ == rig_FT891.name_) { // Mode change on ft891 can change frequency, so set all values yaesu891UpdateA(&nuvals); vfoA = nuvals; set_bandwidth_control(); } else { selrig->set_modeA(vfoA.imode = nuvals.imode); selrig->get_modeA(); set_bandwidth_control(); } } if (vfoA.iBW != nuvals.iBW) { selrig->set_bwA(vfoA.iBW = nuvals.iBW); selrig->get_bwA(); A_changed = true; } if (vfoA.freq != nuvals.freq) { trace(1, "change vfoA frequency"); selrig->set_vfoA(vfoA.freq = nuvals.freq); selrig->get_vfoA(); A_changed = true; } vfo = &vfoA; if (A_changed) Fl::awake(setFreqDispA); } void serviceB(XCVR_STATE nuvals) { bool B_changed; if (nuvals.freq == 0) nuvals.freq = vfoB.freq; if (nuvals.imode == -1) nuvals.imode = vfoB.imode; if (nuvals.iBW == 255) nuvals.iBW = vfoB.iBW; if (selrig->inuse == onA) { if (selrig->can_change_alt_vfo) { trace(2, "A active, set alt vfo B", printXCVR_STATE(nuvals).c_str()); if (vfoB.imode != nuvals.imode) { if (selrig->name_ == rig_FT891.name_) { // Mode change on ft891 requires mode first, so set all values yaesu891UpdateB(&nuvals); vfoB = nuvals; } else { selrig->set_modeB(nuvals.imode); selrig->get_modeB(); } B_changed = true; } if (vfoB.iBW != nuvals.iBW) { selrig->set_bwB(nuvals.iBW); selrig->get_bwB(); B_changed = true; } if (vfoB.freq != nuvals.freq) { selrig->set_vfoB(nuvals.freq); selrig->get_vfoB(); B_changed = true; } vfoB = nuvals; } else if (xcvr_name != rig_TT550.name_) { trace(2, "A active, set vfo B", printXCVR_STATE(nuvals).c_str()); selrig->selectB(); if (vfoB.imode != nuvals.imode) { selrig->set_modeB(nuvals.imode); selrig->get_modeB(); B_changed = true; } if (vfoB.iBW != nuvals.iBW) { selrig->set_bwB(nuvals.iBW); selrig->get_bwB(); B_changed = true; } if (vfoB.freq != nuvals.freq) { selrig->set_vfoB(nuvals.freq); selrig->get_vfoB(); B_changed = true; } selrig->selectA(); vfoB = nuvals; } if (B_changed) Fl::awake(setFreqDispB); return; } trace(2, "service VFO B", printXCVR_STATE(nuvals).c_str()); if ((nuvals.imode != -1) && (vfoB.imode != nuvals.imode)) { std::string m1, m2; m1 = selrig->modes_[nuvals.imode]; m2 = selrig->modes_[vfoB.imode]; selrig->set_modeB(vfoB.imode = nuvals.imode); selrig->get_modeB(); set_bandwidth_control(); vfoB.iBW = selrig->get_bwB(); } if (vfoB.iBW != nuvals.iBW) { selrig->set_bwB(vfoB.iBW = nuvals.iBW); selrig->get_bwB(); B_changed = true; } if (vfoB.freq != nuvals.freq) { selrig->set_vfoB(vfoB.freq = nuvals.freq); selrig->get_vfoB(); B_changed = true; } vfo = &vfoB; if (B_changed) Fl::awake(setFreqDispB); } #define MAX_FAILURES 5 void serial_failed(void *) { bypass_serial_thread_loop = true; RigSerial->ClosePort(); box_xcvr_connect->color(FL_BACKGROUND2_COLOR); box_xcvr_connect->redraw(); fl_alert2(_("\ Transceiver not responding!\n\n\ Check serial (COM) port connection\n\ Open menu Config/Setup/Transceiver\n\ Press 'Update' button, reselect port\n\ Check that Baud matches transceiver baud\n\n\ Press 'Init' button.")); } struct POLL_PAIR { int *poll; void (*pollfunc)(); std::string name; }; POLL_PAIR RX_poll_group_1[] = { {&progStatus.poll_smeter, read_smeter, "SMETER"}, {&progStatus.poll_frequency, read_vfo, "FREQ"}, {NULL, NULL, ""} }; POLL_PAIR RX_poll_group_2[] = { {&progStatus.poll_mode, read_mode, "MODE"}, {&progStatus.poll_bandwidth, read_bandwidth, "BW"}, // {&progStatus.poll_vfoAorB, read_vfoAorB, "A/B"}, {NULL, NULL, ""} }; POLL_PAIR RX_poll_group_3[] = { {&progStatus.poll_mode, read_voltmeter, "voltage"}, {&progStatus.poll_tuner, read_tuner, "tuner"}, {&progStatus.poll_volume, read_volume, "volume"}, {&progStatus.poll_auto_notch, read_auto_notch, "auto notch"}, {&progStatus.poll_notch, read_notch, "notch"}, {&progStatus.poll_ifshift, read_ifshift, "if shift"}, {&progStatus.poll_pbt, read_pbt, "pass band tunning"}, {&progStatus.poll_power_control, read_power_control, "power"}, {&progStatus.poll_pre_att, read_preamp, "preamp"}, {&progStatus.poll_pre_att, read_att, "atten"}, {&progStatus.poll_micgain, read_mic_gain, "mic gain"}, {&progStatus.poll_squelch, read_squelch, "squelch"}, {&progStatus.poll_rfgain, read_rfgain, "rfgain"}, {&progStatus.poll_split, read_split, "split"}, {&progStatus.poll_nr, read_nr, "noise reduction"}, {&progStatus.poll_noise, read_noise, "noise"}, {&progStatus.poll_compression, read_compression, "compression"}, {&progStatus.poll_break_in, check_break_in, "break-in"}, {NULL, NULL} }; POLL_PAIR TX_poll_pairs[] = { {&progStatus.poll_power_control, read_power_control, "power"}, {&progStatus.poll_pout, read_power_out, "pout"}, {&progStatus.poll_swr, read_swr, "swr"}, {&progStatus.poll_alc, read_alc, "alc"}, {&progStatus.poll_alc, read_idd, "idd"}, {&progStatus.poll_mode, read_voltmeter, "voltage"}, {&progStatus.poll_split, read_split, "split"}, {NULL, NULL, ""} }; static int menu1 = 0, menu2 = 1; static FILE *qcx_menus = (FILE *)0; void read_menu() { if (menu1 == 0) return; std::string menu_item; if (menu1 < 8) { menu_item = selrig->read_menu(menu1, menu2); if (!menu_item.empty()) { if (qcx_menus) fprintf(qcx_menus, "%s\n", menu_item.c_str()); ++menu2; } else { menu2 = 1; ++menu1; } return; } if (qcx_menus) fclose(qcx_menus); qcx_menus = 0; } void read_menus() { std::string qcx_menu_file; qcx_menu_file.assign(RigHomeDir).append("qcx_menus.txt"); qcx_menus = fopen(qcx_menu_file.c_str(), "w"); menu1 = menu2 = 1; } void * serial_thread_loop(void *d) { POLL_PAIR *rx_poll_group_1 = &RX_poll_group_1[0]; POLL_PAIR *rx_poll_group_2 = &RX_poll_group_2[0]; POLL_PAIR *rx_poll_group_3 = &RX_poll_group_3[0]; POLL_PAIR *tx_polling = &TX_poll_pairs[0]; bool isRX = false; for(;;) { MilliSleep(progStatus.serloop_timing); if (!run_serial_thread) { break; } if (bypass_serial_thread_loop || disable_polling->value()) { goto serial_bypass_loop; } if (RigSerial->failed() >= MAX_FAILURES) { Fl::awake(serial_failed); } //send any freq/mode/bw changes in the queu if (!srvc_reqs.empty()) { serviceQUE(); } if (progStatus.poll_ptt) { guard_lock lk(&mutex_serial, "2"); check_ptt(); } if (PTT || cwio_process == SEND || cwio_process == CALIBRATE || cwio_process == KEYDOWN ) { if (isRX) { isRX = false; smtrval = 0; Fl::awake(update_UI_PTT); Fl::awake(updateSmeter); } if (progStatus.poll_frequency) { guard_lock lk(&mutex_serial, "3"); read_vfo(); } if ( tx_polling->poll != NULL && *(tx_polling->poll) ) { guard_lock lk(&mutex_serial, "4"); (tx_polling->pollfunc)(); } if ((++tx_polling)->poll == NULL) tx_polling = &TX_poll_pairs[0]; } else { if (!isRX) { isRX = true; Fl::awake(update_UI_PTT); Fl::awake(zeroXmtMeters, 0); } while ( rx_poll_group_1->poll != NULL ) { if ( *(rx_poll_group_1->poll) ) { guard_lock lk(&mutex_serial, "5"); (rx_poll_group_1->pollfunc)(); ++rx_poll_group_1; break; } MilliSleep(1); ++rx_poll_group_1; } if ((rx_poll_group_1)->poll == NULL) rx_poll_group_1 = &RX_poll_group_1[0]; while ( rx_poll_group_2->poll != NULL ) { if ( *(rx_poll_group_2->poll) ) { guard_lock lk(&mutex_serial, "6"); (rx_poll_group_2->pollfunc)(); ++rx_poll_group_2; break; } MilliSleep(1); ++rx_poll_group_2; } if ((rx_poll_group_2)->poll == NULL) rx_poll_group_2 = &RX_poll_group_2[0]; while ( rx_poll_group_3->poll != NULL ) { if ( *(rx_poll_group_3->poll) ) { guard_lock lk(&mutex_serial, "7"); (rx_poll_group_3->pollfunc)(); ++rx_poll_group_3; break; } MilliSleep(1); ++rx_poll_group_3; } if ((rx_poll_group_3)->poll == NULL) rx_poll_group_3 = &RX_poll_group_3[0]; if (menu1 < 9 && selrig->name_ == rig_QCXP.name_) { guard_lock lk(&mutex_serial, "8"); read_menu(); } } serial_bypass_loop: ; } return NULL; } //============================================================================= void setBW() { XCVR_STATE fm = *vfo; fm.src = UI; fm.iBW = opBW->index(); guard_lock que_lock( &mutex_srvc_reqs, "setBW" ); srvc_reqs.push( VFOQUEUE((selrig->inuse == onB ? vB : vA), fm)); } void setDSP() { XCVR_STATE fm = *vfo; fm.src = UI; fm.iBW = ((opDSP_hi->index() << 8) | 0x8000) | (opDSP_lo->index() & 0xFF) ; guard_lock que_lock( & mutex_srvc_reqs, "setDSP" ); srvc_reqs.push ( VFOQUEUE((selrig->inuse == onB ? vB : vA), fm)); } void selectDSP() { if (btnDSP->label()[0] == selrig->SL_label[0]) { btnDSP->label(selrig->SH_label); btnDSP->redraw_label(); opDSP_lo->hide(); opDSP_hi->show(); opDSP_hi->redraw(); } else { btnDSP->label(selrig->SL_label); btnDSP->redraw_label(); opDSP_hi->hide(); opDSP_lo->show(); opDSP_lo->redraw(); } } void selectFILT() { guard_lock lock(&mutex_serial, "9"); btnFILT->label(selrig->nextFILT()); btnFILT->redraw_label(); } void selectCENTER() { if (xcvr_name == rig_K2.name_ || xcvr_name == rig_K3.name_ || xcvr_name == rig_KX3.name_ || xcvr_name == rig_K4.name_) { return; } if (btnCENTER->label()[0] == 'C') { btnCENTER->label("W"); opBW->show(); opCENTER->hide(); } else { btnCENTER->label("C"); opBW->hide(); opCENTER->index(progStatus.tci_center); opCENTER->show(); } opBW->redraw(); opCENTER->redraw(); btnCENTER->redraw_label(); } static int lastTCI_bw = -1; static int lastTCI_inner = -1; static int lastTCI_outer = -1; static int lastTCI_mode = -1; void updateTCI(void *d) { if (!( selrig->name_ == rig_tci_sundx.name_ || selrig->name_ == rig_tci_sunpro.name_) ) return; vfo->FilterInner = selrig->get_pbt_inner(); vfo->FilterOuter = selrig->get_pbt_outer(); if (lastTCI_mode != vfo->imode) { lastTCI_mode = vfo->imode; switch (vfo->imode) { case TCI_AM: case TCI_SAM: case TCI_DSB: case TCI_NFM: opFilterInner->minimum(-8000); opFilterInner->maximum(0); opFilterOuter->minimum(0); opFilterOuter->maximum(8000); break; case TCI_LSB: opFilterInner->minimum(-4000); opFilterInner->maximum(0); opFilterOuter->minimum(-4000); opFilterOuter->maximum(0); break; case TCI_USB: opFilterInner->minimum(0); opFilterInner->maximum(4000); opFilterOuter->minimum(0); opFilterOuter->maximum(4000); break; default: case TCI_CW: opFilterInner->minimum(-1000); opFilterInner->maximum(0); opFilterOuter->minimum(0); opFilterOuter->maximum(1000); break; case TCI_DIGL: case TCI_DIGU: opFilterInner->minimum(-4000); opFilterInner->maximum(0); opFilterOuter->minimum(0); opFilterOuter->maximum(4000); break; case TCI_WFM: opFilterInner->minimum(-9000); opFilterInner->maximum(0); opFilterOuter->minimum(0); opFilterOuter->maximum(9000); break; case TCI_DRM: opFilterInner->minimum(-5000); opFilterInner->maximum(0); opFilterOuter->minimum(0); opFilterOuter->maximum(5000); break; } updateBandwidthControl((void *)0); } if (lastTCI_bw != vfo->iBW) opBW->index(lastTCI_bw = vfo->iBW); if (lastTCI_inner != vfo->FilterInner) opFilterInner->value(lastTCI_inner = vfo->FilterInner); if (lastTCI_outer != vfo->FilterOuter) opFilterOuter->value(lastTCI_outer = vfo->FilterOuter); std::string smode = opMODE->value(); if (smode == "USB" || smode == "LSB") { btnCENTER->activate(); btnCENTER->redraw(); btnCENTER->show(); if (btnCENTER->label()[0] == 'C') { opCENTER->index(progStatus.tci_center); opCENTER->show(); opBW->hide(); } else { opBW->show(); opCENTER->hide(); } opBW->resize(opDSP_lo->x(), opDSP_lo->y(), opDSP_lo->w(), opDSP_lo->h()); opCENTER->resize(opDSP_lo->x(), opDSP_lo->y(), opDSP_lo->w(), opDSP_lo->h()); opCENTER->redraw(); opBW->redraw(); } else { btnCENTER->label("W"); btnCENTER->redraw_label(); btnCENTER->deactivate(); btnCENTER->show(); opCENTER->hide(); if (vfo->iBW != opBW->index()) opBW->index(vfo->iBW); opBW->resize(opDSP_lo->x(), opDSP_lo->y(), opDSP_lo->w(), opDSP_lo->h()); opBW->redraw(); opBW->show(); } } void updateFLEX1500(void *d) { if (!( selrig->name_ == rig_FLEX1500.name_) ) return; btnCENTER->hide(); opCENTER->hide(); switch (vfo->imode) { case RIG_FLEX1500::AM : case RIG_FLEX1500::SAM : case RIG_FLEX1500::DSB : case RIG_FLEX1500::FM : sldrINNER->minimum(-8000); sldrINNER->maximum(0); sldrINNER->step(10); sldrOUTER->minimum(0); sldrOUTER->maximum(8000); sldrOUTER->step(10); break; case RIG_FLEX1500::LSB : sldrINNER->minimum(-4000); sldrINNER->maximum(0); sldrINNER->step(10); sldrOUTER->minimum(-4000); sldrOUTER->maximum(0); sldrOUTER->step(10); break; case RIG_FLEX1500::USB : sldrINNER->minimum(0); sldrINNER->maximum(4000); sldrINNER->step(10); sldrOUTER->minimum(0); sldrOUTER->maximum(4000); sldrOUTER->step(10); break; default: case RIG_FLEX1500::CWL : sldrINNER->minimum(-1500); sldrINNER->maximum(0); sldrINNER->step(5); sldrOUTER->minimum(-1500); sldrOUTER->maximum(0); sldrOUTER->step(5); break; case RIG_FLEX1500::CWU: sldrINNER->minimum(0); sldrINNER->maximum(1500); sldrINNER->step(5); sldrOUTER->minimum(0); sldrOUTER->maximum(1500); sldrOUTER->step(5); break; case RIG_FLEX1500::DIGL: case RIG_FLEX1500::DIGU: sldrINNER->minimum(0); sldrINNER->maximum(1500); sldrINNER->step(10); sldrOUTER->minimum(0); sldrOUTER->maximum(1500); sldrOUTER->step(10); break; case RIG_FLEX1500::DRM: sldrINNER->minimum(-5000); sldrINNER->maximum(0); sldrINNER->step(10); sldrOUTER->minimum(0); sldrOUTER->maximum(5000); sldrOUTER->step(10); break; } std::string sBW = opBW->value(); if (sBW.find("Var") != std::string::npos) { sldrINNER->activate(); sldrOUTER->activate(); } else { sldrINNER->deactivate(); sldrOUTER->deactivate(); } updateBandwidthControl((void *)0); } // set_bandwidth_control updates iBW and then posts the call for // the UI thread to updateBandwidthControl // changes to the UI cannot come from any thread other than the // main FL thread! Doing otherwise can cause what appears to be // random program crashes. void set_bandwidth_control() { if (!selrig->has_bandwidth_control) return; // if (selrig->name_ != rig_K3.name_) { // vfo->iBW = selrig->def_bandwidth(vfo->imode); // if (vfo->iBW < 256) { // vfo->iBW = selrig->def_bandwidth(vfo->imode); // } // } if (selrig->inuse == onB) { vfoB.iBW = vfo->iBW = selrig->get_bwB(); } else { vfoA.iBW = vfo->iBW = selrig->get_bwA(); } Fl::awake(updateBandwidthControl); } void TRACED ( updateBandwidthControl, void *d ) if (//xcvr_name == rig_K3.name_ || xcvr_name == rig_KX3.name_ || xcvr_name == rig_K4.name_ ) { return; } if (selrig->has_dsp_controls) { if (vfo->iBW > 256) { opDSP_lo->clear(); opDSP_hi->clear(); try { for (size_t i = 0; i < selrig->dsp_SL.size(); i++) opDSP_lo->add(selrig->dsp_SL.at(i).c_str()); for (size_t i = 0; i < selrig->dsp_SH.size(); i++) opDSP_hi->add(selrig->dsp_SH.at(i).c_str()); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } opBW->hide(); opDSP_lo->index(vfo->iBW & 0xFF); opDSP_lo->hide(); opDSP_hi->index((vfo->iBW >> 8) & 0x7F); btnDSP->label(selrig->SH_label); opDSP_hi->show(); opDSP_hi->redraw(); btnDSP->show(); btnDSP->redraw(); btnFILT->hide(); } else { opDSP_lo->hide(); opDSP_hi->hide(); btnDSP->hide(); btnFILT->hide(); // opBW->clear(); try { if (vfo->iBW != opBW->index()) opBW->index(vfo->iBW); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); opBW->index(0); } opBW->redraw(); opBW->show(); } } else if (selrig->has_bandwidth_control) { opDSP_lo->hide(); opDSP_hi->hide(); btnDSP->hide(); // opBW->clear(); try { if (vfo->iBW != opBW->index()) opBW->index(vfo->iBW); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); opBW->index(0); } opBW->redraw(); if (selrig->has_FILTER) { btnFILT->show(); btnFILT->label( selrig->FILT( selrig->inuse == onB ? vfoB.filter : vfoA.filter)); btnFILT->redraw_label(); opBW->resize(opDSP_lo->x(), opDSP_lo->y(), opDSP_lo->w(), opDSP_lo->h()); opBW->redraw(); } else { opBW->show(); } } else { // no BW, no DSP controls opBW->index(0); opBW->hide(); btnFILT->hide(); opDSP_lo->index(0); opDSP_hi->index(0); btnDSP->hide(); opDSP_lo->hide(); opDSP_hi->hide(); } // if (selrig->name_ == rig_FLEX1500.name_) { // std::string sBW = opBW->value(); // if (sBW.find("Var") != std::string::npos) { // sldrINNER->activate(); // sldrOUTER->activate(); // } else { // sldrINNER->deactivate(); // sldrOUTER->deactivate(); // } // sldrINNER->redraw(); // sldrOUTER->redraw(); // } } void setMode() { XCVR_STATE fm = *vfo; fm.imode = opMODE->index(); fm.iBW = selrig->def_bandwidth(fm.imode); fm.src = UI; if (selrig->has_FILTER) { fm.filter = selrig->get_FILT(fm.imode); if (selrig->inuse == onB) fm.filter = selrig->get_FILT(fm.imode); } guard_lock que_lock( &mutex_srvc_reqs, "setMode" ); srvc_reqs.push(VFOQUEUE( (selrig->inuse == onB ? vB : vA), fm)); } void sortList() { if (!numinlist) return; ATAG_XCVR_STATE temp; for (int i = 0; i < numinlist - 1; i++) for (int j = i + 1; j < numinlist; j++) if (oplist[i].freq > oplist[j].freq) { temp = oplist[i]; oplist[i] = oplist[j]; oplist[j] = temp; } } void clearList() { if (!numinlist) return; for (int i = 0; i < LISTSIZE; i++) { oplist[i].freq = 0; oplist[i].imode = USB; oplist[i].iBW = 0; memset(oplist[i].alpha_tag, 0, ATAGSIZE); } FreqSelect->clear(); numinlist = 0; inAlphaTag->value(""); } void updateSelect() { char szline[1000]; char szatag[ATAGSIZE]; int i; FreqSelect->clear(); if (!numinlist) return; sortList(); // stripe lines int bg1, bg2, bg_clr; bg1 = FL_WHITE; bg2 = FL_LIGHT2; for (int n = 0; n < numinlist; n++) { memset(szline, 0, sizeof(szline)); memset(szatag, 0, sizeof(szatag)); for (i = 0; i < ATAGSIZE; i++) { szatag[i] = oplist[n].alpha_tag[i]; if (szatag[i] == '\n') szatag[i] = ' '; } bg_clr = (n % 2) ? bg1 : bg2; snprintf(szline, sizeof(szline), "\ @F%d@S%d@B%d@r%.3f\t\ @F%d@S%d@B%d@.|\t\ @F%d@S%d@B%d@r%s\t\ @F%d@S%d@B%d@.|\t\ @F%d@S%d@B%d@r%s\t\ @F%d@S%d@B%d@.|\t\ @F%d@S%d@B%d@.%s", progStatus.memfontnbr, progStatus.memfontsize, bg_clr, oplist[n].freq / 1000.0, progStatus.memfontnbr, progStatus.memfontsize, bg_clr, progStatus.memfontnbr, progStatus.memfontsize, bg_clr, selrig->get_bwname_(oplist[n].iBW, oplist[n].imode), progStatus.memfontnbr, progStatus.memfontsize, bg_clr, progStatus.memfontnbr, progStatus.memfontsize, bg_clr, selrig->get_modename_(oplist[n].imode), progStatus.memfontnbr, progStatus.memfontsize, bg_clr, progStatus.memfontnbr, progStatus.memfontsize, bg_clr, szatag ); FreqSelect->add (szline); } inAlphaTag->value(""); } void addtoList(unsigned long long val, int imode, int iBW) { if (numinlist < LISTSIZE) { oplist[numinlist].imode = imode; oplist[numinlist].freq = val; oplist[numinlist].iBW = iBW; memset(oplist[numinlist].alpha_tag, 0, ATAGSIZE); numinlist++; } } void readFile() { std::ifstream iList(defFileName.c_str()); if (!iList) { fl_message ("Could not open %s", defFileName.c_str()); return; } clearList(); int i = 0, mode, bw; unsigned long long freq; while (!iList.eof()) { freq = 0ULL; mode = -1; iList >> freq >> mode >> bw; if (freq && (mode > -1)) { oplist[i].freq = freq; oplist[i].imode = mode; oplist[i].iBW = (bw == -1 ? 0 : bw); memset(oplist[i].alpha_tag, 0, ATAGSIZE); i++; } } iList.close(); numinlist = i; updateSelect(); } void readTagFile() { std::ifstream iList(defFileName.c_str()); if (!iList) { fl_message ("Could not open %s", defFileName.c_str()); return; } clearList(); int i = 0, mode, bw; unsigned long long freq; std::string atag; char ca[ATAGSIZE + 60]; while (!iList.eof()) { freq = 0ULL; mode = -1; atag.clear(); memset(ca, 0, sizeof(ca)); iList >> freq >> mode >> bw; iList.getline(ca, sizeof(ca) - 1); atag = ca; if (freq && (mode > -1)) { oplist[i].freq = freq; oplist[i].imode = mode; oplist[i].iBW = (bw == -1 ? 0 : bw); // trim leading, trailing spaces and double quotes atag = lt_trim(atag); snprintf(oplist[i].alpha_tag, ATAGSIZE, "%s", atag.c_str()); i++; } } iList.close(); numinlist = i; updateSelect(); } void buildlist() { std::string tmpFN, orgFN; // check for new Memory-Alpha-Tag file defFileName = RigHomeDir; defFileName.append(selrig->name_); defFileName.append(".mat"); FILE *fh = fopen(defFileName.c_str(), "r"); if (fh != NULL) { fclose (fh); readTagFile(); return; } // else only read original file to make new MAT file orgFN = RigHomeDir; orgFN.append(selrig->name_); orgFN.append(".arv"); fh = fopen(orgFN.c_str(), "r"); if (fh != NULL) { fclose (fh); tmpFN = defFileName; defFileName = orgFN; readFile(); defFileName = tmpFN; return; } clearList(); } // flrig front panel changed void movFreqA(Fl_Widget *, void *) { guard_lock serial(&mutex_serial, "10"); if (!selrig->can_change_alt_vfo && selrig->inuse == onB) { selrig->selectA(); vfoA.freq = FreqDispA->value(); selrig->set_vfoA(vfoA.freq); selrig->selectB(); } else { vfoA.freq = FreqDispA->value(); selrig->set_vfoA(vfoA.freq); } } void movFreqB(Fl_Widget *, void *) { guard_lock serial(&mutex_serial, "11"); if (!selrig->can_change_alt_vfo && selrig->inuse == onA) { selrig->selectB(); vfoB.freq = FreqDispB->value(); selrig->set_vfoB(vfoB.freq); selrig->selectA(); } else { vfoB.freq = FreqDispB->value(); selrig->set_vfoB(vfoB.freq); } } void execute_swapAB() { if (selrig->canswap()) { selrig->swapAB(); if (selrig->ICOMmainsub) { XCVR_STATE temp = vfoA; vfoA = vfoB; vfoB = temp; selrig->selectA(); vfo = &vfoA; } else if (selrig->ICOMrig) { if (selrig->inuse == onB) { selrig->selectA(); vfo = &vfoA; } else { selrig->selectB(); vfo = &vfoB; } } else if (selrig->name_ == rig_FT891.name_) { // No need for extra select, as swapAB accomplishes this if (selrig->inuse == onB) { selrig->selectA(); vfo = &vfoA; // Restore mode, then frequency and bandwidth after swap. yaesu891UpdateA(&vfoA); } else { selrig->selectB(); vfo = &vfoB; // Restore mode, then frequency and bandwidth after swap. yaesu891UpdateB(&vfoB); } } else if (selrig->name_ == rig_FTdx10.name_ ) { XCVR_STATE temp = vfoB; vfoB = vfoA; vfoA = temp; if (selrig->inuse == onB) vfo = &vfoB; else vfo = &vfoA; } else { XCVR_STATE temp = vfoB; vfoB = vfoA; vfoA = temp; if (selrig->inuse == onB) { selrig->selectB(); vfo = &vfoB; } else { selrig->selectA(); vfo = &vfoA; } } } else { if (selrig->inuse == onB) { XCVR_STATE vfotemp = vfoA; selrig->selectA(); vfoA = vfoB; selrig->set_modeA(vfoA.imode); selrig->set_vfoA(vfoA.freq); selrig->set_bwA(vfoA.iBW); selrig->get_vfoA(); selrig->get_modeA(); selrig->get_bwA(); selrig->selectB(); vfoB = vfotemp; selrig->set_modeB(vfoB.imode); selrig->set_vfoB(vfoB.freq); selrig->set_bwB(vfoB.iBW); selrig->get_vfoB(); selrig->get_modeB(); selrig->get_bwB(); vfo = &vfoB; } else { XCVR_STATE vfotemp = vfoB; selrig->selectB(); vfoB = vfoA; selrig->set_modeB(vfoB.imode); selrig->set_vfoB(vfoB.freq); selrig->set_bwB(vfoB.iBW); selrig->get_vfoB(); selrig->get_modeB(); selrig->get_bwB(); selrig->selectA(); vfoA = vfotemp; selrig->set_modeA(vfoA.imode); selrig->set_vfoA(vfoA.freq); selrig->set_bwA(vfoA.iBW); selrig->get_vfoA(); selrig->get_modeA(); selrig->get_bwA(); vfo = &vfoA; } } Fl::awake(updateUI); } void cbAswapB() { guard_lock lock(&mutex_srvc_reqs, "cbAswapB"); if ((Fl::event_state() & FL_SHIFT) == FL_SHIFT) { VFOQUEUE xcvr; xcvr.change = FA2FB; trace(1, "cb VfoA freq -> VfoB freq"); srvc_reqs.push(xcvr); } else if ((Fl::event_state() & FL_CTRL) == FL_CTRL) { VFOQUEUE xcvr; xcvr.change = FB2FA; trace(1, "cb VfoB freq -> VfoA freq"); srvc_reqs.push(xcvr); } else { if (Fl::event_button() == FL_RIGHT_MOUSE) { VFOQUEUE xcvr; xcvr.change = A2B; trace(1, "cb Active->Inactive vfo"); srvc_reqs.push(xcvr); } else { guard_lock lock2(&mutex_serial, "12"); // execute_swapAB(); VFOQUEUE xcvr; xcvr.change = SWAP; trace(1, "cb SWAP"); srvc_reqs.push(xcvr); } } } void execute_A2B() { if (xcvr_name == rig_K3.name_) { K3_A2B(); } else if (xcvr_name == rig_KX3.name_ || xcvr_name == rig_K4.name_) { cb_KX3_A2B(); } else if (xcvr_name == rig_K2.name_) { trace(1,"execute A2B() 1"); vfoB = vfoA; selrig->set_vfoB(vfoB.freq); selrig->get_vfoB(); FreqDispB->value(vfoB.freq); } if (selrig->ICOMmainsub) { selrig->selectA(); selrig->A2B(); vfoB = vfoA; vfo = &vfoA; } else if (selrig->has_a2b) { trace(1,"execute A2B() 2"); selrig->A2B(); if (selrig->inuse == onB) { vfoA = vfoB; FreqDispA->value(vfoA.freq); } else { vfoB = vfoA; FreqDispB->value(vfoB.freq); } } else { if (selrig->inuse == onB) { vfoA = vfoB; if (selrig->name_ == rig_FT891.name_) { yaesu891UpdateA(&vfoA); } else { selrig->set_vfoA(vfoA.freq); selrig->set_modeA(vfoA.imode); selrig->set_bwA(vfoA.iBW); selrig->get_vfoA(); selrig->get_modeA(); selrig->get_bwA(); } FreqDispA->value(vfoA.freq); } else { vfoB = vfoA; if (selrig->name_ == rig_FT891.name_) { yaesu891UpdateB(&vfoB); } else { selrig->set_vfoB(vfoB.freq); selrig->set_modeB(vfoB.imode); selrig->set_bwB(vfoB.iBW); selrig->get_vfoB(); selrig->get_modeB(); selrig->get_bwB(); } FreqDispB->value(vfoB.freq); } } Fl::awake(updateUI); } void execute_FA2FB() { vfoB.freq = vfoA.freq; selrig->set_vfoB(vfoB.freq); FreqDispB->value(vfoB.freq); Fl::awake(updateUI); } void execute_FB2FA() { vfoA.freq = vfoB.freq; selrig->set_vfoA(vfoA.freq); FreqDispA->value(vfoA.freq); Fl::awake(updateUI); } void highlight_vfo(void *d) { Fl_Color norm_fg = fl_rgb_color(progStatus.fg_red, progStatus.fg_green, progStatus.fg_blue); Fl_Color norm_bg = fl_rgb_color(progStatus.bg_red, progStatus.bg_green, progStatus.bg_blue); Fl_Color dim_bg = fl_color_average( norm_bg, FL_BLACK, 0.75); FreqDispA->value(vfoA.freq); FreqDispB->value(vfoB.freq); if (selrig->inuse == onB) { FreqDispA->SetCOLORS( norm_fg, dim_bg ); FreqDispB->SetCOLORS( norm_fg, norm_bg ); if (selrig->name_ == rig_tci_sundx.name_ || selrig->name_ == rig_tci_sunpro.name_) { btnA->value(1); } else { btnA->value(0); btnB->value(1); } FreqDispB->activate(); if (selrig->can_change_alt_vfo) FreqDispA->activate(); else FreqDispA->deactivate(); } else { FreqDispA->SetCOLORS( norm_fg, norm_bg ); FreqDispB->SetCOLORS( norm_fg, dim_bg); if (selrig->name_ == rig_tci_sundx.name_ || selrig->name_ == rig_tci_sunpro.name_) { btnA->value(0); } else { btnA->value(1); btnB->value(0); } FreqDispA->activate(); if (selrig->can_change_alt_vfo) FreqDispB->activate(); else FreqDispB->deactivate(); } FreqDispA->redraw(); FreqDispB->redraw(); btnA->redraw(); btnB->redraw(); Fl::check(); } void cb_set_split(int val) { progStatus.split = val; VFOQUEUE xcvr_split; if (val) xcvr_split.change = sON; else xcvr_split.change = sOFF; trace(1, (val ? "cb_set_split(ON)" : "cb_set_split(OFF)")); srvc_reqs.push(xcvr_split); } void cb_selectA() { guard_lock que_lock( &mutex_srvc_reqs, "cb_selectA"); srvc_reqs.push (VFOQUEUE(sA, vfoA)); return; } void cb_selectB() { guard_lock que_lock( &mutex_srvc_reqs, "cb_selectB"); srvc_reqs.push (VFOQUEUE(sB, vfoB)); return; } void setLower() { } void setUpper() { } void selectFreq() { int n = FreqSelect->value(); // This is the number of the selected line; not the line's value. if (!n) return; n--; XCVR_STATE fm; fm.freq = oplist[n].freq; fm.imode = oplist[n].imode; fm.iBW = oplist[n].iBW; fm.src = UI; if (selrig->inuse == onA) { FreqDispA->value(fm.freq); guard_lock que_lock(&mutex_srvc_reqs, "selectFreq on A"); srvc_reqs.push(VFOQUEUE(vA, fm)); } else { FreqDispB->value(fm.freq); guard_lock que_lock(&mutex_srvc_reqs, "selectFreq on B"); srvc_reqs.push(VFOQUEUE(vB, fm)); } } #include void select_and_close() { int key = Fl::event_key(); int btn = Fl::event_button(); if (FreqSelect->value() <= 0) return; if ((btn == FL_LEFT_MOUSE && Fl::event_clicks()) || btn == FL_RIGHT_MOUSE || key == FL_Enter || key == FL_Left) { inAlphaTag->value(oplist[FreqSelect->value() - 1].alpha_tag); selectFreq(); Fl::focus(FreqSelect); return; } if (btn == FL_LEFT_MOUSE || key == FL_Up || key == FL_Down) { inAlphaTag->value(oplist[FreqSelect->value() - 1].alpha_tag); Fl::focus(FreqSelect); return; } if (key == FL_Right) { addFreq(); FreqSelect->select(1, 1); inAlphaTag->value(oplist[0].alpha_tag); Fl::focus(FreqSelect); return; } if (key == FL_Delete) { long n = FreqSelect->value(); delFreq(); FreqSelect->select(n, 1); inAlphaTag->value(oplist[n-1].alpha_tag); Fl::focus(FreqSelect); return; } } void delFreq() { if (FreqSelect->value()) { long n = FreqSelect->value() - 1; for (int i = n; i < numinlist; i ++) oplist[i] = oplist[i+1]; if (numinlist) { oplist[numinlist - 1].imode = USB; oplist[numinlist - 1].freq = 0; oplist[numinlist - 1].iBW = 0; memset(oplist[numinlist - 1].alpha_tag, 0, ATAGSIZE); numinlist--; } updateSelect(); } } void addFreq() { if (selrig->inuse == onB) { unsigned long long freq = FreqDispB->value(); if (!freq) return; int mode = opMODE->index(); int bw; if (btnDSP->visible()) bw = ((opDSP_hi->index() << 8) | 0x8000) | (opDSP_lo->index() & 0xFF) ; else if (opBW_B->visible()) bw = opBW_B->index(); else bw = opBW->index(); for (int n = 0; n < numinlist; n++) if (freq == oplist[n].freq && mode == oplist[n].imode) { oplist[n].iBW = bw; updateSelect(); // update list return; } addtoList(freq, mode, bw); updateSelect(); FreqDispB->visual_beep(); } else { unsigned long long freq = FreqDispA->value(); if (!freq) return; int mode = opMODE->index(); int bw; if (btnDSP->visible()) bw = ((opDSP_hi->index() << 8) | 0x8000) | (opDSP_lo->index() & 0xFF) ; else if (opBW_A->visible()) bw = opBW_A->index(); else bw = opBW->index(); for (int n = 0; n < numinlist; n++) if (freq == oplist[n].freq && mode == oplist[n].imode) { oplist[n].iBW = bw; updateSelect(); // update list return; } addtoList(freq, mode, bw); updateSelect(); FreqDispA->visual_beep(); } } void cbRIT() { trace(1, "cbRIT()"); if (selrig->has_rit && cntRIT) { guard_lock serial_lock(&mutex_serial, "13"); selrig->setRit((int)cntRIT->value()); } } void cbXIT() { trace(1, "cbXIT()"); guard_lock serial_lock(&mutex_serial, "14"); selrig->setXit((int)cntXIT->value()); } void cbBFO() { if (selrig->has_bfo) { trace(1, "cbBFO()"); guard_lock serial_lock(&mutex_serial, "15"); selrig->setBfo((int)cntBFO->value()); } } void cbAttenuator() { trace(1, "cbAttenuator()"); { guard_lock serial_lock(&mutex_serial, "16"); selrig->set_attenuator ( progStatus.attenuator = selrig->next_attenuator() ); if (xcvr_name == rig_K4.name_) selrig->get_attenuator(); } btnAttenuator->value( progStatus.attenuator > 0 ? 1 : 0); btnAttenuator->label( selrig->ATT_label() ); btnAttenuator->redraw_label(); btnAttenuator->redraw(); return; } void setAttControl(void *d) { size_t val = reinterpret_cast(d); btnAttenuator->value(val); } void cbPreamp() { trace(1, "cbPreamp()"); if (selrig->name_ == rig_FLEX1500.name_) { selrig->set_preamp(progStatus.preamp = cbo_preamp->index()); return; } { guard_lock serial_lock(&mutex_serial, "17"); selrig->set_preamp ( progStatus.preamp = selrig->next_preamp() ); if (xcvr_name == rig_K4.name_) selrig->get_preamp(); } btnPreamp->value( progStatus.preamp > 0 ? 1 : 0); btnPreamp->label( selrig->PRE_label() ); btnPreamp->redraw_label(); btnPreamp->redraw(); return; } void setPreampControl(void *d) { size_t val = reinterpret_cast(d); btnPreamp->value(val); } void cbAN() { guard_lock serial_lock(&mutex_serial, "18"); trace(1, "cbAN()"); progStatus.auto_notch = btnAutoNotch->value(); selrig->set_auto_notch(progStatus.auto_notch); } void cbbtnNotch() { if (!selrig->has_notch_control) return; int val = 0, cnt = 0; { guard_lock serial_lock(&mutex_serial, "19"); progStatus.notch = btnNotch->value(); selrig->set_notch(progStatus.notch, progStatus.notch_val); } MilliSleep(progStatus.serial_post_write_delay); while ((selrig->get_notch(val) != progStatus.notch) && (cnt++ < 10)) { MilliSleep(progStatus.serial_post_write_delay); Fl::awake(); } } void setNotch() { if (!selrig->has_notch_control) return; trace(1, "setNotch()"); int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; guard_lock lock( &mutex_serial, "20"); if (sldrNOTCH) { progStatus.notch_val = sldrNOTCH->value(); } else { progStatus.notch_val = spnrNOTCH->value(); } selrig->set_notch(progStatus.notch, progStatus.notch_val); } // called from xml_io thread // xcvr updated in xml_io / xml_server code // this only updates the dialog controls void setNotchControl(void *d) { if (sldrNOTCH) sldrNOTCH->value(progStatus.notch_val); if (spnrNOTCH) spnrNOTCH->value(progStatus.notch_val); btnNotch->value(progStatus.notch); } void adjust_if_shift_control(void *d) { if (sldrIFSHIFT) sldrIFSHIFT->minimum(selrig->if_shift_min); if (sldrIFSHIFT) sldrIFSHIFT->maximum(selrig->if_shift_max); if (sldrIFSHIFT) sldrIFSHIFT->step(selrig->if_shift_step); if (sldrIFSHIFT) sldrIFSHIFT->value(selrig->if_shift_mid); if (sldrIFSHIFT) sldrIFSHIFT->redraw(); if (spnrIFSHIFT) spnrIFSHIFT->minimum(selrig->if_shift_min); if (spnrIFSHIFT) spnrIFSHIFT->maximum(selrig->if_shift_max); if (spnrIFSHIFT) spnrIFSHIFT->step(selrig->if_shift_step); if (spnrIFSHIFT) spnrIFSHIFT->value(selrig->if_shift_mid); if (spnrIFSHIFT) spnrIFSHIFT->redraw(); btnIFsh->value(0); btnIFsh->redraw(); } void setIFshiftButton(void *d) { bool b = (bool)d; if (b && !btnIFsh->value()) { btnIFsh->value(1); } else if (!b && btnIFsh->value()) { btnIFsh->value(0); if (sldrIFSHIFT) sldrIFSHIFT->value( selrig->if_shift_mid ); if (spnrIFSHIFT) spnrIFSHIFT->value( selrig->if_shift_mid ); } } void setIFshiftControl(void *d) { int val = *(reinterpret_cast(d)); if (sldrIFSHIFT) { if (sldrIFSHIFT->value() != val) sldrIFSHIFT->value(val); } if (spnrIFSHIFT) { if (spnrIFSHIFT->value() != val) spnrIFSHIFT->value(val); } btnIFsh->value( val != selrig->if_shift_mid ); } void setIFshift() { trace(1, "setIFshift()"); int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_shift = 1; return; } int btn = 0, set = 0; btn = btnIFsh->value(); progStatus.shift = btn; if (sldrIFSHIFT) { set = sldrIFSHIFT->value(); } else if (spnrIFSHIFT) { set = spnrIFSHIFT->value(); } progStatus.shift_val = set; guard_lock lock(&mutex_serial, "21"); if (xcvr_name == rig_TS990.name_) { if (progStatus.shift) selrig->set_monitor(1); else selrig->set_monitor(0); } selrig->set_if_shift(progStatus.shift_val); } void cbIFsh() { guard_lock serial_lock(&mutex_serial, "22"); trace(1, "setIFsh()"); int btn, set, cnt = 0; if (sldrIFSHIFT) { set = sldrIFSHIFT->value(); btn = btnIFsh->value(); } else { set = spnrIFSHIFT->value(); btn = btnIFsh->value(); } if (btn == 0) set = 0; selrig->set_if_shift(set); MilliSleep(50); int val, on; on = selrig->get_if_shift(val); while ((on != btn) && (cnt++ < 10)) { MilliSleep(progStatus.serial_post_write_delay); on = selrig->get_if_shift(val); Fl::awake(); } } void setLOCK() { progStatus.pbt_lock = btnLOCK->value(); if (progStatus.pbt_lock) { guard_lock serial_lock(&mutex_serial, "23"); progStatus.pbt_outer = progStatus.pbt_inner; sldrOUTER->value(progStatus.pbt_outer); selrig->set_pbt_outer(progStatus.pbt_outer); sldrOUTER->redraw(); } } void setINNER() { if (selrig->name_ == rig_FLEX1500.name_) { progStatus.pbt_inner = sldrINNER->value(); selrig->set_pbt( progStatus.pbt_inner, progStatus.pbt_outer); return; } progStatus.pbt_inner = sldrINNER->value(); if (progStatus.pbt_lock) { progStatus.pbt_outer = sldrOUTER->value(); sldrOUTER->value(progStatus.pbt_outer); sldrOUTER->redraw(); } int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_pbt = 1; return; } guard_lock lock(&mutex_serial, "24"); selrig->set_pbt_inner(progStatus.pbt_inner); selrig->get_pbt_inner(); if (progStatus.pbt_lock) { selrig->set_pbt_outer(progStatus.pbt_outer); selrig->get_pbt_outer(); } } void setOUTER() { if (selrig->name_ == rig_FLEX1500.name_) { progStatus.pbt_outer = sldrOUTER->value(); selrig->set_pbt( progStatus.pbt_inner, progStatus.pbt_outer); return; } progStatus.pbt_outer = sldrOUTER->value(); if (progStatus.pbt_lock) { progStatus.pbt_inner = progStatus.pbt_outer; sldrINNER->value(progStatus.pbt_inner); sldrINNER->redraw(); } int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_pbt = 1; return; } guard_lock lock(&mutex_serial, "25"); selrig->set_pbt_outer(progStatus.pbt_outer); selrig->get_pbt_outer(); if (progStatus.pbt_lock) { selrig->set_pbt_inner(progStatus.pbt_inner); selrig->get_pbt_inner(); } } void setCLRPBT() { if (selrig->name_ == rig_FLEX1500.name_) return; progStatus.pbt_inner = progStatus.pbt_outer = 0; sldrOUTER->value(0); sldrOUTER->redraw(); sldrINNER->value(0); sldrINNER->redraw(); guard_lock lock(&mutex_serial, "26"); selrig->set_pbt_outer(progStatus.pbt_outer); selrig->set_pbt_inner(progStatus.pbt_inner); } //---------------------------------------------------------------------- // these only apply to the IC7610 //---------------------------------------------------------------------- void digi_sel_on_off() { selrig->set_digi_sel(progStatus.digi_sel_on_off); } void set_ic7610_digi_sel_on_off(void *) { ic7610digi_sel_on_off->value(progStatus.digi_sel_on_off); } void digi_sel_val() { selrig->set_digi_val(progStatus.digi_sel_val); } void set_ic7610_digi_sel_val(void *) { ic7610_digi_sel_val->value(progStatus.digi_sel_val); } void dual_watch() { selrig->set_dual_watch(progStatus.dual_watch); } void set_ic7610_dual_watch(void *) { } void index_att() { selrig->set_index_att(progStatus.index_ic7610att); } //void set_ic7610_index_att(void *) //{ // ic7610att->index(progStatus.index_ic7610att); //} //---------------------------------------------------------------------- void cbEventLog() { debug::show(); } void setVolume() // UI call { trace(1, "setVolume()"); int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; int set; if (spnrVOLUME) set = spnrVOLUME->value(); else set = sldrVOLUME->value(); progStatus.volume = set; if (btnVol->value() == 0) return; guard_lock serial_lock(&mutex_serial, "27"); selrig->set_volume_control(progStatus.volume); } void setVolumeControl(void* d) // called by xml_server { trace(1, "setVolumeControl()"); if (sldrVOLUME) sldrVOLUME->value(progStatus.volume); if (spnrVOLUME) spnrVOLUME->value(progStatus.volume); } void cbMute() { guard_lock serial_lock(&mutex_serial, "28"); trace(1, "cbMute()"); int set = 0, get, cnt = 0; if (btnVol->value() == 0) { if (spnrVOLUME) spnrVOLUME->deactivate(); if (sldrVOLUME) sldrVOLUME->deactivate(); } else { if (spnrVOLUME) { spnrVOLUME->activate(); set = spnrVOLUME->value(); } if (sldrVOLUME) { sldrVOLUME->activate(); set = sldrVOLUME->value(); } } selrig->set_volume_control(set); MilliSleep(50); get = selrig->get_volume_control(); while (get != set && cnt++ < 10) { MilliSleep(progStatus.serial_post_write_delay); get = selrig->get_volume_control(); Fl::awake(); } progStatus.volume = set; } void setMicGain() { int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_mic = 1; return; } std::stringstream str; str << "setMicGain(), ev=" << ev << ", inhibit_mic=" << inhibit_mic; trace(1, str.str().c_str()); int set = 0; if (sldrMICGAIN) set = sldrMICGAIN->value(); if (spnrMICGAIN) set = spnrMICGAIN->value(); progStatus.mic_gain = set; guard_lock lock(&mutex_serial, "29"); selrig->set_mic_gain(set); } void setMicGainControl(void* d) { trace(1, "setMicGainControl()"); if (sldrMICGAIN) sldrMICGAIN->value(progStatus.mic_gain); if (spnrMICGAIN) spnrMICGAIN->value(progStatus.mic_gain); } static int img = -1; void set_power_controlImage(double pwr) { if ((progStatus.pwr_scale == 8 && pwr <= 5.0) || (progStatus.pwr_scale == 0)) { if (img != 1) { img = 1; scalePower->image(image_p5); sldrFwdPwr->maximum(5.0); sldrFwdPwr->minimum(0.0); scalePower->redraw(); mtr_PWR->image(image_p5); mtr_PWR->redraw(); sigbar_PWR->maximum(5.0); sigbar_PWR->minimum(0.0); sigbar_PWR->redraw(); } } else if ((progStatus.pwr_scale == 8 && pwr <= 10.0) || (progStatus.pwr_scale == 1)) { if (img != 2) { img = 2; scalePower->image(image_p10); sldrFwdPwr->maximum(10.0); sldrFwdPwr->minimum(0.0); scalePower->redraw(); mtr_PWR->image(image_p10); mtr_PWR->redraw(); sigbar_PWR->maximum(10.0); sigbar_PWR->minimum(0.0); sigbar_PWR->redraw(); } } else if ((progStatus.pwr_scale == 8 && pwr <= 15.0) || (progStatus.pwr_scale == 2)) { if (img != 3) { img = 3; scalePower->image(image_p15); sldrFwdPwr->maximum(16.666); sldrFwdPwr->minimum(0.0); scalePower->redraw(); mtr_PWR->image(image_p15); mtr_PWR->redraw(); sigbar_PWR->maximum(16.666); sigbar_PWR->minimum(0.0); sigbar_PWR->redraw(); } } else if ((progStatus.pwr_scale == 8 && pwr <= 20.0) || (progStatus.pwr_scale == 3)) { if (img != 4) { img = 4; scalePower->image(image_p20); sldrFwdPwr->maximum(20.0); sldrFwdPwr->minimum(0.0); scalePower->redraw(); mtr_PWR->image(image_p20); mtr_PWR->redraw(); sigbar_PWR->maximum(20.0); sigbar_PWR->minimum(0.0); sigbar_PWR->redraw(); } } else if ((progStatus.pwr_scale == 8 && pwr <= 25.0) || (progStatus.pwr_scale == 4)) { if (img != 5) { img = 5; scalePower->image(image_p25); sldrFwdPwr->maximum(25.0); sldrFwdPwr->minimum(0.0); scalePower->redraw(); mtr_PWR->image(image_p25); mtr_PWR->redraw(); sigbar_PWR->maximum(25.0); sigbar_PWR->minimum(0.0); sigbar_PWR->redraw(); } } else if ((progStatus.pwr_scale == 8 && pwr <= 50.0) || (progStatus.pwr_scale == 5)) { if (img != 6) { img = 6; scalePower->image(image_p50); sldrFwdPwr->maximum(50.0); sldrFwdPwr->minimum(0.0); scalePower->redraw(); mtr_PWR->image(image_p50); mtr_PWR->redraw(); sigbar_PWR->maximum(50.0); sigbar_PWR->minimum(0.0); sigbar_PWR->redraw(); } } else if ((progStatus.pwr_scale == 8 && pwr <= 100.0) || (progStatus.pwr_scale == 6)) { if (img != 6) { img = 6; scalePower->image(image_p100); sldrFwdPwr->maximum(100.0); sldrFwdPwr->minimum(0.0); scalePower->redraw(); mtr_PWR->image(image_p100); mtr_PWR->redraw(); sigbar_PWR->maximum(100.0); sigbar_PWR->minimum(0.0); sigbar_PWR->redraw(); } } else if ((progStatus.pwr_scale == 8 && pwr > 100.0) || (progStatus.pwr_scale == 7)) { if (img != 8) { img = 8; scalePower->image(image_p200); sldrFwdPwr->maximum(200.0); sldrFwdPwr->minimum(0.0); scalePower->redraw(); mtr_PWR->image(image_p200); mtr_PWR->redraw(); sigbar_PWR->maximum(200.0); sigbar_PWR->minimum(0.0); sigbar_PWR->redraw(); } } return; } void set_init_power_control(); void execute_setPower() { double set = 0; if (spnrPOWER) set = progStatus.power_level = spnrPOWER->value(); if (sldrPOWER) set = progStatus.power_level = sldrPOWER->value(); double min, max, step; selrig->get_pc_min_max_step(min, max, step); if (xcvr_name == rig_K2.name_) { if (spnrPOWER) spnrPOWER->minimum(min); if (spnrPOWER) spnrPOWER->maximum(max); if (spnrPOWER) spnrPOWER->step(step); if (spnrPOWER) spnrPOWER->value(progStatus.power_level); if (spnrPOWER) spnrPOWER->redraw(); if (sldrPOWER) sldrPOWER->minimum(min); if (sldrPOWER) sldrPOWER->maximum(max); if (sldrPOWER) sldrPOWER->step(step); if (sldrPOWER) sldrPOWER->value(progStatus.power_level); if (sldrPOWER) sldrPOWER->redraw(); } if (progStatus.enable_power_limit && (set > progStatus.power_limit * max / 100)) { set = progStatus.power_limit * max / 100; if (spnrPOWER) spnrPOWER->value(set); if (sldrPOWER) sldrPOWER->value(set); } guard_lock lock(&mutex_serial, "30"); selrig->set_power_control(set); set_init_power_control(); } void setPower() { int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_power = 1; return; } std::stringstream str; str << "setPower(), ev=" << ev << ", inhibit_power=" << inhibit_power; trace(1, str.str().c_str()); execute_setPower(); } void cbTune() { guard_lock serial_lock(&mutex_serial, "31"); trace(1, "cbTune()"); selrig->tune_rig(2); } void cb_tune_on_off() { guard_lock serial_lock(&mutex_serial, "32"); trace(1, "cb_tune_on_off()"); selrig->tune_rig(btn_tune_on_off->value()); } int chkptt() { if (progStatus.serial_catptt) { return selrig->get_PTT(); } else if (progStatus.serial_dtrptt) { return RigSerial->getPTT(); } else if (progStatus.serial_rtsptt) { return RigSerial->getPTT(); } else if (SepSerial->IsOpen() && progStatus.sep_dtrptt) { return SepSerial->getPTT(); } else if (SepSerial->IsOpen() && progStatus.sep_rtsptt) { return SepSerial->getPTT(); } else if (progStatus.gpio_ptt) { return get_gpio(); } else if (progStatus.cmedia_ptt) { return get_cmedia(); } return 0; } void doPTT(int on) { guard_lock serlck(&mutex_serial, "33"); // int chk = chkptt(); // if (chk == on) return; PTT = on; rigPTT(on); btnPTT->value(on); MilliSleep(progStatus.serial_post_write_delay); for (int n = 0; n < 100; n++) { if (on == chkptt()) break; MilliSleep(progStatus.serial_post_write_delay); Fl::awake(); } return; } void setSQUELCH() { trace(1, "setSQUELCH()"); int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_squelch = 1; return; } int set = 0; if (sldrSQUELCH) set = sldrSQUELCH->value(); if (spnrSQUELCH) set = spnrSQUELCH->value(); progStatus.squelch = set; guard_lock lock(&mutex_serial, "34"); selrig->set_squelch(set); } int agcwas = 0; void redrawAGC() { const char *lbl = selrig->agc_label(); int val = progStatus.agc_level; if (!selrig->has_rf_control) { sldrSQUELCH->label(""); sldrSQUELCH->redraw_label(); } btnAGC->label(lbl); btnAGC->redraw_label(); if (xcvr_name == rig_FT450D.name_) { switch (val) { case 0 : btnAGC->selection_color(FL_BACKGROUND_COLOR); // off break; case 1 : btnAGC->selection_color(FL_RED); // fast break; case 2 : btnAGC->selection_color(FL_YELLOW); // slow break; case 3 : btnAGC->selection_color(FL_GREEN); // auto break; } btnAGC->redraw(); } if (xcvr_name == rig_FT991A.name_) { switch (val) { case 0 : btnAGC->selection_color(FL_BACKGROUND_COLOR); // off break; case 1 : btnAGC->selection_color(FL_RED); // fast break; case 2 : btnAGC->selection_color(FL_YELLOW); // medium break; case 3 : btnAGC->selection_color(FL_GREEN); // slow break; case 4 : btnAGC->selection_color(FL_WHITE); // auto } btnAGC->redraw(); } int rignbr = 0; if (xcvr_name == rig_IC7200.name_) rignbr = 1; if (xcvr_name == rig_IC7300.name_) rignbr = 2; if (rignbr) { if (val == 0) btnAGC->selection_color(FL_BACKGROUND_COLOR); // off if (val == 1) btnAGC->selection_color( rignbr == 1 ? FL_GREEN : FL_RED); // fast if (val == 2) btnAGC->selection_color( rignbr == 1 ? FL_RED : FL_YELLOW); // med / slow if (val == 3) btnAGC->selection_color(FL_GREEN); // slow btnAGC->value(val > 0); } else { if (val == 0) btnAGC->value(0); else btnAGC->value(1); } if (agcwas != val) { agcwas = val; } btnAGC->redraw(); } void setAGC(void *) { if (!selrig->has_agc_control) return; redrawAGC(); } void cbAGC() { if (!selrig->has_agc_control) return; guard_lock serial_lock(&mutex_serial, "35"); trace(1, "cbAGC()"); progStatus.agc_level = selrig->incr_agc(); redrawAGC(); } void setRFGAIN() { trace(1, "setRFGAIN()"); int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_rfgain = 1; return; } int set = 0; if (spnrRFGAIN) set = spnrRFGAIN->value(); if (sldrRFGAIN) set = sldrRFGAIN->value(); progStatus.rfgain = set; guard_lock lock(&mutex_serial, "36"); selrig->set_rf_gain(set); } void setRFGAINControl(void* d) { trace(1, "setRFGAINControl()"); if (sldrRFGAIN) sldrRFGAIN->value(progStatus.rfgain); if (spnrRFGAIN) spnrRFGAIN->value(progStatus.rfgain); } void updateIDD(void *) { sigbar_IDD->value(iddval); sigbar_IDD->redraw(); if (meter_image != IDD_IMAGE) return; sldrRcvSignal->hide(); sldrSWR->hide(); sldrALC->hide(); sldrIDD->show(); sldrIDD->value(iddval); sldrIDD->redraw(); } void updateALC(void *) { sigbar_ALC->value(alcval); sigbar_ALC->redraw(); if (meter_image != ALC_IMAGE) return; sldrRcvSignal->hide(); sldrSWR->hide(); sldrIDD->hide(); sldrALC->show(); sldrALC->value(alcval); sldrALC->redraw(); } void updateSWR(void *) { sigbar_SWR->value(swrval); sigbar_SWR->redraw(); if (meter_image != SWR_IMAGE) return; if (selrig->has_swr_control) { sldrRcvSignal->hide(); sldrALC->hide(); sldrIDD->hide(); sldrSWR->show(); } sldrSWR->value(swrval); sldrSWR->redraw(); } void updateFwdPwr(void *) { double power = pwrval; power /= selrig->power_scale(); if (selrig->has_power_control) set_power_controlImage(power); if (selrig->has_power_out) { sldrVoltage->hide(); scaleVoltage->hide(); sldrFwdPwr->show(); scalePower->show(); sldrFwdPwr->value(power); sldrFwdPwr->redraw(); sigbar_PWR->value(power); sigbar_PWR->redraw(); } } void updateSquelch(void *d) { if (sldrSQUELCH) sldrSQUELCH->value(reinterpret_cast(d)); if (sldrSQUELCH) sldrSQUELCH->redraw(); if (spnrSQUELCH) spnrSQUELCH->value(reinterpret_cast(d)); if (spnrSQUELCH) spnrSQUELCH->redraw(); } void updateRFgain(void *d) { if (spnrRFGAIN) { spnrRFGAIN->value(reinterpret_cast(d)); spnrRFGAIN->redraw(); } if (sldrRFGAIN) { sldrRFGAIN->value(reinterpret_cast(d)); sldrRFGAIN->redraw(); } } void zeroXmtMeters(void *d) { pwrval = 0; updateFwdPwr(); alcval = 0; updateALC(); swrval = 0; updateSWR(); iddval = 0; updateIDD(); sldrFwdPwr->clear(); sldrALC->clear(); sldrSWR->clear(); sigbar_IDD->value(0); sigbar_IDD->redraw(); sldrIDD->value(0); sldrIDD->redraw(); } void setFreqDispA(void *d) { FreqDispA->value(vfoA.freq); FreqDispA->redraw(); } void setFreqDispB(void *d) { FreqDispB->value(vfoB.freq); FreqDispB->redraw(); } void updateSmeter(void *) { if (!sldrRcvSignal->visible()) { sldrRcvSignal->show(); sldrFwdPwr->hide(); sldrALC->hide(); sldrSWR->hide(); } sldrRcvSignal->value(smtrval); sldrRcvSignal->redraw(); sigbar_SMETER->value(smtrval); sigbar_SMETER->redraw(); } void updateVmeter(void *) { if (!progStatus.display_voltmeter || !selrig->has_voltmeter) { sldrVoltage->hide(); scaleVoltage->hide(); if (selrig->has_power_out) { sldrFwdPwr->show(); scalePower->show(); } } else { if (PTT) { if (selrig->has_power_out) { sldrVoltage->hide(); scaleVoltage->hide(); sldrFwdPwr->show(); scalePower->show(); } } else { if (selrig->has_power_out) { sldrFwdPwr->hide(); scalePower->hide(); sldrVoltage->show(); scaleVoltage->show(); } } } if (vmtrval == -1) return; sldrVoltage->value(vmtrval); sldrVoltage->redraw(); sigbar_VOLTS->value(vmtrval); sigbar_VOLTS->redraw(); } void TRACED(saveFreqList) std::string atag; if (!numinlist) return; rotate_log(defFileName); std::ofstream oList(defFileName.c_str()); if (!oList) { fl_message ("Could not write to %s", defFileName.c_str()); return; } for (int i = 0; i < numinlist; i++) { atag = oplist[i].alpha_tag; oList << oplist[i].freq << " " << oplist[i].imode << " " << oplist[i].iBW << " \"" << atag.c_str() << "\"" << std::endl; } oList.close(); } void TRACED(setPTT, void *d) size_t set = reinterpret_cast(d); size_t chk = 0; guard_lock serlck(&mutex_serial, "37"); chk = chkptt(); rigPTT(set); MilliSleep(50); for (int n = 0; n < 100; n++) { chk = chkptt(); if (set == chk) break; MilliSleep(progStatus.serial_post_write_delay); } return; } void update_progress(int val) { progress->value(val); Fl::check(); } void TRACED(send_st_ex_command, std::string command) std::string cmd = ""; if (command.find("x") != std::string::npos) { // hex std::strings size_t p = 0; unsigned int val; while (( p = command.find("x", p)) != std::string::npos) { sscanf(&command[p+1], "%x", &val); cmd += (unsigned char) val; p += 3; } } else cmd = command; sendCommand(cmd, 0); } #include "timeops.h" void synchronize( void *) { time_t now; time(&now); struct tm *tm_time; static char sztm[20]; if (progStatus.sync_gmt) { tm_time = gmtime(&now); strftime(sztm, sizeof(sztm), "%H:%M:%S Z", tm_time); } else { tm_time = localtime(&now); strftime(sztm, sizeof(sztm), "%H:%M:%S", tm_time); } if (strncmp(&sztm[6], "00", 2) == 0) { guard_lock serial_lock(&mutex_serial, "38"); static char szdate[20]; strftime(szdate, sizeof(szdate), "%Y%m%d", tm_time); selrig->sync_clock(sztm); selrig->sync_date(szdate); txt_xcvr_synch->value("--SYNC'D--"); return; } txt_xcvr_synch->value(sztm); Fl::repeat_timeout(0.05, synchronize); } void TRACED(synchronize_now) Fl::remove_timeout(synchronize); Fl::add_timeout(0, synchronize); } void TRACED(start_commands) if (!progStatus.cmd_on_start1.empty()) send_st_ex_command(progStatus.cmd_on_start1); if (!progStatus.cmd_on_start2.empty()) send_st_ex_command(progStatus.cmd_on_start2); if (!progStatus.cmd_on_start3.empty()) send_st_ex_command(progStatus.cmd_on_start3); if (!progStatus.cmd_on_start4.empty()) send_st_ex_command(progStatus.cmd_on_start4); if (progStatus.sync_clock && selrig->can_synch_clock) Fl::add_timeout(0, synchronize); } void TRACED(exit_commands) if (!progStatus.cmd_on_exit1.empty()) send_st_ex_command(progStatus.cmd_on_exit1); if (!progStatus.cmd_on_exit2.empty()) send_st_ex_command(progStatus.cmd_on_exit2); if (!progStatus.cmd_on_exit3.empty()) send_st_ex_command(progStatus.cmd_on_exit3); if (!progStatus.cmd_on_exit4.empty()) send_st_ex_command(progStatus.cmd_on_exit4); } void TRACED(close_UI) { guard_lock serial_lock(&mutex_serial, "39"); trace(1, "close_UI()"); run_serial_thread = false; } pthread_join(*serial_thread, NULL); // xcvr auto off if (selrig->has_xcvr_auto_on_off && progStatus.xcvr_auto_off) selrig->set_xcvr_auto_off(); // close down the serial port RigSerial->ClosePort(); debug::stop(); Fl_Double_Window *widgets[] = { dlgDisplayConfig, dlgXcvrConfig, dlgMemoryDialog, meters_dialog, tracewindow, cwio_keyer_dialog, cwio_editor, cwio_configure, cwlog_viewer, FSK_keyer_dialog, FSK_editor, FSK_configure, meter_filters, meter_scale_dialog, tabs_dialog, mainwindow }; for (size_t n = 0; n < sizeof(widgets) / sizeof(*widgets); n++) { if (widgets[n]) widgets[n]->hide(); } } void TRACED(closeRig) trace(1, "closeRig()"); if (selrig->io_class == TCI) { restore_xcvr_vals(); selrig->shutdown(); } else if (xcvr_online) { restore_xcvr_vals(); selrig->shutdown(); } xcvr_online = false; } void TRACED(cbExit) main_group->hide(); main_group->redraw(); grpInitializing->size(mainwindow->w(), mainwindow->h() - grpInitializing->y()); grpInitializing->show(); grpInitializing->redraw(); progress->label("Closing"); progress->redraw_label(); progress->position(grpInitializing->w()/4, grpInitializing->y() + grpInitializing->h()/2); update_progress(0); progStatus.freq_A = vfoA.freq; progStatus.imode_A = vfoA.imode; progStatus.iBW_A = vfoA.iBW; progStatus.freq_B = vfoB.freq; progStatus.imode_B = vfoB.imode; progStatus.iBW_B = vfoB.iBW; if (selrig->has_FILTER) progStatus.filters = selrig->get_FILTERS(); progStatus.spkr_on = btnVol->value(); saveFreqList(); cwlog_close(); if (spnrPOWER) progStatus.power_level = spnrPOWER->value(); if (spnrVOLUME) progStatus.volume = spnrVOLUME->value(); if (spnrRFGAIN) progStatus.rfgain = spnrRFGAIN->value(); if (spnrMICGAIN) progStatus.mic_gain = spnrMICGAIN->value(); if (spnrNOTCH) progStatus.notch_val = spnrNOTCH->value(); if (spnrIFSHIFT) progStatus.shift_val = spnrIFSHIFT->value(); if (spnrNR) progStatus.noise_reduction_val = spnrNR->value(); if (sldrPOWER) progStatus.power_level = sldrPOWER->value(); if (sldrVOLUME) progStatus.volume = sldrVOLUME->value(); if (sldrRFGAIN) progStatus.rfgain = sldrRFGAIN->value(); if (sldrMICGAIN) progStatus.mic_gain = sldrMICGAIN->value(); if (sldrNOTCH) progStatus.notch_val = sldrNOTCH->value(); if (sldrIFSHIFT) progStatus.shift_val = sldrIFSHIFT->value(); if (sldrNR) progStatus.noise_reduction_val = sldrNR->value(); progStatus.notch = btnNotch->value(); progStatus.shift = btnIFsh->value(); progStatus.noise_reduction = btnNR->value(); progStatus.noise = btnNOISE->value(); progStatus.attenuator = btnAttenuator->value(); progStatus.preamp = btnPreamp->value(); progStatus.auto_notch = btnAutoNotch->value(); progStatus.bandwidths = selrig->get_BANDWIDTHS(); progStatus.saveLastState(); closeRig(); stop_cwio_thread(); exit_server(); close_UI(); } void cbALC_IDD_SWR() { switch (meter_image) { case ALC_IMAGE: if (selrig->has_idd_control) { btnALC_IDD_SWR->image(image_idd25); meter_image = IDD_IMAGE; sldrIDD->show(); { guard_lock serial_lock(&mutex_serial, "40"); trace(1, "cbALC_IDD_SWR() 2"); selrig->select_idd(); } break; } case IDD_IMAGE: if (selrig->has_swr_control) { btnALC_IDD_SWR->image(image_swr); meter_image = SWR_IMAGE; sldrSWR->show(); { guard_lock serial_lock(&mutex_serial, "41"); trace(1, "cbALC_IDD_SWR() 2"); selrig->select_swr(); } break; } case SWR_IMAGE: default: if (selrig->has_alc_control) { if (selrig->name_ == rig_PowerSDR.name_) { btnALC_IDD_SWR->image(image_alc40db); } else { btnALC_IDD_SWR->image(image_alc); } meter_image = ALC_IMAGE; sldrALC->show(); { guard_lock serial_lock(&mutex_serial, "42"); trace(1, "cbALC_IDD_SWR() 1"); selrig->select_alc(); } } } btnALC_IDD_SWR->redraw(); } // trim leading and trailing whitspace and double quote const std::string lt_trim(const std::string& pstring, const std::string& pWhitespace) { size_t beginStr, endStr, range; beginStr = pstring.find_first_not_of(pWhitespace); if (beginStr == std::string::npos) return ""; // no content endStr = pstring.find_last_not_of(pWhitespace); range = endStr - beginStr + 1; return pstring.substr(beginStr, range); } void editAlphaTag() { int indx; std::string atag; if (FreqSelect->value() < 1) { inAlphaTag->value(""); return; // no memory selected } indx = FreqSelect->value() - 1; atag = inAlphaTag->value(); // delete leading, trailing spaces atag = lt_trim(atag); memset(oplist[indx].alpha_tag, 0, ATAGSIZE); snprintf(oplist[indx].alpha_tag, ATAGSIZE, "%s", atag.c_str()); // update browser list updateSelect(); FreqSelect->value(indx + 1); inAlphaTag->value(oplist[indx].alpha_tag); } //---------------------------------------------------------------------- // button label and label state changes // Note that an additional level of service request is made to insure // that the main thread is actually changing the widget // noise reduction static std::string nr_label_; static bool nr_state_; void do_nr_label(void *) { btnNR->value(nr_state_ ? 1 : 0); btnNR->label(nr_label_.c_str()); btnNR->redraw_label(); } void nr_label(const char *l, int on) { nr_label_ = l; nr_state_ = on; progStatus.noise_reduction = on; Fl::awake(do_nr_label); } // noise blanker static std::string nb_label_; static bool nb_state_; void do_nb_label(void *) { btnNOISE->value(nb_state_ ? 1 : 0); btnNOISE->label(nb_label_.c_str()); btnNOISE->redraw_label(); } void nb_label(const char * l, int on) { nb_label_ = l; nb_state_ = on; progStatus.noise = on; Fl::awake(do_nb_label); } // break-in label static std::string bkin_label_; void do_bkin_label(void *) { btnBreakIn->label(bkin_label_.c_str()); btnBreakIn->redraw_label(); } void break_in_label(const char *l) { bkin_label_ = l; Fl::awake(do_bkin_label); } // autonotch label static std::string auto_notch_label_; static bool auto_notch_state_; void do_auto_notch_label(void *) { btnAutoNotch->value(auto_notch_state_ ? 1 : 0); btnAutoNotch->label(auto_notch_label_.c_str()); btnAutoNotch->redraw_label(); } void auto_notch_label(const char * l, int on) { auto_notch_label_ = l; auto_notch_state_ = on; progStatus.auto_notch = on; Fl::awake(do_auto_notch_label); } void cbAuxPort() { AuxSerial->setRTS(progStatus.aux_rts); AuxSerial->setDTR(progStatus.aux_dtr); } void cb_agc_level() { guard_lock serial_lock(&mutex_serial, "43"); trace(1, "cb_agc_level()"); selrig->set_agc_level(); } void cb_cw_wpm() { guard_lock serial_lock(&mutex_serial, "44"); trace(1, "cb_cw_wpm()"); selrig->set_cw_wpm(); } void cb_cw_vol() { guard_lock serial_lock(&mutex_serial, "45"); trace(1, "cb_cw_vol()"); selrig->set_cw_vol(); } void cb_cw_spot() { int ret; guard_lock serial_lock(&mutex_serial, "46"); trace(1, "cb_cw_spot()"); ret = selrig->set_cw_spot(); if (!ret) btnSpot->value(0); } void cb_cw_spot_tone() { guard_lock serial_lock(&mutex_serial, "47"); trace(1, "cb_cw_spot_tone()"); selrig->set_cw_spot_tone(); } void cb_vox_gain() { guard_lock serial_lock(&mutex_serial, "48"); trace(1, "cb_vox_gain()"); selrig->set_vox_gain(); } void cb_vox_anti() { guard_lock serial_lock(&mutex_serial, "49"); trace(1, "cb_vox_anti()"); selrig->set_vox_anti(); } void cb_vox_hang() { guard_lock serial_lock(&mutex_serial, "50"); trace(1, "cb_vox_hang()"); selrig->set_vox_hang(); } void cb_vox_onoff() { guard_lock serial_lock(&mutex_serial, "51"); trace(1, "cb_vox_onoff()"); selrig->set_vox_onoff(); } void cb_vox_on_dataport() { guard_lock serial_lock(&mutex_serial, "52"); trace(1, "cb_dataport()"); selrig->set_vox_on_dataport(); } void cb_compression() { guard_lock serial_lock(&mutex_serial, "53"); trace(1, "cb_compression"); selrig->set_compression(progStatus.compON, progStatus.compression); } void cb_auto_notch() { progStatus.auto_notch = btnAutoNotch->value(); guard_lock serial_lock(&mutex_serial, "54"); trace(1, "cb_autonotch()"); selrig->set_auto_notch(progStatus.auto_notch); } void cb_vfo_adj() { if (xcvr_name == rig_TT550.name_) progStatus.vfo_adj = spnr_tt550_vfo_adj->value(); else progStatus.vfo_adj = spnr_vfo_adj->value(); guard_lock serial_lock(&mutex_serial, "55"); trace(1, "cb_vfo_adj()"); selrig->setVfoAdj(progStatus.vfo_adj); } void cb_line_out() { } void cb_bpf_center() { guard_lock serial_lock(&mutex_serial, "56"); trace(1, "cb_bpf_center()"); selrig->set_if_shift(selrig->pbt); } void cb_special() { guard_lock serial_lock(&mutex_serial, "57"); trace(1, "cb_special()"); selrig->set_special(btnSpecial->value()); } void cbNoise() { guard_lock serial_lock(&mutex_serial, "58"); trace(1, "cbNoise()"); int btn, get, cnt = 0; btn = progStatus.noise = btnNOISE->value(); selrig->set_noise(btn); MilliSleep(50); get = selrig->get_noise(); while ((get != btn) && (cnt++ < 10)) { MilliSleep(progStatus.serial_post_write_delay); get = selrig->get_noise(); Fl::awake(); } } void cb_nb_level() { if (!selrig->has_nb_level) return; int set = 0; trace(1, "cb_nb_level()"); int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_nb_level = 1; return; } set = sldr_nb_level->value(); guard_lock lock(&mutex_serial, "59"); selrig->set_nb_level(set); } void cbNR() { if (!selrig->has_noise_reduction_control) return; guard_lock serial_lock(&mutex_serial, "60"); trace(1, "cbNR()"); int btn = 0, set = 0, get, cnt = 0; if (sldrNR) { set = sldrNR->value(); btn = btnNR->value(); } if (spnrNR) { set = spnrNR->value(); btn = btnNR->value(); } if (xcvr_name == rig_TS2000.name_) { if (btn != -1) { // pia if (selrig->noise_reduction_level() == 0) { selrig->set_noise_reduction(1); selrig->set_noise_reduction_val(selrig->nrval1()); progStatus.noise_reduction = 1; progStatus.noise_reduction_val = selrig->nrval1(); } else if (selrig->currmode() != RIG_TS2000::FM && selrig->noise_reduction_level() == 1) { selrig->set_noise_reduction(2); selrig->set_noise_reduction_val(selrig->nrval2()); progStatus.noise_reduction = 2; progStatus.noise_reduction_val = selrig->nrval2(); } else selrig->set_noise_reduction(0); } else { progStatus.noise_reduction_val = set; selrig->set_noise_reduction_val(set); } } else { // not TS2000 progStatus.noise_reduction = btn; selrig->set_noise_reduction(btn); MilliSleep(50); get = selrig->get_noise_reduction(); while ((get != btn) && (cnt++ < 10)) { MilliSleep(progStatus.serial_post_write_delay); get = selrig->get_noise_reduction(); Fl::awake(); } progStatus.noise_reduction_val = set; selrig->set_noise_reduction_val(set); MilliSleep(50); get = selrig->get_noise_reduction_val(); cnt = 0; while ((get != set) && (cnt++ < 10)) { MilliSleep(progStatus.serial_post_write_delay); get = selrig->get_noise_reduction_val(); Fl::awake(); } } } void setNR() { if (!selrig->has_noise_reduction_control) return; trace(1, "setNR()"); int btn = 0, set = 0; int ev = Fl::event(); if (ev == FL_LEAVE || ev == FL_ENTER) return; if (ev == FL_DRAG || ev == FL_PUSH) { inhibit_nr = 1; return; } if (xcvr_name == rig_TS2000.name_ || xcvr_name == rig_TS590S.name_ || xcvr_name == rig_TS590SG.name_ || xcvr_name == rig_TS890S.name_ || xcvr_name == rig_TS990.name_) { if (sldrNR) { set = sldrNR->value(); btn = -1; } if (spnrNR) { set = spnrNR->value(); btn = -1; } } else { if (sldrNR) { set = sldrNR->value(); btn = btnNR->value(); } if (spnrNR) { set = spnrNR->value(); btn = btnNR->value(); } } guard_lock lock(&mutex_serial, "61"); selrig->set_noise_reduction_val(set); selrig->set_noise_reduction(btn); } void cb_spot() { guard_lock serial_lock(&mutex_serial, "62"); trace(1, "cb_spot()"); selrig->set_cw_spot(); } void cb_enable_keyer() { guard_lock serial_lock(&mutex_serial, "63"); trace(1, "cb_enable_keyer()"); selrig->enable_keyer(); } void cb_set_break_in() { guard_lock serial_lock(&mutex_serial, "64"); trace(1, "cb_set_break_in()"); selrig->set_break_in(); } void cb_cw_weight() { guard_lock serial_lock(&mutex_serial, "65"); trace(1, "cb_cw_weight()"); selrig->set_cw_weight(); } void cb_cw_qsk() { guard_lock serial_lock(&mutex_serial, "66"); trace(1, "cb_cw_qsk()"); selrig->set_cw_qsk(); } void cb_cw_delay() { guard_lock serial_lock(&mutex_serial, "67"); trace(1, "cb_cw_delay()"); selrig->set_cw_delay(); } void set_band_label(int band) { switch (band) { case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; case 9: break; case 10: break; case 11: break; case 12: break; case 13: break; } } void set_band(int band) { switch (band) { case 1: progStatus.f160 = vfo->freq; progStatus.m160 = vfo->imode; progStatus.txT_160 = choice_FT8n_tTONE->value(); progStatus.rxT_160 = choice_FT8n_rTONE->value(); progStatus.offset_160 = FMoffset->index(); progStatus.oF_160 = FMoff_freq->value(); break; // 160 meters case 2: progStatus.f80 = vfo->freq; progStatus.m80 = vfo->imode; progStatus.txT_80 = choice_FT8n_tTONE->value(); progStatus.rxT_80 = choice_FT8n_rTONE->value(); progStatus.offset_80 = FMoffset->index(); progStatus.oF_80 = FMoff_freq->value(); break; // 80 meters case 3: progStatus.f40 = vfo->freq; progStatus.m40 = vfo->imode; progStatus.txT_40 = choice_FT8n_tTONE->value(); progStatus.rxT_40 = choice_FT8n_rTONE->value(); progStatus.offset_40 = FMoffset->index(); progStatus.oF_40 = FMoff_freq->value(); break; // 40 meters case 4: progStatus.f30 = vfo->freq; progStatus.m30 = vfo->imode; progStatus.txT_30 = choice_FT8n_tTONE->value(); progStatus.rxT_30 = choice_FT8n_rTONE->value(); progStatus.offset_30 = FMoffset->index(); progStatus.oF_30 = FMoff_freq->value(); break; // 30 meters case 5: progStatus.f20 = vfo->freq; progStatus.m20 = vfo->imode; progStatus.txT_20 = choice_FT8n_tTONE->value(); progStatus.rxT_20 = choice_FT8n_rTONE->value(); progStatus.offset_20 = FMoffset->index(); progStatus.oF_20 = FMoff_freq->value(); break; // 20 meters case 6: progStatus.f17 = vfo->freq; progStatus.m17 = vfo->imode; progStatus.txT_17 = choice_FT8n_tTONE->value(); progStatus.rxT_17 = choice_FT8n_rTONE->value(); progStatus.offset_17 = FMoffset->index(); progStatus.oF_17 = FMoff_freq->value(); break; // 17 meters case 7: progStatus.f15 = vfo->freq; progStatus.m15 = vfo->imode; progStatus.txT_15 = choice_FT8n_tTONE->value(); progStatus.rxT_15 = choice_FT8n_rTONE->value(); progStatus.offset_15 = FMoffset->index(); progStatus.oF_15 = FMoff_freq->value(); break; // 15 meters case 8: progStatus.f12 = vfo->freq; progStatus.m12 = vfo->imode; progStatus.txT_12 = choice_FT8n_tTONE->value(); progStatus.rxT_12 = choice_FT8n_rTONE->value(); progStatus.offset_12 = FMoffset->index(); progStatus.oF_12 = FMoff_freq->value(); break; // 12 meters case 9: progStatus.f10 = vfo->freq; progStatus.m10 = vfo->imode; progStatus.txT_10 = choice_FT8n_tTONE->value(); progStatus.rxT_10 = choice_FT8n_rTONE->value(); progStatus.offset_10 = FMoffset->index(); progStatus.oF_10 = FMoff_freq->value(); break; // 10 meters case 10:progStatus.f6 = vfo->freq; progStatus.m6 = vfo->imode; progStatus.txT_6 = choice_FT8n_tTONE->value(); progStatus.rxT_6 = choice_FT8n_rTONE->value(); progStatus.offset_6 = FMoffset->index(); progStatus.oF_6 = FMoff_freq->value(); break; // 6 meters case 11:progStatus.f2 = vfo->freq; progStatus.m2 = vfo->imode; progStatus.txT_2 = choice_FT8n_tTONE->value(); progStatus.rxT_2 = choice_FT8n_rTONE->value(); progStatus.offset_2 = FMoffset->index(); progStatus.oF_2 = FMoff_freq->value(); break; // 2 meters case 12:progStatus.f70 = vfo->freq; progStatus.m70 = vfo->imode; progStatus.txT_70 = choice_FT8n_tTONE->value(); progStatus.rxT_70 = choice_FT8n_rTONE->value(); progStatus.offset_70 = FMoffset->index(); progStatus.oF_70 = FMoff_freq->value(); break; // 70 cent' case 13:progStatus.f12G = vfo->freq; progStatus.m12G = vfo->imode; progStatus.txT_12G = choice_FT8n_tTONE->value(); progStatus.rxT_12G = choice_FT8n_rTONE->value(); progStatus.offset_12G = FMoffset->index(); progStatus.oF_12G = FMoff_freq->value(); break; // 1.2 GHz cent' } } void updateCTCSS(int band) { switch (band) { case 1: choice_FT8n_tTONE->value(progStatus.txT_160); choice_FT8n_rTONE->value(progStatus.txT_160); FMoffset->index(progStatus.offset_160); FMoff_freq->value(progStatus.oF_160 ); break; // 160 meters case 2: choice_FT8n_tTONE->value(progStatus.txT_80); choice_FT8n_rTONE->value(progStatus.txT_80); FMoffset->index(progStatus.offset_80); FMoff_freq->value(progStatus.oF_80 ); break; // 80 meters case 3: choice_FT8n_tTONE->value(progStatus.txT_40); choice_FT8n_rTONE->value(progStatus.txT_40); FMoffset->index(progStatus.offset_40); FMoff_freq->value(progStatus.oF_40 ); break; // 40 meters case 4: choice_FT8n_tTONE->value(progStatus.txT_30); choice_FT8n_rTONE->value(progStatus.txT_30); FMoffset->index(progStatus.offset_30); FMoff_freq->value(progStatus.oF_30 ); break; // 30 meters case 5: choice_FT8n_tTONE->value(progStatus.txT_20); choice_FT8n_rTONE->value(progStatus.txT_20); FMoffset->index(progStatus.offset_20); FMoff_freq->value(progStatus.oF_20 ); break; // 20 meters case 6: choice_FT8n_tTONE->value(progStatus.txT_17); choice_FT8n_rTONE->value(progStatus.txT_17); FMoffset->index(progStatus.offset_17); FMoff_freq->value(progStatus.oF_17 ); break; // 17 meters case 7: choice_FT8n_tTONE->value(progStatus.txT_15); choice_FT8n_rTONE->value(progStatus.txT_15); FMoffset->index(progStatus.offset_15); FMoff_freq->value(progStatus.oF_15 ); break; // 15 meters case 8: choice_FT8n_tTONE->value(progStatus.txT_12); choice_FT8n_rTONE->value(progStatus.txT_12); FMoffset->index(progStatus.offset_12); FMoff_freq->value(progStatus.oF_12 ); break; // 12 meters case 9: choice_FT8n_tTONE->value(progStatus.txT_10); choice_FT8n_rTONE->value(progStatus.txT_10); FMoffset->index(progStatus.offset_10); FMoff_freq->value(progStatus.oF_10 ); break; // 10 meters case 10:choice_FT8n_tTONE->value(progStatus.txT_6); choice_FT8n_rTONE->value(progStatus.txT_6); FMoffset->index(progStatus.offset_6); FMoff_freq->value(progStatus.oF_6 ); break; // 6 meters case 11:choice_FT8n_tTONE->value(progStatus.txT_2); choice_FT8n_rTONE->value(progStatus.txT_2); FMoffset->index(progStatus.offset_2); FMoff_freq->value(progStatus.oF_2 ); break; // 2 meters case 12:choice_FT8n_tTONE->value(progStatus.txT_70); choice_FT8n_rTONE->value(progStatus.txT_70); FMoffset->index(progStatus.offset_70); FMoff_freq->value(progStatus.oF_70 ); progStatus.m70 = vfo->imode; break; // 70 cent' } } void cbBandSelect(int band) { guard_lock gl_serial(&mutex_serial, "68"); if (xcvr_name == rig_FT857D.name_ || xcvr_name == rig_FT897D.name_ ) { if (Fl::event_button() == FL_LEFT_MOUSE) { selrig->set_band_selection(band); updateCTCSS(band); if (band > 8) { // 10, 6, 2, 70, 1.2G int tTONE = PL_tones[choice_FT8n_tTONE->value()]; int rTONE = PL_tones[choice_FT8n_rTONE->value()]; selrig->set_tones(tTONE, rTONE); selrig->set_offset(FMoffset->index(), FMoff_freq->value()); } } else if (Fl::event_button() == FL_RIGHT_MOUSE) set_band(band); return; } if (Fl::event_button() == FL_RIGHT_MOUSE) { selrig->rTONE = choice_rTONE->value(); selrig->tTONE = choice_tTONE->value(); selrig->set_band_selection(band); return; } selrig->get_band_selection(band); // get freqmdbw if (selrig->inuse == onA) { vfoA.freq = selrig->get_vfoA(); if (selrig->has_mode_control) vfoA.imode = selrig->get_modeA(); if (selrig->has_bandwidth_control) { selrig->adjust_bandwidth(vfoA.imode); vfoA.iBW = selrig->get_bwA(); } vfo = &vfoA; } else { vfoB.freq = selrig->get_vfoB(); if (selrig->has_mode_control) vfoB.imode = selrig->get_modeB(); if (selrig->has_bandwidth_control) { selrig->adjust_bandwidth(vfoB.imode); vfoB.iBW = selrig->get_bwB(); } vfo = &vfoB; } // local display freqmdbw if (selrig->has_mode_control) { setModeControl(NULL); } if (selrig->has_bandwidth_control) { set_bandwidth_control(); updateBandwidthControl(); } if (selrig->inuse == onA) { FreqDispA->value(vfo->freq); FreqDispA->redraw(); } else { FreqDispB->value(vfo->freq); FreqDispB->redraw(); } if (selrig->CIV && (selrig->name_ != rig_IC7200.name_)) { choice_tTONE->value(selrig->tTONE); choice_tTONE->redraw(); choice_rTONE->value(selrig->rTONE); choice_rTONE->redraw(); } } void enable_yaesu_bandselect(int btn_num, bool enable) { switch (btn_num) { case 1: case 9: break; case 10: // 6m if (enable) btn_yaesu_select_10->show(); else btn_yaesu_select_10->hide(); break; case 11: // GEN if (enable) btn_yaesu_select_11->show(); else btn_yaesu_select_11->hide(); break; case 13: if (enable) op_yaesu_select60->show(); else op_yaesu_select60->hide(); break; default: break; } } flrig-2.0.04/src/support/timeops.cxx0000664000175000017500000001055514504050363014340 00000000000000// ---------------------------------------------------------------------------- // timeops.cxx // // Copyright (C) 2017 // David Freese, W1HKJ // // This file is part of flrig. // // fldigi is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include #include #include #include "timeops.h" struct timespec operator+(const struct timespec &t0, const double &t) { struct timespec r; r.tv_sec = t0.tv_sec + static_cast(t); r.tv_nsec = t0.tv_nsec + static_cast((t - static_cast(t)) * 1e9); if (r.tv_nsec > 1000000000) { r.tv_nsec -= 1000000000; r.tv_sec++; } return r; } struct timespec operator-(const struct timespec &t0, const struct timespec &t1) { struct timespec r = t0; if (r.tv_nsec < t1.tv_nsec) { --r.tv_sec; r.tv_nsec += 1000000000L; } r.tv_sec -= t1.tv_sec; r.tv_nsec -= t1.tv_nsec; return r; } struct timespec& operator-=(struct timespec &t0, const struct timespec &t1) { if (t0.tv_nsec < t1.tv_nsec) { --t0.tv_sec; t0.tv_nsec += 1000000000L; } t0.tv_sec -= t1.tv_sec; t0.tv_nsec -= t1.tv_nsec; return t0; } bool operator>(const struct timespec &t0, const struct timespec &t1) { if (t0.tv_sec == t1.tv_sec) return t0.tv_nsec > t1.tv_nsec; else if (t0.tv_sec > t1.tv_sec) return true; else return false; } bool operator==(const struct timespec &t0, const struct timespec &t1) { return t0.tv_sec == t1.tv_sec && t0.tv_nsec == t1.tv_nsec; } struct timeval operator+(const struct timeval &t0, const double &t) { struct timeval r; r.tv_sec = t0.tv_sec + static_cast(t); r.tv_usec = t0.tv_usec + static_cast((t - static_cast(t)) * 1e9); if (r.tv_usec > 1000000) { r.tv_usec -= 1000000; r.tv_sec++; } return r; } struct timeval operator-(const struct timeval &t0, const struct timeval &t1) { struct timeval r = t0; if (r.tv_usec < t1.tv_usec) { --r.tv_sec; r.tv_usec += 1000000; } r.tv_sec -= t1.tv_sec; r.tv_usec -= t1.tv_usec; return r; } struct timeval& operator-=(struct timeval &t0, const struct timeval &t1) { if (t0.tv_usec < t1.tv_usec) { --t0.tv_sec; t0.tv_usec += 1000000L; } t0.tv_sec -= t1.tv_sec; t0.tv_usec -= t1.tv_usec; return t0; } bool operator>(const struct timeval &t0, const struct timeval &t1) { if (t0.tv_sec == t1.tv_sec) return t0.tv_usec > t1.tv_usec; else if (t0.tv_sec > t1.tv_sec) return true; else return false; } bool operator==(const struct timeval &t0, const struct timeval &t1) { return t0.tv_sec == t1.tv_sec && t0.tv_usec == t1.tv_usec; } #ifndef HAVE_GMTIME_R #include #include "threads.h" static pthread_mutex_t gmtime_r_mutex = PTHREAD_MUTEX_INITIALIZER; struct tm *gmtime_r(const time_t *_Time, struct tm *_Tm) { pthread_mutex_lock (&gmtime_r_mutex); struct tm *p = gmtime(_Time); if (p && _Tm) memcpy (_Tm, p, sizeof (struct tm)); pthread_mutex_unlock (&gmtime_r_mutex); return p; } static pthread_mutex_t gmtime_local_mutex = PTHREAD_MUTEX_INITIALIZER; struct tm *localtime_r(const time_t *_Time,struct tm *_Tm) { pthread_mutex_lock (&gmtime_local_mutex); struct tm *p = localtime(_Time); if (p && _Tm) memcpy (_Tm, p, sizeof (struct tm)); pthread_mutex_unlock (&gmtime_local_mutex); return p; } #endif flrig-2.0.04/src/support/util.cxx0000664000175000017500000001525614504050363013640 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" #include #include #include #include #include "timeops.h" #include "util.h" /* Return the smallest power of 2 not less than n */ uint32_t ceil2(uint32_t n) { --n; n |= n >> 1; n |= n >> 2; n |= n >> 4; n |= n >> 8; n |= n >> 16; return n + 1; } /* Return the largest power of 2 not greater than n */ uint32_t floor2(uint32_t n) { n |= n >> 1; n |= n >> 2; n |= n >> 4; n |= n >> 8; n |= n >> 16; return n - (n >> 1); } #include unsigned long ver2int(const char* version) { unsigned long v; char* p; v = (unsigned long)(strtod(version, &p) * 1e7 + 0.5); while (*p) v += *p++; return v; } /* #if !HAVE_STRCASESTR # include // from git 1.6.1.2 compat/strcasestr.c char *strcasestr(const char *haystack, const char *needle) { int nlen = strlen(needle); int hlen = strlen(haystack) - nlen + 1; int i; for (i = 0; i < hlen; i++) { int j; for (j = 0; j < nlen; j++) { unsigned char c1 = haystack[i+j]; unsigned char c2 = needle[j]; if (toupper(c1) != toupper(c2)) goto next; } return (char *) haystack + i; next: ; } return NULL; } #endif // !HAVE_STRCASESTR */ #if !HAVE_STRLCPY // from git 1.6.1.2 compat/strcasestr.c size_t strlcpy(char *dest, const char *src, size_t size) { size_t ret = strlen(src); if (size) { size_t len = (ret >= size) ? size - 1 : ret; memcpy(dest, src, len); dest[len] = '\0'; } return ret; } #endif // !HAVE_STRLCPY #ifdef __WIN32__ int set_cloexec(int fd, unsigned char v) { return 0; } #else # include # include int set_cloexec(int fd, unsigned char v) { int f = fcntl(fd, F_GETFD); return f == -1 ? f : fcntl(fd, F_SETFD, (v ? f | FD_CLOEXEC : f & ~FD_CLOEXEC)); } #endif // __WIN32__ int set_nonblock(int fd, unsigned char v) { #ifndef __WIN32__ int f = fcntl(fd, F_GETFL); return f == -1 ? f : fcntl(fd, F_SETFL, (v ? f | O_NONBLOCK : f & ~O_NONBLOCK)); #else // __WIN32__ u_long v_ = (u_long)v; errno = 0; if (ioctlsocket(fd, FIONBIO, &v_) == SOCKET_ERROR) { errno = WSAGetLastError(); return -1; } else return 0; #endif // __WIN32__ } #ifndef __WIN32__ # include # include # include # include #endif int set_nodelay(int fd, unsigned char v) { int val = v; return setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&val, sizeof(val)); } #ifdef __WIN32__ # include int get_bufsize(int fd, int dir, int* len) { int optlen = sizeof(*len); #else int get_bufsize(int fd, int dir, int* len) { socklen_t optlen = sizeof(*len); #endif return getsockopt(fd, SOL_SOCKET, (dir == 0 ? SO_RCVBUF : SO_SNDBUF), (char*)len, &optlen); } int set_bufsize(int fd, int dir, int len) { return setsockopt(fd, SOL_SOCKET, (dir == 0 ? SO_RCVBUF : SO_SNDBUF), (const char*)&len, sizeof(len)); } #ifndef __WIN32__ #include #include #ifndef NSIG # define NSIG 64 #endif static size_t nsig = 0; static struct sigaction* sigact = 0; static pthread_mutex_t sigmutex = PTHREAD_MUTEX_INITIALIZER; #endif void save_signals(void) { #ifndef __WIN32__ pthread_mutex_lock(&sigmutex); if (!sigact) sigact = new struct sigaction[NSIG]; for (nsig = 1; nsig <= NSIG; nsig++) if (sigaction(nsig, NULL, &sigact[nsig-1]) == -1) break; pthread_mutex_unlock(&sigmutex); #endif } void restore_signals(void) { #ifndef __WIN32__ pthread_mutex_lock(&sigmutex); for (size_t i = 1; i <= nsig; i++) sigaction(i, &sigact[i-1], NULL); delete [] sigact; sigact = 0; nsig = 0; pthread_mutex_unlock(&sigmutex); #endif } uint32_t simple_hash_data(const unsigned char* buf, size_t len, uint32_t code) { for (size_t i = 0; i < len; i++) code = ((code << 4) | (code >> (32 - 4))) ^ (uint32_t)buf[i]; return code; } uint32_t simple_hash_str(const unsigned char* str, uint32_t code) { while (*str) code = ((code << 4) | (code >> (32 - 4))) ^ (uint32_t)*str++; return code; } #include #include static const char hexsym[] = "0123456789ABCDEF"; static std::vector* hexbuf; const char* str2hex(const unsigned char* str, size_t len) { if (unlikely(len == 0)) return ""; if (unlikely(!hexbuf)) { hexbuf = new std::vector; hexbuf->reserve(192); } if (unlikely(hexbuf->size() < len * 3)) hexbuf->resize(len * 3); char* p = &(*hexbuf)[0]; size_t i; for (i = 0; i < len; i++) { *p++ = hexsym[str[i] >> 4]; *p++ = hexsym[str[i] & 0xF]; *p++ = ' '; } *(p - 1) = '\0'; return &(*hexbuf)[0]; } const char* str2hex(const char* str, size_t len) { return str2hex((const unsigned char*)str, len ? len : strlen(str)); } static std::vector* binbuf; const char* uint2bin(unsigned u, size_t len) { if (unlikely(len == 0)) len = sizeof(u) * CHAR_BIT; if (unlikely(!binbuf)) { binbuf = new std::vector; binbuf->reserve(sizeof(u) * CHAR_BIT); } if (unlikely(binbuf->size() < len + 1)) binbuf->resize(len + 1); for (size_t i = 0; i < len; i++) { (*binbuf)[len - i - 1] = '0' + (u & 1); u >>= 1; } (*binbuf)[len] = '\0'; return &(*binbuf)[0]; } void MilliSleep(long msecs) { struct timespec tv; tv.tv_sec = msecs / 1000; tv.tv_nsec = (msecs - tv.tv_sec * 1000) * 1000000L; nanosleep(&tv, NULL); } // return current tick time in seconds double fsk_now() { static struct timeval t1; gettimeofday(&t1, NULL); return t1.tv_sec + t1.tv_usec / 1e6; } // sub millisecond accurate sleep function // sleep_time in seconds int accu_sleep (double sleep_time) { struct timespec tv; double end_at = fsk_now() + sleep_time; double delay = sleep_time - 0.005; tv.tv_sec = (time_t) delay; tv.tv_nsec = (long) ((delay - tv.tv_sec) * 1e+9); int rval = 0; while (1) { rval = nanosleep (&tv, &tv); if (rval == 0) break; else if (errno == EINTR) continue; else return rval; } while (fsk_now() < end_at); return 0; } flrig-2.0.04/src/support/debug.cxx0000664000175000017500000001310014504050363013733 00000000000000// ---------------------------------------------------------------------------- // debug.cxx // // Copyright (C) 2014 // Stelios Bounanos, M0GLD // David Freese, W1HKJ // // This file is part of fldigi. // // fldigi is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "debug.h" #include "icons.h" #include "gettext.h" #include "rig.h" #include "tod_clock.h" #include "threads.h" #include "support.h" #include "trace.h" #define MAX_LINES 65536 pthread_mutex_t debug_mutex = PTHREAD_MUTEX_INITIALIZER; static FILE* wfile; static FILE* rfile; static int rfd; static bool tty; static Fl_Double_Window* window = (Fl_Double_Window *)0; static Fl_Browser* btext = (Fl_Browser *)0; static std::string buffer; debug* debug::inst = 0; debug::level_e debug::level = debug::ERROR_LEVEL; //debug::level_e debug::level = debug::INFO_LEVEL; uint32_t debug::mask = ~0u; const char* prefix[] = { _("Quiet"), _("Error"), _("Warning"), _("Info"), _("Debug") }; static void slider_cb(Fl_Widget* w, void*); static void clear_cb(Fl_Widget *w, void*); void debug::start(const char* filename) { if (debug::inst) return; inst = new debug(filename); window = new Fl_Double_Window(600, 256, _("Event log")); int pad = 2; Fl_Slider* slider = new Fl_Slider(pad, pad, 128, 20, prefix[level]); slider->tooltip(_("Change log level")); slider->align(FL_ALIGN_RIGHT); slider->type(FL_HOR_NICE_SLIDER); slider->range(0.0, LOG_NLEVELS - 1); slider->step(1.0); slider->value(level); slider->callback(slider_cb); Fl_Button* clearbtn = new Fl_Button(window->w() - 60, pad, 60, 20, "clear"); clearbtn->callback(clear_cb); btext = new Fl_Browser(pad, slider->h()+pad, window->w()-2*pad, window->h()-slider->h()-2*pad, 0); window->resizable(btext); buffer.clear(); window->end(); } void debug::stop(void) { guard_lock dlock(&debug_mutex); delete inst; inst = 0; btext = 0; if (window) { delete window; window = 0; } } static char fmt[1024]; static char sztemp[8096]; static std::string estr = ""; void debug::log(level_e level, const char* func, const char* srcf, int line, const char* format, ...) { if (!inst) return; if (level > debug::level) return; snprintf(fmt, sizeof(fmt), "%c: %s: %s\n", *prefix[level], func, format); va_list args; va_start(args, format); vsnprintf(sztemp, sizeof(sztemp), fmt, args); // guard_lock dlock(&debug_mutex); estr.append(sztemp); if (progStatus.debugtrace) trace(1, sztemp); fprintf(wfile, "[%s] %s", ztime(), sztemp); va_end(args); fflush(wfile); Fl::awake(sync_text, 0); } void debug::slog(level_e level, const char* func, const char* srcf, int line, const char* format, ...) { if (!inst) return; if (level > debug::level) return; snprintf(fmt, sizeof(fmt), "%c:%s\n", *prefix[level], format); va_list args; va_start(args, format); vsnprintf(sztemp, sizeof(sztemp), fmt, args); // guard_lock dlock(&debug_mutex); estr.append(sztemp); if (progStatus.debugtrace) trace(1, sztemp); fprintf(wfile, "[%s] %s", ztime(), sztemp); va_end(args); fflush(wfile); Fl::awake(sync_text, 0); } void debug::elog(const char* func, const char* srcf, int line, const char* text) { log(ERROR_LEVEL, func, srcf, line, "%s: %s", text, strerror(errno)); } void debug::show(void) { window->show(); } void debug::sync_text(void* arg) { if (!window) return; if (!window->visible()) return; guard_lock dlock(&debug_mutex); if (inst == 0 || btext == 0) return; size_t p0 = 0, p1 = estr.find('\n'); std::string insrt; while (p1 != std::string::npos) { insrt = estr.substr(p0, p1-p0); btext->insert(1, insrt.c_str()); buffer.append(insrt.append("\n")); p0 = p1 + 1; p1 = estr.find('\n', p0); } estr = ""; } debug::debug(const char* filename) { if ((wfile = fopen(filename, "w")) == NULL) throw strerror(errno); setvbuf(wfile, (char*)NULL, _IOLBF, 0); set_cloexec(fileno(wfile), 1); if ((rfile = fopen(filename, "r")) == NULL) throw strerror(errno); rfd = fileno(rfile); set_cloexec(rfd, 1); #ifndef __WIN32__ int f; if ((f = fcntl(rfd, F_GETFL)) == -1) throw strerror(errno); if (fcntl(rfd, F_SETFL, f | O_NONBLOCK) == -1) throw strerror(errno); #endif tty = isatty(fileno(stderr)); } debug::~debug() { if (window) { delete window; window = 0; } fclose(wfile); fclose(rfile); } static void slider_cb(Fl_Widget* w, void*) { debug::level = (debug::level_e)((Fl_Slider*)w)->value(); w->label(prefix[debug::level]); w->parent()->redraw(); } static void clear_cb(Fl_Widget* w, void*) { if (!btext) return; btext->clear(); buffer.clear(); } flrig-2.0.04/src/support/socket.cxx0000664000175000017500000004473014504050363014152 00000000000000// ---------------------------------------------------------------------------- // socket.cxx // // Copyright (C) 2008-2009 // Stelios Bounanos, M0GLD // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include #ifndef __MINGW32__ # include # include # include # include # include # include #else # include "compat.h" #endif #include #include #include #include #include #include #include #include #include #include "debug.h" #include "socket.h" #if HAVE_GETADDRINFO && !defined(AI_NUMERICSERV) # define AI_NUMERICSERV 0 #endif // // utility functions // #if HAVE_GETADDRINFO static void copy_addrinfo(struct addrinfo** info, const struct addrinfo* src) { struct addrinfo* p = *info; for (const struct addrinfo* rp = src; rp; rp = rp->ai_next) { if (p) { p->ai_next = new struct addrinfo; p = p->ai_next; } else { p = new struct addrinfo; if (!*info) *info = p; } p->ai_flags = rp->ai_flags; p->ai_family = rp->ai_family; p->ai_socktype = rp->ai_socktype; p->ai_protocol = rp->ai_protocol; p->ai_addrlen = rp->ai_addrlen; if (rp->ai_addr) { p->ai_addr = reinterpret_cast(new struct sockaddr_storage); memcpy(p->ai_addr, rp->ai_addr, rp->ai_addrlen); } else p->ai_addr = NULL; if (rp->ai_canonname) p->ai_canonname = strdup(rp->ai_canonname); else p->ai_canonname = NULL; p->ai_next = NULL; } } static void free_addrinfo(struct addrinfo* ai) { for (struct addrinfo *next, *p = ai; p; p = next) { next = p->ai_next; delete reinterpret_cast(p->ai_addr); free(p->ai_canonname); delete p; } } #else static void copy_charpp(char*** dst, const char* const* src) { if (src == NULL) { *dst = NULL; return; } size_t n = 0; for (const char* const* s = src; *s; s++) n++; *dst = new char*[n+1]; for (size_t i = 0; i < n; i++) (*dst)[i] = strdup(src[i]); (*dst)[n] = NULL; } static void copy_hostent(struct hostent* dst, const struct hostent* src) { if (src->h_name) dst->h_name = strdup(src->h_name); else dst->h_name = NULL; copy_charpp(&dst->h_aliases, src->h_aliases); dst->h_length = src->h_length; if (src->h_addr_list) { size_t n = 0; for (const char* const* p = src->h_addr_list; *p; p++) n++; dst->h_addr_list = new char*[n+1]; for (size_t i = 0; i < n; i++) { dst->h_addr_list[i] = new char[src->h_length]; memcpy(dst->h_addr_list[i], src->h_addr_list[i], src->h_length); } dst->h_addr_list[n] = NULL; } else dst->h_addr_list = NULL; } static void copy_servent(struct servent* dst, const struct servent* src) { if (src->s_name) dst->s_name = strdup(src->s_name); else dst->s_name = NULL; copy_charpp(&dst->s_aliases, src->s_aliases); dst->s_port = src->s_port; if (src->s_proto) dst->s_proto = strdup(src->s_proto); else dst->s_proto = NULL; } static void free_charpp(char** pp) { if (!pp) return; for (char** p = pp; *p; p++) free(*p); delete [] pp; } static void free_hostent(struct hostent* hp) { free(const_cast(hp->h_name)); free_charpp(hp->h_aliases); if (hp->h_addr_list) { for (char** p = hp->h_addr_list; *p; p++) delete [] *p; delete [] hp->h_addr_list; } } static void free_servent(struct servent* sp) { free(const_cast(sp->s_name)); free_charpp(sp->s_aliases); free(sp->s_proto); } #endif // HAVE_GETADDRINFO // // Address class // Address::Address(const char* host, int port, const char* proto_name) : node(host), copied(false) { #if HAVE_GETADDRINFO info = NULL; #else memset(&host_entry, 0, sizeof(host_entry)); memset(&service_entry, 0, sizeof(service_entry)); #endif if (node.empty() && port == 0) return; std::ostringstream s; s << port; service = s.str(); lookup(proto_name); } Address::Address(const char* host, const char* port_name, const char* proto_name) : node(host), service(port_name), copied(false) { #if HAVE_GETADDRINFO info = NULL; #else memset(&host_entry, 0, sizeof(host_entry)); memset(&service_entry, 0, sizeof(service_entry)); #endif lookup(proto_name); } Address::Address(const Address& addr) { #if HAVE_GETADDRINFO info = NULL; #else memset(&host_entry, 0, sizeof(host_entry)); memset(&service_entry, 0, sizeof(service_entry)); #endif *this = addr; } Address::~Address() { #if HAVE_GETADDRINFO if (info) { if (!copied) freeaddrinfo(info); else free_addrinfo(info); } #else free_hostent(&host_entry); free_servent(&service_entry); #endif } Address& Address::operator=(const Address& rhs) { if (this == &rhs) return *this; node = rhs.node; service = rhs.service; #if HAVE_GETADDRINFO if (info) { if (!copied) freeaddrinfo(info); else free_addrinfo(info); } copy_addrinfo(&info, rhs.info); #else free_hostent(&host_entry); free_servent(&service_entry); copy_hostent(&host_entry, &rhs.host_entry); copy_servent(&service_entry, &rhs.service_entry); addr.ai_protocol = rhs.addr.ai_protocol; addr.ai_socktype = rhs.addr.ai_socktype; #endif copied = true; return *this; } void Address::lookup(const char* proto_name) { int proto; if (!strcasecmp(proto_name, "tcp")) proto = IPPROTO_TCP; else if (!strcasecmp(proto_name, "udp")) proto = IPPROTO_UDP; else { throw SocketException("Bad protocol name"); } #if HAVE_GETADDRINFO struct addrinfo hints; memset(&hints, 0, sizeof(hints)); # ifdef AI_ADDRCONFIG hints.ai_flags = AI_PASSIVE; # endif hints.ai_family = AF_UNSPEC; hints.ai_socktype = (proto == IPPROTO_TCP ? SOCK_STREAM : SOCK_DGRAM); if (service.find_first_not_of("0123456789") == std::string::npos) hints.ai_flags |= AI_NUMERICSERV; int r; if ((r = getaddrinfo(node.empty() ? NULL : node.c_str(), service.c_str(), &hints, &info)) < 0) { std::string errstr = "getaddrinfo: "; errstr.append(node).append(" : ").append(service); throw SocketException(r, errstr.c_str()); } #else // use gethostbyname etc. memset(&host_entry, 0, sizeof(host_entry)); memset(&service_entry, 0, sizeof(service_entry)); if (node.empty()) node = "0.0.0.0"; struct hostent* hp; if ((hp = gethostbyname(node.c_str())) == NULL) { #ifdef __WIN32__ std::string errstr = "gethostbyname: "; errstr.append(node).append(" not found"); throw SocketException(0, errstr.c_str()); #else throw SocketException(hstrerror(HOST_NOT_FOUND)); #endif } copy_hostent(&host_entry, hp); int port; struct servent* sp; if ((sp = getservbyname(service.c_str(), NULL)) == NULL) { // if a service name std::string could not be looked up by name, it must be numeric if (service.find_first_not_of("0123456789") != std::string::npos) { throw SocketException("Unknown service name"); } port = htons(atoi(service.c_str())); sp = getservbyport(port, NULL); } if (!sp) service_entry.s_port = port; else copy_servent(&service_entry, sp); memset(&addr, 0, sizeof(addr)); addr.ai_protocol = proto; addr.ai_socktype = (proto == IPPROTO_TCP ? SOCK_STREAM : SOCK_DGRAM); #endif } /// /// Returns the number of addresses available for /// the node and service /// size_t Address::size(void) const { size_t n = 0; #if HAVE_GETADDRINFO if (!info) return 0; for (struct addrinfo* p = info; p; p = p->ai_next) n++; #else if (!host_entry.h_addr_list) return 0; for (char** p = host_entry.h_addr_list; *p; p++) n++; #endif return n; } /// /// Returns an address from the list of those available /// for the node and service /// const addr_info_t* Address::get(size_t n) const { #if HAVE_GETADDRINFO if (!info) return NULL; struct addrinfo* p = info; for (size_t i = 0; i < n; i++) p = p->ai_next; LOG_DEBUG("Found address %s", get_str(p).c_str()); return p; #else if (!host_entry.h_addr_list) return NULL; memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr = *(struct in_addr*)host_entry.h_addr_list[n]; saddr.sin_port = service_entry.s_port; addr.ai_family = saddr.sin_family; addr.ai_addrlen = sizeof(saddr); addr.ai_addr = (struct sockaddr*)&saddr; LOG_DEBUG("Found address %s", get_str(&addr).c_str()); return &addr; #endif } /// /// Returns the std::string representation of an address /// std::string Address::get_str(const addr_info_t* addr) { if (!addr) return ""; #if HAVE_GETADDRINFO char host[NI_MAXHOST], port[NI_MAXSERV]; memset(host, 0, sizeof(host)); if (getnameinfo(addr->ai_addr, sizeof(struct sockaddr_storage), host, sizeof(host), port, sizeof(port), NI_NUMERICHOST | NI_NUMERICSERV) == 0) return std::string("[").append(host).append("]:").append(port); else return ""; #else char* host, port[8]; host = inet_ntoa(((struct sockaddr_in*)addr->ai_addr)->sin_addr); snprintf(port, sizeof(port), "%u", htons(((struct sockaddr_in*)addr->ai_addr)->sin_port)); return std::string("[").append(host).append("]:").append(port); #endif } // // Socket class // /// Constructs a Socket object and associates the address addr with it. /// This address will be used by subsequent calls to the bind() or connect() /// methods /// /// @param addr An Address object /// Socket::Socket(const Address& addr) { buffer = new char[BUFSIZ]; memset(&timeout, 0, sizeof(timeout)); anum = 0; autoclose = true; open(addr); set_nonblocking(false); } /// Constructs a Socket object from a file descriptor /// /// @param fd A file descriptor /// Socket::Socket(int fd) : sockfd(fd) { buffer = new char[BUFSIZ]; anum = 0; memset(&timeout, 0, sizeof(timeout)); if (sockfd == -1) return; #ifndef __MINGW32__ int r = fcntl(sockfd, F_GETFL); if (r == -1) throw SocketException(errno, "fcntl"); nonblocking = r & O_NONBLOCK; #else set_nonblocking(false); #endif autoclose = true; } /// /// Constructs a Socket object by copying another instance /// Socket::Socket(const Socket& s) : sockfd(s.sockfd), address(s.address), anum(s.anum), nonblocking(s.nonblocking), autoclose(true) { buffer = new char[BUFSIZ]; ainfo = address.get(anum); memcpy(&timeout, &s.timeout, sizeof(timeout)); s.set_autoclose(false); } Socket::~Socket() { delete [] buffer; if (autoclose) close(); } Socket& Socket::operator=(const Socket& rhs) { if (this == &rhs) return *this; sockfd = rhs.sockfd; address = rhs.address; anum = rhs.anum; ainfo = address.get(anum); memcpy(&timeout, &rhs.timeout, sizeof(timeout)); nonblocking = rhs.nonblocking; autoclose = rhs.autoclose; rhs.set_autoclose(false); return *this; } /// /// Associates the Socket with an address /// /// This address will be used by subsequent calls to the bind() or connect /// methods. /// /// @params addr An address object /// void Socket::open(const Address& addr) { address = addr; size_t n = address.size(); for (anum = 0; anum < n; anum++) { ainfo = address.get(anum); LOG_DEBUG("Trying %s", address.get_str(ainfo).c_str()); if ((sockfd = socket(ainfo->ai_family, ainfo->ai_socktype, ainfo->ai_protocol)) != -1) break; } if (sockfd == -1) throw SocketException(errno, "socket"); set_close_on_exec(true); } /// /// Shuts down the socket /// void Socket::close(void) { ::close(sockfd); sockfd = -1; } /// /// Waits for the socket file descriptor to become ready for I/O /// /// @params dir Specifies the I/O direction. 0 is input, 1 is output. /// /// @return True if the file descriptor became ready within the timeout /// period, false otherwise. @see Socket::set_timeout bool Socket::wait(int dir) { fd_set fdset; FD_ZERO(&fdset); FD_SET((unsigned)sockfd, &fdset); struct timeval t = { timeout.tv_sec, timeout.tv_usec }; int r; if (dir == 0) r = select(sockfd + 1, &fdset, NULL, NULL, &t); else if (dir == 1) r = select(sockfd + 1, NULL, &fdset, NULL, &t); else throw SocketException(EINVAL, "Socket::wait"); if (r == -1) throw SocketException(errno, "select"); return r; } /// /// Binds the socket to the address associated with the object /// @see Socket::open /// void Socket::bind(void) { int r = 1; if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&r, sizeof(r)) == -1) perror("setsockopt SO_REUSEADDR"); if (::bind(sockfd, ainfo->ai_addr, ainfo->ai_addrlen) == -1) throw SocketException(errno, "bind"); } /// /// Calls listen(2) on the socket file desriptor /// /// The socket must already have been bound to an address via a call to the bind /// method. /// /// @params backlog The maximum number of pending connections (default SOMAXCONN) /// void Socket::listen(int backlog) { if (::listen(sockfd, backlog) == -1) throw SocketException(errno, "listen"); } /// /// Accepts a connection /// /// The socket must already have been bound to an address via a call to the bind /// method. /// /// @return A Socket instance for the accepted connection /// Socket Socket::accept(void) { listen(); // wait for fd to become readable if (nonblocking && (timeout.tv_sec > 0 || timeout.tv_usec > 0)) if (!wait(0)) throw SocketException(ETIMEDOUT, "select"); int r; if ((r = ::accept(sockfd, NULL, 0)) == -1) throw SocketException(errno, "accept"); set_close_on_exec(true, r); return Socket(r); } /// /// Accepts a single connection and then closes the listening socket /// @see Socket::accept /// /// @return A Socket instance for the accepted connection /// Socket Socket::accept1(void) { bind(); Socket s = accept(); close(); s.set_close_on_exec(true); return s; } /// /// Connects the socket to the address that is associated with the object /// void Socket::connect(void) { LOG_DEBUG("Connecting to %s", address.get_str(ainfo).c_str()); if (::connect(sockfd, ainfo->ai_addr, ainfo->ai_addrlen) == -1) throw SocketException(errno, "connect"); } /// /// Connects the socket to an address /// /// @param addr The address to connect to /// void Socket::connect(const Address& addr) { close(); open(addr); connect(); } /// /// Sends a buffer /// /// @param buf /// @param len /// /// @return The amount of data that was sent. This may be less than len /// if the socket is non-blocking. /// #include size_t Socket::send(const void* buf, size_t len) { // if we have a nonblocking socket and a nonzero timeout, // wait for fd to become writeable if (nonblocking && (timeout.tv_sec > 0 || timeout.tv_usec > 0)) if (!wait(1)) return 0; ssize_t r = ::send(sockfd, (const char*)buf, len, 0); if (r == 0) { shutdown(sockfd, SHUT_WR); } else if (r == -1) { if (errno != EAGAIN) throw SocketException(errno, "send"); r = 0; } return r; } /// /// Sends a std::string /// /// @param buf /// /// @return The amount of data that was sent. This may be less than len /// if the socket is non-blocking. /// size_t Socket::send(const std::string buf) //const std::string& buf) { return send(buf.data(), buf.length()); } /// /// Receives data into a buffer /// /// @arg buf /// @arg len The maximum number of bytes to write to buf. /// /// @return The amount of data that was received. This may be less than len /// if the socket is non-blocking. size_t Socket::recv(void* buf, size_t len) { // if we have a nonblocking socket and a nonzero timeout, // wait for fd to become writeable if (nonblocking && (timeout.tv_sec > 0 || timeout.tv_usec > 0)) if (!wait(0)) { return 0; } ssize_t r = ::recv(sockfd, (char*)buf, len, 0); if (r == 0) { shutdown(sockfd, SHUT_RD); } else if (r == -1) { if (errno != EAGAIN) throw SocketException(errno, "recv"); r = 0; } return r; } /// /// Receives all available data and appends it to a std::string. /// /// @arg buf /// /// @return The amount of data that was received. /// size_t Socket::recv(std::string& buf) { size_t n = 0; ssize_t r; while ((r = recv(buffer, BUFSIZ)) > 0) { buf.reserve(buf.length() + r); buf.append(buffer, r); n += r; } return n; } /// /// Retrieves the socket's receive or send buffer size /// /// @param dir Specifies the I/O direction. 0 is input, 1 is output. /// int Socket::get_bufsize(int dir) { int len; if (::get_bufsize(sockfd, dir, &len) == -1) throw SocketException(errno, "get_bufsize"); return len; } /// /// Sets the socket's receive or send buffer size /// /// @param dir Specifies the I/O direction. 0 is input, 1 is output. /// @param len Specifies the new buffer size /// void Socket::set_bufsize(int dir, int len) { if (::set_bufsize(sockfd, dir, len) == -1) throw SocketException(errno, "set_bufsize"); } /// /// Sets the socket's blocking mode /// /// @param v If true, the socket is set to non-blocking /// void Socket::set_nonblocking(bool v) { if (set_nonblock(sockfd, v) == -1) throw SocketException(errno, "set_nonblock"); nonblocking = v; } /// /// Enables the use of Nagle's algorithm for the socket /// /// @param v If true, Nagle's algorithm is disabled. /// void Socket::set_nodelay(bool v) { if (::set_nodelay(sockfd, v) == -1) throw SocketException(errno, "set_nodelay"); } /// /// Sets the timeout associated with non-blocking operations /// /// @param t /// void Socket::set_timeout(const struct timeval& t) { timeout.tv_sec = t.tv_sec; timeout.tv_usec = t.tv_usec; } void Socket::set_timeout(double t) { timeout.tv_sec = (time_t)floor(t); timeout.tv_usec = (size_t)((t - timeout.tv_sec) * 1e6); } /// /// Sets the socket's autoclose mode. /// /// If autoclose is disabled, the socket file descriptor will not be closed when /// the Socket object is destructed. /// /// @param v If true, the socket will be closed by the destructor /// void Socket::set_autoclose(bool v) const { autoclose = v; } /// /// Sets the socket's close-on-exec flag /// void Socket::set_close_on_exec(bool v, int fd) { if (fd == -1) fd = sockfd; if (set_cloexec(fd, v) == -1) throw SocketException(errno, "set_cloexec"); } /// /// Returns the Socket's file descriptor. /// /// The descriptor should only be used for reading and writing. /// /// @return the socket file descriptor /// int Socket::fd(void) { return sockfd; } flrig-2.0.04/src/support/read_rig.cxx0000664000175000017500000001270214504050363014430 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2011 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "support.h" void TRACED(enable_xcvr_ui) if (selrig->has_mode_control) btnRestoreMode->activate(); else btnRestoreMode->deactivate(); if (selrig->has_bandwidth_control) btnRestoreBandwidth->activate(); else btnRestoreBandwidth->deactivate(); if (selrig->has_preamp_control || selrig->has_attenuator_control) btnRestorePreAtt->show(); else btnRestorePreAtt->hide(); if (selrig->has_auto_notch) btnRestoreAutoNotch->show(); else btnRestoreAutoNotch->hide(); if (selrig->has_split) btnRestoreSplit->show(); else btnRestoreSplit->hide(); if (selrig->has_power_control) btnRestorePowerControl->show(); else btnRestorePowerControl->hide(); if (selrig->has_volume_control) btnRestoreVolume->show(); else btnRestoreVolume->hide(); if (selrig->has_ifshift_control) btnRestoreIFshift->show(); else btnRestoreIFshift->hide(); if (selrig->has_notch_control) btnRestoreNotch->show(); else btnRestoreNotch->hide(); if (selrig->has_noise_control) btnRestoreNoise->show(); else btnRestoreNoise->hide(); if (selrig->has_noise_reduction_control) btnRestoreNR->show(); else btnRestoreNR->hide(); if (selrig->has_micgain_control) btnRestoreMicGain->show(); else btnRestoreMicGain->hide(); if (selrig->has_sql_control) btnRestoreSquelch->show(); else btnRestoreSquelch->hide(); if (selrig->has_rf_control) btnRestoreRfGain->show(); else btnRestoreRfGain->hide(); if (selrig->has_compON) btnRestoreCompOnOff->show(); else btnRestoreCompOnOff->hide(); if (selrig->has_compression) btnRestoreCompLevel->show(); else btnRestoreCompLevel->hide(); } void TRACED(vfo_startup_data, XCVR_STATE &xcvrvfo) if (selrig->has_preamp_control) xcvrvfo.preamp = selrig->get_preamp(); if (selrig->has_attenuator_control) xcvrvfo.attenuator = selrig->get_attenuator(); if (selrig->has_auto_notch) xcvrvfo.auto_notch = selrig->get_auto_notch(); if (selrig->has_split) xcvrvfo.split = selrig->get_split(); update_progress(progress->value() + 4); if (selrig->has_power_control) xcvrvfo.power_control = selrig->get_power_control(); if (selrig->has_volume_control) xcvrvfo.volume_control = selrig->get_volume_control(); if (selrig->has_ifshift_control) selrig->get_if_shift(xcvrvfo.if_shift); if (selrig->has_notch_control) xcvrvfo.notch = selrig->get_notch(xcvrvfo.notch_val); update_progress(progress->value() + 4); if (selrig->has_noise_control) xcvrvfo.noise = selrig->get_noise(); if (selrig->has_noise_reduction_control) { xcvrvfo.nr = selrig->get_noise_reduction(); xcvrvfo.nr_val = selrig->get_noise_reduction_val(); } if (selrig->has_micgain_control) xcvrvfo.mic_gain = selrig->get_mic_gain(); if (selrig->has_sql_control) xcvrvfo.squelch = selrig->get_squelch(); if (selrig->has_rf_control) xcvrvfo.rf_gain = selrig->get_rf_gain(); if (selrig->has_compression) selrig->get_compression (xcvrvfo.compON, xcvrvfo.compression); update_progress(progress->value() + 4); } void TRACED(vfoA_startup_data) update_progress(progress->value() + 4); if (selrig->has_get_info) selrig->get_info(); xcvr_vfoA.freq = selrig->get_vfoA(); xcvr_vfoA.imode = selrig->get_modeA(); xcvr_vfoA.iBW = selrig->get_bwA(); xcvr_vfoA.filter = selrig->get_FILT(xcvr_vfoA.imode); update_progress(progress->value() + 10); vfo_startup_data(xcvr_vfoA); rig_trace(2, "Xcvr vfo A:\n", print(xcvr_vfoA)); } void TRACED(vfoB_startup_data) update_progress(progress->value() + 4); if (selrig->has_get_info) selrig->get_info(); xcvr_vfoB.freq = selrig->get_vfoB(); xcvr_vfoB.imode = selrig->get_modeB(); xcvr_vfoB.iBW = selrig->get_bwB(); xcvr_vfoB.filter = selrig->get_FILT(xcvr_vfoB.imode); update_progress(progress->value() + 4); vfo_startup_data(xcvr_vfoB); rig_trace(2, "Xcvr vfo B:\n", print(xcvr_vfoB)); } void TRACED(rig_startup_data) update_progress(0); enable_xcvr_ui(); // The FT-891 loses width WDH on A/B changes. It also starts // with VFOA active, so no selectA() before reading VFOA values. if (selrig->name_ == rig_FT891.name_) { vfoA_startup_data(); selrig->selectB(); // first select call vfoB_startup_data(); // Restore VFOA mode, then freq and bandwidth selrig->selectA(); // second select call yaesu891UpdateA(&xcvr_vfoA); } else { selrig->selectB(); // first select call to FT897D vfoB_startup_data(); selrig->selectA(); // second select call vfoA_startup_data(); } if (selrig->has_agc_control) { progStatus.agc_level = selrig->get_agc(); redrawAGC(); } if (selrig->has_FILTER) selrig->set_FILTERS(progStatus.filters); selrig->set_BANDWIDTHS(progStatus.bandwidths); } flrig-2.0.04/src/support/TT550_support.cxx0000664000175000017500000001451614504050363015236 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2011 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "icons.h" #include "support.h" #include "debug.h" #include "gettext.h" #include "rig_io.h" #include "dialogs.h" #include "rigbase.h" #include "ptt.h" #include "socket_io.h" #include "ui.h" #include "tod_clock.h" #include "rig.h" #include "rigs.h" #include "K3_ui.h" #include "KX3_ui.h" #include "rigpanel.h" #include "tod_clock.h" #include "trace.h" #include "cwio.h" #include "fsk.h" #include "fskioUI.h" #include "xml_server.h" #include "gpio_ptt.h" #include "cmedia.h" #include "tmate2.h" void init_TT550_tabs() { spnr_tt550_line_out->value(progStatus.tt550_line_out); cbo_tt550_agc_level->index(progStatus.tt550_agc_level); spnr_tt550_cw_wpm->value(progStatus.tt550_cw_wpm); spnr_tt550_cw_vol->value(progStatus.tt550_cw_vol); spnr_tt550_cw_spot->value(progStatus.tt550_cw_spot); spnr_tt550_cw_weight->value(progStatus.tt550_cw_weight); spnr_tt550_cw_qsk->value(progStatus.tt550_cw_qsk); btn_tt550_enable_keyer->value(progStatus.tt550_enable_keyer); btn_tt550_vox->value(progStatus.tt550_vox_onoff); spnr_tt550_vox_gain->value(progStatus.tt550_vox_gain); spnr_tt550_anti_vox->value(progStatus.tt550_vox_anti); spnr_tt550_vox_hang->value(progStatus.tt550_vox_hang); btn_tt550_CompON->value(progStatus.tt550_compON); spnr_tt550_compression->value(progStatus.tt550_compression); spnr_tt550_mon_vol->value(progStatus.tt550_mon_vol); btn_tt550_enable_xmtr->value(progStatus.tt550_enable_xmtr); btn_tt550_enable_tloop->value(progStatus.tt550_enable_tloop); btn_tt550_tuner_bypass->value(progStatus.tt550_tuner_bypass); btn_tt550_use_xmt_bw->value(progStatus.tt550_use_xmt_bw); sel_tt550_encoder_step->value(progStatus.tt550_encoder_step); spnr_tt550_encoder_sensitivity->value(progStatus.tt550_encoder_sensitivity); sel_tt550_F1_func->value(progStatus.tt550_F1_func); sel_tt550_F2_func->value(progStatus.tt550_F2_func); sel_tt550_F3_func->value(progStatus.tt550_F3_func); progStatus.use_rig_data = false; op_tt550_XmtBW->clear(); try { for (size_t i = 0; i < TT550_xmt_widths.size(); i++) { op_tt550_XmtBW->add(TT550_xmt_widths.at(i).c_str()); } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } op_tt550_XmtBW->activate(); op_tt550_XmtBW->index(progStatus.tt550_xmt_bw); poll_smeter->activate(); poll_smeter->value(progStatus.poll_smeter); poll_pout->activate(); poll_pout->value(progStatus.poll_pout); poll_swr->activate(); poll_swr->value(progStatus.poll_swr); poll_alc->activate(); poll_alc->value(progStatus.poll_alc); poll_frequency->deactivate(); poll_frequency->value(0); poll_mode->deactivate(); poll_mode->value(0); poll_bandwidth->deactivate(); poll_bandwidth->value(0); poll_volume->deactivate(); poll_volume->value(0); poll_notch->deactivate(); poll_notch->value(0); poll_auto_notch->deactivate(); poll_auto_notch->value(0); poll_ifshift->deactivate(); poll_ifshift->value(0); poll_power_control->deactivate(); poll_power_control->value(0); poll_pre_att->deactivate(); poll_pre_att->value(0); poll_squelch->deactivate(); poll_squelch->value(0); poll_micgain->deactivate(); poll_micgain->value(0); poll_rfgain->deactivate(); poll_rfgain->value(0); poll_split->deactivate(); poll_split->value(0); poll_nr->deactivate(); poll_nr->value(0); poll_noise->deactivate(); poll_noise->value(0); poll_all->deactivate(); poll_all->value(0); if (progStatus.tt550_at11_inline) { tt550_AT_inline->value(1); tt550_AT_inline->label("Inline"); tt550_AT_inline->redraw_label(); selrig->at11_autotune(); } else { tt550_AT_inline->value(0); tt550_AT_inline->label("Bypassed"); tt550_AT_inline->redraw_label(); selrig->at11_bypass(); } if (progStatus.tt550_at11_hiZ) { selrig->at11_hiZ(); tt550_AT_Z->value(1); } else{ selrig->at11_loZ(); tt550_AT_Z->value(0); } } void init_TT550() { selrig->selectA(); vfoB.freq = progStatus.freq_B; vfoB.imode = progStatus.imode_B; vfoB.iBW = progStatus.iBW_B; FreqDispB->value(vfoB.freq); selrig->set_vfoB(vfoB.freq); selrig->set_modeB(vfoB.imode); selrig->set_bwB(vfoB.iBW); vfoA.freq = progStatus.freq_A; vfoA.imode = progStatus.imode_A; vfoA.iBW = progStatus.iBW_A; FreqDispA->value( vfoA.freq ); selrig->set_vfoA(vfoA.freq); selrig->set_modeA(vfoA.imode); vfo = &vfoA; if (vfoA.iBW == -1) vfoA.iBW = selrig->def_bandwidth(vfoA.imode); selrig->set_bwA(vfoA.iBW); rigmodes_.clear(); opMODE->clear(); try { for (size_t i = 0; i < selrig->modes_.size(); i++) { rigmodes_.push_back(selrig->modes_.at(i).c_str()); opMODE->add(selrig->modes_.at(i).c_str()); } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } opMODE->activate(); opMODE->index(vfoA.imode); opBW->show(); opBW->clear(); try { for (size_t i = 0; i < selrig->bandwidths_.size(); i++) { opBW->add(selrig->bandwidths_.at(i).c_str()); } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } opBW->activate(); opBW->index(vfoA.iBW); spnr_tt550_vfo_adj->value(progStatus.vfo_adj); btnPreamp->label("Spot"); btnPreamp->value(progStatus.tt550_spot_onoff); switch (progStatus.UIsize) { case small_ui : btnPreamp->show(); break; case wide_ui : case touch_ui : default : btnPreamp->activate(); } } flrig-2.0.04/src/support/rig_io.cxx0000664000175000017500000002516114505023143014124 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include #include "rig.h" #include "support.h" #include "util.h" #include "debug.h" #include "status.h" #include "rigbase.h" #include "rig_io.h" #include "icons.h" #include "tod_clock.h" #include "socket_io.h" #include "xmlrpc_rig.h" extern bool test; const char *nuline = "\n"; static int iBaudRates[] = { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800 }; const char *szBaudRates[] = { "300", "600", "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200", "230400", "460800", NULL }; int BaudRate(int n) { if (n > (int)sizeof(iBaudRates)) return 1200; return (iBaudRates[n]); } bool startXcvrSerial() { if (progStatus.xcvr_serial_port == "NONE" || progStatus.xcvr_serial_port == "xml_client") { return true; } debug::level_e level = debug::level; debug::level = debug::DEBUG_LEVEL; bypass_serial_thread_loop = true; // setup commands for serial port RigSerial->Device(progStatus.xcvr_serial_port); RigSerial->Baud(BaudRate(progStatus.serial_baudrate)); RigSerial->Stopbits(progStatus.stopbits); RigSerial->Retries(progStatus.serial_retries); RigSerial->Timeout(progStatus.serial_timeout); RigSerial->RTSptt(progStatus.serial_rtsptt); RigSerial->DTRptt(progStatus.serial_dtrptt); RigSerial->RTSCTS(progStatus.serial_rtscts); RigSerial->RTS(progStatus.serial_rtsplus); RigSerial->DTR(progStatus.serial_dtrplus); if (!RigSerial->OpenPort()) { LOG_ERROR("Cannot access %s", progStatus.xcvr_serial_port.c_str()); return false; } else { LOG_DEBUG("\n\ Serial port:\n\ Port : %s\n\ Baud : %d\n\ Stopbits : %d\n\ Retries : %d\n\ Timeout : %d\n\ Loop : %d\n\ RTSCTS : %d\n\ CATptt : %d\n\ RTSptt : %d\n\ DTRptt : %d\n\ RTS+ : %d\n\ DTR+ : %d\n", progStatus.xcvr_serial_port.c_str(), progStatus.serial_baudrate, progStatus.stopbits, progStatus.serial_retries, progStatus.serial_timeout, progStatus.serloop_timing, progStatus.serial_rtscts, progStatus.serial_catptt, progStatus.serial_rtsptt, progStatus.serial_dtrptt, progStatus.serial_rtsplus, progStatus.serial_dtrplus ); } RigSerial->FlushBuffer(); debug::level = level; return true; } bool startAuxSerial() { AuxSerial->Device(progStatus.aux_serial_port); AuxSerial->Baud(BaudRate(progStatus.serial_baudrate)); AuxSerial->Stopbits(progStatus.stopbits); AuxSerial->Retries(progStatus.serial_retries); AuxSerial->Timeout(progStatus.serial_timeout); if (!AuxSerial->OpenPort()) { LOG_ERROR("Cannot access %s", progStatus.aux_serial_port.c_str()); return false; } return true; } bool startSepSerial() { SepSerial->Device(progStatus.sep_serial_port); SepSerial->Baud(BaudRate(progStatus.serial_baudrate)); SepSerial->RTSCTS(false); SepSerial->RTS(progStatus.sep_rtsplus); SepSerial->RTSptt(progStatus.sep_rtsptt); SepSerial->DTR(progStatus.sep_dtrplus); SepSerial->DTRptt(progStatus.sep_dtrptt); if (!SepSerial->OpenPort()) { LOG_ERROR("Cannot access %s", progStatus.sep_serial_port.c_str()); return false; } return true; } // TODO: Review for thread safety. // Tried adding mutex, but deadlocks startup // progress dialog: // guard_lock reply_lock(&mutex_replystr); // void assignReplyStr(std::string val) { selrig->replystr = val; } std::string respstr; #define RXBUFFSIZE 100 int readResponse(std::string req1, std::string req2) { int numread = 0; respstr.clear(); if (progStatus.use_tcpip) numread = read_from_remote(respstr); else { numread = RigSerial->ReadBuffer(respstr, RXBUFFSIZE, req1, req2); } //std::cout << "readResponse:" << std::endl; //std::cout << "req1: " << str2hex(req1.c_str(), req1.length()) << ", req2: " << str2hex(req2.c_str(), req2.length()) << std::endl; //std::cout << "resp: " << numread << ", " << str2hex(respstr.c_str(), respstr.length()) << std::endl; LOG_DEBUG("rsp:%3d, %s", numread, str2hex(respstr.c_str(), respstr.length())); return numread; } int sendCommand (std::string s, int nread, int wait) { int numwrite = (int)s.size(); // TODO: Review for thread safety // // Clear command before sending, to keep the logs sensical. Otherwise it looks like // reply was from this command, when it really was from a previous command. assignReplyStr(""); if (progStatus.xmlrpc_rig) { respstr = xml_cat_string(s); //std::cout << "respstr: " << respstr << std::endl; return respstr.length(); } if (tci_running()) { tci_send(s); return 0; } if (progStatus.use_tcpip) { readResponse(); send_to_remote(s); int timeout = progStatus.tcpip_ping_delay + nread * 2; while (timeout > 0) { if (timeout > 10) MilliSleep(10); else MilliSleep(timeout); timeout -= 10; Fl::awake(); } if (nread == 0) return 0; return readResponse(); } if (RigSerial->IsOpen() == false) { LOG_DEBUG("Serial Port not open, cmd:%3d, %s", (int)s.length(), str2hex(s.data(), s.length())); return 0; } LOG_DEBUG("cmd:%3d, %s", (int)s.length(), str2hex(s.data(), s.length())); RigSerial->FlushBuffer(); RigSerial->WriteBuffer(s.c_str(), numwrite); int timeout = wait; while (timeout > 0) { if (timeout > 10) MilliSleep(10); else MilliSleep(timeout); timeout -= 10; Fl::awake(); } if (nread == 0) return 0; return readResponse(); } static int waitcount = 0; static bool timeout_alert = false; static char sztimeout_alert[200]; static void show_timeout(void *) { fl_alert2("%s", sztimeout_alert); } bool waitCommand( std::string command, int nread, std::string info, int msec, char term, int how, int level ) { guard_lock reply_lock(&mutex_replystr); int numwrite = (int)command.length(); if (nread == 0) LOG_DEBUG("cmd:%3d, %s", numwrite, how == ASC ? command.c_str() : str2hex(command.data(), numwrite)); if (progStatus.xmlrpc_rig) { respstr = xml_cat_string(command); return respstr.length(); } if (progStatus.use_tcpip) { send_to_remote(command); if (nread == 0) return 0; } else { if (RigSerial->IsOpen() == false) { LOG_DEBUG("cmd: %s", how == ASC ? command.c_str() : str2hex(command.data(), command.length())); waitcount = 0; return 0; } RigSerial->FlushBuffer(); // replystr.clear(); RigSerial->WriteBuffer(command.c_str(), numwrite); if (nread == 0) { waitcount = 0; return 0; } } int tod_start = zmsec(); // minimimum time to wait for a response int timeout = (int)((nread * 2)*11000.0/RigSerial->Baud() + progStatus.use_tcpip ? progStatus.tcpip_ping_delay : 0); while (timeout > 0) { if (timeout > 10) MilliSleep(10); else MilliSleep(timeout); timeout -= 10; Fl::awake(); } // additional wait for xcvr processing std::string returned = ""; static char sztemp[100]; int waited = 0; while (waited < msec) { if (readResponse()) returned.append(respstr); if ( ((int)returned.length() >= nread) || (returned.find(term) != std::string::npos) ) { assignReplyStr(returned); waited = zmsec() - tod_start; snprintf(sztemp, sizeof(sztemp), "%s rcvd in %d msec", info.c_str(), waited); showresp(level, how, sztemp, command, returned); waitcount = 0; RigSerial->failed(-1); return true; } waited += 10; MilliSleep(10); Fl::awake(); } waitcount++; assignReplyStr(returned); waited = zmsec() - tod_start; snprintf(sztemp, sizeof(sztemp), "%s TIMED OUT in %d ms", command.c_str(), waited); showresp(ERR, how, sztemp, command, returned); if (waitcount > 4 && !timeout_alert) { timeout_alert = true; snprintf(sztimeout_alert, sizeof(sztimeout_alert), "Serial i/o failure\n%s TIMED OUT in %d ms", command.c_str(), waited); RigSerial->failed(1); Fl::awake(show_timeout); } return false; } int waitResponse(int timeout) { int n = 0; if (!progStatus.xmlrpc_rig && !progStatus.use_tcpip && !RigSerial->IsOpen()) return 0; MilliSleep(10); if (!(n = readResponse(";", "\0xFD"))) { while (timeout > 0) { if (timeout > 10) MilliSleep(10); else MilliSleep(timeout); timeout -= 10; Fl::awake(); } } return n; } void showresp(int level, int how, std::string s, std::string tx, std::string rx) { time_t now; time(&now); struct tm *local = localtime(&now); char sztm[20]; strftime(sztm, sizeof(sztm), "%H:%M:%S", local); std::string s1 = how == HEX ? str2hex(tx.c_str(), tx.length()) : tx; std::string s2 = how == HEX ? str2hex(rx.c_str(), rx.length()) : rx; if (how == ASC) { size_t p; while((p = s1.find('\r')) != std::string::npos) s1.replace(p, 1, ""); while((p = s1.find('\n')) != std::string::npos) s1.replace(p, 1, ""); while((p = s2.find('\r')) != std::string::npos) s2.replace(p, 1, ""); while((p = s2.find('\n')) != std::string::npos) s2.replace(p, 1, ""); } switch (level) { case QUIET: SLOG_QUIET("%s: %10s\ncmd %s\nans %s", sztm, s.c_str(), s1.c_str(), s2.c_str()); break; case ERR: SLOG_ERROR("%s: %10s\ncmd %s\nans %s", sztm, s.c_str(), s1.c_str(), s2.c_str()); break; case INFO: SLOG_INFO("%s: %10s\ncmd %s\nans %s", sztm, s.c_str(), s1.c_str(), s2.c_str()); break; case DEBUG: SLOG_DEBUG("%s: %10s\ncmd %s\nans %s", sztm, s.c_str(), s1.c_str(), s2.c_str()); break; case WARN: default: SLOG_WARN("%s: %10s\ncmd %s\nans %s", sztm, s.c_str(), s1.c_str(), s2.c_str()); break; } } std::string to_hex(std::string fm) { static std::string to; to.clear(); char szHEX[8]; for (size_t n = 0; n < fm.length(); n++) { snprintf(szHEX, sizeof(szHEX), "x%02X ", (fm[n] & 0xFF)); to.append(szHEX); } to.erase(to.length() - 1); return to; } std::string fm_hex(std::string fm) { static std::string to; to.clear(); if (fm.find("x") != std::string::npos) { size_t p = 0; unsigned int val; while (( p = fm.find("x", p)) != std::string::npos) { sscanf(&fm[p+1], "%X", &val); to += (unsigned char) val; p += 3; } } return to; } flrig-2.0.04/src/support/restore_rig.cxx0000664000175000017500000000751614504050363015207 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2011 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "support.h" void TRACED(restore_rig_vals_, XCVR_STATE &xcvrvfo) if (progStatus.restore_pre_att) { selrig->set_attenuator(xcvrvfo.attenuator); selrig->set_preamp(xcvrvfo.preamp); } update_progress(progress->value() + 5); if (progStatus.restore_auto_notch) selrig->set_auto_notch(xcvrvfo.auto_notch); if (progStatus.restore_split) selrig->set_split(xcvrvfo.split); update_progress(progress->value() + 5); if (progStatus.restore_power_control) selrig->set_power_control(xcvrvfo.power_control); if (progStatus.restore_volume) selrig->set_volume_control(xcvrvfo.volume_control); update_progress(progress->value() + 5); if (progStatus.restore_if_shift) selrig->set_if_shift(xcvrvfo.if_shift); update_progress(progress->value() + 5); if (progStatus.restore_notch) selrig->set_notch(xcvrvfo.notch, xcvrvfo.notch_val); if (progStatus.restore_noise) selrig->set_noise(xcvrvfo.noise); update_progress(progress->value() + 5); if (progStatus.restore_nr) { selrig->set_noise_reduction(xcvrvfo.nr); selrig->set_noise_reduction_val(xcvrvfo.nr_val); } update_progress(progress->value() + 5); if (progStatus.restore_mic_gain) selrig->set_mic_gain(xcvrvfo.mic_gain); update_progress(progress->value() + 5); if (progStatus.restore_squelch) selrig->set_squelch(xcvrvfo.squelch); update_progress(progress->value() + 5); if (progStatus.restore_rf_gain) selrig->set_rf_gain(xcvrvfo.rf_gain); update_progress(progress->value() + 5); if (progStatus.restore_comp_on_off && progStatus.restore_comp_level) selrig->set_compression(xcvrvfo.compON, xcvrvfo.compression); else if (progStatus.restore_comp_on_off) selrig->set_compression(xcvrvfo.compON, progStatus.compression); else if (progStatus.restore_comp_level) selrig->set_compression(progStatus.compON, xcvrvfo.compression); update_progress(progress->value() + 5); } void TRACED(restore_xcvr_vals) if (progStatus.start_stop_trace) ss_trace(true); update_progress(0); guard_lock serial_lock(&mutex_serial, "restore_xcvr_vals"); trace(1, "restore_xcvr_vals()"); if (selrig->inuse == onA) { selrig->selectB(); } if (progStatus.restore_mode) { selrig->set_modeB(xcvr_vfoB.imode); selrig->set_FILT(xcvr_vfoB.filter); } if (progStatus.restore_frequency) selrig->set_vfoB(xcvr_vfoB.freq); if (progStatus.restore_bandwidth) selrig->set_bwB(xcvr_vfoB.iBW); restore_rig_vals_(xcvr_vfoB); trace(2, "Restored xcvr B:\n", print(xcvr_vfoB)); selrig->selectA(); if (progStatus.restore_mode) { selrig->set_modeA(xcvr_vfoA.imode); selrig->set_FILT(xcvr_vfoA.filter); } if (progStatus.restore_frequency) selrig->set_vfoA(xcvr_vfoA.freq); if (progStatus.restore_bandwidth) { if (selrig->name_ == rig_K3.name_) { selrig->set_bwA(xcvr_vfoA.iBW); selrig->set_bwB(xcvr_vfoB.iBW); } else selrig->set_bwA(xcvr_vfoA.iBW); } restore_rig_vals_(xcvr_vfoA); trace(2, "Restored xcvr A:\n", print(xcvr_vfoA)); if (progStatus.start_stop_trace) ss_trace(false); exit_commands(); } flrig-2.0.04/src/support/tod_clock.cxx0000664000175000017500000000342214504050363014614 00000000000000// ===================================================================== // // TOD_clock.cxx // // Copyright (C) 2017 // Dave Freese, W1HKJ // // This file is part of flrig // // Fldigi is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // ===================================================================== #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include "util.h" #include "debug.h" //#include "status.h" #include "icons.h" #include "tod_clock.h" #include "timeops.h" size_t zmsec() { static struct timeval tv; gettimeofday(&tv, NULL); return (tv.tv_sec * 1000L + (tv.tv_usec / 1000L)); } size_t zusec() { static struct timeval tv; gettimeofday(&tv, NULL); return (tv.tv_sec * 1000000L + tv.tv_usec); } char *ztime() { static char exttime[13]; static struct tm tim; static struct timeval tv; gettimeofday(&tv, NULL); time_t tval = tv.tv_sec; gmtime_r(&tval, &tim); snprintf(exttime, sizeof(exttime), "%02d:%02d:%02d.%03d", tim.tm_hour, tim.tm_min, tim.tm_sec, (int)(tv.tv_usec / 1000L) ); return exttime; } flrig-2.0.04/src/support/threads.cxx0000664000175000017500000000631714504050363014313 00000000000000// ---------------------------------------------------------------------------- // threads.cxx // // Copyright (C) 2014 // Stelios Bounanos, M0GLD // David Freese, W1HKJ // // This file is part of fldigi. // // fldigi is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "threads.h" #include "support.h" /// This ensures that a mutex is always unlocked when leaving a function or block. extern pthread_mutex_t mutex_replystr; extern pthread_mutex_t command_mutex; extern pthread_mutex_t mutex_vfoque; extern pthread_mutex_t mutex_serial; extern pthread_mutex_t debug_mutex; extern pthread_mutex_t mutex_rcv_socket; extern pthread_mutex_t mutex_ptt; extern pthread_mutex_t mutex_srvc_reqs; extern pthread_mutex_t mutex_trace; // Change to 1 to observe guard lock/unlock processing on stdout //#define DEBUG_GUARD_LOCK 0 //guard_lock::guard_lock(pthread_mutex_t* m, int h) : mutex(m), how(h) { //char szlock[100]; // pthread_mutex_lock(mutex); // snprintf(szlock, sizeof(szlock), "lock %s : %d", name(mutex), how); // how = h // if (how >= 100) // trace(1, szlock); // if (how != 0 && DEBUG_GUARD_LOCK) // printf("%s", szlock); //} //guard_lock::~guard_lock(void) { //char szunlock[100]; // snprintf(szunlock, sizeof(szunlock), "unlock %s : %d\n", name(mutex), how); // if (how >= 100) // trace(1, szunlock); // if (how != 0 && DEBUG_GUARD_LOCK) // printf("%s", szunlock); // pthread_mutex_unlock(mutex); //} guard_lock::guard_lock(pthread_mutex_t* m, std::string h) : mutex(m) { pthread_mutex_lock(mutex); if (!h.empty()) { how = h; std::string szlock; szlock.assign("lock ").append(name(mutex)).append(" : ").append(how); start_time = zmsec(); // trace(1, szlock.c_str()); lock_trace(1, szlock.c_str()); } } guard_lock::~guard_lock(void) { if (!how.empty()) { char szlock[200]; snprintf(szlock, sizeof(szlock), "%s, %s locked for %lu msec", how.c_str(), name(mutex), zmsec() - start_time); lock_trace(1, szlock); } pthread_mutex_unlock(mutex); } const char * guard_lock::name(pthread_mutex_t *m) { if (m == &mutex_replystr) return "mutex_replystr"; if (m == &command_mutex) return "command_mutex"; if (m == &mutex_replystr) return "mutex_replystr"; if (m == &mutex_vfoque) return "mutex_vfoque"; if (m == &mutex_serial) return "mutex_serial"; if (m == &debug_mutex) return "debug_mutex"; if (m == &mutex_rcv_socket) return "mutex_rcv_socket"; if (m == &mutex_ptt) return "mutex_ptt"; if (m == &mutex_srvc_reqs) return "mutex_service_requests"; if (m == &mutex_trace) return "mutex_trace"; return ""; } flrig-2.0.04/src/support/trace.cxx0000664000175000017500000002315214505023115013747 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include #include #include "icons.h" #include "support.h" #include "debug.h" #include "gettext.h" #include "rig_io.h" #include "dialogs.h" #include "rigbase.h" #include "ptt.h" #include "socket_io.h" #include "ui.h" #include "tod_clock.h" #include "trace.h" #include "rig.h" #include "rigs.h" #include "K3_ui.h" #include "KX3_ui.h" #include "rigpanel.h" #include "tod_clock.h" Fl_Double_Window* tracewindow = (Fl_Double_Window *)0; Fl_Text_Display* tracedisplay = (Fl_Text_Display *)0; Fl_Text_Buffer* tracebuffer = (Fl_Text_Buffer*)0; Fl_Button* btn_cleartrace = (Fl_Button*)0; Fl_Light_Button* btn_pausetrace = (Fl_Light_Button*)0; std::string tracestring; bool stdout_trace = false;//true; bool pausetrace = false; static void cb_pausetrace(Fl_Light_Button *o, void *) { pausetrace = o->value(); } static void cb_cleartrace(Fl_Button *, void *) { guard_lock tt(&mutex_trace); tracedisplay->buffer()->text(""); tracestring.clear(); } void make_trace_window() { tracewindow = new Fl_Double_Window(600, 300, _("Trace log")); tracedisplay = new Fl_Text_Display(0, 0, 600, 270); tracebuffer = new Fl_Text_Buffer; tracedisplay->buffer(tracebuffer); tracedisplay->textfont(FL_SCREEN); tracedisplay->wrap_mode(Fl_Text_Display::WRAP_NONE, 100); btn_pausetrace = new Fl_Light_Button(430, 275, 80, 20, _("Pause")); btn_pausetrace->callback((Fl_Callback *)cb_pausetrace); btn_cleartrace = new Fl_Button(515, 275, 80, 20, _("Clear")); btn_cleartrace->callback((Fl_Callback *)cb_cleartrace); tracewindow->resizable(tracedisplay); } static void write_trace_file(std::string s) { std::string trace_fname = RigHomeDir; trace_fname.append("trace.txt"); std::fstream tfile(trace_fname.c_str(), std::ios::app); if (tfile) tfile << s; tfile.close(); } static void update_tracetext(void *) { guard_lock tt(&mutex_trace); if (tracewindow->visible()) { if (!pausetrace) { if (tracedisplay->buffer()->length() > 100000) tracedisplay->buffer()->text(""); tracedisplay->insert(tracestring.c_str()); } } tracestring.clear(); } void write_tracetext() { if (stdout_trace) { std::cout << tracestring; if (tracestring.find('\n') == std::string::npos) std::cout << std::endl; std::cout.flush(); } Fl::awake(update_tracetext); } void trace(int n, ...) // all args of type const char * { if (!progStatus.trace) return; if (!tracewindow) make_trace_window(); if (!n) return; std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); s << "\n"; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } #include "XmlRpc.h" void xml_trace(int n, ...) // all args of type const char * { if (!progStatus.xmltrace) return; if (!tracewindow) make_trace_window(); if (!n) return; std::stringstream s; va_list vl; va_start(vl, n); s << ztime(); #ifdef HAS_XMLRPC_CLIENT_ID s << " [" << XmlRpc::client_id << "]"; #endif s << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); s << "\n"; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } void rig_trace(int n, ...) // all args of type const char * { if (!progStatus.rigtrace) return; if (!n) return; if (!tracewindow) make_trace_window(); std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); s << "\n"; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } void set_trace(int n, ...) // all args of type const char * { if (!progStatus.settrace) return; if (!tracewindow) make_trace_window(); if (!n) return; std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); s << "\n"; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } void get_trace(int n, ...) // all args of type const char * { if (!progStatus.gettrace) return; if (!tracewindow) make_trace_window(); if (!n) return; std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); s << "\n"; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } void rpc_trace(int n, ...) // all args of type const char * { if (!n) return; std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); std::string str = s.str(); size_t p = str.find("\r\n"); while (p != std::string::npos) { str.replace(p, 2, "\n"); p = str.find("\r\n"); } p = str.find("\r"); while (p != std::string::npos) { str.replace(p, 1, "\n"); p = str.find("\r"); } p = str.find("\t"); while (p != std::string::npos) { str.erase(p, 1); p = str.find("\t"); } int indent = 0; p = str.find("<"); while (p != std::string::npos) { if (str[p+1] != '/') { str.insert(p, "\n"); str.insert(p+1, indent, ' '); indent += 2; } else { str.insert(p, "\n"); indent -= 2; str.insert(p+1, indent, ' '); } if (indent < 0) indent = 0; p = str.find(">", p); p = str.find("<", p); } p = str.find("\n\n"); while (p != std::string::npos) { str.erase(p,1); p = str.find("\n\n"); } if (str[str.length()-1] != '\n') str += '\n'; if (!tracewindow) make_trace_window(); if (!progStatus.rpctrace) return; if (!n) return; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } void ser_trace(int n, ...) // all args of type const char * { if (!progStatus.serialtrace) return; if (!tracewindow) make_trace_window(); if (!n) return; std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); s << "\n"; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } void deb_trace(int n, ...) // all args of type const char * { if (!n) return; if (!tracewindow) make_trace_window(); std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); std::string str = s.str(); size_t p = str.find("\r\n"); while (p != std::string::npos) { str.replace(p, 2, "\n"); p = str.find("\r\n"); } p = str.find("\r"); while (p != std::string::npos) { str.replace(p, 1, "\n"); p = str.find("\r"); } p = str.find("\t"); while (p != std::string::npos) { str.erase(p, 1); p = str.find("\t"); } int indent = 0; p = str.find("<"); while (p != std::string::npos) { if (str[p+1] != '/') { str.insert(p, "\n"); str.insert(p+1, indent, ' '); indent += 2; } else { str.insert(p, "\n"); indent -= 2; str.insert(p+1, indent, ' '); } if (indent < 0) indent = 0; p = str.find(">", p); p = str.find("<", p); } p = str.find("\n\n"); while (p != std::string::npos) { str.erase(p,1); p = str.find("\n\n"); } if (str[str.length()-1] != '\n') str += '\n'; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } void tci_trace(int n, ...) // all args of type const char * { // if (!progStatus.tcitrace) return; if (!n) return; if (!tracewindow) make_trace_window(); std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); s << "\n"; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } bool activate_lock_trace = false; void lock_trace(int n, ...) // all args of type const char * { if (!n || !activate_lock_trace) return; if (!tracewindow) make_trace_window(); std::stringstream s; va_list vl; va_start(vl, n); s << ztime() << " : " << va_arg(vl, const char *); for (int i = 1; i < n; i++) s << " " << va_arg(vl, const char *); va_end(vl); s << "\n"; write_trace_file(s.str()); guard_lock tt(&mutex_trace); tracestring.append(s.str()); write_tracetext(); } flrig-2.0.04/src/support/dialogs.cxx0000664000175000017500000016540114504050363014303 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #include #include #include #include #include #include #ifndef __WIN32__ #include #include #include #include #include #endif #include "dialogs.h" #include "rigs.h" #include "util.h" #include "debug.h" #include "serial.h" #include "support.h" #include "rigpanel.h" #include "rigbase.h" #include "font_browser.h" #include "ui.h" #include "status.h" #include "rig.h" #include "socket_io.h" #include "rigpanel.h" #include "gettext.h" #include "cwioUI.h" #include "fskioUI.h" Fl_Double_Window *dlgDisplayConfig = NULL; Fl_Double_Window *dlgXcvrConfig = NULL; Fl_Double_Window *dlgMemoryDialog = NULL; Fl_Double_Window *dlgControls = NULL; Font_Browser *fntbrowser = NULL; Fl_Color flrig_def_color(int); //====================================================================== // test comm ports //====================================================================== void clear_combos() { selectCommPort->clear(); selectAuxPort->clear(); selectSepPTTPort->clear(); selectCommPort->add("NONE"); selectCommPort->add("xml_client"); selectAuxPort->add("NONE"); selectSepPTTPort->add("NONE"); select_cwioPORT->add("NONE"); select_fskioPORT->add("NONE"); } void add_combos(char *port) { if (progStatus.serialtrace) { static char sztr[100]; snprintf(sztr, sizeof(sztr), "Discovered %s", port); ser_trace(1, sztr); } selectCommPort->add(port); selectAuxPort->add(port); selectSepPTTPort->add(port); select_cwioPORT->add(port); select_fskioPORT->add(port); } void set_combo_value() { selectCommPort->value(progStatus.xcvr_serial_port.c_str()); selectAuxPort->value(progStatus.aux_serial_port.c_str()); selectSepPTTPort->value(progStatus.sep_serial_port.c_str()); select_cwioPORT->value(progStatus.cwioPORT.c_str()); select_fskioPORT->value(progStatus.FSK_PORT.c_str()); } //====================================================================== // WIN32 init_port_combos //====================================================================== #ifdef __WIN32__ static bool open_serial(const char* dev) { bool ret = false; HANDLE fd = CreateFile(dev, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (fd != INVALID_HANDLE_VALUE) { CloseHandle(fd); ret = true; } return ret; } # define TTY_MAX 255 void init_port_combos() { clear_combos(); char ttyname[21]; const char tty_fmt[] = "//./COM%u"; for (unsigned j = 0; j < TTY_MAX; j++) { snprintf(ttyname, sizeof(ttyname), tty_fmt, j); if (!open_serial(ttyname)) continue; snprintf(ttyname, sizeof(ttyname), "COM%u", j); LOG_WARN("Found serial port %s", ttyname); add_combos(ttyname); } set_combo_value(); } #endif //__WIN32__ //====================================================================== // Linux init_port_combos //====================================================================== #ifdef __linux__ #ifndef PATH_MAX # define PATH_MAX 1024 #endif # define TTY_MAX 8 void init_port_combos() { struct stat st; char ttyname[PATH_MAX + 1]; bool ret = false; DIR* sys = NULL; char cwd[PATH_MAX] = { '.', '\0' }; clear_combos(); LOG_QUIET("%s","Search for serial ports"); glob_t gbuf; glob("/dev/pts/*", 0, NULL, &gbuf); for (size_t j = 0; j < gbuf.gl_pathc; j++) { if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) || strstr(gbuf.gl_pathv[j], "modem") ) continue; LOG_QUIET("Found virtual serial port %s", gbuf.gl_pathv[j]); add_combos(gbuf.gl_pathv[j]); } globfree(&gbuf); glob("/dev/serial/by-id/*", 0, NULL, &gbuf); for (size_t j = 0; j < gbuf.gl_pathc; j++) { if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) || strstr(gbuf.gl_pathv[j], "modem") ) continue; LOG_QUIET("Found serial port %s", gbuf.gl_pathv[j]); add_combos(gbuf.gl_pathv[j]); } globfree(&gbuf); glob("/dev/tty*", 0, NULL, &gbuf); for (size_t j = 0; j < gbuf.gl_pathc; j++) { if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) || strstr(gbuf.gl_pathv[j], "modem") ) continue; LOG_QUIET("Found serial port %s", gbuf.gl_pathv[j]); add_combos(gbuf.gl_pathv[j]); } globfree(&gbuf); glob("/dev/tnt*", 0, NULL, &gbuf); for (size_t j = 0; j < gbuf.gl_pathc; j++) { if ( !(stat(gbuf.gl_pathv[j], &st) == 0 && S_ISCHR(st.st_mode)) || strstr(gbuf.gl_pathv[j], "modem") ) continue; LOG_QUIET("Found serial port %s", gbuf.gl_pathv[j]); add_combos(gbuf.gl_pathv[j]); } globfree(&gbuf); if (getcwd(cwd, sizeof(cwd)) == NULL) goto out; if (chdir("/sys/class/tty") == -1) goto check_cuse; if ((sys = opendir(".")) == NULL) goto check_cuse; ssize_t len; struct dirent* dp; LOG_QUIET("%s", "Searching /sys/class/tty/"); while ((dp = readdir(sys))) { # ifdef _DIRENT_HAVE_D_TYPE if (dp->d_type != DT_LNK) continue; # endif if ((len = readlink(dp->d_name, ttyname, sizeof(ttyname)-1)) == -1) continue; ttyname[len] = '\0'; if (!strstr(ttyname, "/devices/virtual/")) { snprintf(ttyname, sizeof(ttyname), "/dev/%s", dp->d_name); if (stat(ttyname, &st) == -1 || !S_ISCHR(st.st_mode)) continue; LOG_QUIET("Found serial port %s", ttyname); add_combos(ttyname); ret = true; } } check_cuse: if (sys) { closedir(sys); sys = NULL; } if (chdir("/sys/class/cuse") == -1) goto out; if ((sys = opendir(".")) == NULL) goto out; LOG_QUIET("%s", "Searching /sys/class/cuse/"); while ((dp = readdir(sys))) { # ifdef _DIRENT_HAVE_D_TYPE if (dp->d_type != DT_LNK) continue; # endif if ((len = readlink(dp->d_name, ttyname, sizeof(ttyname)-1)) == -1) continue; ttyname[len] = '\0'; if (strstr(ttyname, "/devices/virtual/") && !strncmp(dp->d_name, "mhuxd", 5)) { char *name = strdup(dp->d_name); if(!name) continue; char *p = strchr(name, '!'); if(p) *p = '/'; snprintf(ttyname, sizeof(ttyname), "/dev/%s", name); free(name); if (stat(ttyname, &st) == -1 || !S_ISCHR(st.st_mode)) continue; LOG_QUIET("Found serial port %s", ttyname); add_combos(ttyname); ret = true; } } out: std::string tty_virtual = HomeDir; tty_virtual.append("vdev"); LOG_QUIET("Searching %s", tty_virtual.c_str()); tty_virtual.append("/ttyS%u"); for (unsigned j = 0; j < TTY_MAX; j++) { snprintf(ttyname, sizeof(ttyname), tty_virtual.c_str(), j); if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) ) continue; LOG_QUIET("Found serial port %s", ttyname); add_combos(ttyname); } if (sys) closedir(sys); if (chdir(cwd) == -1) return; if (ret) { // do we need to fall back to the probe code below? set_combo_value(); return; } const char* tty_fmt[] = { "/dev/ttyS%u", "/dev/ttyUSB%u", "/dev/usb/ttyUSB%u" }; LOG_QUIET("%s", "Serial port discovery via 'stat'"); for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) { for (unsigned j = 0; j < TTY_MAX; j++) { snprintf(ttyname, sizeof(ttyname), tty_fmt[i], j); if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) ) continue; LOG_WARN("Found serial port %s", ttyname); add_combos(ttyname); } } set_combo_value(); } #endif // __linux__ //====================================================================== // APPLE init_port_combos //====================================================================== #ifdef __APPLE__ #ifndef PATH_MAX # define PATH_MAX 1024 #endif void init_port_combos() { std::string pname; const char* tty_fmt[] = { "/dev/cu.*", "/dev/tty.*" }; struct stat st; clear_combos(); glob_t gbuf; bool is_serial; clear_combos(); for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) { glob(tty_fmt[i], 0, NULL, &gbuf); for (size_t j = 0; j < gbuf.gl_pathc; j++) { int ret1 = !stat(gbuf.gl_pathv[j], &st); int ret2 = S_ISCHR(st.st_mode); if (ret1) { LOG_INFO("Serial port %s", gbuf.gl_pathv[j]); LOG_INFO(" device mode: %X", st.st_mode); LOG_INFO(" char device? %s", ret2 ? "Y" : "N"); } else LOG_INFO("%s does not return stat query", gbuf.gl_pathv[j]); if ( (ret1 && ret2 ) || strstr(gbuf.gl_pathv[j], "modem") ) add_combos (gbuf.gl_pathv[j]); } globfree(&gbuf); } set_combo_value(); } #endif //__APPLE__ //====================================================================== //====================================================================== // FreeBSD init_port_combos //====================================================================== #ifdef __FreeBSD__ #ifndef PATH_MAX # define PATH_MAX 1024 #endif # define TTY_MAX 8 void init_port_combos() { int retval; struct stat st; char ttyname[PATH_MAX + 1]; const char* tty_fmt[] = { "/dev/ttyd%u" }; clear_combos(); for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) { for (unsigned j = 0; j < TTY_MAX; j++) { snprintf(ttyname, sizeof(ttyname), tty_fmt[i], j); if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) ) continue; LOG_WARN("Found serial port %s", ttyname); add_combos(ttyname); } } } #endif //__FreeBSD__ //====================================================================== //====================================================================== // OpenBSD init_port_combos //====================================================================== #ifdef __OpenBSD__ #ifndef PATH_MAX # define PATH_MAX 1024 #endif # define TTY_MAX 8 void init_port_combos() { int retval; struct stat st; char ttyname[PATH_MAX + 1]; const char* tty_fmt[] = { "/dev/ttyd%u", "/dev/ttyU%u", } clear_combos(); for (size_t i = 0; i < sizeof(tty_fmt)/sizeof(*tty_fmt); i++) { for (unsigned j = 0; j < TTY_MAX; j++) { snprintf(ttyname, sizeof(ttyname), tty_fmt[i], j); if ( !(stat(ttyname, &st) == 0 && S_ISCHR(st.st_mode)) ) continue; LOG_WARN("Found serial port %s", ttyname); add_combos(ttyname); } } } #endif //__OpenBSD__ //====================================================================== void cbCIVdefault() { char hexstr[8]; rigbase *srig = (rigbase *)(selectRig->data()); xcvr_name = srig->name_; LOG_INFO("picked %s", xcvr_name.c_str()); snprintf(hexstr, sizeof(hexstr), "0x%02X", srig->defaultCIV); txtCIV->value(hexstr); progStatus.CIV = srig->defaultCIV; srig->adjustCIV(progStatus.CIV); } void cbCIV() { int picked = selectRig->index(); int adr = 0; rigbase *srig = rigs[picked]; sscanf(txtCIV->value(), "0x%2X", &adr); progStatus.CIV = adr; srig->adjustCIV(progStatus.CIV); } void cbUSBaudio() { progStatus.USBaudio = btnUSBaudio->value(); } void configXcvr() { selectCommPort->value(progStatus.xcvr_serial_port.c_str()); selectAuxPort->value(progStatus.aux_serial_port.c_str()); selectSepPTTPort->value(progStatus.sep_serial_port.c_str()); if (selrig->CIV) { char hexstr[8]; snprintf(hexstr, sizeof(hexstr), "0x%02X", selrig->CIV); txtCIV->value(hexstr); txtCIV->activate(); btnCIVdefault->activate(); if (xcvr_name == rig_IC7200.name_ || xcvr_name == rig_IC7300.name_ || xcvr_name == rig_IC7600.name_ ) { btnUSBaudio->value(progStatus.USBaudio); btnUSBaudio->activate(); } else btnUSBaudio->deactivate(); } else { txtCIV->value(""); txtCIV->deactivate(); btnCIVdefault->deactivate(); btnUSBaudio->value(0); btnUSBaudio->deactivate(); } select_tab(_("Xcvr")); } void open_poll_tab() { select_tab(_("Poll")); } void open_trace_tab() { select_tab(_("Trace")); } void open_commands_tab() { select_tab(_("Commands")); } void open_restore_tab() { select_tab(_("Restore")); } void open_send_command_tab() { select_tab(_("Send")); } void open_tcpip_tab() { select_tab(_("TCPIP & TCI")); } void open_cmedia_tab() { select_tab(_("PTT-Cmedia")); } void open_tmate2_tab() { select_tab(_("TMATE-2")); } void open_ptt_tab() { select_tab(_("PTT-Generic")); } void open_gpio_tab() { select_tab(_("PTT-GPIO")); } void open_other_tab() { select_tab(_("Other")); } void open_server_tab() { select_tab(_("Server")); } void open_client_tab() { select_tab(_("Client")); } void createXcvrDialog() { dlgXcvrConfig = XcvrDialog(); init_port_combos(); mnuBaudrate->clear(); for (int i = 0; szBaudRates[i] != NULL; i++) mnuBaudrate->add(szBaudRates[i]); cbo_tt550_agc_level->add("slow"); cbo_tt550_agc_level->add("med"); cbo_tt550_agc_level->add("fast"); cbo_tt550_agc_level->index(progStatus.tt550_agc_level); cbo_tt550_nb_level->add("NONE"); cbo_tt550_nb_level->add("1"); cbo_tt550_nb_level->add("2"); cbo_tt550_nb_level->add("3"); cbo_tt550_nb_level->add("4"); cbo_tt550_nb_level->add("5"); cbo_tt550_nb_level->add("6"); cbo_tt550_nb_level->add("7"); cbo_tt550_nb_level->index(progStatus.tt550_nb_level); initRigCombo(); } // Frequency display font / colors Fl_Font selfont; void cbFreqControlFontBrowser(Fl_Widget*, void*) { selfont = fntbrowser->fontNumber(); lblTest->labelfont(selfont); dlgDisplayConfig->redraw(); fntbrowser->hide(); } void cbPrefFont() { fntbrowser->fontNumber(progStatus.fontnbr); // fntbrowser->fontFilter(Font_Browser::FIXED_WIDTH); // fntbrowser->fontFilter(Font_Browser::ALL_TYPES); fntbrowser->callback(cbFreqControlFontBrowser); fntbrowser->show(); } uchar fg_red, fg_green, fg_blue; uchar bg_red, bg_green, bg_blue; uchar smeterRed, smeterGreen, smeterBlue; uchar peakRed, peakGreen, peakBlue; uchar pwrRed, pwrGreen, pwrBlue; uchar swrRed, swrGreen, swrBlue; uchar voltRed, voltGreen, voltBlue; Fl_Color bgclr; Fl_Color fgclr; Fl_Color fgsys; static uchar fg_sys_red, fg_sys_green, fg_sys_blue; Fl_Color bgsys; static uchar bg_sys_red, bg_sys_green, bg_sys_blue; Fl_Color bg2sys; static uchar bg2_sys_red, bg2_sys_green, bg2_sys_blue; Fl_Color bg_slider; static uchar bg_slider_red, bg_slider_green, bg_slider_blue; Fl_Color btn_slider; static uchar btn_slider_red, btn_slider_green, btn_slider_blue; Fl_Color btn_lt_color; static uchar btn_lt_color_red, btn_lt_color_green, btn_lt_color_blue; Fl_Color tab_color; static uchar tab_red, tab_green, tab_blue; void cb_lighted_button() { uchar r = btn_lt_color_red, g = btn_lt_color_green, b = btn_lt_color_blue; if (fl_color_chooser("Foreground color", r, g, b)) { btn_lt_color_red = r; btn_lt_color_green = g; btn_lt_color_blue = b; btn_lt_color = fl_rgb_color(r, g, b); btn_lighted->selection_color(btn_lt_color); btn_lighted->value(1); btn_lighted->redraw(); } } void cb_lighted_default() { btn_lt_color = flrig_def_color(FL_YELLOW); btn_lt_color_red = ((btn_lt_color >> 24) & 0xFF); btn_lt_color_green = ((btn_lt_color >> 16) & 0xFF); btn_lt_color_blue = ((btn_lt_color >> 8) & 0xFF); btn_lighted->selection_color(btn_lt_color); btn_lighted->value(1); btn_lighted->redraw(); } void cb_change_hrd_button() { progStatus.hrd_buttons = !progStatus.hrd_buttons; FreqDispA->set_hrd(progStatus.hrd_buttons); FreqDispB->set_hrd(progStatus.hrd_buttons); } void set_sliders_when() { if (sldrSQUELCH) sldrSQUELCH->when(progStatus.sliders_button); if (sldrMICGAIN) sldrMICGAIN->when(progStatus.sliders_button); if (sldrIFSHIFT) sldrIFSHIFT->when(progStatus.sliders_button); if (sldrNR) sldrNR->when(progStatus.sliders_button); if (sldrNOTCH) sldrNOTCH->when(progStatus.sliders_button); if (sldrRFGAIN) sldrRFGAIN->when(progStatus.sliders_button); if (sldrINNER) sldrINNER->when(progStatus.sliders_button); if (sldrOUTER) sldrOUTER->when(progStatus.sliders_button); if (sldrPOWER) sldrPOWER->when(progStatus.sliders_button); if (sldrVOLUME) sldrVOLUME->when(progStatus.sliders_button); if (ic7610_digi_sel_val) ic7610_digi_sel_val->when(progStatus.sliders_button); if (sldr_nb_level) sldr_nb_level->when(progStatus.sliders_button); } void cb_change_sliders_button() { if (progStatus.sliders_button == FL_WHEN_CHANGED) progStatus.sliders_button = FL_WHEN_RELEASE; else progStatus.sliders_button = FL_WHEN_CHANGED; set_sliders_when(); } void cb_slider_defaults() { bg_slider_red = 232; bg_slider_green = 255; bg_slider_blue = 232; btn_slider_red = 0; btn_slider_green = 0; btn_slider_blue = 128; bg_slider = fl_rgb_color( 232, 255, 232); btn_slider = fl_rgb_color( 0, 0, 128); sldrColors->color(bg_slider); sldrColors->selection_color(btn_slider); sldrColors->redraw(); } void cb_slider_background() { uchar r = bg_slider_red, g = bg_slider_green, b = bg_slider_blue; if (fl_color_chooser("Foreground color", r, g, b)) { bg_slider_red = r; bg_slider_green = g; bg_slider_blue = b; bg_slider = fl_rgb_color(r, g, b); sldrColors->color(bg_slider); sldrColors->selection_color(btn_slider); sldrColors->redraw(); } } void cb_slider_select() { uchar r = btn_slider_red, g = btn_slider_green, b = btn_slider_blue; if (fl_color_chooser("Foreground color", r, g, b)) { btn_slider_red = r; btn_slider_green = g; btn_slider_blue = b; btn_slider = fl_rgb_color(r, g, b); sldrColors->color(bg_slider); sldrColors->selection_color(btn_slider); sldrColors->redraw(); } } void cb_sys_defaults() { bgsys = flrig_def_color(FL_BACKGROUND_COLOR); bg_sys_red = ((bgsys >> 24) & 0xFF); bg_sys_green = ((bgsys >> 16) & 0xFF); bg_sys_blue = ((bgsys >> 8) & 0xFF); bg2sys = flrig_def_color(FL_BACKGROUND2_COLOR); bg2_sys_red = ((bg2sys) >> 24 & 0xFF); bg2_sys_green = ((bg2sys) >> 16 & 0xFF); bg2_sys_blue = ((bg2sys) >> 8 & 0xFF); fgsys = flrig_def_color(FL_FOREGROUND_COLOR); fg_sys_red = (fgsys >> 24) & 0xFF; fg_sys_green = (fgsys >> 16) & 0xFF; fg_sys_blue = (fgsys >> 8) & 0xFF; Fl::background(bg_sys_red, bg_sys_green, bg_sys_blue); Fl::background2(bg2_sys_red, bg2_sys_green, bg2_sys_blue); Fl::foreground(fg_sys_red, fg_sys_green, fg_sys_blue); dlgDisplayConfig->redraw(); mainwindow->redraw(); } void cb_sys_foreground() { uchar r = fg_sys_red, g = fg_sys_green, b = fg_sys_blue; if (fl_color_chooser("Foreground color", r, g, b)) { fg_sys_red = r; fg_sys_green = g; fg_sys_blue = b; fgsys = fl_rgb_color(r, g, b); Fl::foreground(r, g, b); dlgDisplayConfig->redraw(); mainwindow->redraw(); } } void cb_sys_background() { uchar r = bg_sys_red, g = bg_sys_green, b = bg_sys_blue; if (fl_color_chooser("Background color", r, g, b)) { bg_sys_red = r; bg_sys_green = g; bg_sys_blue = b; bgsys = fl_rgb_color(r, g, b); Fl::background(r, g, b); dlgDisplayConfig->redraw(); mainwindow->redraw(); } } void cb_sys_background2() { uchar r = bg2_sys_red, g = bg2_sys_green, b = bg2_sys_blue; if (fl_color_chooser("Background2 color", r, g, b)) { bg2_sys_red = r; bg2_sys_green = g; bg2_sys_blue = b; bg2sys = fl_rgb_color(r, g, b); Fl::background2(r, g, b); dlgDisplayConfig->redraw(); mainwindow->redraw(); } } void cbBacklightColor() { uchar r = bg_red, g = bg_green, b = bg_blue; if (fl_color_chooser("Background color", r, g, b)) { bg_red = r; bg_green = g; bg_blue = b; bgclr = fl_rgb_color(r, g, b); lblTest->color(bgclr); sldrRcvSignalColor->color( fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr ); sldrPWRcolor->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr); sldrSWRcolor->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sldrVoltcolor->color(fl_rgb_color (voltRed, voltGreen, voltBlue), bgclr); scaleSmeterColor->color(bgclr); scalePWRcolor->color(bgclr); scaleSWRcolor->color(bgclr); scaleVoltcolor->color(bgclr); grpMeterColor->color(bgclr); dlgDisplayConfig->redraw(); } } void cbPrefForeground() { uchar r = fg_red, g = fg_green, b = fg_blue; if (fl_color_chooser("Foreground color", r, g, b)) { fg_red = r; fg_green = g; fg_blue = b; fgclr = fl_rgb_color(r, g, b); lblTest->labelcolor(fgclr); scaleSmeterColor->labelcolor(fgclr); scalePWRcolor->labelcolor(fgclr); scaleSWRcolor->labelcolor(fgclr); scaleVoltcolor->labelcolor(fgclr); grpMeterColor->labelcolor(fgclr); dlgDisplayConfig->redraw(); } } void default_meters() { Fl_Color c; bg_red = 232; bg_green = 255; bg_blue = 232; bgclr = fl_rgb_color( bg_red, bg_green, bg_blue); lblTest->color(bgclr); sldrRcvSignalColor->color( fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr ); sldrPWRcolor->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr); sldrSWRcolor->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); scaleSmeterColor->color(bgclr); scalePWRcolor->color(bgclr); scaleSWRcolor->color(bgclr); scaleVoltcolor->color(bgclr); grpMeterColor->color(bgclr); fg_red = 0; fg_green = 0; fg_blue = 0; fgclr = (Fl_Color)0; lblTest->labelcolor(fgclr); scaleSmeterColor->labelcolor(fgclr); scalePWRcolor->labelcolor(fgclr); scaleSWRcolor->labelcolor(fgclr); scaleVoltcolor->labelcolor(fgclr); grpMeterColor->labelcolor(fgclr); smeterRed = 0; smeterGreen = 180; smeterBlue = 0; c = fl_rgb_color (smeterRed, smeterGreen, smeterBlue); sldrRcvSignalColor->color(c, bgclr ); peakRed = 255; peakGreen = 0; peakBlue = 0; c = fl_rgb_color( peakRed, peakGreen, peakBlue ); sldrRcvSignalColor->PeakColor(c); sldrPWRcolor->PeakColor(c); sldrSWRcolor->PeakColor(c); sldrVoltcolor->PeakColor(bgclr); pwrRed = 180; pwrGreen = 0; pwrBlue = 0; c = fl_rgb_color( pwrRed, pwrGreen, pwrBlue ); sldrPWRcolor->color(c, bgclr); swrRed = 148; swrGreen = 0; swrBlue = 148; c = fl_rgb_color(swrRed, swrGreen, swrBlue); sldrSWRcolor->color(c, bgclr); voltRed = 0; voltGreen = 0; voltBlue = 128; voltRed = 0; voltGreen = 0; voltBlue = 255; c = fl_rgb_color(voltRed, voltGreen, voltBlue); sldrVoltcolor->color(c, bgclr); dlgDisplayConfig->redraw(); } void cbSMeterColor() { uchar r = smeterRed, g = smeterGreen, b = smeterBlue; if (fl_color_chooser("S Meter color", r, g, b)) { smeterRed = r; smeterGreen = g; smeterBlue = b; sldrRcvSignalColor->color( fl_rgb_color (r, g, b), bgclr ); dlgDisplayConfig->redraw(); } } void cbPeakMeterColor() { uchar r = peakRed, g = peakGreen, b = peakBlue; if (fl_color_chooser("Peak value color", r, g, b)) { peakRed = r; peakGreen = g; peakBlue = b; sldrRcvSignalColor->PeakColor(fl_rgb_color (r, g, b)); sldrPWRcolor->PeakColor(fl_rgb_color (r, g, b)); sldrSWRcolor->PeakColor(fl_rgb_color (r, g, b)); dlgDisplayConfig->redraw(); } } void cbPwrMeterColor() { uchar r = pwrRed, g = pwrGreen, b = pwrBlue; if (fl_color_chooser("Power meter color", r, g, b)) { pwrRed = r; pwrGreen = g; pwrBlue = b; sldrPWRcolor->color( fl_rgb_color (r, g, b), bgclr ); dlgDisplayConfig->redraw(); } } void cbSWRMeterColor() { uchar r = swrRed, g = swrGreen, b = swrBlue; if (fl_color_chooser("SWR meter color", r, g, b)) { swrRed = r; swrGreen = g; swrBlue = b; sldrSWRcolor->color( fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr ); dlgDisplayConfig->redraw(); } } void cbVoltMeterColor() { uchar r = voltRed, g = voltGreen, b = voltBlue; if (fl_color_chooser("Volt meter color", r, g, b)) { voltRed = r; voltGreen = g; voltBlue = b; sldrVoltcolor->color( fl_rgb_color (voltRed, voltGreen, voltBlue), bgclr ); dlgDisplayConfig->redraw(); } } void cb_tab_defaults() { tab_red = 230; tab_green = 230; tab_blue = 230; tab_color = fl_rgb_color( tab_red, tab_green, tab_blue); btn_tab_color->color(tab_color); btn_tab_color->redraw(); if (tabsGeneric) { tabsGeneric->selection_color(tab_color); tabsGeneric->redraw(); } if (tabs550) { tabs550->selection_color(tab_color); tabs550->redraw(); } if (tabCmds) { tabCmds->selection_color(tab_color); tabCmds->redraw(); } } void cb_tab_colors() { uchar r = tab_red, g = tab_green, b = tab_blue; if (fl_color_chooser("TAB color", r, g, b)) { tab_red = r; tab_green = g; tab_blue = b; tab_color = fl_rgb_color(r, g, b); btn_tab_color->color(tab_color); btn_tab_color->redraw(); if (tabsGeneric) { tabsGeneric->selection_color(tab_color); tabsGeneric->redraw(); } if (tabs550) { tabs550->selection_color(tab_color); tabs550->redraw(); } if (tabCmds) { tabCmds->selection_color(tab_color); tabCmds->redraw(); } } } void setColors() { progStatus.swrRed = swrRed; progStatus.swrGreen = swrGreen; progStatus.swrBlue = swrBlue; progStatus.pwrRed = pwrRed; progStatus.pwrGreen = pwrGreen; progStatus.pwrBlue = pwrBlue; progStatus.smeterRed = smeterRed; progStatus.smeterGreen = smeterGreen; progStatus.smeterBlue = smeterBlue; progStatus.peakRed = peakRed; progStatus.peakGreen = peakGreen; progStatus.peakBlue = peakBlue; progStatus.voltRed = voltRed; progStatus.voltGreen = voltGreen; progStatus.voltBlue = voltBlue; progStatus.fg_red = fg_red; progStatus.fg_green = fg_green; progStatus.fg_blue = fg_blue; progStatus.bg_red = bg_red; progStatus.bg_green = bg_green; progStatus.bg_blue = bg_blue; progStatus.fontnbr = selfont; FreqDispA->font(selfont); FreqDispB->font(selfont); progStatus.fg_sys_red = fg_sys_red; progStatus.fg_sys_green = fg_sys_green; progStatus.fg_sys_blue = fg_sys_blue; progStatus.bg_sys_red = bg_sys_red; progStatus.bg_sys_green = bg_sys_green; progStatus.bg_sys_blue = bg_sys_blue; progStatus.bg2_sys_red = bg2_sys_red; progStatus.bg2_sys_green = bg2_sys_green; progStatus.bg2_sys_blue = bg2_sys_blue; progStatus.slider_red = bg_slider_red; progStatus.slider_green = bg_slider_green; progStatus.slider_blue = bg_slider_blue; progStatus.slider_btn_red = btn_slider_red; progStatus.slider_btn_green = btn_slider_green; progStatus.slider_btn_blue = btn_slider_blue; progStatus.lighted_btn_red = btn_lt_color_red; progStatus.lighted_btn_green = btn_lt_color_green; progStatus.lighted_btn_blue = btn_lt_color_blue; progStatus.tab_red = tab_red; progStatus.tab_green = tab_green; progStatus.tab_blue = tab_blue; if (selrig->inuse == onB) { FreqDispB->SetCOLORS( fl_rgb_color(fg_red, fg_green, fg_blue), bgclr); FreqDispA->SetCOLORS( fl_rgb_color(fg_red, fg_green, fg_blue), fl_color_average(bgclr, FL_BLACK, 0.87)); } else { FreqDispA->SetCOLORS( fl_rgb_color(fg_red, fg_green, fg_blue), bgclr); FreqDispB->SetCOLORS( fl_rgb_color(fg_red, fg_green, fg_blue), fl_color_average(bgclr, FL_BLACK, 0.87)); } grpMeters->color(bgclr); meter_fill_box->color(bgclr); scaleSmeter->color(bgclr); scaleSmeter->labelcolor(fgclr); mtr_SMETER->color(bgclr); mtr_SMETER->labelcolor(fgclr); scalePower->color(bgclr); scalePower->labelcolor(fgclr); mtr_PWR->color(bgclr); mtr_PWR->labelcolor(fgclr); scaleVoltage->color(bgclr); scaleVoltage->labelcolor(fgclr); scaleVoltage->redraw(); mtr_VOLTS->color(bgclr); mtr_VOLTS->labelcolor(fgclr); btnALC_IDD_SWR->color(bgclr); btnALC_IDD_SWR->labelcolor(fgclr); btnALC_IDD_SWR->redraw(); mtr_SWR->color(bgclr); mtr_SWR->labelcolor(fgclr); sldrFwdPwr->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr); sldrFwdPwr->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); sldrVoltage->color(fl_rgb_color (voltRed, voltGreen, voltBlue), bgclr); sldrVoltage->PeakColor(bgclr);//fl_rgb_color (voltRed, voltGreen, voltBlue)); sldrVoltage->redraw(); sldrRcvSignal->color(fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr); sldrRcvSignal->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); sldrALC->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sldrALC->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); sldrIDD->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sldrIDD->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); mtr_ALC->color(bgclr); mtr_ALC->labelcolor(fgclr); sldrIDD->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sldrIDD->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); mtr_IDD->color(bgclr); mtr_IDD->labelcolor(fgclr); sldrSWR->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sldrSWR->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); grpMeters->redraw(); if (btnVol) btnVol->selection_color(btn_lt_color); if (btnNR) btnNR->selection_color(btn_lt_color); if (btnIFsh) btnIFsh->selection_color(btn_lt_color); if (btnNotch) btnNotch->selection_color(btn_lt_color); if (btnA) btnA->selection_color(btn_lt_color); if (btnB) btnB->selection_color(btn_lt_color); if (btnSplit) btnSplit->selection_color(btn_lt_color); if (btnAttenuator) btnAttenuator->selection_color(btn_lt_color); if (btnPreamp) btnPreamp->selection_color(btn_lt_color); if (btnNOISE) btnNOISE->selection_color(btn_lt_color); if (btnAutoNotch) btnAutoNotch->selection_color(btn_lt_color); if (btnTune) btnTune->selection_color(btn_lt_color); if (btn_tune_on_off) btn_tune_on_off->selection_color(btn_lt_color); if (btnPTT) btnPTT->selection_color(btn_lt_color); if (btnLOCK) btnLOCK->selection_color(btn_lt_color); if (btnAuxRTS) btnAuxRTS->selection_color(btn_lt_color); if (btnAuxDTR) btnAuxDTR->selection_color(btn_lt_color); if (btnSpot) btnSpot->selection_color(btn_lt_color); if (btn_vox) btn_vox->selection_color(btn_lt_color); if (btnCompON) btnCompON->selection_color(btn_lt_color); if (btnPOWER) btnPOWER->selection_color(btn_lt_color); if (btn_tt550_vox) btn_tt550_vox->selection_color(btn_lt_color); if (btn_tt550_CompON) btn_tt550_CompON->selection_color(btn_lt_color); if (sldrVOLUME) sldrVOLUME->color(bg_slider); if (sldrVOLUME) sldrVOLUME->selection_color(btn_slider); if (sldrRFGAIN) sldrRFGAIN->color(bg_slider); if (sldrRFGAIN) sldrRFGAIN->selection_color(btn_slider); if (sldrSQUELCH) sldrSQUELCH->color(bg_slider); if (sldrSQUELCH) sldrSQUELCH->selection_color(btn_slider); if (sldrNR) sldrNR->color(bg_slider); if (sldrNR) sldrNR->selection_color(btn_slider); if (sldrIFSHIFT) sldrIFSHIFT->color(bg_slider); if (sldrIFSHIFT) sldrIFSHIFT->selection_color(btn_slider); if (sldrINNER) sldrINNER->color(bg_slider); if (sldrINNER) sldrINNER->selection_color(btn_slider); if (sldrOUTER) sldrOUTER->color(bg_slider); if (sldrOUTER) sldrOUTER->selection_color(btn_slider); if (sldrNOTCH) sldrNOTCH->color(bg_slider); if (sldrNOTCH) sldrNOTCH->selection_color(btn_slider); if (sldrMICGAIN) sldrMICGAIN->color(bg_slider); if (sldrMICGAIN) sldrMICGAIN->selection_color(btn_slider); if (sldrPOWER) sldrPOWER->color(bg_slider); if (sldrPOWER) sldrPOWER->selection_color(btn_slider); if (spnrPOWER) spnrPOWER->color(bg_slider); if (spnrVOLUME) spnrVOLUME->color(bg_slider); mainwindow->redraw(); } void cb_reset_display_dialog() { cb_sys_defaults(); cb_lighted_default(); cb_slider_defaults(); default_meters(); setColors(); } void cbOkDisplayDialog() { setColors(); dlgDisplayConfig->hide(); } void cbCancelDisplayDialog() { dlgDisplayConfig->hide(); } void setDisplayColors() { if (dlgDisplayConfig == NULL) return; swrRed = progStatus.swrRed; swrGreen = progStatus.swrGreen; swrBlue = progStatus.swrBlue; pwrRed = progStatus.pwrRed; pwrGreen = progStatus.pwrGreen; pwrBlue = progStatus.pwrBlue; smeterRed = progStatus.smeterRed; smeterGreen = progStatus.smeterGreen; smeterBlue = progStatus.smeterBlue; peakRed = progStatus.peakRed; peakGreen = progStatus.peakGreen; peakBlue = progStatus.peakBlue; voltRed = progStatus.voltRed; voltGreen = progStatus.voltGreen; voltBlue = progStatus.voltBlue; fg_red = progStatus.fg_red; fg_green = progStatus.fg_green; fg_blue = progStatus.fg_blue; bg_red = progStatus.bg_red; bg_green = progStatus.bg_green; bg_blue = progStatus.bg_blue; bgclr = fl_rgb_color(bg_red, bg_green, bg_blue); fgclr = fl_rgb_color(fg_red, fg_green, fg_blue); fg_sys_red = progStatus.fg_sys_red; fg_sys_green = progStatus.fg_sys_green; fg_sys_blue = progStatus.fg_sys_blue; bg_sys_red = progStatus.bg_sys_red; bg_sys_green = progStatus.bg_sys_green; bg_sys_blue = progStatus.bg_sys_blue; bg2_sys_red = progStatus.bg2_sys_red; bg2_sys_green = progStatus.bg2_sys_green; bg2_sys_blue = progStatus.bg2_sys_blue; bg_slider_red = progStatus.slider_red; bg_slider_green = progStatus.slider_green; bg_slider_blue = progStatus.slider_blue; btn_slider_red = progStatus.slider_btn_red; btn_slider_green = progStatus.slider_btn_green; btn_slider_blue = progStatus.slider_btn_blue; tab_red = progStatus.tab_red; tab_green = progStatus.tab_green; tab_blue = progStatus.tab_blue; sldrColors->color(fl_rgb_color(bg_slider_red, bg_slider_green, bg_slider_blue)); sldrColors->selection_color(fl_rgb_color(btn_slider_red, btn_slider_green, btn_slider_blue)); btn_lt_color_red = progStatus.lighted_btn_red; btn_lt_color_green = progStatus.lighted_btn_green; btn_lt_color_blue = progStatus.lighted_btn_blue; lblTest->labelcolor(fl_rgb_color(fg_red, fg_green, fg_blue)); lblTest->color(bgclr); scaleSmeterColor->color(bgclr); scaleSmeterColor->labelcolor(fgclr); scalePWRcolor->color(bgclr); scalePWRcolor->labelcolor(fgclr); scaleSWRcolor->color(bgclr); scaleSWRcolor->labelcolor(fgclr); scaleVoltcolor->color(bgclr); scaleVoltcolor->labelcolor(fgclr); grpMeterColor->color(bgclr); grpMeterColor->labelcolor(fgclr); sldrRcvSignalColor->color( fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr ); sldrPWRcolor->color( fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr ); sldrSWRcolor->color( fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr ); sldrVoltcolor->color( fl_rgb_color (voltRed, voltGreen, voltBlue), bgclr ); sldrRcvSignalColor->minimum(0); sldrRcvSignalColor->maximum(100); sldrRcvSignalColor->value(45); sldrPWRcolor->minimum(0); sldrPWRcolor->maximum(100); sldrPWRcolor->value(80); sldrSWRcolor->minimum(0); sldrSWRcolor->maximum(100); sldrSWRcolor->value(25); sldrVoltcolor->minimum(0); sldrVoltcolor->maximum(100); sldrVoltcolor->value(55); btn_lt_color = fl_rgb_color( btn_lt_color_red, btn_lt_color_green, btn_lt_color_blue); btn_slider = fl_rgb_color( btn_slider_red, btn_slider_green, btn_slider_blue); bg_slider = fl_rgb_color(bg_slider_red, bg_slider_green, bg_slider_blue); btn_lighted->value(1); btn_lighted->selection_color(btn_lt_color); sldrColors->color(bg_slider); sldrColors->selection_color(btn_slider); mnuScheme->value(mnuScheme->find_item(progStatus.ui_scheme.c_str())); dlgDisplayConfig->show(); } void cbCloseMemory() { dlgMemoryDialog->hide(); } void openMemoryDialog() { if (dlgMemoryDialog == NULL) return; dlgMemoryDialog->show(); } void show_controls() { Fl_Widget * vtab = (Fl_Widget *)0; if (tabsGeneric && !progStatus.visible_tab.empty()) { Fl_Widget * const *vtabs = tabsGeneric->array(); int ntabs = tabsGeneric->children(); for (int n = 0; n < ntabs; n++) { if (progStatus.visible_tab == vtabs[n]->label()) { vtab = vtabs[n]; } vtabs[n]->redraw(); } } switch (progStatus.UIsize) { case touch_ui : { if (selrig->name_ == rig_TT550.name_) { tabs550->show(); tabsGeneric->hide(); tabs550->redraw(); } else { tabs550->hide(); tabsGeneric->show(); tabsGeneric->redraw(); } mainwindow->redraw(); break; } case wide_ui : { if (selrig->name_ == rig_TT550.name_) { tabsGeneric->hide(); tabs550->show(); tabs550->redraw(); } else { tabs550->hide(); tabsGeneric->show(); tabsGeneric->redraw(); } if (progStatus.embed_tabs) { // embedded int X = mainwindow->x(), Y = mainwindow->y(), W = mainwindow->w(), H = mainwindow->h(); if ((progStatus.show_tabs && !progStatus.first_use) || (!progStatus.show_tabs && progStatus.first_use)) { H = WIDE_MAINH + WIDE_MENUH; mainwindow->resize( X, Y, W, H ); mainwindow->size_range(WIDE_MAINW, H, 0, H); tabs->hide(); progStatus.show_tabs = false; mainwindow->redraw(); } else { H = WIDE_MENUH + WIDE_MAINH + WIDE_TABSH; mainwindow->resize( X, Y, W, H); mainwindow->size_range(WIDE_MAINW, H, 0, H); tabs->add(grpTABS); grpTABS->resize( tabs->x(), tabs->y(), tabs->w(), tabs->h()); grpTABS->show(); tabs->show(); progStatus.show_tabs = true; mainwindow->redraw(); } } else { if ((progStatus.show_tabs && !progStatus.first_use) || (!progStatus.show_tabs && progStatus.first_use)) { tabs_dialog->hide(); progStatus.show_tabs = false; } else if ((!progStatus.show_tabs && !progStatus.first_use) || (progStatus.show_tabs && progStatus.first_use)) { static int X, Y, W, H, dH; X = mainwindow->x(); Y = mainwindow->y(); W = mainwindow->w(); H = WIDE_MAINH + WIDE_MENUH; dH = mainwindow->decorated_h(); tabs_dialog->resize( X, Y + dH, W, tabs_dialog->h() ); grpTABS->resize(0, 0, W, tabs_dialog->h()); tabs_dialog->add(grpTABS); tabs_dialog->show(); tabs_dialog->redraw(); progStatus.show_tabs = true; mainwindow->resize( X, Y, W, H); mainwindow->size_range(WIDE_MAINW, H, 0, H); mainwindow->redraw(); } } break; } case small_ui : { if (selrig->name_ == rig_TT550.name_) { tabsGeneric->hide(); tabs550->show(); tabs550->redraw(); break; } else { tabs550->hide(); tabsGeneric->show(); tabsGeneric->redraw(); } if (progStatus.embed_tabs) { // embedded static int X = mainwindow->x(), Y = mainwindow->y(), W = mainwindow->w(), H = mainwindow->h(); if ((progStatus.show_tabs && !progStatus.first_use) || (!progStatus.show_tabs && progStatus.first_use)) { tabs_dialog->add(grpTABS); grpTABS->resize(tabs_dialog->x(), tabs_dialog->y(), tabs_dialog->w(), tabs_dialog->h()); mainwindow->resize(mainwindow->x(), mainwindow->y(), W, H); progStatus.show_tabs = false; } else if (!progStatus.show_tabs && !progStatus.first_use) { X = mainwindow->x(); Y = mainwindow->y(); W = mainwindow->w(); H = mainwindow->h(); mainwindow->resize(X, Y, W, H + grpTABS->h()); grpTABS->resize(0, H, W, grpTABS->h()); mainwindow->add(grpTABS); grpTABS->show(); progStatus.show_tabs = true; } else if (progStatus.show_tabs && progStatus.first_use) { X = mainwindow->x(); Y = mainwindow->y(); W = mainwindow->w(); H = mainwindow->h(); mainwindow->resize(X, Y, W, H + grpTABS->h()); grpTABS->resize(0, H, W, grpTABS->h()); mainwindow->add(grpTABS); grpTABS->show(); grpTABS->redraw(); mainwindow->redraw(); progStatus.show_tabs = true; } } else { if ((progStatus.show_tabs && !progStatus.first_use) || (!progStatus.show_tabs && progStatus.first_use)) { tabs_dialog->hide(); progStatus.show_tabs = false; } else if ((!progStatus.show_tabs && !progStatus.first_use) || (progStatus.show_tabs && progStatus.first_use)) { static int X, Y, W, dH; X = mainwindow->x(); //progStatus.mainX; Y = mainwindow->y(); //progStatus.mainY; W = mainwindow->w(); //progStatus.mainW; dH = mainwindow->decorated_h(); tabs_dialog->resize( X, Y + dH, W, tabs_dialog->h() ); grpTABS->resize(0, 0, W, tabs_dialog->h()); if (vtab != (Fl_Widget *)0) tabsGeneric->value(vtab); tabs_dialog->add(grpTABS); tabs_dialog->show(); tabs_dialog->redraw(); progStatus.show_tabs = true; } } break; } default : break; } if (tabsGeneric) { if (vtab != (Fl_Widget *)0) tabsGeneric->value(vtab); else progStatus.visible_tab = (tabsGeneric->value())->label(); } progStatus.first_use = false; } // a replica of the default color map used by Fltk static unsigned flrig_cmap[256] = { 0x00000000, 0xff000000, 0x00ff0000, 0xffff0000, 0x0000ff00, 0xff00ff00, 0x00ffff00, 0xffffff00, 0x55555500, 0xc6717100, 0x71c67100, 0x8e8e3800, 0x7171c600, 0x8e388e00, 0x388e8e00, 0x00008000, 0xa8a89800, 0xe8e8d800, 0x68685800, 0x98a8a800, 0xd8e8e800, 0x58686800, 0x9c9ca800, 0xdcdce800, 0x5c5c6800, 0x9ca89c00, 0xdce8dc00, 0x5c685c00, 0x90909000, 0xc0c0c000, 0x50505000, 0xa0a0a000, 0x00000000, 0x0d0d0d00, 0x1a1a1a00, 0x26262600, 0x31313100, 0x3d3d3d00, 0x48484800, 0x55555500, 0x5f5f5f00, 0x6a6a6a00, 0x75757500, 0x80808000, 0x8a8a8a00, 0x95959500, 0xa0a0a000, 0xaaaaaa00, 0xb5b5b500, 0xc0c0c000, 0xcbcbcb00, 0xd5d5d500, 0xe0e0e000, 0xeaeaea00, 0xf5f5f500, 0xffffff00, 0x00000000, 0x00240000, 0x00480000, 0x006d0000, 0x00910000, 0x00b60000, 0x00da0000, 0x00ff0000, 0x3f000000, 0x3f240000, 0x3f480000, 0x3f6d0000, 0x3f910000, 0x3fb60000, 0x3fda0000, 0x3fff0000, 0x7f000000, 0x7f240000, 0x7f480000, 0x7f6d0000, 0x7f910000, 0x7fb60000, 0x7fda0000, 0x7fff0000, 0xbf000000, 0xbf240000, 0xbf480000, 0xbf6d0000, 0xbf910000, 0xbfb60000, 0xbfda0000, 0xbfff0000, 0xff000000, 0xff240000, 0xff480000, 0xff6d0000, 0xff910000, 0xffb60000, 0xffda0000, 0xffff0000, 0x00003f00, 0x00243f00, 0x00483f00, 0x006d3f00, 0x00913f00, 0x00b63f00, 0x00da3f00, 0x00ff3f00, 0x3f003f00, 0x3f243f00, 0x3f483f00, 0x3f6d3f00, 0x3f913f00, 0x3fb63f00, 0x3fda3f00, 0x3fff3f00, 0x7f003f00, 0x7f243f00, 0x7f483f00, 0x7f6d3f00, 0x7f913f00, 0x7fb63f00, 0x7fda3f00, 0x7fff3f00, 0xbf003f00, 0xbf243f00, 0xbf483f00, 0xbf6d3f00, 0xbf913f00, 0xbfb63f00, 0xbfda3f00, 0xbfff3f00, 0xff003f00, 0xff243f00, 0xff483f00, 0xff6d3f00, 0xff913f00, 0xffb63f00, 0xffda3f00, 0xffff3f00, 0x00007f00, 0x00247f00, 0x00487f00, 0x006d7f00, 0x00917f00, 0x00b67f00, 0x00da7f00, 0x00ff7f00, 0x3f007f00, 0x3f247f00, 0x3f487f00, 0x3f6d7f00, 0x3f917f00, 0x3fb67f00, 0x3fda7f00, 0x3fff7f00, 0x7f007f00, 0x7f247f00, 0x7f487f00, 0x7f6d7f00, 0x7f917f00, 0x7fb67f00, 0x7fda7f00, 0x7fff7f00, 0xbf007f00, 0xbf247f00, 0xbf487f00, 0xbf6d7f00, 0xbf917f00, 0xbfb67f00, 0xbfda7f00, 0xbfff7f00, 0xff007f00, 0xff247f00, 0xff487f00, 0xff6d7f00, 0xff917f00, 0xffb67f00, 0xffda7f00, 0xffff7f00, 0x0000bf00, 0x0024bf00, 0x0048bf00, 0x006dbf00, 0x0091bf00, 0x00b6bf00, 0x00dabf00, 0x00ffbf00, 0x3f00bf00, 0x3f24bf00, 0x3f48bf00, 0x3f6dbf00, 0x3f91bf00, 0x3fb6bf00, 0x3fdabf00, 0x3fffbf00, 0x7f00bf00, 0x7f24bf00, 0x7f48bf00, 0x7f6dbf00, 0x7f91bf00, 0x7fb6bf00, 0x7fdabf00, 0x7fffbf00, 0xbf00bf00, 0xbf24bf00, 0xbf48bf00, 0xbf6dbf00, 0xbf91bf00, 0xbfb6bf00, 0xbfdabf00, 0xbfffbf00, 0xff00bf00, 0xff24bf00, 0xff48bf00, 0xff6dbf00, 0xff91bf00, 0xffb6bf00, 0xffdabf00, 0xffffbf00, 0x0000ff00, 0x0024ff00, 0x0048ff00, 0x006dff00, 0x0091ff00, 0x00b6ff00, 0x00daff00, 0x00ffff00, 0x3f00ff00, 0x3f24ff00, 0x3f48ff00, 0x3f6dff00, 0x3f91ff00, 0x3fb6ff00, 0x3fdaff00, 0x3fffff00, 0x7f00ff00, 0x7f24ff00, 0x7f48ff00, 0x7f6dff00, 0x7f91ff00, 0x7fb6ff00, 0x7fdaff00, 0x7fffff00, 0xbf00ff00, 0xbf24ff00, 0xbf48ff00, 0xbf6dff00, 0xbf91ff00, 0xbfb6ff00, 0xbfdaff00, 0xbfffff00, 0xff00ff00, 0xff24ff00, 0xff48ff00, 0xff6dff00, 0xff91ff00, 0xffb6ff00, 0xffdaff00, 0xffffff00 }; Fl_Color flrig_def_color(int n) { if ( n > 255 ) n = 255; if (n < 0) n = 0; return (Fl_Color)flrig_cmap[n]; } extern std::string print_all(); void cb_send_command(std::string command, Fl_Output *resp) { if (command == "PRINT") { fl_alert2("%s", print_all().c_str()); #ifndef __WIN32__ std::cout << print_all(); #endif return; } if (command.empty()) return; bool usehex = false; std::string cmd = ""; if (command.find("x") != std::string::npos) { // hex std::strings size_t p = 0; usehex = true; unsigned int val; while (( p = command.find("x", p)) != std::string::npos) { sscanf(&command[p+1], "%x", &val); cmd += (unsigned char) val; p += 3; } } else cmd = command; if (resp) { resp->value(""); resp->redraw(); } // lock out polling loops until done guard_lock lock1(&mutex_srvc_reqs); guard_lock lock2(&mutex_serial); sendCommand(cmd); set_trace(2, "command: ", command.c_str()); waitResponse(200); std::string retstr = usehex ? str2hex(respstr.c_str(), respstr.length()) : respstr; set_trace(2, "response: ", retstr.c_str()); if (resp) { resp->value(retstr.c_str()); resp->redraw(); } } // ===================================================================== // logbook support code // ===================================================================== bool cwlog_editing = false; int cwlog_edit_nbr = 0; bool cwlog_changed = false; bool cwlog_is_open = false; void cwlog_set_edit(bool on) { cwlog_editing = on; if (on) { btn_cwlog_edit_entry->label("Delete"); btn_cwlog_edit_entry->redraw_label(); btn_cwlog_clear_qso->label("Cancel"); btn_cwlog_clear_qso->redraw_label(); } else { btn_cwlog_edit_entry->label("Edit"); btn_cwlog_edit_entry->redraw_label(); btn_cwlog_clear_qso->label("Clear"); btn_cwlog_clear_qso->redraw_label(); } } bool cwlog_compare( int &dir, int fld, std::string &s1, std::string &s2) { size_t p1 = 0, p2 = 0; for (int n = 0; n < fld; n++) { p1 = s1.find('\t', p1 + 1); p2 = s2.find('\t', p2 + 1); } if (dir == 1) return (s2.substr(p2) < s1.substr(p1)); return (s2.substr(p2) > s1.substr(p1)); } bool cwlog_freq_compare( int &dir, int fld, std::string &s1, std::string &s2) { size_t p1 = 0, p2 = 0; for (int n = 0; n < fld; n++) { p1 = s1.find('\t', p1 + 1); p2 = s2.find('\t', p2 + 1); } float f1 = atof(s1.substr(p1).c_str()); float f2 = atof(s2.substr(p2).c_str()); if (dir == 1) return (f2 < f1); return (f2 > f1); } static int dtdir = 1; static int dtpos = 0; void cwlog_sort_by_datetime() { if (cwlog_editing) return; size_t nbr = brwsr_cwlog_entries->size(); if (nbr == 0) return; std::string entries[nbr]; for (size_t n = 0; n < nbr; n++) entries[n] = brwsr_cwlog_entries->text(n+1); std::string temp; if (nbr > 1) { for (size_t n = 0; n < nbr - 1; n++) { for (size_t j = n + 1; j < nbr; j++) { if (cwlog_compare (dtdir, dtpos, entries[n], entries[j])) { temp = entries[j]; entries[j] = entries[n]; entries[n] = temp; } } } } brwsr_cwlog_entries->clear(); for (size_t i = 0; i < nbr; i++) brwsr_cwlog_entries->add(entries[i].c_str()); brwsr_cwlog_entries->redraw(); if (dtdir == 1) dtdir = -1; else dtdir = 1; } static int freqdir = 1; static int freqpos = 2; void cwlog_sort_by_freq() { if (cwlog_editing) return; size_t nbr = brwsr_cwlog_entries->size(); if (nbr == 0) return; std::string entries[nbr]; for (size_t n = 0; n < nbr; n++) entries[n] = brwsr_cwlog_entries->text(n+1); std::string temp; if (nbr > 1) { for (size_t n = 0; n < nbr - 1; n++) { for (size_t j = n + 1; j < nbr; j++) { if (cwlog_freq_compare (freqdir, freqpos, entries[n], entries[j])) { temp = entries[j]; entries[j] = entries[n]; entries[n] = temp; } } } } brwsr_cwlog_entries->clear(); for (size_t i = 0; i < nbr; i++) brwsr_cwlog_entries->add(entries[i].c_str()); brwsr_cwlog_entries->redraw(); if (freqdir == 1) freqdir = -1; else freqdir = 1; } static int calldir = 1; static int callpos = 3; void cwlog_sort_by_call() { if (cwlog_editing) return; size_t nbr = brwsr_cwlog_entries->size(); if (nbr == 0) return; std::string entries[nbr]; for (size_t n = 0; n < nbr; n++) entries[n] = brwsr_cwlog_entries->text(n+1); std::string temp; if (nbr > 1) { for (size_t n = 0; n < nbr - 1; n++) { for (size_t j = n + 1; j < nbr; j++) { if (cwlog_compare (calldir, callpos, entries[n], entries[j])) { temp = entries[j]; entries[j] = entries[n]; entries[n] = temp; } } } } brwsr_cwlog_entries->clear(); for (size_t i = 0; i < nbr; i++) brwsr_cwlog_entries->add(entries[i].c_str()); brwsr_cwlog_entries->redraw(); if (calldir == 1) calldir = -1; else calldir = 1; } static int nbrdir = 1; static int nbrpos = 7; void cwlog_sort_by_nbr() { if (cwlog_editing) return; size_t nbr = brwsr_cwlog_entries->size(); if (nbr == 0) return; std::string entries[nbr]; for (size_t n = 0; n < nbr; n++) entries[n] = brwsr_cwlog_entries->text(n+1); std::string temp; if (nbr > 1) { for (size_t n = 0; n < nbr - 2; n++) { for (size_t j = n + 1; j < nbr - 1; j++) { if (cwlog_compare (nbrdir, nbrpos, entries[n], entries[j])) { temp = entries[j]; entries[j] = entries[n]; entries[n] = temp; } } } } brwsr_cwlog_entries->clear(); for (size_t i = 0; i < nbr; i++) brwsr_cwlog_entries->add(entries[i].c_str()); brwsr_cwlog_entries->redraw(); if (nbrdir == 1) nbrdir = -1; else nbrdir = 1; } void cwlog_clear_qso() { cw_qso_date->value(""); cw_qso_time->value(""); cw_freq->value(""); cw_op_call->value(""); cw_op_name->value(""); cw_rst_in->value(""); cw_rst_out->value(""); cw_xchg_in->value(""); if (cwlog_editing) cwlog_set_edit(false); } void cwlog_save_qso() { char line[256]; if (cwlog_editing) { snprintf(line, sizeof(line), "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%05d\t%s", cw_qso_date->value(), cw_qso_time->value(), cw_freq->value(), cw_op_call->value(), cw_op_name->value(), cw_rst_in->value(), cw_rst_out->value(), (int)cw_log_nbr->value(), cw_xchg_in->value()); brwsr_cwlog_entries->insert(cwlog_edit_nbr, line); brwsr_cwlog_entries->remove(cwlog_edit_nbr + 1); brwsr_cwlog_entries->select(cwlog_edit_nbr); cwlog_set_edit(false); } else { snprintf(line, sizeof(line), "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%05d\t%s", cw_qso_date->value(), cw_qso_time->value(), cw_freq->value(), cw_op_call->value(), cw_op_name->value(), cw_rst_in->value(), cw_rst_out->value(), (int)cw_log_nbr->value(), cw_xchg_in->value()); brwsr_cwlog_entries->add(line); } cwlog_changed = true; } void cwlog_delete_entry() { brwsr_cwlog_entries->remove(cwlog_edit_nbr); brwsr_cwlog_entries->select(cwlog_edit_nbr, false); brwsr_cwlog_entries->redraw(); cwlog_clear_qso(); cwlog_changed = true; } void cwlog_edit_entry() { if (cwlog_editing) { cwlog_delete_entry(); return; } cwlog_edit_nbr = brwsr_cwlog_entries->value(); if (!cwlog_edit_nbr) return; cwlog_clear_qso(); size_t ptr = 0; std::string entry = brwsr_cwlog_entries->text(cwlog_edit_nbr); ptr = entry.find('\t'); cw_qso_date->value(entry.substr(0, ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); cw_qso_time->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); cw_freq->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); cw_op_call->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); cw_op_name->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); cw_rst_in->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); cw_rst_out->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); cw_log_nbr->value(atoi(entry.substr(0,ptr).c_str())); entry.erase(0, ptr+1); ptr = entry.find('\t'); cw_xchg_in->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); cwlog_set_edit(true); } void cwlog_view() { if (!cwlog_viewer) { cwlog_viewer = new_cwlogbook_dialog(); if (!progStatus.cw_log_name.empty()) { txt_cwlog_file->value(progStatus.cw_log_name.c_str()); cwlog_load(); } else cwlog_open(); } cwlog_viewer->show(); } void cwlog_save() { if (progStatus.cw_log_name.empty()) return; std::ofstream oLog(progStatus.cw_log_name.c_str()); if (!oLog) { fl_message ("Could not write to %s", progStatus.cw_log_name.c_str()); return; } size_t n = brwsr_cwlog_entries->size(); std::string oline; for (size_t i = 1; i <= n; i++) { oline = brwsr_cwlog_entries->text(i); if (oline.empty()) continue; oLog << oline << std::endl; } oLog.close(); cwlog_changed = false; } void cwlog_load() { std::ifstream iLog(progStatus.cw_log_name.c_str()); if (!iLog) return; brwsr_cwlog_entries->clear(); char line[256]; std::string sline; while (!iLog.eof()) { memset(line, 0, 256); iLog.getline(line, 256); sline = line; if (!sline.empty()) brwsr_cwlog_entries->add(sline.c_str()); } iLog.close(); brwsr_cwlog_entries->redraw(); cwlog_is_open = true; } void cwlog_save_as() { // Create and post the local native file chooser Fl_Native_File_Chooser fnfc; fnfc.title("Save As log file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM); fnfc.filter("CW Log\t*.txt"); // default directory to use fnfc.directory(RigHomeDir.c_str()); fnfc.preset_file(progStatus.cw_log_name.c_str()); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: progStatus.cw_log_name = fnfc.filename(); txt_cwlog_file->value(progStatus.cw_log_name.c_str()); } cwlog_save(); } void cwlog_open() { if (cwlog_is_open && cwlog_changed) cwlog_save(); // Create and post the local native file chooser Fl_Native_File_Chooser fnfc; fnfc.title("Select log file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE); fnfc.filter("CW Log\t*.txt"); // default directory to use fnfc.directory(RigHomeDir.c_str()); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: progStatus.cw_log_name = fnfc.filename(); txt_cwlog_file->value(progStatus.cw_log_name.c_str()); txt_cwlog_file->redraw(); cwlog_load(); } } void cwlog_new() { if (cwlog_is_open && cwlog_changed) cwlog_save(); brwsr_cwlog_entries->clear(); brwsr_cwlog_entries->redraw(); progStatus.cw_log_name.clear(); txt_cwlog_file->value(progStatus.cw_log_name.c_str()); txt_cwlog_file->redraw(); Fl_Native_File_Chooser fnfc; fnfc.title("Create new log file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM); fnfc.filter("CW Log\t*.txt"); // default directory to use fnfc.directory(RigHomeDir.c_str()); fnfc.preset_file("cwlog.txt"); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: progStatus.cw_log_name = fnfc.filename(); txt_cwlog_file->value(progStatus.cw_log_name.c_str()); } } void cwlog_close() { if (cwlog_is_open && cwlog_changed) cwlog_save(); } void cwlog_export_adif() { // Create and post the local native file chooser Fl_Native_File_Chooser fnfc; fnfc.title("Export to ADIF file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM); fnfc.filter("ADIF Log\t*.{adi,adif}"); // default directory to use fnfc.directory(RigHomeDir.c_str()); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: break; } std::string export_fname = fnfc.filename(); std::ofstream oExport(export_fname.c_str()); if (!oExport) { fl_message ("Could not write to %s", export_fname.c_str()); return; } std::string logline, cw_qso_date, cw_qso_time, cw_freq, cw_op_call, cw_op_name, cw_rst_in, cw_rst_out, cw_log_nbr, qso_notes; size_t ptr = std::string::npos; size_t n = brwsr_cwlog_entries->size(); for (size_t i = 1; i <= n; i++) { logline = brwsr_cwlog_entries->text(i); if (logline.empty()) continue; ptr = logline.find('\t'); cw_qso_date = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); cw_qso_time = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); cw_freq = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); cw_op_call = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); cw_op_name = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); cw_rst_in = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); cw_rst_out = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); cw_log_nbr = logline.substr(0, ptr); logline.erase(0, ptr+1); qso_notes = logline; oExport << "" << cw_qso_date << "" << cw_qso_time << "" << cw_freq << "CW" << "" << cw_op_call << "" << cw_op_name << "" << cw_rst_in << "" << cw_rst_out << "" << cw_log_nbr << "" << qso_notes << "" << std::endl; } oExport.close(); } std::string cwlog_adif_extract( std::string FIELD, std::string line) { size_t p1, p2; p1 = line.find(FIELD); if (p1 != std::string::npos) { p1 = line.find(">", p1); if (p1 != std::string::npos) { p1++; p2 = line.find("<", p1); if (p2 != std::string::npos) return line.substr(p1, p2 - p1); } } return ""; } void cwlog_import_adif() { std::string import_fname; Fl_Native_File_Chooser fnfc; fnfc.title("Import from ADIF file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE); fnfc.filter("ADIF Log\t*.{adi,adif}"); // default directory to use fnfc.directory(RigHomeDir.c_str()); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: break; } import_fname = fnfc.filename(); std::ifstream iImport(import_fname.c_str()); if (!iImport) return; // current log size_t n = brwsr_cwlog_entries->size(); size_t p; std::string fulllog; std::string teststr; for (size_t i = 1; i <= n; i++) { fulllog.append(brwsr_cwlog_entries->text(i)).append("\n"); } char buff[512]; std::string line, ldate, ltime, lfreq, lcall, lname, lrst_in, lrst_out, lnbr, lnotes, lbrwsr; while (!iImport.eof()) { iImport.getline(buff, 512); line = buff; if (cwlog_adif_extract("MODE", line) == "CW") { ldate = cwlog_adif_extract("QSO_DATE", line); ltime = cwlog_adif_extract("TIME_ON", line).substr(0,4); lfreq = cwlog_adif_extract("FREQ", line); lcall = cwlog_adif_extract("CALL", line); lname = cwlog_adif_extract("NAME", line); lrst_in = cwlog_adif_extract("RST_RCVD", line); lrst_out = cwlog_adif_extract("RST_SENT", line); lnbr = cwlog_adif_extract("STX", line); lnotes = cwlog_adif_extract("NOTES", line); lbrwsr.assign(ldate).append("\t"); lbrwsr.append(ltime).append("\t"); lbrwsr.append(lfreq).append("\t"); lbrwsr.append(lcall).append("\t"); teststr = lbrwsr; lbrwsr.append(lname).append("\t"); lbrwsr.append(lrst_in).append("\t"); lbrwsr.append(lrst_out).append("\t"); lbrwsr.append(lnbr).append("\t"); lbrwsr.append(lnotes); p = lbrwsr.find("\n"); if (p != std::string::npos) lbrwsr.erase(p); if (fulllog.find(teststr) == std::string::npos && !ldate.empty() && !ltime.empty()) { fulllog.append(lbrwsr).append("\n"); brwsr_cwlog_entries->add(lbrwsr.c_str()); } } } cwlog_changed = true; iImport.close(); } flrig-2.0.04/src/support/socket_io.cxx0000664000175000017500000001500714504050363014634 00000000000000// socket_io.cxx // // Author: Dave Freese, W1HKJ // Stelios Bounanos, M0GLD // // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "status.h" #include "debug.h" #include "util.h" #include "gettext.h" #include "rigpanel.h" #include "socket_io.h" #include "socket.h" #include "support.h" #ifdef WIN32 # include #else # include #endif Socket *tcpip = (Socket *)0; Address *remote_addr = (Address *)0; static bool exit_socket_loop = false; static std::string rxbuffer; pthread_t *rcv_socket_thread = 0; pthread_mutex_t mutex_rcv_socket = PTHREAD_MUTEX_INITIALIZER; void *rcv_socket_loop(void *) { for (;;) { MilliSleep(500);//5); { guard_lock socket_lock(&mutex_rcv_socket); if (exit_socket_loop) break; if (tcpip && tcpip->fd() != -1) { try { tcpip->recv(rxbuffer); box_tcpip_connect->color(FL_GREEN); box_tcpip_connect->redraw(); box_xcvr_connect->color(FL_GREEN); box_xcvr_connect->redraw(); tcpip_menu_box->color(FL_GREEN); tcpip_menu_box->redraw(); } catch (const SocketException& e) { LOG_ERROR("Error %d, %s", e.error(), e.what()); box_tcpip_connect->color(FL_YELLOW); box_tcpip_connect->redraw(); box_xcvr_connect->color(FL_YELLOW); box_xcvr_connect->redraw(); tcpip_menu_box->color(FL_YELLOW); tcpip_menu_box->redraw(); } } } // end guard_lock } exit_socket_loop = false; return NULL; } void connect_to_remote() { try { if (remote_addr) delete remote_addr; remote_addr = new Address(progStatus.tcpip_addr.c_str(), progStatus.tcpip_port.c_str()); LOG_QUIET("Created new remote_addr @ %p", remote_addr); if (!tcpip) { guard_lock socket_lock(&mutex_rcv_socket); tcpip = new Socket(*remote_addr); LOG_QUIET("Created new socket @ %p", tcpip); tcpip->set_timeout(0.001); tcpip->connect(); tcpip->set_nonblocking(true); LOG_QUIET("Connected to %d", tcpip->fd()); tcpip_box->show(); box_tcpip_connect->color(FL_GREEN); box_tcpip_connect->redraw(); box_xcvr_connect->color(FL_GREEN); box_xcvr_connect->redraw(); tcpip_menu_box->color(FL_GREEN); tcpip_menu_box->redraw(); } if (tcpip->fd() == -1) { try { tcpip->connect(*remote_addr); tcpip->set_nonblocking(true); LOG_QUIET("Connected to %d", tcpip->fd()); tcpip_box->show(); box_tcpip_connect->color(FL_GREEN); box_tcpip_connect->redraw(); box_xcvr_connect->color(FL_GREEN); box_xcvr_connect->redraw(); tcpip_menu_box->color(FL_GREEN); tcpip_menu_box->redraw(); } catch (const SocketException & e) { LOG_ERROR("Error: %d, %s", e.error(), e.what()); delete remote_addr; remote_addr = 0; delete tcpip; tcpip = 0; box_tcpip_connect->color(FL_LIGHT1); box_tcpip_connect->redraw(); box_xcvr_connect->color(FL_LIGHT1); box_xcvr_connect->redraw(); tcpip_menu_box->color(FL_LIGHT1); tcpip_menu_box->redraw(); throw e; } } if (!rcv_socket_thread) { rcv_socket_thread = new pthread_t; if (pthread_create(rcv_socket_thread, NULL, rcv_socket_loop, NULL)) { perror("pthread_create"); exit(EXIT_FAILURE); } LOG_QUIET("%s", "Socket receive thread started"); } } catch (const SocketException& e) { LOG_ERROR("Error: %d, %s", e.error(), e.what()); delete remote_addr; remote_addr = 0; LOG_ERROR("Deleted remote address"); delete tcpip; tcpip = 0; LOG_ERROR("Deleted tcpip socket"); throw e; } return; } void disconnect_from_remote() { if (!tcpip || tcpip->fd() == -1) return; tcpip->close(); delete tcpip; tcpip = 0; LOG_QUIET("%s", "Deleted tcpip socket instance"); delete remote_addr; remote_addr = 0; LOG_QUIET("%s", "Deleted socket address instance"); exit_socket_loop = true; pthread_join(*rcv_socket_thread, NULL); rcv_socket_thread = NULL; LOG_QUIET("%s", "Exited from socket read thread"); box_tcpip_connect->color(FL_LIGHT1); box_tcpip_connect->redraw(); box_xcvr_connect->color(FL_LIGHT1); box_xcvr_connect->redraw(); tcpip_menu_box->color(FL_LIGHT1); tcpip_menu_box->redraw(); } int retry_after = 0; int drop_count = 0; void send_to_remote(std::string cmd_string) { if (retry_after > 0) { retry_after -= progStatus.serloop_timing; if (retry_after < 0) retry_after = 0; return; } if (!tcpip || tcpip->fd() == -1) { try { connect_to_remote(); } catch (...) { LOG_QUIET("Retry connect in %d seconds", progStatus.tcpip_reconnect_after); retry_after = 1000 * progStatus.tcpip_reconnect_after; return; } } try { tcpip->send(cmd_string); LOG_WARN("send to remote: %s", cmd_string.c_str()); drop_count = 0; } catch (const SocketException& e) { LOG_ERROR("Error: %d, %s", e.error(), e.what()); drop_count++; if (drop_count == progStatus.tcpip_drops_allowed) { disconnect_from_remote(); drop_count = 0; } } return; } int read_from_remote(std::string &str) { if (!tcpip || tcpip->fd() == -1) return 0; { guard_lock socket_lock(&mutex_rcv_socket); str = rxbuffer; rxbuffer.clear(); } char szc[200]; snprintf(szc, sizeof(szc), "read_from_remote() : %s", str.c_str()); LOG_WARN("%s", szc); return (int)str.length(); } flrig-2.0.04/src/support/status.cxx0000664000175000017500000025542514505023152014207 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include "dialogs.h" #include "status.h" #include "util.h" #include "rig.h" #include "rigs.h" #include "support.h" #include "config.h" #include "rigpanel.h" #include "ui.h" #include "debug.h" std::string xcvr_name = rig_null.name_; int current_ui_size = -1; status progStatus = { 50, // int mainX; 50, // int mainY; 800, // int mainW; 150, // int mainH; small_ui, // UISIZE, UIsize; false, // UIchanged; 20, // int memX; 20, // int memY; 600, // int memW; 164, // int memH; 785, // int metersX; 50, // int metersy; false, // bool meters_dialog_visible; 20, // int ddX; 20, // int ddY; "NONE", // std::string xcvr_serial_port; 0, // int serial_baudrate; 2, // int stopbits; 2, // int serial_retries; 0, // int serial_write_delay; 0, // int serial_post_write_delay 50, // int serial_timeout; 0, // bool serial_catptt; 0, // bool serial_rtsptt; 0, // bool serial_dtrptt; false, // bool serial_rtscts; false, // bool serial_rtsplus; false, // bool serial_dtrplus; 500, // int serloop_timing; "NONE", // std::string aux_serial_port; false, // bool aux_SCU_17; false, // bool aux_rts; false, // bool aux_dtr; "12345", // std::string xmlport; "NONE", // std::string sep_serial_port; 0, // bool sep_rtsptt; 0, // bool sep_dtrptt; false, // bool sep_rtsplus; false, // bool sep_dtrplus; false, // bool sep_SCU_17; "NONE", // std::string cmedia_device "GPIO-3", // std::string cmedia_gpio_line 0, // bool cmedia_ptt "NONE", // std::string tmate2_devide "5000", // std::string tmate2_freq_step false, // bool tmate2_connected false, // bool disable_CW_ptt; 0, // int CIV; false, // bool USBaudio; 1, // bool poll_smeter; 1, // bool poll_frequency; 1, // bool poll_mode; 1, // bool poll_bandwidth; 1, // bool poll_volume; 1, // bool poll_auto_notch; 1, // bool poll_notch; 1, // bool poll_ifshift; 1, // bool poll_pbt; 1, // bool poll_power_control; 1, // bool poll_pre_att; 1, // bool poll_micgain; 1, // bool poll_squelch; 1, // bool poll_rfgain; 1, // bool poll_pout; 1, // bool poll_swr; 1, // bool poll_alc; 1, // bool poll_split; 1, // bool poll_noise; 1, // bool poll_nr; // 0, // int poll_vfoAorB; 1, // poll_meters; 1, // poll_ops; 1, // poll_compression; 1, // poll_tuner; 1, // poll_ptt; 4, // poll_break_in; 4, // int poll_all; -1, // int iBW_A; 1, // int imode_A; 14070000, // unsigned long long freq_A; -1, // int iBW_B; 1, // int imode_B; 7070000, // unsigned long long freq_B; "", // std::string filters; "", // std::string bandwidths; true, // bool use_rig_data; false, // bool spkr_on; 20, // int volume; 0, // double power_level; 100, // double power_limit; false, // bool enable_power_limit 10, // int mic_gain; false, // bool notch; 0, // int notch_val; false, // bool shift; 0, // int shift_val; 0, // bool pbt_lock; 0, // int pbt_inner; 0, // int pbt_outer; 100, // int rfgain; 10, // int squelch; 0, // int schema; 0, // int embed_tabs; 0, // int show_tabs; true, // bool first_use; true only during program start "", // std::string visible_tab; true, // bool hrd_buttons FL_WHEN_CHANGED, // int sliders_button 0, // int line_out; false, // bool data_port; 1, // int agc_level; 18, // int cw_wpm; 3.0, // double cw_weight; 0, // int cw_vol; 0, // int cw_spot; false, // bool spot_onoff; 700, // int cw_spot_tone; false, // bool enable_keyer; 0, // int break_in; 15, // double cw_qsk; 200, // double cw_delay; false, // int vox_onoff; 10, // int vox_gain; 10, // int vox_anti; 100, // int vox_hang; FT950 default true, // bool vox_on_dataport; 0, // int compression; false, // bool compON; 0, // bool noise_reduction; 0, // int noise_reduction_val; 0, // int nb_level; false, // bool noise; 0, // int attenuator 0, // int preamp; 0, // int auto_notch; 0, // int split; 0, // int no_txqsy 1, // int rx_avg; 4, // int rx_peak; 1, // int pwr_avg; 4, // int pwr_peak; 4, // int pwr_scale ==> Autoselect 1, // bool sync_clock 1, // bool sync_gmt // ic7610 special controls false, // bool digi_sel_on_off; 0, // int digi_sel_val; 6, // int ic7610att; 0, // bool dual_watch; //ft950 reversed RF gain values false, // bool ft950_rg_reverse true, // bool restore_frequency; true, // bool restore_mode; true, // bool restore_bandwidth; true, // bool restore_volume; true, // bool restore_mic_gain; true, // bool restore_rf_gain; true, // bool restore_power_control; true, // bool restore_if_shift; true, // bool restore_notch; true, // bool restore_auto_notch; true, // bool restore_noise; true, // bool restore_squelch; true, // bool restore_split; true, // bool restore_pre_att; true, // bool restore_nr; true, // bool restore_comp_on_off; true, // bool restore_comp_level; //tt550 controls 80, // tt550_line_out; 1, // tt550_agc_level; 24, // tt550_cw_wpm; 1.0, // tt550_cw_weight; 10, // tt550_cw_vol; 10, // tt550_cw_spot; false, // tt550_cw_spot_onoff; 20, // tt550_cw_qsk; false, // tt550_enable_keyer; false, // tt550_vox_onoff; 0, // tt550_vox_gain; 0, // tt550_vox_anti; 0, // tt550_vox_hang; 0, // tt550_mon_vol; 0, // tt550_squelch_level; 0, // tt550_compression; 1, // tt550_nb_level; false, // tt550_bool compON; false, // tt550_tuner_bypass; true, // tt550_enable_xmtr; false, // tt550_enable_tloop; true, // tt550_use_line_in; 14, // tt550_xmt_bw; false, // tt550_use_xmt_bw; 25, // tt550_AM_level; 0, // tt550_encoder_step; 1, // tt550_encoder_sensitivity; 2000, // tt550_keypad_timeout; 0, // tt550_F1_func; 0, // tt550_F2_func; 0, // tt550_F3_func; 5, // tt550_Nsamples; true, // tt550_at11_inline; true, // tt550_at11_hiZ; // ========================= 0.0, // vfo_adj; 600, // bfo_freq; 0, // rit_freq; 0, // xit_freq; 1500, // bpf_center; true, // use_bpf_center; // ========================= // IC706MKIIG filters false, // bool use706filters "EMPTY", // std::string ssb_cw_wide; "NORMAL", // std::string ssb_cw_normal; "EMPTY", // std::string ssb_cw_narrow; // optional filter std::strings // "EMPTY", "NARR", "NORM", "WIDE", "MED", // "FL-101", "FL-232", "FL-100", "FL-223", "FL-103" // ========================= "cmd 1", // std::string label1; "", // std::string command1; "", // std::string shftcmd1; "cmd 2", // std::string label2; "", // std::string command2; "", // std::string shftcmd2; "cmd 3", // std::string label3; "", // std::string command3; "", // std::string shftcmd3; "cmd 4", // std::string label4; "", // std::string command4; "", // std::string shftcmd4; "cmd 5", // std::string label5; "", // std::string command5; "", // std::string shftcmd5; "cmd 6", // std::string label6; "", // std::string command6; "", // std::string shftcmd6; "cmd 7", // std::string label7; "", // std::string command7; "", // std::string shftcmd7; "cmd 8", // std::string label8; "", // std::string command8; "", // std::string shftcmd8; "cmd 9", // std::string label9; "", // std::string command9; "", // std::string shftcmd9; "cmd 10", // std::string label10; "", // std::string command10; "", // std::string shftcmd10; "cmd 11", // std::string label11; "", // std::string command11; "", // std::string shftcmd11; "cmd 12", // std::string label12; "", // std::string command12; "", // std::string shftcmd12; "cmd 13", // std::string label13; "", // std::string command13; "", // std::string shftcmd13; "cmd 14", // std::string label14; "", // std::string command14; "", // std::string shftcmd14; "cmd 15", // std::string label15; "", // std::string command15; "", // std::string shftcmd15; "cmd 16", // std::string label16; "", // std::string command16; "", // std::string shftcmd16; "cmd 17", // std::string label17; "", // std::string command17; "", // std::string shftcmd17; "cmd 18", // std::string label18; "", // std::string command18; "", // std::string shftcmd18; "cmd 19", // std::string label19; "", // std::string command19; "", // std::string shftcmd19; "cmd 20", // std::string label20; "", // std::string command20; "", // std::string shftcmd20; "cmd 21", // std::string label21; "", // std::string command21; "", // std::string shftcmd21; "cmd 22", // std::string label22; "", // std::string command22; "", // std::string shftcmd22; "cmd 23", // std::string label23; "", // std::string command23; "", // std::string shftcmd23; "cmd 24", // std::string label24; "", // std::string command24; "", // std::string shftcmd24; "1", // std::string label_on_start1; "", // std::string cmd_on_start1; "2", // std::string label_on_start2; "", // std::string cmd_on_start2; "3", // std::string label_on_start3; "", // std::string cmd_on_start3; "4", // std::string label_on_start4; "", // std::string cmd_on_start4; "1", // std::string label_on_exit1; "", // std::string cmd_on_exit1; "2", // std::string label_on_exit2; "", // std::string cmd_on_exit2; "3", // std::string label_on_exit3; "", // std::string cmd_on_exit3; "4", // std::string label_on_exit4; "", // std::string cmd_on_exit4; // ========================= 232, // int bg_red; 255, // int bg_green; 232, // int bg_blue; 0, // int fg_red; 0, // int fg_green; 0, // int fg_blue; 148, // int swrRed; 0, // int swrGreen; 148, // int swrBlue; 180, // int pwrRed; 0, // int pwrGreen; 0, // int pwrBlue; 0, // int smeterRed; 180, // int smeterGreen; 0, //int smeterBlue; 255, // int peakRed; 0, // int peakGreen; 0, // int peakBlue; 0, // int voltRed; 0, // int voltGreen; 255, // int voltBlue; 0, // int display_voltmeter; 0, // int fg_sys_red; 0, // int fg_sys_green; 0, // int fg_sys_blue; 0xc0, // int bg_sys_red; 0xc0, // int bg_sys_green; 0xc0, // int bg_sys_blue; 255, // int bg2_sys_red; 255, // int bg2_sys_green; 255, // int bg2_sys_blue; 232, // int slider_red; 255, // int slider_green; 232, // int slider_blue; 0, // int slider_btn_red; 0, // int slider_btn_green; 128, // int slider_btn_blue; 255, // int lighted_btn_red; 255, // int lighted_btn_green; 0, // int lighted_btn_blue; 230, // int tab_red; 230, // int tab_green; 230, // int tab_blue; FL_COURIER, // Fl_Font fontnbr; false, // bool tooltips; "base", // std::string ui_scheme // "7362", // std::string server_port // "127.0.0.1",// std::string server_address "127.0.0.1", // std::string xmlrig_addr; "12345", // std::string xmlrig_port; false, // bool xmlrpg_rig; "4001", // std::string tcpip_port "127.0.0.1",// std::string tcpip_address 50, // int tcpip_ping_delay 10, // int tcpip_reconnect_after in seconds 10, // int tcpip_drops_allowed; false, // bool use_tcpip "40001", // std::string tci_port "127.0.0.1",// std::string tci address 10, // int tci_center; false, // bool xcvr auto on false, // bool xcvr auto off false, // bool external_tuner false, // bool trace; false, // bool rigtrace; false, // bool gettrace; false, // bool settrace; false, // bool debugtrace; false, // bool xmltrace; false, // bool rpctrace; false, // bool serialtrace; false, // bool tcitrace; false, // bool start_stop_trace; 0, // int rpc_level; // bands; defaults for FT857 / FT897 / Xiegu-G90 // frequency, mode, txCTCSS, rxCTCSS, offset, offset_freq; 1805000L, 0, 0, 0, 0, 600, // f160 3580000L, 0, 0, 0, 0, 600, // f80 meters 7070000L, 0, 0, 0, 0, 600, // f40 meters 10140000L, 0, 0, 0, 0, 600, // f30 meters 14070000L, 0, 0, 0, 0, 600, // f20 meters 18100000L, 0, 0, 0, 0, 600, // f17 meters 21070000L, 0, 0, 0, 0, 600, // f15 meters 24920000L, 0, 0, 0, 0, 600, // f12 meters 28070000L, 0, 0, 0, 0, 600, // f10 meters 50070000L, 0, 0, 0, 0, 600, // f6 meters 144070000L, 0, 0, 0, 0, 600, // f2 meters 432100000L, 0, 0, 0, 0, 600, // f70 cent' 1210000000L, 0, 0, 0, 0, 600, // f12G 15000000L, 0, 0, 0, 0, 600, // general // memory management 4, // Fl_Font memfontnbr; 14, // int memfontsize; // gpio parameters false, // bool gpio_ptt; 0, // int enable_gpio; 0, // int gpio_on; 0, // int gpio_pulse_width; // KXPA 100 presence // 0, // int kxpa on line = 1 // cwio parameters 20, // int cwioWPM; 2, // int cwioKEYLINE; 1 == RTS, 2 == DTR 0, // int cwioSHARED; 0 = NONE, 1 = CAT, 2 = AUX, 3 = SEP, 4 = CWIO 0, // int cwioPTT; 1 - use PTT, 0 - use Brea-in 0, // int cwioCONNECTED; 1 - connected state; 0 - unconnected state 0, // int cwioINVERTED; 1 - DTR/RTS (-) keying; 0, // double cwio_comp; 0, // double cwio_keycorr; "", // std::string cwioPORT; { "","","","","","", "","","","","","" // std::string cwio_msgs[12]; }, { "m2","m2","m3","m4","m4","m6", "m7","m8","m9","m10","m11","m12" // std::string cwio_labels[12]; }, "=", // std::string BT; "~", // std::string AA; "<", // std::string AS; ">", // std::string AR; "%", // std::string KN; "+", // std::string SK; "&", // std::string INT; "{", // std::string HM; "}", // std::string VE; // FSK_ parameters 1, // int FSK_KEYLINE; 1 == RTS, 2 == DTR 0, // int FSK_SHARED; 0 = NONE, 1 = CAT, 2 = AUX, 3 = SEP 0, // int FSK_PTT; 1 - use PTT, 0 - use Brea-in 0, // int FSK_CONNECTED; 1 - connected state; 0 - unconnected state 0, // int FSK_INVERTED; reverse keying; 1, // int FSK_STOPBITS; 1 - 1.5; 0 - 2 8, // int fsk_idles "", // std::string FSK_PORT; { "","","","","","", "","","","","","" // std::string FSK_msgs[12]; }, { "m2","m2","m3","m4","m4","m6", "m7","m8","m9","m10","m11","m12" // std::string FSK_labels[12]; }, // CW logbook parameters "", // std::string cw_log_name; 0, // int cw_log_cut_numbers; 0, // int cw_log_leading_zeros; 1, // int cw_log_dupcheck; 0, // int cw_log_nbr; // RTTY logbook parameters "", // std::string fsk_log_name; 0, // int fsk_log_cut_numbers; 0, // int fsk_log_leading_zeros; 1, // int fsk_log_dupcheck; 0, // int fsk_log_nbr }; void status::saveLastState() { xcvr_name = selrig->name_; Fl_Preferences xcvrpref(RigHomeDir.c_str(), "w1hkj.com", PACKAGE_TARNAME); xcvrpref.set("xcvr_name", xcvr_name.c_str()); int mX = mainwindow->x(); int mY = mainwindow->y(); int mW = mainwindow->w(); int mH = mainwindow->h(); if (dlgMemoryDialog) { memX = dlgMemoryDialog->x(); memY = dlgMemoryDialog->y(); memW = dlgMemoryDialog->w(); memH = dlgMemoryDialog->h(); } if (meters_dialog) { metersX = meters_dialog->x(); metersY = meters_dialog->y(); } mainX = mX; mainY = mY; if (UIsize == wide_ui) { if (mW < WIDE_MAINW) mW = WIDE_MAINW; mH = WIDE_MAINH; } mainW = mW; mainH = mH; if (tabsGeneric) visible_tab = (tabsGeneric->value())->label(); Fl_Preferences spref(RigHomeDir.c_str(), "w1hkj.com", xcvr_name.c_str()); spref.set("version", PACKAGE_VERSION); spref.set("mainx", mainX); spref.set("mainy", mainY); spref.set("mainw", mainW); spref.set("mainh", mainH); spref.set("uisize", UIsize); spref.set("memx", memX); spref.set("memy", memY); spref.set("memw", memW); spref.set("memh", memH); spref.set("metersx", metersX); spref.set("metersy", metersY); spref.set("meters_dialog_visible", meters_dialog->shown()); spref.set("ddx", ddX); spref.set("ddy", ddY); spref.set("xcvr_serial_port", xcvr_serial_port.c_str()); spref.set("serial_baudrate", serial_baudrate); spref.set("serial_stopbits", stopbits); spref.set("serial_retries", serial_retries); spref.set("serial_write_delay", serial_write_delay); spref.set("serial_post_write_delay", serial_post_write_delay); spref.set("serial_timeout", serial_timeout); spref.set("serloop_timing", serloop_timing); spref.set("ptt_via_cat", serial_catptt); spref.set("ptt_via_rts", serial_rtsptt); spref.set("ptt_via_dtr", serial_dtrptt); spref.set("rts_cts_flow", serial_rtscts); spref.set("rts_plus", serial_rtsplus); spref.set("dtr_plus", serial_dtrplus); spref.set("disable_CW_ptt", disable_CW_ptt); spref.set("civadr", CIV); spref.set("usbaudio", USBaudio); spref.set("aux_serial_port", aux_serial_port.c_str()); spref.set("aux_rts", aux_rts); spref.set("aux_dtr", aux_dtr); spref.set("sep_serial_port", sep_serial_port.c_str()); spref.set("sep_rtsptt", sep_rtsptt); spref.set("sep_dtrptt", sep_dtrptt); spref.set("sep_rtsplus", sep_rtsplus); spref.set("set_dtrplus", sep_dtrplus); spref.set("xmlport", xmlport.c_str()); spref.set("cmedia_device", cmedia_device.c_str()); spref.set("cmedia_gpio_line", cmedia_gpio_line.c_str()); spref.set("cmedia_ptt", cmedia_ptt); spref.set("tmate2_device", tmate2_device.c_str()); spref.set("tmate2_freq_step", tmate2_freq_step.c_str()); spref.set("tmate2_connected", tmate2_connected); spref.set("poll_smeter", poll_smeter); spref.set("poll_frequency", poll_frequency); spref.set("poll_mode", poll_mode); spref.set("poll_bandwidth", poll_bandwidth); spref.set("poll_volume", poll_volume); spref.set("poll_auto_notch", poll_auto_notch); spref.set("poll_notch", poll_notch); spref.set("poll_ifshift", poll_ifshift); spref.set("poll_pbt", poll_pbt); spref.set("poll_power_control", poll_power_control); spref.set("poll_pre_att", poll_pre_att); spref.set("poll_micgain", poll_micgain); spref.set("poll_squelch", poll_squelch); spref.set("poll_rfgain", poll_rfgain); spref.set("poll_pout", poll_pout); spref.set("poll_swr", poll_swr); spref.set("poll_alc", poll_alc); spref.set("poll_split", poll_split); spref.set("poll_noise", poll_noise); spref.set("poll_nr", poll_nr); 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); spref.set("mode_A", imode_A); int freq_A_lower, freq_A_upper; freq_A_upper = freq_A / 1000000000; freq_A_lower = freq_A - freq_A_upper * 1000000000; spref.set("freq_A_u", freq_A_upper); spref.set("freq_A_l", freq_A_lower); spref.set("bw_B", iBW_B); spref.set("mode_B", imode_B); int freq_B_lower, freq_B_upper; freq_B_upper = freq_B / 1000000000; freq_B_lower = freq_B - freq_B_upper * 1000000000; spref.set("freq_B_u", freq_B_upper); spref.set("freq_B_l", freq_B_lower); spref.set("filters", filters.c_str()); spref.set("bandwidths", bandwidths.c_str()); spref.set("use_rig_data", use_rig_data); // spref.set("restore_rig_data", restore_rig_data); spref.set("restore_frequency", restore_frequency); spref.set("restore_mode", restore_mode); spref.set("restore_bandwidth", restore_bandwidth); spref.set("restore_volume", restore_volume); spref.set("restore_mic_gain", restore_mic_gain); spref.set("restore_rf_gain", restore_rf_gain); spref.set("restore_power_control", restore_power_control); spref.set("restore_if_shift", restore_if_shift); spref.set("restore_notch", restore_notch); spref.set("restore_auto_notch", restore_auto_notch); spref.set("restore_noise", restore_noise); spref.set("restore_squelch", restore_squelch); spref.set("restore_split", restore_split); spref.set("restore_pre_att", restore_pre_att); spref.set("restore_nr", restore_nr); spref.set("restore_comp_on_off", restore_comp_on_off); spref.set("restore_comp_level", restore_comp_level); spref.set("bool_spkr_on", spkr_on); spref.set("int_volume", volume); spref.set("dbl_power", power_level); spref.set("power_limit", power_limit); spref.set("enable_power_limit", enable_power_limit); spref.set("int_mic", mic_gain); spref.set("bool_notch", notch); spref.set("int_notch", notch_val); spref.set("bool_shift", shift); spref.set("int_shift", shift_val); spref.set("pbt_lock", pbt_lock); spref.set("pbt_inner", pbt_inner); spref.set("pbt_outer", pbt_outer); spref.set("rfgain", rfgain); spref.set("squelch", squelch); spref.set("no_txqsy", no_txqsy); spref.set("schema", schema); spref.set("embed_tabs", embed_tabs); if (!embed_tabs && tabs_dialog) show_tabs = tabs_dialog->visible(); spref.set("show_tabs", show_tabs); spref.set("visible_tab", visible_tab.c_str()); spref.set("rx_avg", rx_avg); spref.set("rx_peak", rx_peak); spref.set("pwr_avg", pwr_avg); spref.set("pwr_peak", pwr_peak); spref.set("pwr_scale", pwr_scale); spref.set("sync_clock", sync_clock); spref.set("sync_gmt", sync_gmt); spref.set("digi_sel_on_off", digi_sel_on_off); spref.set("digi_sel_val", digi_sel_val); spref.set("dual_watch", dual_watch); spref.set("ic7610att", index_ic7610att); spref.set("ft950_rg_reverse", ft950_rg_reverse); if (selrig->name_ == rig_TT550.name_) { spref.set("tt550_line_out", tt550_line_out); spref.set("tt550_agc_level", tt550_agc_level); spref.set("tt550_cw_wpm", tt550_cw_wpm); spref.set("tt550_cw_weight", tt550_cw_weight); spref.set("tt550_cw_vol", tt550_cw_vol); spref.set("tt550_cw_spot", tt550_cw_spot); spref.set("tt550_spot_onoff", tt550_spot_onoff); spref.set("tt550_cw_qsk", tt550_cw_qsk); spref.set("tt550_enable_keyer", tt550_enable_keyer); spref.set("cw_delay", cw_delay); spref.set("tt550_vox_onoff", tt550_vox_onoff); spref.set("tt550_vox_gain", tt550_vox_gain); spref.set("tt550_vox_anti", tt550_vox_anti); spref.set("tt550_vox_hang", tt550_vox_hang); spref.set("tt550_mon_vol", tt550_mon_vol); spref.set("tt550_squelch_level", tt550_squelch_level); spref.set("tt550_compression", tt550_compression); spref.set("tt550_nb_level", tt550_nb_level); spref.set("tt550_compON", tt550_compON); spref.set("tt550_tuner_bypass", tt550_tuner_bypass); spref.set("tt550_enable_xmtr", tt550_enable_xmtr); spref.set("tt550_enable_tloop", tt550_enable_tloop); spref.set("tt550_xmt_bw", tt550_xmt_bw); spref.set("tt550_use_xmt_bw", tt550_use_xmt_bw); spref.set("tt550_AM_level", tt550_AM_level); spref.set("tt550_use_line_in", tt550_use_line_in); spref.set("tt550_encoder_step", tt550_encoder_step); spref.set("tt550_encoder_sensitivity", tt550_encoder_sensitivity); spref.set("tt550_keypad_timeout", tt550_keypad_timeout); spref.set("tt550_F1_func", tt550_F1_func); spref.set("tt550_F2_func", tt550_F2_func); spref.set("tt550_F3_func", tt550_F3_func); spref.set("tt550_Nsamples", tt550_Nsamples); spref.set("tt550_at11_inline", tt550_at11_inline); spref.set("tt550_at11_hiZ", tt550_at11_hiZ); } else { spref.set("line_out", line_out); spref.set("data_port", data_port); spref.set("vox_on_dataport", vox_on_dataport); spref.set("agc_level", agc_level); spref.set("cw_wpm", cw_wpm); spref.set("cw_weight", cw_weight); spref.set("cw_vol", cw_vol); spref.set("cw_spot", cw_spot); spref.set("spot_onoff", spot_onoff); spref.set("cw_spot_tone", cw_spot_tone); spref.set("cw_qsk", cw_qsk); spref.set("cw_delay", cw_delay); spref.set("enable_keyer", enable_keyer); spref.set("break_in", break_in); spref.set("vox_onoff", vox_onoff); spref.set("vox_gain", vox_gain); spref.set("vox_anti", vox_anti); spref.set("vox_hang", vox_hang); spref.set("compression", compression); spref.set("compON", compON); } spref.set("noise_reduction", noise_reduction); spref.set("noise_red_val", noise_reduction_val); spref.set("nb_level", nb_level); spref.set("bool_noise", noise); spref.set("int_preamp", preamp); spref.set("int_att", attenuator); spref.set("vfo_adj", vfo_adj); spref.set("bfo_freq", bfo_freq); spref.set("rit_freq", rit_freq); spref.set("xit_freq", xit_freq); spref.set("bpf_center", bpf_center); spref.set("use_bpf_center", use_bpf_center); if (selrig->name_ == IC706MKIIGname_) { spref.set("use706filters", use706filters); spref.set("Set_IC706MKIIG_filter_names", ""); spref.set("IC706MKIIG_filter_names_1", \ "EMPTY,NARR,NORM,WIDE,MED" ); spref.set("IC706MKIIG_filter_names_2", \ "FL-101,FL-232,FL-100,FL-223,FL-103" ); spref.set("ssb_cw_wide", ssb_cw_wide.c_str()); spref.set("ssb_cw_normal", ssb_cw_normal.c_str()); spref.set("ssb_cw_narrow", ssb_cw_narrow.c_str()); selrig->initialize(); } spref.set("label1", label1.c_str()); spref.set("command1", command1.c_str()); spref.set("shftcmd1", shftcmd1.c_str()); spref.set("label2", label2.c_str()); spref.set("command2", command2.c_str()); spref.set("shftcmd2", shftcmd2.c_str()); spref.set("label3", label3.c_str()); spref.set("command3", command3.c_str()); spref.set("shftcmd3", shftcmd3.c_str()); spref.set("label4", label4.c_str()); spref.set("command4", command4.c_str()); spref.set("shftcmd4", shftcmd4.c_str()); spref.set("label5", label5.c_str()); spref.set("command5", command5.c_str()); spref.set("shftcmd5", shftcmd5.c_str()); spref.set("label6", label6.c_str()); spref.set("command6", command6.c_str()); spref.set("shftcmd6", shftcmd6.c_str()); spref.set("label7", label7.c_str()); spref.set("command7", command7.c_str()); spref.set("shftcmd7", shftcmd7.c_str()); spref.set("label8", label8.c_str()); spref.set("command8", command8.c_str()); spref.set("shftcmd8", shftcmd8.c_str()); spref.set("label9", label9.c_str()); spref.set("command9", command9.c_str()); spref.set("shftcmd9", shftcmd9.c_str()); spref.set("label10", label10.c_str()); spref.set("command10", command10.c_str()); spref.set("shftcmd10", shftcmd10.c_str()); spref.set("label11", label11.c_str()); spref.set("command11", command11.c_str()); spref.set("shftcmd11", shftcmd11.c_str()); spref.set("label12", label12.c_str()); spref.set("command12", command12.c_str()); spref.set("shftcmd12", shftcmd12.c_str()); spref.set("label13", label13.c_str()); spref.set("command13", command13.c_str()); spref.set("shftcmd13", shftcmd13.c_str()); spref.set("label14", label14.c_str()); spref.set("command14", command14.c_str()); spref.set("shftcmd14", shftcmd14.c_str()); spref.set("label15", label15.c_str()); spref.set("command15", command15.c_str()); spref.set("shftcmd15", shftcmd15.c_str()); spref.set("label16", label16.c_str()); spref.set("command16", command16.c_str()); spref.set("shftcmd16", shftcmd16.c_str()); spref.set("label17", label17.c_str()); spref.set("command17", command17.c_str()); spref.set("shftcmd17", shftcmd17.c_str()); spref.set("label18", label18.c_str()); spref.set("command18", command18.c_str()); spref.set("shftcmd18", shftcmd18.c_str()); spref.set("label19", label19.c_str()); spref.set("command19", command19.c_str()); spref.set("shftcmd19", shftcmd19.c_str()); spref.set("label20", label20.c_str()); spref.set("command20", command20.c_str()); spref.set("shftcmd20", shftcmd20.c_str()); spref.set("label21", label21.c_str()); spref.set("command21", command21.c_str()); spref.set("shftcmd21", shftcmd21.c_str()); spref.set("label22", label22.c_str()); spref.set("command22", command22.c_str()); spref.set("shftcmd22", shftcmd22.c_str()); spref.set("label23", label23.c_str()); spref.set("command23", command23.c_str()); spref.set("shftcmd23", shftcmd23.c_str()); spref.set("label24", label24.c_str()); spref.set("command24", command24.c_str()); spref.set("shftcmd24", shftcmd24.c_str()); spref.set("st_label1", label_on_start1.c_str()); spref.set("st_cmd1", cmd_on_start1.c_str()); spref.set("st_label2", label_on_start2.c_str()); spref.set("st_cmd2", cmd_on_start2.c_str()); spref.set("st_label3", label_on_start3.c_str()); spref.set("st_cmd3", cmd_on_start3.c_str()); spref.set("st_label4", label_on_start4.c_str()); spref.set("st_cmd4", cmd_on_start4.c_str()); spref.set("ex_label1", label_on_exit1.c_str()); spref.set("ex_cmd1", cmd_on_exit1.c_str()); spref.set("ex_label2", label_on_exit2.c_str()); spref.set("ex_cmd2", cmd_on_exit2.c_str()); spref.set("ex_label3", label_on_exit3.c_str()); spref.set("ex_cmd3", cmd_on_exit3.c_str()); spref.set("ex_label4", label_on_exit4.c_str()); spref.set("ex_cmd4", cmd_on_exit4.c_str()); spref.set("fg_red", fg_red); spref.set("fg_green", fg_green); spref.set("fg_blue", fg_blue); spref.set("bg_red", bg_red); spref.set("bg_green", bg_green); spref.set("bg_blue", bg_blue); spref.set("smeter_red", smeterRed); spref.set("smeter_green", smeterGreen); spref.set("smeter_blue", smeterBlue); spref.set("power_red", pwrRed); spref.set("power_green", pwrGreen); spref.set("power_blue", pwrBlue); spref.set("swr_red", swrRed); spref.set("swr_green", swrGreen); spref.set("swr_blue", swrBlue); spref.set("peak_red", peakRed); spref.set("peak_green", peakGreen); spref.set("peak_blue", peakBlue); spref.set("volt_red", voltRed); spref.set("volt_green", voltGreen); spref.set("volt_blue", voltBlue); spref.set("display_voltmeter", display_voltmeter); spref.set("fg_sys_red", fg_sys_red); spref.set("fg_sys_green", fg_sys_green); spref.set("fg_sys_blue", fg_sys_blue); spref.set("bg_sys_red", bg_sys_red); spref.set("bg_sys_green", bg_sys_green); spref.set("bg_sys_blue", bg_sys_blue); spref.set("bg2_sys_red", bg2_sys_red); spref.set("bg2_sys_green", bg2_sys_green); spref.set("bg2_sys_blue", bg2_sys_blue); spref.set("slider_red", slider_red); spref.set("slider_green", slider_green); spref.set("slider_blue", slider_blue); spref.set("slider_btn_red", slider_btn_red); spref.set("slider_btn_green", slider_btn_green); spref.set("slider_btn_blue", slider_btn_blue); spref.set("lighted_btn_red", lighted_btn_red); spref.set("lighted_btn_green", lighted_btn_green); spref.set("lighted_btn_blue", lighted_btn_blue); spref.set("tab_red", tab_red); spref.set("tab_green", tab_green); spref.set("tab_blue", tab_blue); spref.set("fontnbr", fontnbr); spref.set("tooltips", tooltips); spref.set("ui_scheme", ui_scheme.c_str()); // spref.set("server_port", server_port.c_str()); // spref.set("server_addr", server_addr.c_str()); spref.set("xmlrig_port", xmlrig_port.c_str()); spref.set("xmlrig_addr", xmlrig_addr.c_str()); spref.set("tcpip_port", tcpip_port.c_str()); spref.set("tcpip_addr", tcpip_addr.c_str()); spref.set("tcpip_ping_delay", tcpip_ping_delay); spref.set("tcpip_tcpip_reconnect_after", tcpip_reconnect_after); spref.set("tcpip_drops_allowed", tcpip_drops_allowed); spref.set("use_tcpip", use_tcpip); spref.set("tci_port", tci_port.c_str()); spref.set("tci_addr", tci_addr.c_str()); spref.set("tci_center", tci_center); spref.set("xcvr_auto_on", xcvr_auto_on); spref.set("xcvr_auto_off", xcvr_auto_off); spref.set("external_tuner", external_tuner); spref.set("trace", trace); spref.set("rigtrace", rigtrace); spref.set("gettrace", gettrace); spref.set("settrace", settrace); spref.set("debugtrace", debugtrace); spref.set("xmltrace", xmltrace); spref.set("rpctrace", rpctrace); spref.set("serialtrace", serialtrace); spref.set("startstoptrace", start_stop_trace); spref.set("tcitrace", tcitrace); spref.set("rpc_level", rpc_level); spref.set("f160", f160); spref.set("m160", m160); spref.set("txT160", txT_160); spref.set("rxT160", rxT_160); spref.set("offset_160", offset_160); spref.set("oF_160", oF_160); spref.set("f80", f80); spref.set("m80", m80); spref.set("txT80", txT_80); spref.set("rxT80", rxT_80); spref.set("offset_80", offset_80); spref.set("oF_80", oF_80); spref.set("f40", f40); spref.set("m40", m40); spref.set("txT40", txT_40); spref.set("rxT40", rxT_40); spref.set("offset_40", offset_40); spref.set("oF_40", oF_40); spref.set("f30", f30); spref.set("m30", m30); spref.set("txT30", txT_30); spref.set("rxT30", rxT_30); spref.set("offset_30", offset_30); spref.set("oF_30", oF_30); spref.set("f20", f20); spref.set("m20", m20); spref.set("txT20", txT_20); spref.set("rxT20", rxT_20); spref.set("offset_20", offset_20); spref.set("oF_20", oF_20); spref.set("f17", f17); spref.set("m17", m17); spref.set("txT17", txT_17); spref.set("rxT17", rxT_17); spref.set("offset_17", offset_17); spref.set("oF_17", oF_17); spref.set("f15", f15); spref.set("m15", m15); spref.set("txT15", txT_15); spref.set("rxT15", rxT_15); spref.set("offset_15", offset_15); spref.set("oF_15", oF_15); spref.set("f12", f12); spref.set("m12", m12); spref.set("txT12", txT_12); spref.set("rxT12", rxT_12); spref.set("offset_12", offset_12); spref.set("oF_12", oF_12); spref.set("f10", f10); spref.set("m10", m10); spref.set("txT10", txT_10); spref.set("rxT10", rxT_10); spref.set("offset_10", offset_10); spref.set("oF_10", oF_10); spref.set("f6", f6); spref.set("m6", m6); spref.set("txT6", txT_6); spref.set("rxT_6", rxT_6); spref.set("offset_6", offset_6); spref.set("oF_6", oF_6); spref.set("f2", f2); spref.set("m2", m2); spref.set("txT2", txT_2); spref.set("rxT2", rxT_2); spref.set("offset_2", offset_2); spref.set("oF_2", oF_2); spref.set("f70", f70); spref.set("m70", m70); spref.set("txT70", txT_70); spref.set("rxT70", rxT_70); spref.set("offset_70", offset_70); spref.set("oF_70", oF_70); spref.set("f12G", f12G); spref.set("m12G", m12G); spref.set("txT12G", txT_12G); spref.set("rxT12G", rxT_12G); spref.set("offset_12G", offset_12G); spref.set("oF_12G", oF_12G); spref.set("fgen", fgen); spref.set("mgen", mgen); spref.set("txTgen", txT_gen); spref.set("rxTgen", rxT_gen); spref.set("offset_gen", offset_gen); spref.set("oF_gen", oF_gen); spref.set("hrd_buttons", hrd_buttons); spref.set("sliders_button", sliders_button); spref.set("memfontnbr", memfontnbr); spref.set("memfontsize", memfontsize); spref.set("gpio_ptt", gpio_ptt); spref.set("enable_gpio", enable_gpio); spref.set("gpio_on", gpio_on); spref.set("gpio_pulse_width", gpio_pulse_width); // spref.set("kxpa", kxpa); spref.set("cwioWPM", cwioWPM); spref.set("cwio_comp", cwio_comp); spref.set("cwio_keycorr", cwio_keycorr); spref.set("cwioKEYLINE", cwioKEYLINE); spref.set("cwioSHARED", cwioSHARED); spref.set("cwioPTT", cwioPTT); spref.set("cwioCONNECTED", cwioCONNECTED); spref.set("cwioINVERTED", cwioINVERTED); spref.set("cwioPORT", cwioPORT.c_str()); char setbuff[20]; for (int n = 0; n < 12; n++) { snprintf(setbuff, sizeof(setbuff), "cwiolabel[%d]", n); spref.set(setbuff, cwio_labels[n].c_str()); snprintf(setbuff, sizeof(setbuff), "cwiomessage[%d]", n); spref.set(setbuff, cwio_msgs[n].c_str()); } spref.set("BT", BT.c_str()); spref.set("AA", AA.c_str()); spref.set("AS", AS.c_str()); spref.set("AR", AR.c_str()); spref.set("KN", KN.c_str()); spref.set("SK", SK.c_str()); spref.set("INT", INT.c_str()); spref.set("HM", HM.c_str()); spref.set("VE", VE.c_str()); spref.set("FSK_KEYLINE", FSK_KEYLINE); spref.set("FSK_SHARED", FSK_SHARED); spref.set("FSK_PTT", FSK_PTT); spref.set("FSK_CONNECTED", FSK_CONNECTED); spref.set("FSK_INVERTED", FSK_INVERTED); spref.set("FSK_STOPBITS", FSK_STOPBITS); spref.set("FSK_IDLES", fsk_idles); spref.set("FSK_PORT", FSK_PORT.c_str()); for (int n = 0; n < 12; n++) { snprintf(setbuff, sizeof(setbuff), "fskiolabel[%d]", n); spref.set(setbuff, FSK_labels[n].c_str()); snprintf(setbuff, sizeof(setbuff), "fskiomessage[%d]", n); spref.set(setbuff, FSK_msgs[n].c_str()); } // CW logbook parameters spref.set("CW_LOG_NAME", cw_log_name.c_str()); spref.set("CW_CUT_NUMBERS", cw_log_cut_numbers); spref.set("CW_LEADING_ZEROS", cw_log_leading_zeros); spref.set("CW_DUPCHECK", cw_log_dupcheck); spref.set("CW_LOG_NBR", cw_log_nbr); // FSK logbook parameters spref.set("FSK_LOG_NAME", fsk_log_name.c_str()); spref.set("FSK_CUT_NUMBERS", fsk_log_cut_numbers); spref.set("FSK_LEADING_ZEROS", fsk_log_leading_zeros); spref.set("FSK_DUPCHECK", fsk_log_dupcheck); spref.set("FSK_LOG_NBR", fsk_log_nbr); } bool status::loadXcvrState(std::string xcvr) { Fl_Preferences spref(RigHomeDir.c_str(), "w1hkj.com", xcvr.c_str()); if (spref.entryExists("version")) { int i; char defbuffer[MAX_DEFBUFFER_SIZE]; spref.get("mainx", mainX, mainX); spref.get("mainy", mainY, mainY); spref.get("mainw", mainW, mainW); spref.get("mainh", mainH, mainH); spref.get("uisize", UIsize, UIsize); if (UIsize == wide_ui) { if (mainW < WIDE_MAINW) mainW = WIDE_MAINW; mainH = WIDE_MAINH; } spref.get("memx", memX, memX); spref.get("memy", memY, memY); spref.get("memw", memW, memW); spref.get("memh", memH, memH); spref.get("metersx", metersX, metersX); spref.get("metersy", metersY, metersY); spref.get("meters_dialog_visible", i, i); meters_dialog_visible = i; spref.get("ddX", ddX, ddX); spref.get("ddY", ddY, ddY); if (current_ui_size != -1) { UIsize = current_ui_size; } current_ui_size = UIsize; if (UIsize == small_ui) { mainW = SMALL_MAINW; } if (UIsize == touch_ui) { if (mainW < TOUCH_MAINW) mainW = TOUCH_MAINW; } spref.get("xcvr_serial_port", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); xcvr_serial_port = defbuffer; if (xcvr_serial_port.find("tty") == 0) xcvr_serial_port.insert(0, "/dev/"); i = 0; selrig = rigs[i]; while (rigs[i] != NULL) { if (xcvr == rigs[i]->name_) { selrig = rigs[i]; break; } i++; } { int testbaud = -1; spref.get("serial_baudrate", testbaud, testbaud); if (testbaud > -1) { spref.get("serial_baudrate", serial_baudrate, serial_baudrate); spref.get("serial_stopbits", stopbits, stopbits); spref.get("serial_retries", serial_retries, serial_retries); spref.get("serial_write_delay", serial_write_delay, serial_write_delay); spref.get("serial_post_write_delay", serial_post_write_delay, serial_post_write_delay); spref.get("serial_timeout", serial_timeout, serial_timeout); } } spref.get("serloop_timing", serloop_timing, serloop_timing); if (serloop_timing < 10) serloop_timing = 10; // minimum loop delay of 10 msec if (spref.get("ptt_via_cat", i, i)) serial_catptt = i; if (spref.get("ptt_via_rts", i, i)) serial_rtsptt = i; if (spref.get("ptt_via_dtr", i, i)) serial_dtrptt = i; if (spref.get("rts_cts_flow", i, i)) serial_rtscts = i; if (spref.get("rts_plus", i, i)) serial_rtsplus = i; if (spref.get("dtr_plus", i, i)) serial_dtrplus = i; if (spref.get("disable_CW_ptt", i, i)) disable_CW_ptt = i; spref.get("civadr", CIV, CIV); if (spref.get("usbaudio", i, i)) USBaudio = i; spref.get("aux_serial_port", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); aux_serial_port = defbuffer; if (spref.get("aux_rts", i, i)) aux_rts = i; if (spref.get("aux_dtr", i, i)) aux_dtr = i; spref.get("sep_serial_port", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); sep_serial_port = defbuffer; if (spref.get("sep_rtsptt", i, i)) sep_rtsptt = i; if (spref.get("sep_dtrptt", i, i)) sep_dtrptt = i; if (spref.get("sep_rtsplus", i, i)) sep_rtsplus = i; if (spref.get("sep_dtrplus", i, i)) sep_dtrplus = i; spref.get("xmlport", defbuffer, "12345", MAX_DEFBUFFER_SIZE); xmlport = defbuffer; ::xmlport = atoi(xmlport.c_str()); spref.get("cmedia_device", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); cmedia_device = defbuffer; spref.get("cmedia_gpio_line", defbuffer, "GPIO-3", MAX_DEFBUFFER_SIZE); cmedia_gpio_line = defbuffer; spref.get("cmedia_ptt", i, cmedia_ptt); cmedia_ptt = i; spref.get("tmate2_device", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); tmate2_device = defbuffer; spref.get("tmate2_freq_step", defbuffer, "5000", MAX_DEFBUFFER_SIZE); tmate2_freq_step = defbuffer; spref.get("tmate2_connected", i, tmate2_connected); tmate2_connected = i; spref.get("poll_smeter", poll_smeter, poll_smeter); spref.get("poll_frequency", poll_frequency, poll_frequency); spref.get("poll_mode", poll_mode, poll_mode); spref.get("poll_bandwidth", poll_bandwidth, poll_bandwidth); spref.get("poll_volume", poll_volume, poll_volume); spref.get("poll_auto_notch", poll_auto_notch, poll_auto_notch); spref.get("poll_notch", poll_notch, poll_notch); spref.get("poll_ifshift", poll_ifshift, poll_ifshift); spref.get("poll_power_control", poll_power_control, poll_power_control); spref.get("poll_pbt", poll_pbt, poll_pbt); spref.get("poll_pre_att", poll_pre_att, poll_pre_att); spref.get("poll_micgain", poll_micgain, poll_micgain); spref.get("poll_squelch", poll_squelch, poll_squelch); spref.get("poll_rfgain", poll_rfgain, poll_rfgain); spref.get("poll_pout", poll_pout, poll_pout); spref.get("poll_swr", poll_swr, poll_swr); spref.get("poll_alc", poll_alc, poll_alc); spref.get("poll_split", poll_split, poll_split); spref.get("poll_noise", poll_noise, poll_noise); spref.get("poll_nr", poll_nr, poll_nr); 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); spref.get("mode_A", imode_A, imode_A); int freq_A_upper = 0; int freq_A_lower = 14070000; spref.get("freq_A_u", freq_A_upper, freq_A_upper); spref.get("freq_A_l", freq_A_lower, freq_A_lower); freq_A = (unsigned long long)freq_A_upper * 1000000000 + freq_A_lower; spref.get("bw_B", iBW_B, iBW_B); spref.get("mode_B", imode_B, imode_B); int freq_B_upper = 0; int freq_B_lower = 14070000; spref.get("freq_B_u", freq_B_upper, freq_B_upper); spref.get("freq_B_l", freq_B_lower, freq_B_lower); freq_B = (unsigned long long)freq_B_upper * 1000000000 + freq_B_lower; spref.get("filters", defbuffer, "", MAX_DEFBUFFER_SIZE); filters = defbuffer; spref.get("bandwidths", defbuffer, "", MAX_DEFBUFFER_SIZE); bandwidths = defbuffer; if (spref.get("use_rig_data", i, i)) use_rig_data = i; // if (spref.get("restore_rig_data", i, i)) restore_rig_data = i; if (spref.get("restore_frequency", i, i)) restore_frequency = i; if (spref.get("restore_mode", i, i)) restore_mode = i; if (spref.get("restore_bandwidth", i, i)) restore_bandwidth = i; if (spref.get("restore_volume", i, i)) restore_volume = i; if (spref.get("restore_mic_gain", i, i)) restore_mic_gain = i; if (spref.get("restore_rf_gain", i, i)) restore_rf_gain = i; if (spref.get("restore_power_control", i, i)) restore_power_control = i; if (spref.get("restore_if_shift", i, i)) restore_if_shift = i; if (spref.get("restore_notch", i, i)) restore_notch = i; if (spref.get("restore_auto_notch", i, i)) restore_auto_notch = i; if (spref.get("restore_noise", i, i)) restore_noise = i; if (spref.get("restore_squelch", i, i)) restore_squelch = i; if (spref.get("restore_split", i, i)) restore_split = i; if (spref.get("restore_pre_att", i, i)) restore_pre_att = i; if (spref.get("restore_nr", i, i)) restore_nr = i; if (spref.get("restore_comp_on_off", i, i)) restore_comp_on_off = i; if (spref.get("restore_comp_level", i, i)) restore_comp_level = i; if (spref.get("bool_spkr_on", i, i)) spkr_on = i; spref.get("int_volume", volume, volume); spref.get("dbl_power", power_level, power_level); spref.get("power_limit", power_limit, power_limit); if (spref.get("enable_power_limit", i, i)) enable_power_limit = i; spref.get("int_mic", mic_gain, mic_gain); if (spref.get("bool_notch", i, i)) notch = i; spref.get("int_notch", notch_val, notch_val); if (spref.get("bool_shift", i, i)) shift = i; spref.get("int_shift", shift_val, shift_val); if (spref.get("pbt_lock", i, pbt_lock)) pbt_lock = i; if (spref.get("pbt_inner", i, pbt_inner)) pbt_inner = i; if (spref.get("pbt_outer", i, pbt_outer)) pbt_outer = i; spref.get("rfgain", rfgain, rfgain); spref.get("squelch", squelch, squelch); spref.get("no_txqsy", no_txqsy, no_txqsy); spref.get("schema", schema, schema); spref.get("embed_tabs", embed_tabs, embed_tabs); spref.get("show_tabs", show_tabs, show_tabs); spref.get("visible_tab", defbuffer, visible_tab.c_str(), MAX_DEFBUFFER_SIZE); visible_tab = defbuffer; spref.get("rx_avg", rx_avg, rx_avg); spref.get("rx_peak", rx_peak, rx_peak); spref.get("pwr_avg", pwr_avg, pwr_avg); spref.get("pwr_peak", pwr_peak, pwr_peak); spref.get("pwr_scale", pwr_scale, pwr_scale); if (spref.get("sync_clock", i, sync_clock)) sync_clock = i; if (spref.get("sync_gmt", i, sync_gmt)) sync_gmt = i; if (spref.get("digi_sel_on_off", i, i)) digi_sel_on_off = i; spref.get("digi_sel_val", digi_sel_val, digi_sel_val); if (spref.get("dual_watch", i, i)) dual_watch = i; spref.get("ic7610att", index_ic7610att, index_ic7610att); if (spref.get("ft950_rg_reverse", i, i)) ft950_rg_reverse = i; if (selrig->name_ == rig_TT550.name_) { spref.get("tt550_line_out", tt550_line_out, tt550_line_out); spref.get("tt550_agc_level", tt550_agc_level, tt550_agc_level); spref.get("tt550_cw_wpm", tt550_cw_wpm, tt550_cw_wpm); spref.get("tt550_cw_weight", tt550_cw_weight, tt550_cw_weight); spref.get("tt550_cw_vol", tt550_cw_vol, tt550_cw_vol); spref.get("tt550_cw_spot", tt550_cw_spot, tt550_cw_spot); if (spref.get("tt550_spot_onoff", i, i)) tt550_spot_onoff = i; spref.get("tt550_cw_qsk", tt550_cw_qsk, tt550_cw_qsk); if (spref.get("tt550_enable_keyer", i, i)) tt550_enable_keyer = i; if (spref.get("break_in", i, i)) break_in = i; if (spref.get("vox_onoff", i, i)) vox_onoff = i; if (spref.get("tt550_vox_onoff", i, i)) tt550_vox_onoff = i; spref.get("tt550_vox_gain", tt550_vox_gain, tt550_vox_gain); spref.get("tt550_vox_anti", tt550_vox_anti, tt550_vox_anti); spref.get("tt550_vox_hang", tt550_vox_hang, tt550_vox_hang); spref.get("tt550_mon_vol", tt550_mon_vol, tt550_mon_vol); spref.get("tt550_squelch_level", tt550_squelch_level, tt550_squelch_level); spref.get("tt550_compression", tt550_compression, tt550_compression); spref.get("tt550_nb_level", tt550_nb_level, tt550_nb_level); if (spref.get("tt550_compON", i, i)) tt550_compON = i; if (spref.get("tt550_tuner_bypass", i, i)) tt550_tuner_bypass = i; if (spref.get("tt550_enable_xmtr", i, i)) tt550_enable_xmtr = i; if (spref.get("tt550_enable_tloop", i, i)) tt550_enable_tloop = i; spref.get("tt550_xmt_bw", tt550_xmt_bw, tt550_xmt_bw); if (spref.get("tt550_use_xmt_bw", i, i)) tt550_use_xmt_bw = i; if (spref.get("tt550_use_line_in", i, i)) tt550_use_line_in = i; spref.get("tt550_AM_level", tt550_AM_level, tt550_AM_level); spref.get("tt550_encoder_step", tt550_encoder_step, tt550_encoder_step); spref.get("tt550_encoder_sensitivity", tt550_encoder_sensitivity, tt550_encoder_sensitivity); spref.get("tt550_keypad_timeout", tt550_keypad_timeout, tt550_keypad_timeout); spref.get("tt550_F1_func", tt550_F1_func, tt550_F1_func); spref.get("tt550_F2_func", tt550_F2_func, tt550_F2_func); spref.get("tt550_F3_func", tt550_F3_func, tt550_F3_func); spref.get("tt550_Nsamples", tt550_Nsamples, tt550_Nsamples); spref.get("tt550_at11_inline", i, tt550_at11_inline); tt550_at11_inline = i; spref.get("tt550_at11_hiZ", i, tt550_at11_hiZ); tt550_at11_hiZ = i; } else { spref.get("line_out", line_out, line_out); spref.get("data_port", i, data_port); data_port = i; spref.get("vox_on_dataport", i, vox_on_dataport); vox_on_dataport = i; spref.get("agc_level", agc_level, agc_level); spref.get("cw_wpm", cw_wpm, cw_wpm); spref.get("cw_weight", cw_weight, cw_weight); spref.get("cw_vol", cw_vol, cw_vol); spref.get("cw_spot", cw_spot, cw_spot); if (spref.get("spot_onoff", i, i)) spot_onoff = i; spref.get("cw_spot_tone", cw_spot_tone, cw_spot_tone); 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", 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); spref.get("vox_hang", vox_hang, vox_hang); spref.get("compression", compression, compression); if (spref.get("compON", i, i)) compON = i; } if (spref.get("noise_reduction", i, i)) noise_reduction = i; spref.get("noise_red_val", noise_reduction_val, noise_reduction_val); if (spref.get("bool_noise", i, i)) noise = i; spref.get("nb_level", nb_level, nb_level); spref.get("int_preamp", preamp, preamp); spref.get("int_att", attenuator, attenuator); spref.get("compression", compression, compression); if (spref.get("compON", i, i)) compON = i; spref.get("vfo_adj", vfo_adj, vfo_adj); spref.get("bfo_freq", bfo_freq, bfo_freq); spref.get("rit_freq", rit_freq, rit_freq); spref.get("xit_freq", xit_freq, xit_freq); spref.get("bpf_center", bpf_center, bpf_center); spref.get("use_bpf_center", i, i); use_bpf_center = i; if (spref.get("use706filters", i, i)) use706filters = i; spref.get("ssb_cw_wide", defbuffer, ssb_cw_wide.c_str(), MAX_DEFBUFFER_SIZE); ssb_cw_wide = defbuffer; spref.get("ssb_cw_normal", defbuffer, ssb_cw_normal.c_str(), MAX_DEFBUFFER_SIZE); ssb_cw_normal = defbuffer; spref.get("ssb_cw_narrow", defbuffer, ssb_cw_narrow.c_str(), MAX_DEFBUFFER_SIZE); ssb_cw_narrow = defbuffer; spref.get("label1", defbuffer, label1.c_str(), MAX_DEFBUFFER_SIZE); label1 = defbuffer; spref.get("command1", defbuffer, command1.c_str(), MAX_DEFBUFFER_SIZE); command1 = defbuffer; spref.get("shftcmd1", defbuffer, shftcmd1.c_str(), MAX_DEFBUFFER_SIZE); shftcmd1 = defbuffer; spref.get("label2", defbuffer, label2.c_str(), MAX_DEFBUFFER_SIZE); label2 = defbuffer; spref.get("command2", defbuffer, command2.c_str(), MAX_DEFBUFFER_SIZE); command2 = defbuffer; spref.get("shftcmd2", defbuffer, shftcmd2.c_str(), MAX_DEFBUFFER_SIZE); shftcmd2 = defbuffer; spref.get("label3", defbuffer, label3.c_str(), MAX_DEFBUFFER_SIZE); label3 = defbuffer; spref.get("command3", defbuffer, command3.c_str(), MAX_DEFBUFFER_SIZE); command3 = defbuffer; spref.get("shftcmd3", defbuffer, shftcmd3.c_str(), MAX_DEFBUFFER_SIZE); shftcmd3 = defbuffer; spref.get("label4", defbuffer, label4.c_str(), MAX_DEFBUFFER_SIZE); label4 = defbuffer; spref.get("command4", defbuffer, command4.c_str(), MAX_DEFBUFFER_SIZE); command4 = defbuffer; spref.get("shftcmd4", defbuffer, shftcmd4.c_str(), MAX_DEFBUFFER_SIZE); shftcmd4 = defbuffer; spref.get("label5", defbuffer, label5.c_str(), MAX_DEFBUFFER_SIZE); label5 = defbuffer; spref.get("command5", defbuffer, command5.c_str(), MAX_DEFBUFFER_SIZE); command5 = defbuffer; spref.get("shftcmd5", defbuffer, shftcmd5.c_str(), MAX_DEFBUFFER_SIZE); shftcmd5 = defbuffer; spref.get("label6", defbuffer, label6.c_str(), MAX_DEFBUFFER_SIZE); label6 = defbuffer; spref.get("command6", defbuffer, command6.c_str(), MAX_DEFBUFFER_SIZE); command6 = defbuffer; spref.get("shftcmd6", defbuffer, shftcmd6.c_str(), MAX_DEFBUFFER_SIZE); shftcmd6 = defbuffer; spref.get("label7", defbuffer, label7.c_str(), MAX_DEFBUFFER_SIZE); label7 = defbuffer; spref.get("command7", defbuffer, command7.c_str(), MAX_DEFBUFFER_SIZE); command7 = defbuffer; spref.get("shftcmd7", defbuffer, shftcmd7.c_str(), MAX_DEFBUFFER_SIZE); shftcmd7 = defbuffer; spref.get("label8", defbuffer, label8.c_str(), MAX_DEFBUFFER_SIZE); label8 = defbuffer; spref.get("command8", defbuffer, command8.c_str(), MAX_DEFBUFFER_SIZE); command8 = defbuffer; spref.get("shftcmd8", defbuffer, shftcmd8.c_str(), MAX_DEFBUFFER_SIZE); shftcmd8 = defbuffer; spref.get("label9", defbuffer, label9.c_str(), MAX_DEFBUFFER_SIZE); label9 = defbuffer; spref.get("command9", defbuffer, command9.c_str(), MAX_DEFBUFFER_SIZE); command9 = defbuffer; spref.get("shftcmd9", defbuffer, shftcmd9.c_str(), MAX_DEFBUFFER_SIZE); shftcmd9 = defbuffer; spref.get("label10", defbuffer, label10.c_str(), MAX_DEFBUFFER_SIZE); label10 = defbuffer; spref.get("command10", defbuffer, command10.c_str(), MAX_DEFBUFFER_SIZE); command10 = defbuffer; spref.get("shftcmd10", defbuffer, shftcmd10.c_str(), MAX_DEFBUFFER_SIZE); shftcmd10 = defbuffer; spref.get("label11", defbuffer, label11.c_str(), MAX_DEFBUFFER_SIZE); label11 = defbuffer; spref.get("command11", defbuffer, command11.c_str(), MAX_DEFBUFFER_SIZE); command11 = defbuffer; spref.get("shftcmd11", defbuffer, shftcmd11.c_str(), MAX_DEFBUFFER_SIZE); shftcmd11 = defbuffer; spref.get("label12", defbuffer, label12.c_str(), MAX_DEFBUFFER_SIZE); label12 = defbuffer; spref.get("command12", defbuffer, command12.c_str(), MAX_DEFBUFFER_SIZE); command12 = defbuffer; spref.get("shftcmd12", defbuffer, shftcmd12.c_str(), MAX_DEFBUFFER_SIZE); shftcmd12 = defbuffer; spref.get("label13", defbuffer, label13.c_str(), MAX_DEFBUFFER_SIZE); label13 = defbuffer; spref.get("command13", defbuffer, command13.c_str(), MAX_DEFBUFFER_SIZE); command13 = defbuffer; spref.get("shftcmd13", defbuffer, shftcmd13.c_str(), MAX_DEFBUFFER_SIZE); shftcmd13 = defbuffer; spref.get("label14", defbuffer, label14.c_str(), MAX_DEFBUFFER_SIZE); label14 = defbuffer; spref.get("command14", defbuffer, command14.c_str(), MAX_DEFBUFFER_SIZE); command14 = defbuffer; spref.get("shftcmd14", defbuffer, shftcmd14.c_str(), MAX_DEFBUFFER_SIZE); shftcmd14 = defbuffer; spref.get("label15", defbuffer, label15.c_str(), MAX_DEFBUFFER_SIZE); label15 = defbuffer; spref.get("command15", defbuffer, command15.c_str(), MAX_DEFBUFFER_SIZE); command15 = defbuffer; spref.get("shftcmd15", defbuffer, shftcmd15.c_str(), MAX_DEFBUFFER_SIZE); shftcmd15 = defbuffer; spref.get("label16", defbuffer, label16.c_str(), MAX_DEFBUFFER_SIZE); label16 = defbuffer; spref.get("command16", defbuffer, command16.c_str(), MAX_DEFBUFFER_SIZE); command16 = defbuffer; spref.get("shftcmd16", defbuffer, shftcmd16.c_str(), MAX_DEFBUFFER_SIZE); shftcmd16 = defbuffer; spref.get("label17", defbuffer, label17.c_str(), MAX_DEFBUFFER_SIZE); label17 = defbuffer; spref.get("command17", defbuffer, command17.c_str(), MAX_DEFBUFFER_SIZE); command17 = defbuffer; spref.get("shftcmd17", defbuffer, shftcmd17.c_str(), MAX_DEFBUFFER_SIZE); shftcmd17 = defbuffer; spref.get("label18", defbuffer, label18.c_str(), MAX_DEFBUFFER_SIZE); label18 = defbuffer; spref.get("command18", defbuffer, command18.c_str(), MAX_DEFBUFFER_SIZE); command18 = defbuffer; spref.get("shftcmd18", defbuffer, shftcmd18.c_str(), MAX_DEFBUFFER_SIZE); shftcmd18 = defbuffer; spref.get("label19", defbuffer, label19.c_str(), MAX_DEFBUFFER_SIZE); label19 = defbuffer; spref.get("command19", defbuffer, command19.c_str(), MAX_DEFBUFFER_SIZE); command19 = defbuffer; spref.get("shftcmd19", defbuffer, shftcmd11.c_str(), MAX_DEFBUFFER_SIZE); shftcmd19 = defbuffer; spref.get("label20", defbuffer, label20.c_str(), MAX_DEFBUFFER_SIZE); label20 = defbuffer; spref.get("command20", defbuffer, command20.c_str(), MAX_DEFBUFFER_SIZE); command20 = defbuffer; spref.get("shftcmd20", defbuffer, shftcmd20.c_str(), MAX_DEFBUFFER_SIZE); shftcmd20 = defbuffer; spref.get("label21", defbuffer, label21.c_str(), MAX_DEFBUFFER_SIZE); label21 = defbuffer; spref.get("command21", defbuffer, command21.c_str(), MAX_DEFBUFFER_SIZE); command21 = defbuffer; spref.get("shftcmd21", defbuffer, shftcmd21.c_str(), MAX_DEFBUFFER_SIZE); shftcmd21 = defbuffer; spref.get("label22", defbuffer, label22.c_str(), MAX_DEFBUFFER_SIZE); label22 = defbuffer; spref.get("command22", defbuffer, command22.c_str(), MAX_DEFBUFFER_SIZE); command22 = defbuffer; spref.get("shftcmd22", defbuffer, shftcmd22.c_str(), MAX_DEFBUFFER_SIZE); shftcmd22 = defbuffer; spref.get("label23", defbuffer, label23.c_str(), MAX_DEFBUFFER_SIZE); label23 = defbuffer; spref.get("command23", defbuffer, command23.c_str(), MAX_DEFBUFFER_SIZE); command23 = defbuffer; spref.get("shftcmd23", defbuffer, shftcmd23.c_str(), MAX_DEFBUFFER_SIZE); shftcmd23 = defbuffer; spref.get("label24", defbuffer, label24.c_str(), MAX_DEFBUFFER_SIZE); label24 = defbuffer; spref.get("command24", defbuffer, command24.c_str(), MAX_DEFBUFFER_SIZE); command24 = defbuffer; spref.get("shftcmd24", defbuffer, shftcmd24.c_str(), MAX_DEFBUFFER_SIZE); shftcmd24 = defbuffer; spref.get("st_label1", defbuffer, label_on_start1.c_str(), MAX_DEFBUFFER_SIZE); label_on_start1 = defbuffer; spref.get("st_cmd1", defbuffer, cmd_on_start1.c_str(), MAX_DEFBUFFER_SIZE); cmd_on_start1 = defbuffer; spref.get("st_label2", defbuffer, label_on_start2.c_str(), MAX_DEFBUFFER_SIZE); label_on_start2 = defbuffer; spref.get("st_cmd2", defbuffer, cmd_on_start2.c_str(), MAX_DEFBUFFER_SIZE); cmd_on_start2 = defbuffer; spref.get("st_label3", defbuffer, label_on_start3.c_str(), MAX_DEFBUFFER_SIZE); label_on_start3 = defbuffer; spref.get("st_cmd3", defbuffer, cmd_on_start3.c_str(), MAX_DEFBUFFER_SIZE); cmd_on_start3 = defbuffer; spref.get("st_label4", defbuffer, label_on_start4.c_str(), MAX_DEFBUFFER_SIZE); label_on_start4 = defbuffer; spref.get("st_cmd4", defbuffer, cmd_on_start4.c_str(), MAX_DEFBUFFER_SIZE); cmd_on_start4 = defbuffer; spref.get("ex_label1", defbuffer, label_on_exit1.c_str(), MAX_DEFBUFFER_SIZE); label_on_exit1 = defbuffer; spref.get("ex_cmd1", defbuffer, cmd_on_exit1.c_str(), MAX_DEFBUFFER_SIZE); cmd_on_exit1 = defbuffer; spref.get("ex_label2", defbuffer, label_on_exit2.c_str(), MAX_DEFBUFFER_SIZE); label_on_exit2 = defbuffer; spref.get("ex_cmd2", defbuffer, cmd_on_exit2.c_str(), MAX_DEFBUFFER_SIZE); cmd_on_exit2 = defbuffer; spref.get("ex_label3", defbuffer, label_on_exit3.c_str(), MAX_DEFBUFFER_SIZE); label_on_exit3 = defbuffer; spref.get("ex_cmd3", defbuffer, cmd_on_exit3.c_str(), MAX_DEFBUFFER_SIZE); cmd_on_exit3 = defbuffer; spref.get("ex_label4", defbuffer, label_on_exit4.c_str(), MAX_DEFBUFFER_SIZE); label_on_exit4 = defbuffer; spref.get("ex_cmd4", defbuffer, cmd_on_exit4.c_str(), MAX_DEFBUFFER_SIZE); cmd_on_exit4 = defbuffer; spref.get("fg_red", fg_red, fg_red); spref.get("fg_green", fg_green, fg_green); spref.get("fg_blue", fg_blue, fg_blue); spref.get("bg_red", bg_red, bg_red); spref.get("bg_green", bg_green, bg_green); spref.get("bg_blue", bg_blue, bg_blue); spref.get("smeter_red", smeterRed, smeterRed); spref.get("smeter_green", smeterGreen, smeterGreen); spref.get("smeter_blue", smeterBlue, smeterBlue); spref.get("power_red", pwrRed, pwrRed); spref.get("power_green", pwrGreen, pwrGreen); spref.get("power_blue", pwrBlue, pwrBlue); spref.get("swr_red", swrRed, swrRed); spref.get("swr_green", swrGreen, swrGreen); spref.get("swr_blue", swrBlue, swrBlue); spref.get("peak_red", peakRed, peakRed); spref.get("peak_green", peakGreen, peakGreen); spref.get("peak_blue", peakBlue, peakBlue); spref.get("volt_red", voltRed, voltRed); spref.get("volt_green", voltGreen, voltGreen); spref.get("volt_blue", voltBlue, voltBlue); spref.get("display_voltmeter", display_voltmeter, display_voltmeter); spref.get("fg_sys_red", fg_sys_red, fg_sys_red); spref.get("fg_sys_green", fg_sys_green, fg_sys_green); spref.get("fg_sys_blue", fg_sys_blue, fg_sys_blue); spref.get("bg_sys_red", bg_sys_red, bg_sys_red); spref.get("bg_sys_green", bg_sys_green, bg_sys_green); spref.get("bg_sys_blue", bg_sys_blue, bg_sys_blue); spref.get("bg2_sys_red", bg2_sys_red, bg2_sys_red); spref.get("bg2_sys_green", bg2_sys_green, bg2_sys_green); spref.get("bg2_sys_blue", bg2_sys_blue, bg2_sys_blue); spref.get("slider_red", slider_red, slider_red); spref.get("slider_green", slider_green, slider_green); spref.get("slider_blue", slider_blue, slider_blue); spref.get("slider_btn_red", slider_btn_red, slider_btn_red); spref.get("slider_btn_green", slider_btn_green, slider_btn_green); spref.get("slider_btn_blue", slider_btn_blue, slider_btn_blue); spref.get("lighted_btn_red", lighted_btn_red, lighted_btn_red); spref.get("lighted_btn_green", lighted_btn_green, lighted_btn_green); spref.get("lighted_btn_blue", lighted_btn_blue, lighted_btn_blue); spref.get("tab_red", tab_red, tab_red); spref.get("tab_green", tab_green, tab_green); spref.get("tab_blue", tab_blue, tab_blue); i = (int)fontnbr; spref.get("fontnbr", i, i); fontnbr = (Fl_Font)i; i = 0; if (spref.get("tooltips", i, i)) tooltips = i; spref.get("ui_scheme", defbuffer, "gtk+", MAX_DEFBUFFER_SIZE); ui_scheme = defbuffer; // spref.get("server_port", defbuffer, "7362", MAX_DEFBUFFER_SIZE); // server_port = defbuffer; // spref.get("server_addr", defbuffer, "127.0.0.1", MAX_DEFBUFFER_SIZE); // server_addr = defbuffer; spref.get("xmlrig_port", defbuffer, "12345", MAX_DEFBUFFER_SIZE); xmlrig_port = defbuffer; spref.get("xmlrig_addr", defbuffer, "127.0.0.1", MAX_DEFBUFFER_SIZE); xmlrig_addr = defbuffer; spref.get("tcpip_port", defbuffer, "4001", MAX_DEFBUFFER_SIZE); tcpip_port = defbuffer; spref.get("tcpip_addr", defbuffer, "127.0.0.1", MAX_DEFBUFFER_SIZE); tcpip_addr = defbuffer; spref.get("tcpip_ping_delay", tcpip_ping_delay, tcpip_ping_delay); spref.get("tcpip_tcpip_reconnect_after", tcpip_reconnect_after, tcpip_reconnect_after); spref.get("tcpip_drops_allowed", tcpip_drops_allowed, tcpip_drops_allowed); if (spref.get("use_tcpip", i, i)) use_tcpip = i; spref.get("tci_port", defbuffer, "40001", MAX_DEFBUFFER_SIZE); tci_port = defbuffer; spref.get("tci_addr", defbuffer, "127.0.0.1", MAX_DEFBUFFER_SIZE); tci_addr = defbuffer; spref.get("tci_center", tci_center, tci_center); if (spref.get("xcvr_auto_on", i, i)) xcvr_auto_on = i; if (spref.get("xcvr_auto_off", i, i)) xcvr_auto_off = i; if (spref.get("external_tuner", i,i)) external_tuner = i; if (spref.get("trace", i, trace)) trace = i; if (spref.get("rigtrace", i, rigtrace)) rigtrace = i; if (spref.get("gettrace", i, gettrace)) gettrace = i; if (spref.get("settrace", i, settrace)) settrace = i; if (spref.get("debugtrace", i, debugtrace)) debugtrace = i; if (spref.get("xmltrace", i, xmltrace)) xmltrace = i; if (spref.get("serialtrace", i, serialtrace)) serialtrace = i; if (spref.get("startstoptrace", i, start_stop_trace)) start_stop_trace = i; if (spref.get("rpctrace", i, rpctrace)) rpctrace = i; if (spref.get("tcitrace", i, tcitrace)) tcitrace = i; #ifndef NDEBUG trace = true; rigtrace = true; settrace = true; debugtrace = true; xmltrace = true; rpctrace = true; serialtrace = true; gettrace = true; tcitrace = true; #endif spref.get("rpc_level", rpc_level, rpc_level); spref.get("f160", f160, f160); spref.get("m160", m160, m160); spref.get("txT160", txT_160, txT_160); spref.get("rxT160", rxT_160, rxT_160); spref.get("offset_160", offset_160, offset_160); spref.get("oF_160", oF_160, oF_160); spref.get("f80", f80, f80); spref.get("m80", m80, m80); spref.get("txT80", txT_80, txT_80); spref.get("rxT80", rxT_80, rxT_80); spref.get("offset_80", offset_80, offset_80); spref.get("oF_80", oF_80, oF_80); spref.get("f40", f40, f40); spref.get("m40", m40, m40); spref.get("txT40", txT_40, txT_40); spref.get("rxT40", rxT_40, rxT_40); spref.get("offset_40", offset_40, offset_40); spref.get("oF_40", oF_40, oF_40); spref.get("f30", f30, f30); spref.get("m30", m30, m30); spref.get("txT30", txT_30, txT_30); spref.get("rxT30", rxT_30, rxT_30); spref.get("offset_30", offset_30, offset_30); spref.get("oF_30", oF_30, oF_30); spref.get("f20", f20, f20); spref.get("m20", m20, m20); spref.get("txT20", txT_20, txT_20); spref.get("rxT20", rxT_20, rxT_20); spref.get("offset_20", offset_20, offset_20); spref.get("oF_20", oF_20, oF_20); spref.get("f17", f17, f17); spref.get("m17", m17, m17); spref.get("txT17", txT_17, txT_17); spref.get("rxT17", rxT_17, rxT_17); spref.get("offset_17", offset_17, offset_17); spref.get("oF_17", oF_17, oF_17); spref.get("f15", f15, f15); spref.get("m15", m15, m15); spref.get("txT15", txT_15, txT_15); spref.get("rxT15", rxT_15, rxT_15); spref.get("offset_15", offset_15, offset_15); spref.get("oF_15", oF_15, oF_15); spref.get("f12", f12, f12); spref.get("m12", m12, m12); spref.get("txT12", txT_12, txT_12); spref.get("rxT12", rxT_12, rxT_12); spref.get("offset_12", offset_12, offset_12); spref.get("oF_12", oF_12, oF_12); spref.get("f10", f10, f10); spref.get("m10", m10, m10); spref.get("txT10", txT_10, txT_10); spref.get("rxT10", rxT_10, rxT_10); spref.get("offset_10", offset_10, offset_10); spref.get("oF_10", oF_10, oF_10); spref.get("f6", f6, f6); spref.get("m6", m6, m6); spref.get("txT6", txT_6, txT_6); spref.get("rxT6", rxT_6, rxT_6); spref.get("offset_6", offset_6, offset_6); spref.get("oF_6", oF_6, oF_6); spref.get("f2", f2, f2); spref.get("m2", m2, m2); spref.get("txT2", txT_2, txT_2); spref.get("rxT2", rxT_2, rxT_2); spref.get("offset_2", offset_2, offset_2); spref.get("oF_2", oF_2, oF_2); spref.get("f70", f70, f70); spref.get("m70", m70, m70); spref.get("txT70", txT_70, txT_70); spref.get("rxT70", rxT_70, rxT_70); spref.get("offset_70", offset_70, offset_70); spref.get("oF_70", oF_70, oF_70); spref.get("f12G", f12G, f12G); spref.get("m12G", m12G, m12G); spref.get("txT12G", txT_12G, txT_12G); spref.get("rxT12G", rxT_12G, rxT_12G); spref.get("offset_12G", offset_12G, offset_12G); spref.get("oF_12G", oF_12G, oF_12G); spref.get("fgen", fgen, fgen); spref.get("mgen", mgen, mgen); spref.get("txTgen", txT_gen, txT_gen); spref.get("rxTgen", rxT_gen, rxT_gen); spref.get("offset_gen", offset_gen, offset_gen); spref.get("oF_gen", oF_gen, oF_gen); if (spref.get("hrd_buttons", i, i)) hrd_buttons = i; spref.get("sliders_button", sliders_button, sliders_button); spref.get("memfontnbr", memfontnbr, memfontnbr); spref.get("memfontsize", memfontsize, memfontsize); if (spref.get("gpio_ptt", i, i)) gpio_ptt = i; spref.get("enable_gpio", enable_gpio, enable_gpio); spref.get("gpio_on", gpio_on, gpio_on); spref.get("gpio_pulse_width", gpio_pulse_width, gpio_pulse_width); // spref.get("kxpa", kxpa, kxpa); spref.get("cwioWPM", cwioWPM, cwioWPM); spref.get("cwio_comp", cwio_comp, cwio_comp); spref.get("cwio_keycorr", cwio_keycorr, cwio_keycorr); spref.get("cwioKEYLINE", cwioKEYLINE, cwioKEYLINE); spref.get("cwioSHARED", cwioSHARED, cwioSHARED); spref.get("cwioPTT", cwioPTT, cwioPTT); spref.get("cwioCONNECTED", cwioCONNECTED, cwioCONNECTED); spref.get("cwioINVERTED", cwioINVERTED, cwioINVERTED); spref.get("cwioPORT", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); cwioPORT = defbuffer; char getbuff[20]; for (int n = 0; n < 12; n++) { snprintf(getbuff, sizeof(getbuff), "cwiolabel[%d]", n); spref.get(getbuff, defbuffer, "", MAX_DEFBUFFER_SIZE); cwio_labels[n] = defbuffer; snprintf(getbuff, sizeof(getbuff), "cwiomessage[%d]", n); spref.get(getbuff, defbuffer, "", MAX_DEFBUFFER_SIZE); cwio_msgs[n] = defbuffer; } spref.get("BT", defbuffer, BT.c_str(), MAX_DEFBUFFER_SIZE); BT = defbuffer; spref.get("AA", defbuffer, AA.c_str(), MAX_DEFBUFFER_SIZE); AA = defbuffer; spref.get("AS", defbuffer, AS.c_str(), MAX_DEFBUFFER_SIZE); AS = defbuffer; spref.get("AR", defbuffer, AR.c_str(), MAX_DEFBUFFER_SIZE); AR = defbuffer; spref.get("KN", defbuffer, KN.c_str(), MAX_DEFBUFFER_SIZE); KN = defbuffer; spref.get("SK", defbuffer, SK.c_str(), MAX_DEFBUFFER_SIZE); SK = defbuffer; spref.get("INT", defbuffer, INT.c_str(), MAX_DEFBUFFER_SIZE); INT = defbuffer; spref.get("HM", defbuffer, HM.c_str(), MAX_DEFBUFFER_SIZE); HM = defbuffer; spref.get("VE", defbuffer, VE.c_str(), MAX_DEFBUFFER_SIZE); VE = defbuffer; spref.get("FSK_KEYLINE", FSK_KEYLINE, FSK_KEYLINE); spref.get("FSK_SHARED", FSK_SHARED, FSK_SHARED); spref.get("FSK_PTT", FSK_PTT, FSK_PTT); spref.get("FSK_CONNECTED", FSK_CONNECTED, FSK_CONNECTED); spref.get("FSK_INVERTED", FSK_INVERTED, FSK_INVERTED); spref.get("FSK_STOPBITS", FSK_STOPBITS, FSK_STOPBITS); spref.get("FSK_IDLES", fsk_idles, fsk_idles); spref.get("FSK_PORT", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); FSK_PORT = defbuffer; // CW logbook parameters spref.get("CW_LOG_NAME", defbuffer, "", MAX_DEFBUFFER_SIZE); cw_log_name = defbuffer; spref.get("CW_CUT_NUMBERS", cw_log_cut_numbers, cw_log_cut_numbers); spref.get("CW_LEADING_ZEROS", cw_log_leading_zeros, cw_log_leading_zeros); spref.get("CW_DUPCHECK", cw_log_dupcheck, cw_log_dupcheck); spref.get("CW_LOG_NBR", cw_log_nbr, cw_log_nbr); // FSK logbook parameters spref.get("FSK_LOG_NAME", defbuffer, "", MAX_DEFBUFFER_SIZE); fsk_log_name = defbuffer; spref.get("FSK_CUT_NUMBERS",fsk_log_cut_numbers, fsk_log_cut_numbers); spref.get("FSK_LEADING_ZEROS", fsk_log_leading_zeros, fsk_log_leading_zeros); spref.get("FSK_DUPCHECK", fsk_log_dupcheck, fsk_log_dupcheck); spref.get("FSK_LOG_NBR", fsk_log_nbr, fsk_log_nbr); for (int n = 0; n < 12; n++) { snprintf(getbuff, sizeof(getbuff), "fskiolabel[%d]", n); spref.get(getbuff, defbuffer, "", MAX_DEFBUFFER_SIZE); FSK_labels[n] = defbuffer; snprintf(getbuff, sizeof(getbuff), "fskiomessage[%d]", n); spref.get(getbuff, defbuffer, "", MAX_DEFBUFFER_SIZE); FSK_msgs[n] = defbuffer; } return true; } return false; } void status::loadLastState() { Fl_Preferences xcvrpref(RigHomeDir.c_str(), "w1hkj.com", PACKAGE_TARNAME); if (xcvrpref.entryExists("xcvr_name")) { char defbuffer[MAX_DEFBUFFER_SIZE]; xcvrpref.get("xcvr_name", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); xcvr_name = defbuffer; // for backward compatability } else if (xcvrpref.entryExists("last_xcvr_used")) { char defbuffer[MAX_DEFBUFFER_SIZE]; xcvrpref.get("last_xcvr_used", defbuffer, "NONE", MAX_DEFBUFFER_SIZE); xcvr_name = defbuffer; } // xcvrpref.get("xml_port", xmlport, xmlport); loadXcvrState(xcvr_name); } void status::UI_laststate() { Fl_Color bgclr = fl_rgb_color(bg_red, bg_green, bg_blue); Fl_Color fgclr = fl_rgb_color(fg_red, fg_green, fg_blue); Fl::background( bg_sys_red, bg_sys_green, bg_sys_blue); Fl::background2( bg2_sys_red, bg2_sys_green, bg2_sys_blue); Fl::foreground( fg_sys_red, fg_sys_green, fg_sys_blue); FreqDispA->SetCOLORS( fgclr, bgclr ); FreqDispA->font(fontnbr); FreqDispB->SetCOLORS( fgclr, fl_color_average(bgclr, FL_BLACK, 0.87)); FreqDispB->font(fontnbr); scaleSmeter->color(bgclr); scaleSmeter->labelcolor(fgclr); scalePower->color(bgclr); scalePower->labelcolor(fgclr); btnALC_IDD_SWR->color(bgclr); btnALC_IDD_SWR->labelcolor(fgclr); sldrFwdPwr->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr); sldrFwdPwr->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); sldrRcvSignal->color(fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr); sldrRcvSignal->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); sldrALC->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sldrALC->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); sldrSWR->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sldrSWR->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); sldrIDD->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sldrIDD->PeakColor(fl_rgb_color (peakRed, peakGreen, peakBlue)); sldrVoltage->color(fl_rgb_color (voltRed, voltGreen, voltBlue), bgclr); sldrVoltage->PeakColor(bgclr); scaleVoltage->color(bgclr); scaleVoltage->labelcolor(fgclr); mtr_SMETER->color(bgclr); mtr_SMETER->labelcolor(fgclr); sigbar_SMETER->color(fl_rgb_color (smeterRed, smeterGreen, smeterBlue), bgclr); sigbar_SMETER->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); mtr_PWR->color(bgclr); mtr_PWR->labelcolor(fgclr); sigbar_PWR->color(fl_rgb_color (pwrRed, pwrGreen, pwrBlue), bgclr); sigbar_PWR->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); mtr_SWR->color(bgclr); mtr_SWR->labelcolor(fgclr); sigbar_SWR->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sigbar_SWR->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); mtr_ALC->color(bgclr); mtr_ALC->labelcolor(fgclr); sigbar_ALC->color(fl_rgb_color (swrRed, swrGreen, swrBlue), bgclr); sigbar_ALC->PeakColor(fl_rgb_color(peakRed, peakGreen, peakBlue)); mtr_VOLTS->color(bgclr); mtr_VOLTS->labelcolor(fgclr); sigbar_VOLTS->color(fl_rgb_color (voltRed, voltGreen, voltBlue), bgclr); sigbar_VOLTS->PeakColor(bgclr); // set scale for both voltage display sldrVoltage->minimum (6); sldrVoltage->maximum (16); sigbar_VOLTS->minimum (6); sigbar_VOLTS->maximum (16); if (UIsize != small_ui) meter_fill_box->color(bgclr); grpMeters->color(bgclr); grpMeters->labelcolor(fgclr); Fl_Color btn_lt_color = fl_rgb_color(lighted_btn_red, lighted_btn_green, lighted_btn_blue); if (btnVol) btnVol->selection_color(btn_lt_color); if (btnNR) btnNR->selection_color(btn_lt_color); if (btnIFsh) btnIFsh->selection_color(btn_lt_color); if (btnNotch) btnNotch->selection_color(btn_lt_color); if (btnA) btnA->selection_color(btn_lt_color); if (btnB) btnB->selection_color(btn_lt_color); if (btnSplit) btnSplit->selection_color(btn_lt_color); if (btnAttenuator) btnAttenuator->selection_color(btn_lt_color); if (btnPreamp) btnPreamp->selection_color(btn_lt_color); if (btnNOISE) btnNOISE->selection_color(btn_lt_color); if (btnAutoNotch) btnAutoNotch->selection_color(btn_lt_color); if (btnTune) btnTune->selection_color(btn_lt_color); if (btn_tune_on_off) btn_tune_on_off->selection_color(btn_lt_color); if (btnPTT) btnPTT->selection_color(btn_lt_color); if (btnLOCK) btnLOCK->selection_color(btn_lt_color); if (btnAuxRTS) btnAuxRTS->selection_color(btn_lt_color); if (btnAuxDTR) btnAuxDTR->selection_color(btn_lt_color); if (btnSpot) btnSpot->selection_color(btn_lt_color); if (btn_vox) btn_vox->selection_color(btn_lt_color); if (btnCompON) btnCompON->selection_color(btn_lt_color); if (btnSpecial) btnSpecial->selection_color(btn_lt_color); if (btn_tt550_vox) btn_tt550_vox->selection_color(btn_lt_color); if (btn_tt550_CompON) btn_tt550_CompON->selection_color(btn_lt_color); if (btnAGC) btnAGC->selection_color(btn_lt_color); if (btnPOWER) btnPOWER->selection_color(btn_lt_color); Fl_Color bg_slider = fl_rgb_color(slider_red, slider_green, slider_blue); Fl_Color btn_slider = fl_rgb_color(slider_btn_red, slider_btn_green, slider_btn_blue); if (sldrVOLUME) sldrVOLUME->color(bg_slider); if (sldrVOLUME) sldrVOLUME->selection_color(btn_slider); if (sldrRFGAIN) sldrRFGAIN->color(bg_slider); if (sldrRFGAIN) sldrRFGAIN->selection_color(btn_slider); if (sldrSQUELCH) sldrSQUELCH->color(bg_slider); if (sldrSQUELCH) sldrSQUELCH->selection_color(btn_slider); if (sldrNR) sldrNR->color(bg_slider); if (sldrNR) sldrNR->selection_color(btn_slider); if (sldrIFSHIFT) sldrIFSHIFT->color(bg_slider); if (sldrIFSHIFT) sldrIFSHIFT->selection_color(btn_slider); if (sldrINNER) sldrINNER->color(bg_slider); if (sldrINNER) sldrINNER->selection_color(btn_slider); if (sldrOUTER) sldrOUTER->color(bg_slider); if (sldrOUTER) sldrOUTER->selection_color(btn_slider); if (sldrNOTCH) sldrNOTCH->color(bg_slider); if (sldrNOTCH) sldrNOTCH->selection_color(btn_slider); if (sldrMICGAIN) sldrMICGAIN->color(bg_slider); if (sldrMICGAIN) sldrMICGAIN->selection_color(btn_slider); if (sldrPOWER) sldrPOWER->color(bg_slider); if (sldrPOWER) sldrPOWER->selection_color(btn_slider); if (ic7610_digi_sel_val) { ic7610_digi_sel_val->color(bg_slider); ic7610_digi_sel_val->selection_color(btn_slider); } if (sldr_nb_level) { sldr_nb_level->color(bg_slider); sldr_nb_level->selection_color(btn_slider); } if (spnrPOWER) spnrPOWER->color(bg_slider); if (spnrPOWER) spnrPOWER->selection_color(btn_slider); if (spnrVOLUME) spnrVOLUME->color(bg_slider); if (spnrVOLUME) spnrVOLUME->selection_color(btn_slider); if (spnrRFGAIN) spnrRFGAIN->color(bg_slider); if (spnrRFGAIN) spnrRFGAIN->selection_color(btn_slider); if (spnrSQUELCH) spnrSQUELCH->color(bg_slider); if (spnrSQUELCH) spnrSQUELCH->selection_color(btn_slider); if (spnrNR) spnrNR->color(bg_slider); if (spnrNR) spnrNR->selection_color(btn_slider); if (spnrIFSHIFT) spnrIFSHIFT->color(bg_slider); if (spnrIFSHIFT) spnrIFSHIFT->selection_color(btn_slider); if (spnrNOTCH) spnrNOTCH->color(bg_slider); if (spnrNOTCH) spnrNOTCH->selection_color(btn_slider); if (spnrMICGAIN) spnrMICGAIN->color(bg_slider); if (spnrMICGAIN) spnrMICGAIN->selection_color(btn_slider); btnUser1->label(label1.c_str()); btnUser1->redraw_label(); btnUser2->label(label2.c_str()); btnUser2->redraw_label(); btnUser3->label(label3.c_str()); btnUser3->redraw_label(); btnUser4->label(label4.c_str()); btnUser4->redraw_label(); btnUser5->label(label5.c_str()); btnUser5->redraw_label(); btnUser6->label(label6.c_str()); btnUser6->redraw_label(); btnUser7->label(label7.c_str()); btnUser7->redraw_label(); btnUser8->label(label8.c_str()); btnUser8->redraw_label(); btnUser9->label(label9.c_str()); btnUser9->redraw_label(); btnUser10->label(label10.c_str()); btnUser10->redraw_label(); btnUser11->label(label11.c_str()); btnUser11->redraw_label(); btnUser12->label(label12.c_str()); btnUser12->redraw_label(); btnUser13->label(label13.c_str()); btnUser13->redraw_label(); btnUser14->label(label14.c_str()); btnUser14->redraw_label(); btnUser15->label(label15.c_str()); btnUser15->redraw_label(); btnUser16->label(label16.c_str()); btnUser16->redraw_label(); btnUser17->label(label17.c_str()); btnUser17->redraw_label(); btnUser18->label(label18.c_str()); btnUser18->redraw_label(); btnUser19->label(label19.c_str()); btnUser19->redraw_label(); btnUser20->label(label20.c_str()); btnUser20->redraw_label(); btnUser21->label(label21.c_str()); btnUser21->redraw_label(); btnUser22->label(label22.c_str()); btnUser22->redraw_label(); btnUser23->label(label23.c_str()); btnUser23->redraw_label(); btnUser24->label(label24.c_str()); btnUser24->redraw_label(); Fl::scheme(ui_scheme.c_str()); } std::string status::info() { std::stringstream info; static std::string retinfo; info << "status::info()\n============== Prefs File Contents =============\n\n"; info << "xcvr_serial_port : " << xcvr_serial_port << "\n"; info << "baudrate : " << serial_baudrate << "\n"; info << "stopbits : " << stopbits << "\n"; info << "retries : " << serial_retries << "\n"; info << "write_delay : " << serial_write_delay << "\n"; info << "post_write_delay : " << serial_post_write_delay << "\n"; info << "timeout : " << serial_timeout << "\n"; info << "query interval: : " << serloop_timing << "\n"; info << "\n"; info << "ptt_via_cat : " << serial_catptt << "\n"; info << "ptt_via_rts : " << serial_rtsptt << "\n"; info << "ptt_via_dtr : " << serial_dtrptt << "\n"; info << "rts_cts_flow : " << serial_rtscts << "\n"; info << "rts_plus : " << serial_rtsplus << "\n"; info << "dtr_plus : " << serial_dtrplus << "\n"; info << "civadr : " << CIV << "\n"; info << "usbaudio : " << USBaudio << "\n"; info << "\n"; info << "aux_serial_port : " << aux_serial_port.c_str() << "\n"; info << "aux_rts : " << aux_rts << "\n"; info << "aux_dtr : " << aux_dtr << "\n"; info << "\n"; info << "sep_serial_port : " << sep_serial_port.c_str() << "\n"; info << "sep_rtsptt : " << sep_rtsptt << "\n"; info << "sep_dtrptt : " << sep_dtrptt << "\n"; info << "sep_rtsplus : " << sep_rtsplus << "\n"; info << "set_dtrplus : " << sep_dtrplus << "\n"; info << "\n"; info << "poll_smeter : " << poll_smeter << "\n"; info << "poll_frequency : " << poll_frequency << "\n"; info << "poll_mode : " << poll_mode << "\n"; info << "poll_bandwidth : " << poll_bandwidth << "\n"; info << "poll_volume : " << poll_volume << "\n"; info << "poll_auto_notch : " << poll_auto_notch << "\n"; info << "poll_notch : " << poll_notch << "\n"; info << "poll_ifshift : " << poll_ifshift << "\n"; info << "poll_power_control : " << poll_power_control << "\n"; info << "poll_pbt : " << poll_pbt << "\n"; info << "poll_pre_att : " << poll_pre_att << "\n"; info << "poll_micgain : " << poll_micgain << "\n"; info << "poll_squelch : " << poll_squelch << "\n"; info << "poll_rfgain : " << poll_rfgain << "\n"; info << "poll_pout : " << poll_pout << "\n"; info << "poll_swr : " << poll_swr << "\n"; info << "poll_alc : " << poll_alc << "\n"; info << "poll_split : " << poll_split << "\n"; 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"; info << "mode_A : " << imode_A << "\n"; info << "bw_A : " << iBW_A << "\n"; info << "\n"; info << "freq_B : " << freq_B << "\n"; info << "mode_B : " << imode_B << "\n"; info << "bw_B : " << iBW_B << "\n"; info << "\n"; info << "filters : " << filters << "\n"; info << "\n"; info << "use_rig_data : " << use_rig_data << "\n"; // info << "restore_rig_data : " << restore_rig_data << "\n"; info << "\n"; info << "bool_spkr_on : " << spkr_on << "\n"; info << "int_volume : " << volume << "\n"; info << "dbl_power : " << power_level << "\n"; info << "dbl_power_limit % : " << power_limit << "\n"; info << "enable power limit: " << enable_power_limit << "\n"; info << "int_mic : " << mic_gain << "\n"; info << "bool_notch : " << notch << "\n"; info << "int_notch : " << notch_val << "\n"; info << "bool_shift : " << shift << "\n"; info << "int_shift : " << shift_val << "\n"; info << "rfgain : " << rfgain << "\n"; info << "squelch : " << squelch << "\n"; info << "\n"; info << "schema : " << schema << "\n"; info << "\n"; info << "rx_avg : " << rx_avg << "\n"; info << "rx_peak : " << rx_peak << "\n"; info << "pwr_avg : " << pwr_avg << "\n"; info << "pwr_peak : " << pwr_peak << "\n"; info << "pwr_scale : " << pwr_scale << "\n"; info << "\n"; info << "line_out : " << line_out << "\n"; info << "data_port : " << data_port << "\n"; info << "vox_on_dataport : " << vox_on_dataport << "\n"; info << "agc_level : " << agc_level << "\n"; info << "cw_wpm : " << cw_wpm << "\n"; info << "cw_weight : " << cw_weight << "\n"; info << "cw_vol : " << cw_vol << "\n"; info << "cw_spot : " << cw_spot << "\n"; info << "spot_onoff : " << spot_onoff << "\n"; info << "cw_spot_tone : " << cw_spot_tone << "\n"; info << "cw_qsk : " << cw_qsk << "\n"; info << "(cw_delay : " << cw_delay << "\n"; info << "enable_keyer : " << enable_keyer << "\n"; info << "break_in : " << break_in << "\n"; info << "vox_onoff : " << vox_onoff << "\n"; info << "vox_gain : " << vox_gain << "\n"; info << "vox_anti : " << vox_anti << "\n"; info << "vox_hang : " << vox_hang << "\n"; info << "compression : " << compression << "\n"; info << "compON : " << compON << "\n"; info << "\n"; info << "label 1 : " << label1 << "\n"; info << "command 1 : " << command1 << "\n"; info << "label 2 : " << label1 << "\n"; info << "command 2 : " << command1 << "\n"; info << "label 3 : " << label1 << "\n"; info << "command 3 : " << command1 << "\n"; info << "label 4 : " << label1 << "\n"; info << "command 4 : " << command1 << "\n"; info << "label 5 : " << label1 << "\n"; info << "command 5 : " << command1 << "\n"; info << "label 6 : " << label1 << "\n"; info << "command 6 : " << command1 << "\n"; info << "label 7 : " << label1 << "\n"; info << "command 7 : " << command1 << "\n"; info << "label 8 : " << label1 << "\n"; info << "command 8 : " << command1 << "\n"; info << "label 9 : " << label9 << "\n"; info << "command 9 : " << command9 << "\n"; info << "label 10 : " << label10 << "\n"; info << "command 10 : " << command10 << "\n"; info << "label 11 : " << label11 << "\n"; info << "command 11 : " << command11 << "\n"; info << "label 12 : " << label12 << "\n"; info << "command 12 : " << command12 << "\n"; info << "label 13 : " << label13 << "\n"; info << "command 13 : " << command13 << "\n"; info << "label 14 : " << label14 << "\n"; info << "command 14 : " << command14 << "\n"; info << "label 15 : " << label15 << "\n"; info << "command 15 : " << command15 << "\n"; info << "label 16 : " << label16 << "\n"; info << "command 16 : " << command16 << "\n"; info << "label 17 : " << label17 << "\n"; info << "command 17 : " << command17 << "\n"; info << "label 18 : " << label18 << "\n"; info << "command 18 : " << command18 << "\n"; info << "label 19 : " << label19 << "\n"; info << "command 19 : " << command19 << "\n"; info << "label 20 : " << label20 << "\n"; info << "command 20 : " << command20 << "\n"; info << "label 21 : " << label21 << "\n"; info << "command 21 : " << command21 << "\n"; info << "label 22 : " << label22 << "\n"; info << "command 22 : " << command22 << "\n"; info << "label 23 : " << label23 << "\n"; info << "command 23 : " << command23 << "\n"; info << "label 24 : " << label24 << "\n"; info << "command 24 : " << command24 << "\n"; info << "BT : " << BT << "\n"; info << "AA : " << AA << "\n"; info << "AS : " << AS << "\n"; info << "AR : " << AR << "\n"; info << "KN : " << KN << "\n"; info << "SK : " << SK << "\n"; info << "INT : " << INT << "\n"; info << "HM : " << HM << "\n"; info << "VE : " << VE << "\n"; return retinfo = info.str(); } static bool strace; static bool srigtrace; static bool ssettrace; static bool sgettrace; static bool sstrace; static bool stcitrace; void ss_trace(bool on) { if (on) { strace = progStatus.trace; srigtrace = progStatus.rigtrace; ssettrace = progStatus.settrace; sgettrace = progStatus.gettrace; sstrace = progStatus.serialtrace; stcitrace = progStatus.tcitrace; progStatus.trace = progStatus.rigtrace = progStatus.settrace = progStatus.serialtrace = progStatus.gettrace = progStatus.tcitrace = true; } else { progStatus.trace = strace; progStatus.rigtrace = srigtrace; progStatus.settrace = ssettrace; progStatus.gettrace = sgettrace; progStatus.serialtrace = sstrace; progStatus.tcitrace = stcitrace; } } flrig-2.0.04/src/support/serial.cxx0000664000175000017500000010111614505023143014126 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include "debug.h" #include "rig.h" #include "serial.h" #include "status.h" #include "trace.h" #include "tod_clock.h" LOG_FILE_SOURCE(debug::LOG_RIGCONTROL); char traceinfo[1000]; bool SERIALDEBUG = false; bool check_hex(const void *s, size_t len) { unsigned char *str = (unsigned char *)s; for (size_t n = 0; n < len; n++) { if (str[n] == '\r' || str[n] == '\n') continue; if (str[n] < 0x20) return true; if (str[n] > 0x7F) return true; } return false; } #ifndef __WIN32__ #include #include #include #include #include #include #include #include Cserial::Cserial() { device = "/dev/ttyS0"; baud = 1200; timeout = 100; //msec retries = 5; rts = dtr = rtsptt = dtrptt = rtscts = serptt = false; state = 0; stopbits = 2; fd = -1; failed_ = 0; } Cserial::~Cserial() { ClosePort(); } /////////////////////////////////////////////////////// // Function name : Cserial::OpenPort // Description : Opens the port specified by strPortName // Return type : bool // Argument : c_std::string strPortName /////////////////////////////////////////////////////// bool Cserial::CheckPort(std::string dev) { int testfd = open( dev.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); if (testfd < 0) { snprintf(traceinfo, sizeof(traceinfo), "%s checkPort() FAILED", dev.c_str()); ser_trace(1, traceinfo); return false; } close(fd); return true; } void Cserial::set_attributes() { // save current port settings tcflush (fd, TCIFLUSH); // tcgetattr (fd, &oldtio); // newtio = oldtio; // ioctl(fd, TIOCMGET, &state); // origstate = state; // 8 data bits newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; // enable receiver, set local mode newtio.c_cflag |= (CLOCAL | CREAD); // no parity newtio.c_cflag &= ~PARENB; if (stopbits == 1) // 1 stop bit newtio.c_cflag &= ~CSTOPB; else // 2 stop bit newtio.c_cflag |= CSTOPB; if (rtscts) // h/w handshake newtio.c_cflag |= CRTSCTS; else // no h/w handshake newtio.c_cflag &= ~CRTSCTS; // raw input newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // raw output newtio.c_oflag &= ~OPOST; // software flow control disabled newtio.c_iflag &= ~IXON; // do not translate CR to NL newtio.c_iflag &= ~ICRNL; switch(baud) { case 300: speed = B300; timeout = 1024; break; case 1200: speed = B1200; timeout = 1024; break; case 2400: speed = B2400; timeout = 1024; break; case 4800: speed = B4800; timeout = 512; break; default: case 9600: speed = B9600; timeout = 256; break; case 19200: speed = B19200; timeout = 128; break; case 38400: speed = B38400; timeout = 64; break; case 57600: speed = B57600; timeout = 32; break; case 115200: speed = B115200; timeout = 16; break; } timeout = progStatus.serial_timeout; cfsetispeed(&newtio, speed); cfsetospeed(&newtio, speed); tcsetattr (fd, TCSANOW, &newtio); if (dtr) state |= TIOCM_DTR; // set the DTR bit else state &= ~TIOCM_DTR; // clear the DTR bit if (rtscts == false) { // rts OK for ptt if RTSCTS not used if (rts) state |= TIOCM_RTS; // set the RTS bit else state &= ~TIOCM_RTS; // clear the RTS bit } ioctl(fd, TIOCMSET, &state); } /////////////////////////////////////////////////////// // Function name : Cserial::OpenPort // Description : Opens the port specified by strPortName // Return type : bool // Argument : c_std::string strPortName /////////////////////////////////////////////////////// bool Cserial::OpenPort() { if (IsOpen()) ClosePort(); if ((fd = open( device.c_str(), O_RDWR | O_NOCTTY )) < 0) { // | O_NDELAY )) < 0) { snprintf(traceinfo, sizeof(traceinfo), "%s OpenPort() FAILED", device.c_str()); ser_trace(1, traceinfo); return false; } if (progStatus.serialtrace || SERIALDEBUG) { snprintf(traceinfo, sizeof(traceinfo),"%s opened: fd = %d", device.c_str(), fd); ser_trace(1, traceinfo); } MilliSleep(5); // K0OG tcflush (fd, TCIFLUSH); tcgetattr (fd, &oldtio); newtio = oldtio; ioctl(fd, TIOCMGET, &state); origstate = state; set_attributes(); FlushBuffer(); failed_ = 0; return true; } /////////////////////////////////////////////////////// // Function name : Cserial::setPTT // Return type : void /////////////////////////////////////////////////////// bool Cserial::RTSptt(){ return serptt; } bool Cserial::DTRptt(){ return serptt; } bool Cserial::getPTT() { return serptt; } void Cserial::SetPTT(bool ON) { if (fd < 0) { if (progStatus.serialtrace || SERIALDEBUG) { snprintf(traceinfo, sizeof(traceinfo), "SetPTT(...) fd < 0"); ser_trace(1, traceinfo); } LOG_ERROR("ptt fd < 0"); return; } if (dtrptt || rtsptt) { ioctl(fd, TIOCMGET, &state); if (ON) { // ptt enabled if (dtrptt && dtr) state &= ~TIOCM_DTR; // toggle low if (dtrptt && !dtr) state |= TIOCM_DTR; // toggle high if (!rtscts) { if (rtsptt && rts) state &= ~TIOCM_RTS; // toggle low if (rtsptt && !rts) state |= TIOCM_RTS; // toggle high } } else { // ptt disabled if (dtrptt && dtr) state |= TIOCM_DTR; // toggle high if (dtrptt && !dtr) state &= ~TIOCM_DTR; // toggle low if (!rtscts) { if (rtsptt && rts) state |= TIOCM_RTS; // toggle high if (rtsptt && !rts) state &= ~TIOCM_RTS; // toggle low } } LOG_INFO("PTT %d, DTRptt %d, DTR %d, RTSptt %d, RTS %d, RTSCTS %d, state %2X", ON, dtrptt, dtr, rtsptt, rts, rtscts, state); if (progStatus.serialtrace || SERIALDEBUG) { snprintf(traceinfo, sizeof(traceinfo),"PTT %d, DTRptt %d, DTR %d, RTSptt %d, RTS %d, RTSCTS %d, state %2X", ON, dtrptt, dtr, rtsptt, rts, rtscts, state); ser_trace(1, traceinfo); } ioctl(fd, TIOCMSET, &state); } serptt = ON; } void Cserial::setRTS(bool b) { if (fd < 0) { return; } ioctl(fd, TIOCMGET, &state); if (b == true) state |= TIOCM_RTS; // toggle high else state &= ~TIOCM_RTS; // toggle low if (ioctl(fd, TIOCMSET, &state) == -1) { char errstr[50]; snprintf(errstr, sizeof(errstr), "set RTS ioctl error: %d", errno); LOG_ERROR("%s", errstr); ser_trace(1, errstr); } } void Cserial::setDTR(bool b) { if (fd < 0) return; ioctl(fd, TIOCMGET, &state); if (b == true) state |= TIOCM_DTR; // toggle high else state &= ~TIOCM_DTR; // toggle low if (ioctl(fd, TIOCMSET, &state) == -1) { char errstr[50]; snprintf(errstr, sizeof(errstr), "set DTR ioctl error: %d", errno); LOG_ERROR("%s", errstr); ser_trace(1, errstr); } } /////////////////////////////////////////////////////// // Function name : Cserial::ClosePort // Description : Closes the Port // Return type : void /////////////////////////////////////////////////////// void Cserial::ClosePort() { char msg[50]; snprintf(msg, sizeof(msg),"ClosePort(): fd = %d", fd); ser_trace(1, msg); if (fd < 0) return; int myfd = fd; fd = -1; // Some serial drivers force RTS and DTR high immediately upon // opening the port, so our origstate will indicate those bits // high (though the lines weren't actually high before we opened). // But then when we "restore" RTS and DTR from origstate here // it can result in PTT activation upon program exit! To avoid // this possibility, we ignore the apparentl initial settings, and // instead force RTS and DTR low before closing the port. (Just // omitting the ioctl(TIOCMSET) would also resolve the problem). // Kamal Mostafa // origstate &= ~(TIOCM_RTS|TIOCM_DTR); // ioctl(myfd, TIOCMSET, &origstate); // tcsetattr (myfd, TCSANOW, &oldtio); close(myfd); ser_trace(1,"serial port closed"); fd = -1; failed_ = false; return; } bool Cserial::IOselect () { fd_set rfds; struct timeval tv; int retval; FD_ZERO (&rfds); FD_SET (fd, &rfds); tv.tv_sec = timeout/1000; tv.tv_usec = (timeout % 1000) * 1000; retval = select (FD_SETSIZE, &rfds, (fd_set *)0, (fd_set *)0, &tv); if (retval <= 0) { // no response from serial port or error returned return false; } return true; } /////////////////////////////////////////////////////// // Function name : Cserial::ls dx // Description : Reads upto nchars from the selected port // Return type : # characters received // Argument : pointer to buffer; # chars to read; std::string terminator /////////////////////////////////////////////////////// int Cserial::ReadBuffer (std::string &buf, int nchars, std::string find1, std::string find2) { if (fd < 0) { ser_trace(1, "ReadBuffer(...) fd < 0"); return 0; } bool hex = false; fd_set rfds; FD_ZERO (&rfds); FD_SET (fd, &rfds); bool timedout = false, echo = false; int bytes = 0; size_t retval = 0, maxchars = nchars + bytes_written, tnow = 0, start = 0; buf.clear(); start = tnow = zusec(); while (1) { memset(uctemp, 0, sizeof(uctemp)); ioctl( fd, FIONREAD, &bytes); if (bytes) { if ( (retval = read (fd, uctemp, bytes)) > 0) { for (size_t nc = 0; nc < retval && nc < sizeof(uctemp); nc++) { buf += uctemp[nc]; } } } if (!find1.empty() && buf.find(find1) == (buf.length() - find1.length())) break; if (!find2.empty() && buf.find(find2) == (buf.length() - find2.length())) break; timedout = ( (zusec() - tnow) > (size_t)(progStatus.serial_timeout * 1000)); // test for icom echo if ((buf.length() >= (size_t)nchars) && ((buf[3] & 0xFF) == 0xE0)) echo = true; if (buf.length() >= (echo ? maxchars : (size_t)nchars)) break; if (timedout) break; MilliSleep(1); } if (echo) buf = buf.substr(bytes_written); if (buf.length() > (size_t)nchars) buf.erase(nchars); size_t readtime = zusec() - start; memset(traceinfo, 0, sizeof(traceinfo)); hex = check_hex(buf.c_str(), buf.length()); snprintf(traceinfo, sizeof(traceinfo), "ReadBuffer [%f msec]: %s", readtime / 1000.0, (hex ? str2hex(buf.c_str(), buf.length()) : buf.c_str())); LOG_DEBUG("%s", traceinfo); if (progStatus.serialtrace) ser_trace(1, traceinfo); if (timedout) { memset(traceinfo, 0, sizeof(traceinfo)); snprintf(traceinfo, sizeof(traceinfo), "ReadBuffer FAILED [%f msec] wanted %d chars, read %lu chars", (zusec() - start) / 1000.0, nchars, buf.length()); LOG_ERROR("%s", traceinfo); if (progStatus.serialtrace) ser_trace(1, traceinfo); } return buf.length(); } /////////////////////////////////////////////////////// // Function name : Cserial::WriteBuffer // Description : Writes a character buffer to the selected port // Return type : ssize_t (signed long) - number of bytes written or -1 for failure // Arguments : binary command string in character buffer; number of bytes to write /////////////////////////////////////////////////////// int Cserial::WriteBuffer(const char *buff, int n) { if (fd < 0) { ser_trace(1, "WriteBuffer(...) fd < 0"); return 0; } std::string sw = std::string(buff, (std::size_t) n); if (progStatus.serialtrace || SERIALDEBUG) { size_t p = sw.rfind("\r\n"); if (p == (sw.length() - 2) ) { sw.replace(p, 2, ""); ser_trace(2, "WriteBuffer: ", sw.c_str()); } else { bool hex = check_hex(sw.c_str(), sw.length()); ser_trace(2, "WriteBuffer: ", (hex ? str2hex(sw.c_str(), sw.length()) : sw.c_str())); } } FlushBuffer(); int ret = write (fd, buff, n); bytes_written = n; if (progStatus.serial_post_write_delay) MilliSleep(progStatus.serial_post_write_delay); return ret; } /////////////////////////////////////////////////////// // Function name : Cserial::WriteByte // Description : Writes a Byte to the selected port // Return type : bool // Argument : BYTE by /////////////////////////////////////////////////////// bool Cserial::WriteByte(char by) { if (fd < 0) return false; static char buff[2]; buff[0] = by; buff[1] = 0; return (write(fd, buff, 1) == 1); } /////////////////////////////////////////////////////// // Function name : Cserial::FlushBuffer // Description : flushes the pending rx chars // Return type : void /////////////////////////////////////////////////////// void Cserial::FlushBuffer() { if (fd < 0) return; tcflush (fd, TCIFLUSH); } //============================================================================= // WIN32 serial implementation //============================================================================= #else // __WIN32__ /////////////////////////////////////////////////////// // Function name : Cserial::CheckPort // Description : Checks the port specified by strPortName // Return type : bool // Argument : c_std::string strPortName /////////////////////////////////////////////////////// bool Cserial::CheckPort(std::string dev) { static HANDLE hTest; std::string COMportname = "//./"; COMportname.append(dev); hTest = CreateFile(COMportname.c_str(), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if(hTest == INVALID_HANDLE_VALUE) return false; CloseHandle(hTest); return true; } /////////////////////////////////////////////////////// // Function name : Cserial::OpenPort // Description : Opens the port specified by strPortName // Return type : bool // Argument : Cstd::string strPortName /////////////////////////////////////////////////////// bool Cserial::OpenPort() { if (device.empty()) return false; if (IsOpen()) ClosePort(); std::string COMportname = "//./"; COMportname.append(device); hComm = CreateFile(COMportname.c_str(), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (hComm == INVALID_HANDLE_VALUE) { snprintf(traceinfo, sizeof(traceinfo), "INVALID_HANDLE_VALUE: Open Comm port %s ; hComm = %llu\n", COMportname.c_str(), (unsigned long long)hComm); LOG_ERROR("%s", traceinfo); if (progStatus.serialtrace) ser_trace(1, traceinfo); return false; } if (progStatus.serialtrace || SERIALDEBUG) { snprintf(traceinfo, sizeof(traceinfo), "Open Comm port %s ; hComm = %llu\n", COMportname.c_str(), (unsigned long long)hComm); LOG_INFO("%s", traceinfo); ser_trace(1, traceinfo); } ConfigurePort( baud, 8, false, NOPARITY, stopbits); MilliSleep(5); // K0OG FlushBuffer(); failed_ = false; return true; } /////////////////////////////////////////////////////// // Function name : Cserial::ClosePort // Description : Closes the Port // Return type : void /////////////////////////////////////////////////////// void Cserial::ClosePort() { if (hComm != INVALID_HANDLE_VALUE) { bPortReady = SetCommTimeouts (hComm, &CommTimeoutsSaved); CloseHandle(hComm); } hComm = INVALID_HANDLE_VALUE; failed_ = false; return; } bool Cserial::IsOpen() { if (hComm == INVALID_HANDLE_VALUE) return false; return true; } /////////////////////////////////////////////////////// // Function name : Cserial::GetBytesRead // Description : // Return type : DWORD /////////////////////////////////////////////////////// DWORD Cserial::GetBytesRead() { return nBytesRead; } /////////////////////////////////////////////////////// // Function name : Cserial::GetBytesWritten // Description : returns total number of bytes written to port // Return type : DWORD /////////////////////////////////////////////////////// DWORD Cserial::GetBytesWritten() { return nBytesWritten; } /////////////////////////////////////////////////////// // Function name : Cserial::ReadByte // Description : Reads a byte from the selected port // Return type : bool // Argument : BYTE& by /////////////////////////////////////////////////////// bool Cserial::ReadByte(char & by) { static BYTE byResByte[1024]; static DWORD dwBytesTxD=0; if (hComm == INVALID_HANDLE_VALUE) return false; if (ReadFile (hComm, &byResByte[0], 1, &dwBytesTxD, 0)) { if (dwBytesTxD == 1) { by = (UCHAR)byResByte[0]; return true; } } by = 0; return false; } int Cserial::ReadBuffer (std::string &buf, int nchars, std::string find1, std::string find2) { if (hComm == INVALID_HANDLE_VALUE) { snprintf(traceinfo, sizeof(traceinfo), "ReadBuffer, invalid handle\n"); LOG_ERROR("%s", traceinfo); if (progStatus.serialtrace || SERIALDEBUG) ser_trace(1, traceinfo); return 0; } BOOL hex = false; std::string s1, s2; if (find1.length()) hex = hex || check_hex(find1.c_str(), find1.length()); if (find2.length()) hex = hex || check_hex(find2.c_str(), find2.length()); if (hex) { s1 = str2hex(find1.c_str(), find1.length()); s2 = str2hex(find2.c_str(), find2.length()); } else { s1 = find1; size_t p = s1.find("\r\n"); if (p != std::string::npos) s1.replace(p,2,""); p = s1.find('\r'); if (p != std::string::npos) s1.replace(p,1,""); p = s1.find('\n'); if (p != std::string::npos) s1.replace(p,1,""); s2 = find2; p = s2.find("\r\n"); if (p != std::string::npos) s2.replace(p,2,""); p = s2.find('\r'); if (p != std::string::npos) s2.replace(p,1,""); p = s2.find('\n'); if (p != std::string::npos) s2.replace(p,1,""); } // bool find_two = (!find1.empty() && !find2.empty()); // bool find_one = (!find1.empty() && find2.empty()); // if (find_two) // snprintf(traceinfo, sizeof(traceinfo), "ReadBuffer: %s | %s", s1.c_str(), s2.c_str()); // else if (find_one) // snprintf(traceinfo, sizeof(traceinfo), "ReadBuffer XXX: %s", s1.c_str()); // else // snprintf(traceinfo, sizeof(traceinfo), "ReadBuffer: %d chars", nchars); // LOG_DEBUG("%s", traceinfo); // if (progStatus.serialtrace) // ser_trace(1, traceinfo); memset(traceinfo, 0, sizeof(traceinfo)); long unsigned int thisread = 0; size_t maxchars = nchars + nBytesWritten; double start = zusec(); bool echo = false; bool retval = false; std::string sbuf; sbuf.clear(); while ( (zusec() - start) < (progStatus.serial_timeout * 1000.0) ) { memset(uctemp, 0, sizeof(uctemp)); if ( (retval = ReadFile (hComm, uctemp, maxchars, &thisread, NULL)) ) { for (size_t n = 0; n < thisread && n < sizeof(uctemp); n++) { sbuf += uctemp[n]; } } // test for icom echo if ((sbuf.length() >= (size_t)nchars) && ((sbuf[3] & 0xFF) == 0xE0)) echo = true; if (sbuf.length() >= (echo ? maxchars : (size_t)nchars)) break; if (!find1.empty() && sbuf.find(find1) == (sbuf.length() - find1.length())) break; if (!find2.empty() && sbuf.find(find2) == (sbuf.length() - find2.length())) break; if (!thisread || !retval) MilliSleep(1); } double readtime = (zusec() - start) / 1000.0; snprintf(traceinfo, sizeof(traceinfo), "ReadBuffer [%0.2f msec] (%u): %s", readtime, sbuf.length(), (hex ? str2hex(buf.c_str(), buf.length()) : sbuf.c_str())); if (progStatus.serialtrace) ser_trace(2, "1:", traceinfo); if (echo) sbuf = sbuf.substr(nBytesWritten); if (sbuf.length() > (size_t)nchars) sbuf.erase(nchars); buf = sbuf; int nread = (int)buf.length(); // snprintf(traceinfo, sizeof(traceinfo), // "ReadBuffer [%0.2f msec] (%d): %s", // readtime, nread, // (hex ? str2hex(buf.c_str(), buf.length()) : buf.c_str())); // LOG_DEBUG("%s", traceinfo); // if (progStatus.serialtrace) // ser_trace(1, traceinfo); if (nread >= nchars) return nread; snprintf(traceinfo, sizeof(traceinfo), "ReadBuffer FAILED [%0.2f msec], read %d bytes", readtime, nread); LOG_ERROR("%s", traceinfo); if (progStatus.serialtrace) ser_trace(2, "2:", traceinfo); return nread; } void Cserial::FlushBuffer() { #define TX_CLEAR 0x0004L #define RX_CLEAR 0x0008L if (hComm == INVALID_HANDLE_VALUE) return; PurgeComm(hComm, RX_CLEAR); } /////////////////////////////////////////////////////// // Function name : Cserial::WriteByte // Description : Writes a Byte to teh selected port // Return type : bool // Argument : BYTE by /////////////////////////////////////////////////////// bool Cserial::WriteByte(char by) { if (hComm == INVALID_HANDLE_VALUE) return false; nBytesWritten = 0; if (WriteFile(hComm,&by,1,&nBytesWritten,NULL)==0) return false; return true; } /////////////////////////////////////////////////////// // Function name : Cserial::WriteBuffer // Description : Writes a character buffer to the selected port // Return type : ssize_t (signed long) - number of bytes written or -1 for failure // Arguments : binary command string in character buffer; number of bytes to write /////////////////////////////////////////////////////// int Cserial::WriteBuffer(const char *buff, int n) { if (hComm == INVALID_HANDLE_VALUE) return 0; if (progStatus.serialtrace || SERIALDEBUG) { std::string sw = std::string(buff, (std::size_t) n); size_t p = sw.rfind("\r\n"); if (p == (sw.length() - 2) ) { sw.replace(p, 2, ""); ser_trace(2, "WriteBuffer: ", sw.c_str()); } else { bool hex = check_hex(sw.c_str(), sw.length()); ser_trace(2, "WriteBuffer: ", (hex ? str2hex(sw.c_str(), sw.length()) : sw.c_str())); } } FlushBuffer(); WriteFile (hComm, buff, n, &nBytesWritten, NULL); if (progStatus.serial_post_write_delay) MilliSleep(progStatus.serial_post_write_delay); return nBytesWritten; } /////////////////////////////////////////////////////// // Function name : Cserial::SetCommunicationTimeouts // Description : Sets the timeout for the selected port // Return type : bool // Argument : DWORD ReadIntervalTimeout // Argument : DWORD ReadTotalTimeoutMultiplier // Argument : DWORD ReadTotalTimeoutConstant // Argument : DWORD WriteTotalTimeoutMultiplier // Argument : DWORD WriteTotalTimeoutConstant /////////////////////////////////////////////////////// bool Cserial::SetCommunicationTimeouts( DWORD ReadIntervalTimeout, DWORD ReadTotalTimeoutMultiplier, DWORD ReadTotalTimeoutConstant, DWORD WriteTotalTimeoutMultiplier, DWORD WriteTotalTimeoutConstant ) { if((bPortReady = GetCommTimeouts (hComm, &CommTimeoutsSaved)) == 0) { return false; } CommTimeouts.ReadIntervalTimeout = ReadIntervalTimeout; CommTimeouts.ReadTotalTimeoutMultiplier = ReadTotalTimeoutMultiplier; CommTimeouts.ReadTotalTimeoutConstant = ReadTotalTimeoutConstant; CommTimeouts.WriteTotalTimeoutConstant = WriteTotalTimeoutConstant; CommTimeouts.WriteTotalTimeoutMultiplier = WriteTotalTimeoutMultiplier; bPortReady = SetCommTimeouts (hComm, &CommTimeouts); snprintf(traceinfo, sizeof(traceinfo), "\n\ ============ COMM TIMEOUTS ================\n\ Saved Read Interval Timeout............... %ld\n\ Saved Read Total Timeout Multiplier....... %ld\n\ Saved Read Total Timeout Constant Timeout. %ld\n\ Saved Write Total Timeout Constant........ %ld\n\ Saved Write Total Timeout Multiplier...... %ld\n\ ===================================================\n\ Set Read Interval Timeout................. %ld\n\ Set Read Total Timeout Multiplier......... %ld\n\ Set Read Total Timeout Constant Timeout... %ld\n\ Set Write Total Timeout Constant.......... %ld\n\ Set Write Total Timeout Multiplier........ %ld\n\ ===================================================", CommTimeoutsSaved.ReadIntervalTimeout, CommTimeoutsSaved.ReadTotalTimeoutMultiplier, CommTimeoutsSaved.ReadTotalTimeoutConstant, CommTimeoutsSaved.WriteTotalTimeoutConstant, CommTimeoutsSaved.WriteTotalTimeoutMultiplier, CommTimeouts.ReadIntervalTimeout, CommTimeouts.ReadTotalTimeoutMultiplier, CommTimeouts.ReadTotalTimeoutConstant, CommTimeouts.WriteTotalTimeoutConstant, CommTimeouts.WriteTotalTimeoutMultiplier); LOG_INFO("%s", traceinfo); if (progStatus.serialtrace) ser_trace(1, traceinfo); if (bPortReady == 0) { CloseHandle(hComm); return false; } return true; } /* * Remarks * * WriteTotalTimeoutMultiplier * * The multiplier used to calculate the total time-out period for write * operations, in milliseconds. For each write operation, this value is * multiplied by the number of bytes to be written. * * WriteTotalTimeoutConstant * * A constant used to calculate the total time-out period for write operations, * in milliseconds. For each write operation, this value is added to the product * of the WriteTotalTimeoutMultiplier member and the number of bytes to be * written. * * A value of zero for both the WriteTotalTimeoutMultiplier and * WriteTotalTimeoutConstant members indicates that total time-outs are not * used for write operations. * * * If an application sets ReadIntervalTimeout and ReadTotalTimeoutMultiplier to * MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than zero and * less than MAXDWORD, one of the following occurs when the ReadFile function * is called: * * If there are any bytes in the input buffer, ReadFile returns immediately * with the bytes in the buffer. * * If there are no bytes in the input buffer, ReadFile waits until a byte * arrives and then returns immediately. * * ********************************************************************* * * If no bytes arrive within the time specified by ReadTotalTimeoutConstant, * ReadFile times out. * * ReadIntervalTimeout * * The maximum time allowed to elapse between the arrival of two bytes on the * communications line, in milliseconds. During a ReadFile operation, the time * period begins when the first byte is received. If the interval between the * arrival of any two bytes exceeds this amount, the ReadFile operation is * completed and any buffered data is returned. A value of zero indicates that * interval time-outs are not used. * * A value of MAXDWORD, combined with zero values for both the * ReadTotalTimeoutConstant and ReadTotalTimeoutMultiplier members, specifies * that the read operation is to return immediately with the bytes that have * already been received, even if no bytes have been received. * * ReadTotalTimeoutMultiplier * * The multiplier used to calculate the total time-out period for read * operations, in milliseconds. For each read operation, this value is * multiplied by the requested number of bytes to be read. * * ReadTotalTimeoutConstant * * A constant used to calculate the total time-out period for read operations, * in milliseconds. For each read operation, this value is added to the product * of the ReadTotalTimeoutMultiplier member and the requested number of bytes. * * A value of zero for both the ReadTotalTimeoutMultiplier and * ReadTotalTimeoutConstant members indicates that total time-outs are not * used for read operations. * */ bool Cserial::SetCommTimeout() { return SetCommunicationTimeouts ( // Read Interval Timeout MAXDWORD, // Read Total Timeout Multiplier MAXDWORD, // Read Total Timeout Constant 1, // progStatus.serial_timeout ? progStatus.serial_timeout : 5, // Write Total Timeout Constant 0, // Write Total Timeout Multiplier 0 ); } /////////////////////////////////////////////////////// // Function name : ConfigurePort // Description : Configures the Port // Return type : bool // Argument : DWORD BaudRate // Argument : BYTE ByteSize // Argument : DWORD fParity // Argument : BYTE Parity // Argument : BYTE StopBits /////////////////////////////////////////////////////// bool Cserial::ConfigurePort( DWORD BaudRate, BYTE ByteSize, DWORD dwParity, BYTE Parity, BYTE StopBits) { if (hComm == INVALID_HANDLE_VALUE) return false; // memset(dcb, 0, sizeof(dcb)); dcb.DCBlength = sizeof(dcb); if((bPortReady = GetCommState(hComm, &dcb)) == 0) { LOG_ERROR("GetCommState Error on %s", device.c_str()); if (progStatus.serialtrace || SERIALDEBUG) { snprintf(traceinfo, sizeof(traceinfo), "GetCommState Error on %s\n", device.c_str()); ser_trace(1, traceinfo); } CloseHandle(hComm); return false; } dcb.DCBlength = sizeof (dcb); dcb.BaudRate = BaudRate; dcb.ByteSize = ByteSize; dcb.Parity = Parity ; if (dcb.StopBits) // corrects a driver malfunction in the Yaesu SCU-17 dcb.StopBits = (StopBits == 1 ? ONESTOPBIT : TWOSTOPBITS); dcb.fBinary = true; dcb.fDsrSensitivity = false; dcb.fParity = false; dcb.fOutX = false; dcb.fInX = false; dcb.fNull = false; dcb.fAbortOnError = false; dcb.fOutxCtsFlow = false; dcb.fOutxDsrFlow = false; dcb.fErrorChar = false; //PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx if (dtr) dcb.fDtrControl = DTR_CONTROL_ENABLE; else dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fDsrSensitivity = false; if (rtscts) dcb.fRtsControl = RTS_CONTROL_ENABLE; else { if (rts) dcb.fRtsControl = RTS_CONTROL_ENABLE; else dcb.fRtsControl = RTS_CONTROL_DISABLE; } if (progStatus.serialtrace || SERIALDEBUG) { ser_trace(1, traceinfo); } bPortReady = SetCommState(hComm, &dcb); snprintf(traceinfo, sizeof(traceinfo), "\ \n\ Set Comm State:\n\ DCB.DCBlength %d\n\ DCB.Baudrate %d\n\ DCB.ByteSize %d\n\ DCB.Parity %d\n\ DCB.StopBits %d\n\ DCB.Binary %d\n\ DCB.fDtrControl %d\n\ DCB.fRtsControl %d\n\ DCB.fDsrSensitivity %d\n\ DCB.fParity %d\n\ DCB.fOutX %d\n\ DCB.fInX %d\n\ DCB.fNull %d\n\ DCB.XonChar %d\n\ DCB.XoffChar %d\n\ DCB.fAbortOnError %d\n\ DCB.fOutxCtsFlow %d\n\ DCB.fOutxDsrFlow %d\n", (int)dcb.DCBlength, (int)dcb.BaudRate, (int)dcb.ByteSize, (int)dcb.Parity, (int)dcb.StopBits, (int)dcb.fBinary, (int)dcb.fDtrControl, (int)dcb.fRtsControl, (int)dcb.fDsrSensitivity, (int)dcb.fParity, (int)dcb.fOutX, (int)dcb.fInX, (int)dcb.fNull, (int)dcb.XonChar, (int)dcb.XoffChar, (int)dcb.fAbortOnError, (int)dcb.fOutxCtsFlow, (int)dcb.fOutxDsrFlow); LOG_INFO("%s", traceinfo); if (progStatus.serialtrace) ser_trace(1, traceinfo); if (bPortReady == 0) { long err = GetLastError(); snprintf(traceinfo, sizeof(traceinfo), "SetCommState handle %llu, returned %d, error = %d\n", (unsigned long long)hComm, bPortReady, (int)err); LOG_ERROR("%s", traceinfo); ser_trace(1, traceinfo); CloseHandle(hComm); return false; } return SetCommTimeout(); } /////////////////////////////////////////////////////// // Function name : Cserial::setPTT // Return type : void /////////////////////////////////////////////////////// bool Cserial::RTSptt(){ return rtsptt; } bool Cserial::DTRptt(){ return dtrptt; } bool Cserial::getPTT() { return serptt; } void Cserial::SetPTT(bool ON) { if (hComm == INVALID_HANDLE_VALUE) { if (progStatus.serialtrace || SERIALDEBUG) { snprintf(traceinfo, sizeof(traceinfo), "SetPTT failed, invalid handle\n"); ser_trace(1, traceinfo); } return; } if ( !(dtrptt || rtsptt) ) return; if (ON) { if (dtrptt && dtr) dcb.fDtrControl = DTR_CONTROL_DISABLE; if (dtrptt && !dtr) dcb.fDtrControl = DTR_CONTROL_ENABLE; if (!rtscts) { if (rtsptt && rts) dcb.fRtsControl = RTS_CONTROL_DISABLE; if (rtsptt && !rts) dcb.fRtsControl = RTS_CONTROL_ENABLE; } } else { if (dtrptt && dtr) dcb.fDtrControl = DTR_CONTROL_ENABLE; if (dtrptt && !dtr) dcb.fDtrControl = DTR_CONTROL_DISABLE; if (!rtscts) { if (rtsptt && rts) dcb.fRtsControl = RTS_CONTROL_ENABLE; if (rtsptt && !rts) dcb.fRtsControl = RTS_CONTROL_DISABLE; } } LOG_ERROR("PTT %d, DTRptt %d, DTR %d, RTSptt %d, RTS %d, RTSCTS %d, %2x %2x", ON, dtrptt, dtr, rtsptt, rts, rtscts, static_cast(dcb.fDtrControl), static_cast(dcb.fRtsControl) ); if (progStatus.serialtrace || SERIALDEBUG) { snprintf(traceinfo, sizeof(traceinfo), "\ PTT %d, DTRptt %d, DTR %d, RTSptt %d, RTS %d, RTSCTS %d, DtrControl %2x, RtsControl %2x\n", ON, dtrptt, dtr, rtsptt, rts, rtscts, static_cast(dcb.fDtrControl), static_cast(dcb.fRtsControl) ); ser_trace(1, traceinfo); } serptt = ON; SetCommState(hComm, &dcb); } void Cserial::setDTR(bool b) { if(hComm == INVALID_HANDLE_VALUE) { LOG_PERROR("Invalid handle"); return; } if (b) EscapeCommFunction(hComm, SETDTR); else EscapeCommFunction(hComm, CLRDTR); } void Cserial::setRTS(bool b) { if(hComm == INVALID_HANDLE_VALUE) { LOG_PERROR("Invalid handle"); return; } if (b) EscapeCommFunction(hComm, SETRTS); else EscapeCommFunction(hComm, CLRRTS); } Cserial::Cserial() { rts = dtr = rtsptt = dtrptt = rtscts = serptt = false; baud = CBR_9600; stopbits = 2; hComm = INVALID_HANDLE_VALUE; } Cserial::Cserial( std::string portname) { device = portname; Cserial(); } Cserial::~Cserial() { ClosePort(); } #endif flrig-2.0.04/src/support/ptt.cxx0000664000175000017500000000747114504050363013472 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include "threads.h" #include "ptt.h" #include "debug.h" #include "rig_io.h" #include "rig.h" #include "support.h" #include "gpio_ptt.h" #include "cmedia.h" // used for transceivers with a single vfo, called only by rigPTT static XCVR_STATE fake_vfo; static void showfreq(void *) { FreqDispA->value(vfoA.freq); } static void fake_split(int on) { if (on) { fake_vfo = vfoA; vfoA.freq = vfoB.freq; selrig->set_vfoA(vfoA.freq); Fl::awake(showfreq); } else { vfoA = fake_vfo; selrig->set_vfoA(vfoA.freq); Fl::awake(showfreq); } } // add fake rit to this function and to set_vfoA ?? extern void xmlrpc_ptt(int); void rigPTT(bool on) { if (progStatus.xmlrpc_rig) { xmlrpc_ptt(on); return; } if (!on && progStatus.split && !selrig->can_split()) fake_split(on); std::string smode = ""; try { smode = selrig->modes_[vfo->imode]; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } if ((smode.find("CW") != std::string::npos) && progStatus.disable_CW_ptt) return; if (progStatus.serial_catptt == PTT_BOTH || progStatus.serial_catptt == PTT_SET) selrig->set_PTT_control(on); else if (progStatus.serial_dtrptt == PTT_BOTH || progStatus.serial_dtrptt == PTT_SET) RigSerial->SetPTT(on); else if (progStatus.serial_rtsptt == PTT_BOTH || progStatus.serial_rtsptt == PTT_SET) RigSerial->SetPTT(on); else if (SepSerial->IsOpen() && (progStatus.sep_dtrptt == PTT_BOTH || progStatus.sep_dtrptt == PTT_SET)) SepSerial->SetPTT(on); else if (SepSerial->IsOpen() && (progStatus.sep_rtsptt == PTT_BOTH || progStatus.sep_rtsptt == PTT_SET)) SepSerial->SetPTT(on); else if (progStatus.gpio_ptt == PTT_BOTH || progStatus.gpio_ptt == PTT_SET) set_gpio(on); else if (progStatus.cmedia_ptt == PTT_BOTH || progStatus.cmedia_ptt == PTT_SET) set_cmedia(on); else LOG_DEBUG("No PTT i/o connected"); } extern bool xml_ptt_state(); bool ptt_state() { if (progStatus.xmlrpc_rig) return xml_ptt_state(); if (progStatus.serial_catptt == PTT_BOTH || progStatus.serial_catptt == PTT_GET) return selrig->get_PTT(); else if (progStatus.serial_dtrptt == PTT_BOTH || progStatus.serial_dtrptt == PTT_GET) return selrig->get_PTT(); else if (progStatus.serial_rtsptt == PTT_BOTH || progStatus.serial_rtsptt == PTT_GET) return selrig->get_PTT(); else if (SepSerial->IsOpen() && (progStatus.sep_dtrptt == PTT_BOTH || progStatus.sep_dtrptt == PTT_GET)) return SepSerial->getPTT(); else if (SepSerial->IsOpen() && (progStatus.sep_rtsptt == PTT_BOTH || progStatus.sep_rtsptt == PTT_GET)) return SepSerial->getPTT(); else if (progStatus.gpio_ptt == PTT_BOTH || progStatus.gpio_ptt == PTT_GET) return get_gpio(); else if (progStatus.cmedia_ptt == PTT_BOTH || progStatus.cmedia_ptt == PTT_GET) return get_cmedia(); LOG_DEBUG("No PTT i/o connected"); return false; } flrig-2.0.04/src/support/init_rig.cxx0000664000175000017500000001542214504050363014462 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2011 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "support.h" void TRACED(init_xcvr) if (selrig->name_ == rig_TT550.name_) return; if (xcvr_name == rig_FT817.name_ || xcvr_name == rig_FT818ND.name_ || xcvr_name == rig_FT857D.name_ || xcvr_name == rig_FT897D.name_ ) { // transceiver should be on VFO A before starting flrig selrig->selectB(); vfoB.freq = selrig->get_vfoB(); FreqDispB->value(vfoB.freq); vfoB.imode = selrig->get_modeB(); selrig->selectA(); vfoA.freq = selrig->get_vfoA(); FreqDispA->value(vfoA.freq); vfoA.imode = selrig->get_modeA(); updateBandwidthControl(); setModeControl((void *)0); highlight_vfo(NULL); return; } // Yaesu FT817, FT817ND, FT818ND, FT857D, FT897D transceivers if (xcvr_name == rig_FT817BB.name_) { if (selrig->get_vfoAorB() == onA) { selrig->selectB(); vfoB.freq = selrig->get_vfoB(); FreqDispB->value(vfoB.freq); vfoB.imode = selrig->get_modeB(); selrig->selectA(); vfoA.freq = selrig->get_vfoA(); FreqDispA->value(vfoA.freq); vfoA.imode = selrig->get_modeA(); updateBandwidthControl(); } else { selrig->selectA(); vfoA.freq = selrig->get_vfoA(); FreqDispA->value(vfoA.freq); vfoA.imode = selrig->get_modeA(); selrig->selectB(); vfoB.freq = selrig->get_vfoB(); FreqDispB->value(vfoB.freq); vfoB.imode = selrig->get_modeB(); updateBandwidthControl(); } setModeControl((void *)0); highlight_vfo(NULL); return; } // FT817BB transceiver if (!progStatus.use_rig_data) { vfoB.freq = progStatus.freq_B; vfoB.imode = progStatus.imode_B; vfoB.iBW = progStatus.iBW_B; if (vfoB.iBW == -1) vfoB.iBW = selrig->def_bandwidth(vfoB.imode); selrig->selectB(); selrig->set_modeB(vfoB.imode); selrig->set_bwB(vfoB.iBW); selrig->set_vfoB(vfoB.freq); FreqDispB->value(vfoB.freq); update_progress(progress->value() + 4); trace(2, "init_xcvr() vfoB ", printXCVR_STATE(vfoB).c_str()); vfoA.freq = progStatus.freq_A; vfoA.imode = progStatus.imode_A; vfoA.iBW = progStatus.iBW_A; if (vfoA.iBW == -1) vfoA.iBW = selrig->def_bandwidth(vfoA.imode); selrig->selectA(); selrig->set_modeA(vfoA.imode); selrig->set_bwA(vfoA.iBW); selrig->set_vfoA(vfoA.freq); FreqDispA->value( vfoA.freq ); update_progress(progress->value() + 4); vfo = &vfoA; updateBandwidthControl(); highlight_vfo((void *)0); trace(2, "init_xcvr() vfoA ", printXCVR_STATE(vfoA).c_str()); } else { // Capture VFOA mode and bandwidth, since it will be lost in VFO switch if (selrig->name_ == rig_FT891.name_) { selrig->selectA(); vfoA.freq = selrig->get_vfoA(); update_progress(progress->value() + 4); vfoA.imode = selrig->get_modeA(); update_progress(progress->value() + 4); vfoA.iBW = selrig->get_bwA(); update_progress(progress->value() + 4); FreqDispA->value(vfoA.freq); trace(2, "A: ", printXCVR_STATE(vfoA).c_str()); selrig->selectB(); // third select call vfoB.freq = selrig->get_vfoB(); update_progress(progress->value() + 4); vfoB.imode = selrig->get_modeB(); update_progress(progress->value() + 4); vfoB.iBW = selrig->get_bwB(); update_progress(progress->value() + 4); FreqDispB->value(vfoB.freq); trace(2, "B: ", printXCVR_STATE(vfoB).c_str()); // Restore radio VFOA mode, then freq and bandwidth selrig->selectA(); // fourth select call yaesu891UpdateA(&vfoA); } else { vfoB = xcvr_vfoB; vfoA = xcvr_vfoA; FreqDispB->value(vfoB.freq); FreqDispA->value(vfoA.freq); } vfo = &vfoA; selrig->set_modeA(vfo->imode); selrig->set_bwA(vfo->iBW); setModeControl((void *)0); update_progress(progress->value() + 4); updateBandwidthControl(); update_progress(progress->value() + 4); highlight_vfo((void *)0); } selrig->set_split(0); // initialization set split call } void TRACED(init_generic_rig) if (progStatus.CIV > 0) selrig->adjustCIV(progStatus.CIV); if (selrig->has_getvfoAorB) { selrig->get_vfoAorB(); // int ret = selrig->get_vfoAorB(); // int retry = 10; // while (ret == -1 && retry--) { // MilliSleep(50); // ret = selrig->get_vfoAorB(); // } // if (ret == -1) ret = 0; // selrig->inuse = ret; rig_startup_data(); if (progStatus.use_rig_data) { vfoA = xcvr_vfoA; vfoB = xcvr_vfoB; } if (selrig->inuse == onB) { // selrig->selectB(); vfo = &vfoB; } else { vfo = &vfoA; } } else { rig_startup_data(); if (progStatus.use_rig_data) { vfoA = xcvr_vfoA; vfoB = xcvr_vfoB; } } init_xcvr(); progStatus.compON = xcvr_vfoA.compON; progStatus.compression = xcvr_vfoA.compression; if (selrig->has_compression) update_compression(NULL); // vfo = &vfoA; rigmodes_.clear(); opMODE->clear(); if (selrig->has_mode_control) { for (size_t i = 0; i < selrig->modes_.size(); i++) { rigmodes_.push_back(selrig->modes_.at(i)); opMODE->add(selrig->modes_.at(i).c_str()); } opMODE->activate(); opMODE->index(progStatus.imode_A); } else { opMODE->add(" "); opMODE->index(0); opMODE->deactivate(); } if (xcvr_name == rig_KX3.name_ || xcvr_name == rig_K4.name_) { opBW->hide(); opBW_A->show(); opBW_B->show(); if (progStatus.iBW_A < 1) progStatus.iBW_A = selrig->def_bandwidth(vfoA.imode); if (progStatus.iBW_B < 1) progStatus.iBW_B = selrig->def_bandwidth(vfoB.imode); opBW_A->index(selrig->bwA = vfoA.iBW = progStatus.iBW_A); opBW_B->index(selrig->bwB = vfoB.iBW = progStatus.iBW_B); opBW_A->redraw(); opBW_B->redraw(); } else if (selrig->has_bandwidth_control) { opBW->clear(); opBW->show(); try { for (size_t i = 0; i < selrig->bandwidths_.size(); i++) { opBW->add(selrig->bandwidths_.at(i).c_str()); } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } opBW->activate(); if (progStatus.iBW_A == -1) progStatus.iBW_A = selrig->def_bandwidth(vfoA.imode); if (progStatus.iBW_B == -1) progStatus.iBW_B = selrig->def_bandwidth(vfoB.imode); opBW->index(progStatus.iBW_A); } else { opBW->add(" "); opBW->index(0); opBW->deactivate(); } } flrig-2.0.04/src/support/gpio_ptt.cxx0000664000175000017500000001022214504050363014474 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "gpio_ptt.h" #include "support.h" //-------------------- gpio port PTT --------------------// #ifndef __MINGW32__ void gpioEXEC(std::string execstr) { int pfd[2]; if (pipe(pfd) == -1) { LOG_PERROR("pipe"); return; } int pid; switch (pid = fork()) { case -1: LOG_PERROR("fork"); return; case 0: // child close(pfd[0]); if (dup2(pfd[1], STDOUT_FILENO) != STDOUT_FILENO) { LOG_PERROR("dup2"); exit(EXIT_FAILURE); } close(pfd[1]); execl("/bin/sh", "sh", "-c", execstr.c_str(), (char *)NULL); perror("execl"); exit(EXIT_FAILURE); } // parent close(pfd[1]); } #else // !__MINGW32__ void gpioEXEC(std::string execstr) { char* cmd = strdup(execstr.c_str()); STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); si.cb = sizeof(si); memset(&pi, 0, sizeof(pi)); if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) LOG_ERROR("CreateProcess failed with error code %ld", GetLastError()); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); free(cmd); } #endif // !__MINGW32__ static const char *gpio_name[] = { "17", "18", "27", "22", "23", "24", "25", "4", "5", "6", "13", "19", "26", "12", "16", "20", "21"}; void export_gpio(int bcm) { if (bcm < 0 || bcm > 16) return; std::string exec_str = "gpio export "; exec_str.append(gpio_name[bcm]).append(" out"); gpioEXEC(exec_str); LOG_INFO("%s", exec_str.c_str()); } void unexport_gpio(int bcm) { if (bcm < 0 || bcm > 16) return; std::string exec_str = "gpio unexport "; exec_str.append(gpio_name[bcm]); gpioEXEC(exec_str); LOG_INFO("%s", exec_str.c_str()); } void open_gpio(void) { bool enabled = false; for (int i = 0; i < 17; i++) { enabled = (progStatus.enable_gpio >> i) & 0x01; if (enabled) export_gpio(i); } } void close_gpio(void) { bool enabled = false; for (int i = 0; i < 17; i++) { enabled = (progStatus.enable_gpio >> i) & 0x01; if (enabled) unexport_gpio(i); } } static int enabled = 0; int get_gpio() { return enabled; } void set_gpio(bool ptt) { #define VALUE_MAX 30 static const char s_values_str[] = "01"; std::string portname = "/sys/class/gpio/gpio"; std::string ctrlport; enabled = false; int val = 0; int fd; for (int i = 0; i < 17; i++) { enabled = (progStatus.enable_gpio >> i) & 0x01; if (enabled) { val = (progStatus.gpio_on >> i) & 0x01; ctrlport = portname; ctrlport.append(gpio_name[i]); ctrlport.append("/value"); fd = fl_open(ctrlport.c_str(), O_WRONLY); bool ok = false; if (fd == -1) { LOG_ERROR("Failed to open gpio (%s) for writing!", ctrlport.c_str()); } else { if (progStatus.gpio_pulse_width == 0) { if (ptt) { if (val == 1) val = 1; else val = 0;} if (!ptt) { if (val == 1) val = 0; else val = 1;} if (write(fd, &s_values_str[val], 1) == 1) ok = true; } else { if (write(fd, &s_values_str[val], 1) == 1) { MilliSleep(progStatus.gpio_pulse_width); if (write(fd, &s_values_str[val == 0 ? 1 : 0], 1) == 1) ok = true; } } if (ok) LOG_INFO("Set GPIO ptt on %s %s%s", ctrlport.c_str(), (progStatus.gpio_pulse_width > 0) ? "pulsed " : "", (val == 1 ? "HIGH" : "LOW") ); else LOG_ERROR("Failed to write value!"); close(fd); } } } } flrig-2.0.04/src/flrig-rc.rc0000664000175000017500000000026314475136651012462 00000000000000#include // include for version info constants #include "flrigrc.h" IDI_ICON ICON DISCARDABLE "flrig.ico" //A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "flrig.ico" flrig-2.0.04/src/Makefile.am0000664000175000017500000003053014502041135012442 00000000000000# Copyright (c) 2008 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com) bin_PROGRAMS = flrig MINGW32_SRC = \ flrig-rc.rc \ include/flrigrc.h \ support/mingw.c \ include/compat.h \ include/compat-mingw.h # Build the xmlrpcpp source if libflxmlrpc is not found XMLRPCPP_SRC = \ xmlrpcpp/XmlRpcBase64.h \ xmlrpcpp/XmlRpcClient.cpp \ xmlrpcpp/XmlRpcClient.h \ xmlrpcpp/XmlRpcDispatch.cpp \ xmlrpcpp/XmlRpcDispatch.h \ xmlrpcpp/XmlRpcException.h \ xmlrpcpp/XmlRpc.h \ xmlrpcpp/XmlRpcMutex.cpp \ xmlrpcpp/XmlRpcMutex.h \ xmlrpcpp/XmlRpcServerConnection.cpp \ xmlrpcpp/XmlRpcServerConnection.h \ xmlrpcpp/XmlRpcServer.cpp \ xmlrpcpp/XmlRpcServer.h \ xmlrpcpp/XmlRpcServerMethod.cpp \ xmlrpcpp/XmlRpcServerMethod.h \ xmlrpcpp/XmlRpcSocket.cpp \ xmlrpcpp/XmlRpcSocket.h \ xmlrpcpp/XmlRpcSource.cpp \ xmlrpcpp/XmlRpcSource.h \ xmlrpcpp/XmlRpcUtil.cpp \ xmlrpcpp/XmlRpcUtil.h \ xmlrpcpp/XmlRpcValue.cpp \ xmlrpcpp/XmlRpcValue.h # We distribute these but do not always compile them EXTRA_flrig_SOURCES = $(FLRIG_WIN32_RES_SRC) $(MINGW32_SRC) $(XMLRPCPP_SRC) flrig_SOURCES = if !ENABLE_FLXMLRPC flrig_SOURCES += $(XMLRPCPP_SRC) flrig_CPPFLAGS = @FLRIG_BUILD_CPPFLAGS@ flrig_CXXFLAGS = @FLRIG_BUILD_CXXFLAGS@ flrig_CFLAGS = $(flrig_CXXFLAGS) flrig_LDFLAGS = @FLRIG_BUILD_LDFLAGS@ flrig_LDADD = @FLRIG_BUILD_LDADD@ else flrig_CPPFLAGS = @FLRIG_BUILD_CPPFLAGS@ @FLXMLRPC_CFLAGS@ flrig_CXXFLAGS = @FLRIG_BUILD_CXXFLAGS@ @FLXMLRPC_CFLAGS@ flrig_CFLAGS = $(flrig_CXXFLAGS) flrig_LDFLAGS = @FLRIG_BUILD_LDFLAGS@ @FLXMLRPC_LIBS@ flrig_LDADD = @FLRIG_BUILD_LDADD@ endif if MINGW32 if HAVE_WINDRES flrig_SOURCES += $(MINGW32_SRC) endif endif ######################################################################## FLRIG_VERSION_MAJOR = @FLRIG_VERSION_MAJOR@ FLRIG_VERSION_MINOR = @FLRIG_VERSION_MINOR@ FLRIG_VERSION_PATCH = @FLRIG_VERSION_PATCH@ FLRIG_VERSION = @FLRIG_VERSION@ .EXPORT_ALL_VARIABLES: nsisinst appbundle # Sources that are generated, BUILT_SOURCES = # not distributed, nodist_flrig_SOURCES = $(BUILT_SOURCES) # and deleted by the clean targets CLEANFILES = $(BUILT_SOURCES) CLEAN_LOCAL = if MINGW32 if HAVE_WINDRES .rc.o: $(WINDRES) -I$(srcdir)/include -I$(srcdir)/../data/win32 $< -O coff $@ endif endif install-data-local: if test -f $(srcdir)/../data/flrig.xpm; then \ $(mkinstalldirs) $(DESTDIR)/$(datadir)/pixmaps; \ $(INSTALL_DATA) $(srcdir)/../data/flrig.xpm $(DESTDIR)/$(datadir)/pixmaps; \ fi if test -f $(srcdir)/../data/flrig.desktop; then \ $(mkinstalldirs) $(DESTDIR)/$(datadir)/applications; \ $(INSTALL_DATA) $(srcdir)/../data/flrig.desktop $(DESTDIR)/$(datadir)/applications; \ fi uninstall-local: rm -f $(DESTDIR)/$(datadir)/pixmaps/flrig.xpm rm -f $(DESTDIR)/$(datadir)/applications/flrig.desktop INSTALLER_FILE = flrig-$(FLRIG_VERSION)_setup.exe APPBUNDLE=flrig-$(FLRIG_VERSION) APPBUNDLE_NOLIBS=$(APPBUNDLE)-nolibs if HAVE_NSIS nsisinst: $(bin_PROGRAMS) sh $(srcdir)/../scripts/mknsisinst.sh "$(srcdir)/../data" . CLEANFILES += $(INSTALLER_FILE) endif if DARWIN appbundle: $(bin_PROGRAMS) sh $(srcdir)/../scripts/mkappbundle.sh "$(srcdir)/../data" . CLEAN_LOCAL += $(APPBUNDLE_NOLIBS) $(APPBUNDLE) $(APPBUNDLE)*.dmg endif clean-local: -rm -rf $(CLEAN_LOCAL) # Sources that we build. It is OK to have headers here. flrig_SOURCES += \ rigs/rigbase.cxx \ rigs/rigs.cxx \ rigs/elad/FDMDUO.cxx \ rigs/elecraft/K2.cxx \ rigs/elecraft/K3.cxx \ rigs/elecraft/KX3.cxx \ rigs/elecraft/K4.cxx \ rigs/icom/ICbase.cxx \ rigs/icom/IC703.cxx \ rigs/icom/IC705.cxx \ rigs/icom/IC706MKIIG.cxx \ rigs/icom/IC718.cxx \ rigs/icom/IC728.cxx \ rigs/icom/IC735.cxx \ rigs/icom/IC746.cxx \ rigs/icom/IC751.cxx \ rigs/icom/IC756.cxx \ rigs/icom/IC756PRO2.cxx \ rigs/icom/IC756PRO3.cxx \ rigs/icom/IC910.cxx \ rigs/icom/IC7000.cxx \ rigs/icom/IC7100.cxx \ rigs/icom/IC7200.cxx \ rigs/icom/IC7300.cxx \ rigs/icom/IC7410.cxx \ rigs/icom/IC7600.cxx \ rigs/icom/IC7610.cxx \ rigs/icom/IC7800.cxx \ rigs/icom/IC7851.cxx \ rigs/icom/IC9100.cxx \ rigs/icom/IC9700.cxx \ rigs/icom/IC7700.cxx \ rigs/icom/ICF8101.cxx \ rigs/icom/ICR71.cxx \ rigs/kenwood/KENWOOD.cxx \ rigs/kenwood/TS140.cxx \ rigs/kenwood/TS440.cxx \ rigs/kenwood/TS450S.cxx \ rigs/kenwood/TS480HX.cxx \ rigs/kenwood/TS480SAT.cxx \ rigs/kenwood/TS570.cxx \ rigs/kenwood/TS590S.cxx \ rigs/kenwood/TS590SG.cxx \ rigs/kenwood/TS790.cxx \ rigs/kenwood/TS850.cxx \ rigs/kenwood/TS870S.cxx \ rigs/kenwood/TS890S.cxx \ rigs/kenwood/TS940S.cxx \ rigs/kenwood/TS950.cxx \ rigs/kenwood/TS990.cxx \ rigs/kenwood/TS2000.cxx \ rigs/lab599/TX500.cxx \ rigs/other/AOR5K.cxx \ rigs/other/FLEX1500.cxx \ rigs/other/PCR1000.cxx \ rigs/other/PowerSDR.cxx \ rigs/other/RAY152.cxx \ rigs/other/SmartSDR.cxx \ rigs/other/sunsdr2.cxx \ rigs/other/tcisdr.cxx \ rigs/other/trusdx.cxx \ rigs/other/TMD710.cxx \ rigs/qrp_labs/QCXplus.cxx \ rigs/qrp_labs/QDX.cxx \ rigs/qrp_labs/QMX.cxx \ rigs/tentec/TT516.cxx \ rigs/tentec/DELTA-II.cxx \ rigs/tentec/TT538.cxx \ rigs/tentec/TT550.cxx \ rigs/tentec/TT563.cxx \ rigs/tentec/TT566.cxx \ rigs/tentec/TT588.cxx \ rigs/tentec/TT599.cxx \ rigs/xiegu/Xiegu-5105.cxx \ rigs/xiegu/Xiegu-G90.cxx \ rigs/xiegu/X6100.cxx \ rigs/yaesu/FT100D.cxx \ rigs/yaesu/FT450.cxx \ rigs/yaesu/FT450D.cxx \ rigs/yaesu/FT710.cxx \ rigs/yaesu/FT736R.cxx \ rigs/yaesu/FT747.cxx \ rigs/yaesu/FT757GX2.cxx \ rigs/yaesu/FT767.cxx \ rigs/yaesu/FT817.cxx \ rigs/yaesu/FT817BB.cxx \ rigs/yaesu/FT818.cxx \ rigs/yaesu/FT847.cxx \ rigs/yaesu/FT857D.cxx \ rigs/yaesu/FT890.cxx \ rigs/yaesu/FT891.cxx \ rigs/yaesu/FT900.cxx \ rigs/yaesu/FT920.cxx \ rigs/yaesu/FT950.cxx \ rigs/yaesu/FT990.cxx \ rigs/yaesu/FT990a.cxx \ rigs/yaesu/FT991.cxx \ rigs/yaesu/FT991A.cxx \ rigs/yaesu/FT1000.cxx \ rigs/yaesu/FT1000MP.cxx \ rigs/yaesu/FT1000MP_A.cxx \ rigs/yaesu/FT2000.cxx \ rigs/yaesu/FTdx101D.cxx \ rigs/yaesu/FTdx10.cxx \ rigs/yaesu/FTdx1200.cxx \ rigs/yaesu/FTdx3000.cxx \ rigs/yaesu/FT5000.cxx \ rigs/yaesu/FTdx9000.cxx \ support/debug.cxx \ support/dialogs.cxx \ support/gpio_ptt.cxx \ support/ptt.cxx \ support/rig_io.cxx \ support/serial.cxx \ support/socket.cxx \ support/socket_io.cxx \ support/status.cxx \ support/support.cxx \ support/read_rig.cxx \ support/restore_rig.cxx \ support/init_rig.cxx \ support/TT550_support.cxx \ support/init_user_interface.cxx \ support/threads.cxx \ support/timeops.cxx \ support/trace.cxx \ support/util.cxx \ wc/tci_io.cxx \ wc/WSclient.cxx \ UI/K3_ui.cxx \ UI/KX3_ui.cxx \ UI/K4_ui.cxx \ UI/rigpanel.cxx \ UI/meters_dialog.cxx \ widgets/combo.cxx \ widgets/Fl_SigBar.cxx \ widgets/flbrowser2.cxx \ widgets/flinput2.cxx \ widgets/flslider2.cxx \ widgets/font_browser.cxx \ widgets/FreqControl.cxx \ widgets/pl_tones.cxx \ widgets/ValueSlider.cxx \ widgets/hspinner.cxx \ support/tod_clock.cxx \ server/xml_server.cxx \ server/xmlrpc_rig.cxx \ cwio/cwio.cxx \ cwio/morse.cxx \ cwio/cwioUI.cxx \ cwio/precise_time.cxx \ cmedia/cmedia.cxx \ cmedia/hid.cxx \ cmedia/tmate2.cxx \ fskio/fsk.cxx \ fskio/fskioUI.cxx \ log/cwlog.cxx \ log/fsklog.cxx \ graphics/pixmaps.cxx \ graphics/icons.cxx \ graphics/images.cxx \ main.cxx # Additional source files that are distributed EXTRA_DIST = \ config.h \ flrig_icon.cxx \ cmedia/hid_lin.cxx \ cmedia/hid_mac.cxx \ cmedia/hid_win.cxx \ UI/ui_bitmaps.cxx \ UI/gpio.cxx \ UI/ui_wide.cxx \ UI/ui_small.cxx \ UI/ui_touch.cxx \ UI/ui_setup.cxx \ UI/ui_memory.cxx \ UI/xcvr_setup.cxx \ UI/meters_setup.cxx \ UI/power_meter_setup.cxx \ include/cmedia.h \ include/hid_lin.h \ include/hid_mac.h \ include/hid_win.h \ include/hidapi.h \ include/tmate2.h \ include/cwio.h \ include/cwlog.h \ include/cwioUI.h \ include/fsk.h \ include/fskioUI.h \ include/fsklog.h \ include/gpio.h \ include/gpio_ptt.h \ include/morse.h \ include/debug.h \ include/dialogs.h \ include/flbrowser2.h \ include/flinput2.h \ include/flslider2.h \ include/fileselect.h \ include/font_browser.h \ include/flrigrc.h \ include/icons.h \ include/kenwood/KENWOOD.h \ include/pixmaps.h \ include/Fl_SigBar.h \ include/FreqControl.h \ include/hspinner.h \ include/other/AOR5K.h \ include/other/sunsdr2.h \ include/other/tcisdr.h \ include/other/trusdx.h \ include/generic.h \ include/gettext.h \ include/hidapi.h \ include/hid_mac.h \ include/hid_win.h \ include/xmlrpc_rig.h \ include/elad/FDMDUO.h \ include/icom/ICbase.h \ include/icom/IC703.h \ include/icom/IC705.h \ include/icom/IC706MKIIG.h \ include/icom/IC718.h \ include/icom/IC728.h \ include/icom/IC735.h \ include/icom/IC746.h \ include/icom/IC751.h \ include/icom/IC756.h \ include/icom/IC756PRO2.h \ include/icom/IC756PRO3.h \ include/icom/IC910.h \ include/icom/IC7000.h \ include/icom/IC7100.h \ include/icom/IC7410.h \ include/icom/IC7200.h \ include/icom/IC7300.h \ include/icom/IC7600.h \ include/icom/IC7610.h \ include/icom/IC7700.h \ include/icom/IC7800.h \ include/icom/IC7851.h \ include/icom/IC9100.h \ include/icom/IC9700.h \ include/icom/ICF8101.h \ include/icom/ICR71.h \ include/images.h \ include/elecraft/K2.h \ include/elecraft/K3.h \ include/elecraft/K4.h \ include/K3_ui.h \ include/elecraft/KX3.h \ include/KX3_ui.h \ include/K4_ui.h \ include/mingw.h \ include/other/FLEX1500.h \ include/other/PCR1000.h \ include/other/RAY152.h \ include/other/PowerSDR.h \ include/other/SmartSDR.h \ include/other/TMD710.h \ include/pl_tones.h \ include/ptt.h \ include/qrp_labs/QCXplus.h \ include/qrp_labs/QDX.h \ include/qrp_labs/QMX.h \ include/rig.h \ include/rigs.h \ include/rigbase.h \ include/rig_io.h \ include/rigpanel.h \ include/serial.h \ include/socket.h \ include/socket_io.h \ include/status.h \ include/support.h \ include/threads.h \ include/trace.h \ include/lab599/TX500.h \ include/kenwood/KENWOOD.h \ include/kenwood/TS140.h \ include/kenwood/TS440.h \ include/kenwood/TS450S.h \ include/kenwood/TS480HX.h \ include/kenwood/TS480SAT.h \ include/kenwood/TS570.h \ include/kenwood/TS590S.h \ include/kenwood/TS590SG.h \ include/kenwood/TS790.h \ include/kenwood/TS850.h \ include/kenwood/TS870S.h \ include/kenwood/TS890S.h \ include/kenwood/TS940S.h \ include/kenwood/TS950.h \ include/kenwood/TS990.h \ include/kenwood/TS2000.h \ include/tentec/DELTA-II.h \ include/tentec/TT516.h \ include/tentec/TT538.h \ include/tentec/TT550.h \ include/tentec/TT563.h \ include/tentec/TT566.h \ include/tentec/TT588.h \ include/tentec/TT599.h \ include/tci_io.h \ include/WSclient.h \ include/timeops.h \ include/tod_clock.h \ include/ui.h \ include/util.h \ include/ValueSlider.h \ include/xml_server.h \ include/xiegu/Xiegu-5105.h \ include/xiegu/Xiegu-G90.h \ include/xiegu/X6100.h \ include/yaesu/FT100D.h \ include/yaesu/FT450.h \ include/yaesu/FT450D.h \ include/yaesu/FT710.h \ include/yaesu/FT736R.h \ include/yaesu/FT747.h \ include/yaesu/FT757GX2.h \ include/yaesu/FT767.h \ include/yaesu/FT817.h \ include/yaesu/FT817BB.h \ include/yaesu/FT818.h \ include/yaesu/FT847.h \ include/yaesu/FT857D.h \ include/yaesu/FT920.h \ include/yaesu/FT890.h \ include/yaesu/FT891.h \ include/yaesu/FT900.h \ include/yaesu/FT950.h \ include/yaesu/FT990.h \ include/yaesu/FT990a.h \ include/yaesu/FT991.h \ include/yaesu/FT991A.h \ include/yaesu/FT1000.h \ include/yaesu/FT1000MP.h \ include/yaesu/FT1000MP_A.h \ include/yaesu/FT2000.h \ include/yaesu/FTdx10.h \ include/yaesu/FTdx101D.h \ include/yaesu/FTdx1200.h \ include/yaesu/FTdx3000.h \ include/yaesu/FT5000.h \ include/yaesu/FTdx9000.h \ include/combo.h \ images/alc.xbm \ images/alc40db.xbm \ images/P5.xbm \ images/P10.xbm \ images/P15.xbm \ images/P20.xbm \ images/P25.xbm \ images/P50.xbm \ images/P100.xbm \ images/P200.xbm \ images/P200log.xbm \ images/S60.xbm \ images/SWR.xbm \ images/volts.xbm \ images/volts13.xbm \ images/volts50.xbm \ images/idd25.xbm \ images/idd50.xbm \ cwio/cwioUI.fl \ fskio/fskioUI.fl # Additional non-source files that are distributed # Additional source files that support non-Linux cross compilation EXTRA_DIST += \ $(srcdir)/../data/flrig.desktop \ $(srcdir)/../data/flrig.xpm \ $(srcdir)/../data/win32/fl_app.nsi \ $(srcdir)/../data/win32/flrig.ico \ $(srcdir)/../scripts/mknsisinst.sh \ $(srcdir)/../scripts/buildmxe.sh \ $(srcdir)/../scripts/builddist.sh \ $(srcdir)/../data/mac/Info.plist.in \ $(srcdir)/../data/mac/flrig.icns \ $(srcdir)/../scripts/mkappbundle.sh \ $(FLRIG_WIN32_SRC) \ $(FLRIG_FL_SRC) flrig-2.0.04/src/images/0000775000175000017500000000000014511461606011743 500000000000000flrig-2.0.04/src/images/volts.xbm0000664000175000017500000000570514475136651013561 00000000000000#define volts_width 205 #define volts_height 18 static unsigned char volts_bits[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x70, 0x00, 0x00, 0x00, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x46, 0x3e, 0x03, 0x80, 0x10, 0x00, 0x00, 0x00, 0xc0, 0x88, 0x00, 0x00, 0x00, 0xc0, 0x44, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x49, 0x88, 0x04, 0x80, 0x10, 0x00, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x80, 0x44, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x49, 0x88, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x49, 0x08, 0x01, 0x80, 0x10, 0x00, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x49, 0x08, 0x02, 0x80, 0x10, 0x00, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x49, 0x08, 0x04, 0x80, 0x10, 0x00, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x4d, 0x88, 0x04, 0x80, 0x10, 0x00, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xc6, 0x09, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x70, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; flrig-2.0.04/src/images/P25.xbm0000664000175000017500000000567714475136651012770 00000000000000#define P25_width 205 #define P25_height 18 static unsigned char P25_bits[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x71, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc0, 0x89, 0x00, 0x00, 0x00, 0xc0, 0x09, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x40, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x20, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xe0, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; flrig-2.0.04/src/images/idd50.xbm0000664000175000017500000000467414475136651013323 00000000000000#define idd50_width 205 #define idd50_height 18 static unsigned char idd50_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x1c,0x00,0x00, 0x00,0x39,0x00,0x00,0x00,0xc0,0x71,0x00,0x00,0x00,0xc0,0x71,0x00,0x00,0x00, 0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x94,0x24,0x00,0x00,0xc0,0x45,0x00,0x00, 0x00,0x20,0x8a,0x00,0x00,0x00,0x20,0x8a,0x00,0x00,0x00,0x00,0x8b,0x00,0x00, 0x00,0x00,0x00,0x14,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x8a,0x00, 0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x80,0x8a,0x00,0x00,0x00,0x00,0x00,0x14, 0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x00,0x8a, 0x00,0x00,0x00,0x80,0x8a,0x00,0x00,0x00,0x00,0x00,0x14,0x45,0x00,0x00,0x00, 0x45,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x80,0x89,0x00,0x00,0x00,0x40, 0x8a,0x00,0x00,0x00,0x00,0x00,0x14,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00, 0x80,0x88,0x00,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xc0,0x8b,0x00,0x00,0x00, 0x00,0x00,0x14,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x40,0x88,0x00,0x00, 0x00,0x00,0x8a,0x00,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x94,0x24, 0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x20,0x88,0x00,0x00,0x00,0x20,0x8a,0x00, 0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x74,0x1c,0x00,0x00,0x00,0x39, 0x00,0x00,0x00,0xe0,0x73,0x00,0x00,0x00,0xc0,0x71,0x00,0x00,0x00,0x00,0x72, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00, 0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x40, 0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40, 0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x04,0x00,0x40,0x00,0x00,0x04,0x00, 0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00, 0x40,0x00,0x00,0x04,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04, 0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x04,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x04,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x07 }; flrig-2.0.04/src/images/SWR.xbm0000664000175000017500000000567714475136651013075 00000000000000#define SWR_width 205 #define SWR_height 18 static unsigned char SWR_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xc0, 0x10, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x80, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0xf0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xa2, 0x82, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xa2, 0x85, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xaa, 0x80, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xaa, 0x80, 0x10, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x94, 0x80, 0xe4, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x84, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x84, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7b, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07 }; flrig-2.0.04/src/images/P50.xbm0000664000175000017500000000567714475136651012766 00000000000000#define P50_width 205 #define P50_height 18 static unsigned char P50_bits[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xc0, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x40, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x40, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0x00, 0x20, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0xe0, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x40, 0x88, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x20, 0x88, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xe0, 0x73, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; flrig-2.0.04/src/images/P200log.xbm0000664000175000017500000000571314475136651013534 00000000000000#define P200log_width 205 #define P200log_height 18 static unsigned char P200log_bits[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x04, 0x00, 0x41, 0x44, 0x04, 0x82, 0x10, 0x22, 0x02, 0x82, 0x20, 0x08, 0x42, 0x00, 0x01, 0x01, 0x01, 0x81, 0x40, 0x20, 0x08, 0x82, 0x20, 0x84, 0x20, 0x04, 0x04, 0x00, 0x41, 0x44, 0x04, 0x82, 0x10, 0x22, 0x02, 0x82, 0x20, 0x08, 0x42, 0x00, 0x01, 0x01, 0x01, 0x81, 0x40, 0x20, 0x08, 0x82, 0x20, 0x84, 0x20, 0x04, 0x04, 0x00, 0x41, 0x44, 0x04, 0x82, 0x10, 0x22, 0x02, 0x82, 0x20, 0x08, 0x42, 0x00, 0x01, 0x01, 0x01, 0x81, 0x40, 0x20, 0x08, 0x82, 0x20, 0x84, 0x20, 0x04, 0x04, 0x00, 0x41, 0x44, 0x04, 0x80, 0x00, 0x02, 0x02, 0x80, 0x00, 0x08, 0x40, 0x00, 0x01, 0x01, 0x01, 0x81, 0x40, 0x20, 0x08, 0x82, 0x20, 0x84, 0x20, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x02, 0x02, 0x80, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xe0, 0x38, 0x00, 0x00, 0x00, 0x3e, 0x07, 0x00, 0x00, 0x00, 0x71, 0x1c, 0x00, 0x00, 0xe4, 0x73, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x00, 0xc0, 0x89, 0x22, 0x00, 0x00, 0x27, 0x88, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x00, 0x00, 0x89, 0x22, 0x00, 0x00, 0x24, 0x88, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x9c, 0x08, 0x00, 0x00, 0x00, 0x89, 0x22, 0x00, 0x00, 0xc4, 0x89, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x80, 0x44, 0x00, 0x00, 0x00, 0xa0, 0x08, 0x00, 0x00, 0x00, 0x89, 0x22, 0x00, 0x00, 0x04, 0x8a, 0x00, 0x00, 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0x44, 0x00, 0x00, 0x00, 0xa0, 0x08, 0x00, 0x00, 0x00, 0x89, 0x22, 0x00, 0x00, 0x04, 0x8a, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x44, 0x00, 0x00, 0x00, 0xa0, 0x08, 0x00, 0x00, 0x00, 0x89, 0x22, 0x00, 0x00, 0x04, 0x8a, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10, 0x44, 0x00, 0x00, 0x00, 0xa2, 0x08, 0x00, 0x00, 0x00, 0x89, 0x22, 0x00, 0x00, 0x24, 0x8a, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xf0, 0x39, 0x00, 0x00, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x71, 0x1c, 0x00, 0x00, 0xc4, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; flrig-2.0.04/src/images/P15.xbm0000664000175000017500000000466614475136651012764 00000000000000#define P15_width 205 #define P15_height 18 static unsigned char P15_bits[] = { 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x04,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x04,0x04,0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00, 0x04,0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00,0x04,0x00,0x04, 0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00,0x04, 0x40,0x00,0x04,0x40,0x00,0x04,0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x40, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x04,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, 0x00,0x71,0x00,0x00,0x00,0x90,0x07,0x00,0x00,0xf0,0x00,0x00,0x00,0x10,0x01, 0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0xc0,0x89,0x00,0x00, 0x00,0x9c,0x08,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x90,0x00,0x00, 0x00,0x10,0x01,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10, 0x01,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x90,0x06,0x00,0x00,0x10,0x01,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00, 0x41,0x00,0x00,0x00,0x90,0x09,0x00,0x00,0xf0,0x0c,0x00,0x00,0x00,0x01,0x00, 0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x21,0x00,0x00,0x00, 0x10,0x08,0x00,0x00,0x10,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x08,0x00,0x00, 0x10,0x12,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x01, 0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x90,0x08,0x00,0x00,0x10,0x0c,0x00,0x00, 0xe0,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0xf9, 0x00,0x00,0x00,0x10,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00 }; flrig-2.0.04/src/images/alc.xbm0000664000175000017500000000567714475136651013161 00000000000000#define alc_width 205 #define alc_height 18 static unsigned char alc_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x82, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x82, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x82, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x82, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x82, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x82, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x3e, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07 }; flrig-2.0.04/src/images/volts13.xbm0000664000175000017500000000570514475136651013725 00000000000000#define volts_width 205 #define volts_height 18 static unsigned char volts_bits[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x80, 0x70, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x46, 0x3e, 0x03, 0xc0, 0x88, 0x00, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x49, 0x88, 0x04, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x49, 0x88, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x49, 0x08, 0x01, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x49, 0x08, 0x02, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x49, 0x08, 0x04, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x4d, 0x88, 0x04, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xc6, 0x09, 0x03, 0x80, 0x70, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; flrig-2.0.04/src/images/P5.xbm0000664000175000017500000000567414475136651012703 00000000000000#define P5_width 205 #define P5_height 18 static unsigned char P5_bits[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; flrig-2.0.04/src/images/volts50.xbm0000664000175000017500000000470214475136651013722 00000000000000#define volts50_width 205 #define volts50_height 18 static unsigned char volts50_bits[] = { 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x54,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x05,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10, 0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x04, 0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04, 0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x04,0x00,0x40,0x00,0x00, 0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00, 0x04,0x00,0x40,0x00,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00, 0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00, 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00, 0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x80,0x70,0x00,0x00,0x00,0x80,0xe3,0x00, 0x00,0x00,0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x44,0x46,0x3e,0x03,0x80,0x09, 0x01,0x00,0x00,0xc0,0x88,0x00,0x00,0x00,0x40,0x14,0x01,0x00,0x00,0x40,0x64, 0x00,0x00,0x00,0x00,0x00,0x44,0x49,0x88,0x04,0x40,0x09,0x01,0x00,0x00,0xa0, 0x08,0x01,0x00,0x00,0x40,0x10,0x01,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00, 0x00,0x28,0x49,0x88,0x00,0x40,0xf1,0x00,0x00,0x00,0xa0,0x08,0x01,0x00,0x00, 0x40,0x10,0x01,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x28,0x49,0x08, 0x01,0x20,0x09,0x01,0x00,0x00,0x90,0x70,0x01,0x00,0x00,0x80,0x13,0x01,0x00, 0x00,0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x28,0x49,0x08,0x02,0x10,0x09,0x01, 0x00,0x00,0x88,0x00,0x01,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x00,0x44,0x00, 0x00,0x00,0x00,0x00,0x10,0x49,0x08,0x04,0xf0,0x09,0x01,0x00,0x00,0xf8,0x00, 0x01,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00, 0x10,0x4d,0x88,0x04,0x00,0x09,0x01,0x00,0x00,0x80,0x08,0x01,0x00,0x00,0x40, 0x14,0x01,0x00,0x00,0x40,0x44,0x00,0x00,0x00,0x00,0x00,0x10,0xc6,0x09,0x03, 0x00,0xf1,0x00,0x00,0x00,0x80,0xf0,0x00,0x00,0x00,0x80,0xe3,0x00,0x00,0x00, 0x80,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00 }; flrig-2.0.04/src/images/alc40db.xbm0000664000175000017500000000472114502041135013577 00000000000000#define alc40db_width 205 #define alc40db_height 18 static unsigned char alc40db_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00, 0x00,0x00,0x1c,0x03,0x00,0x00,0x00,0x00,0x70,0x0c,0x00,0x00, 0x00,0x00,0x80,0xec,0x20,0x02,0x07,0x00,0x00,0x00,0x2e,0x01, 0x00,0x00,0x00,0x00,0xa2,0x04,0x00,0x00,0x00,0x00,0x88,0x12, 0x00,0x00,0x00,0x00,0xc0,0xf2,0x50,0x82,0x08,0x00,0x00,0x00, 0x28,0x01,0x00,0x00,0x00,0x00,0xa0,0x04,0x00,0x00,0x00,0x00, 0x80,0x12,0x00,0x00,0x00,0x00,0xa0,0xf2,0x50,0x82,0x00,0x00, 0x00,0x00,0x28,0x01,0x00,0x00,0x00,0x00,0xa0,0x04,0x00,0x00, 0x00,0x00,0x80,0x12,0x00,0x00,0x00,0x00,0xa0,0xf2,0x88,0x82, 0x00,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x00,0x00,0xa0,0x04, 0x00,0x00,0x00,0x00,0xe0,0x12,0x00,0x00,0x00,0x00,0x90,0xf2, 0xf8,0x82,0x00,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x00,0x00, 0x90,0x04,0x00,0x00,0x00,0x00,0x80,0x12,0x00,0x00,0x00,0x00, 0xf0,0xf3,0x88,0x82,0x00,0x00,0x00,0x00,0x28,0x01,0x00,0x00, 0x00,0x00,0x88,0x04,0x00,0x00,0x00,0x00,0x80,0x12,0x00,0x00, 0x00,0x00,0x80,0xf2,0x88,0x82,0x08,0x00,0x00,0x00,0x28,0x01, 0x00,0x00,0x00,0x00,0x84,0x04,0x00,0x00,0x00,0x00,0x88,0x12, 0x00,0x00,0x00,0x00,0x80,0xf2,0x88,0x3e,0x07,0x00,0x00,0x00, 0xc8,0x00,0x00,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x00,0x00, 0x70,0x0c,0x00,0x00,0x00,0x00,0x80,0xec,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x04,0x00, 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0xe4, 0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00, 0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00, 0x00,0xe4,0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x20, 0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x01,0x00,0x00, 0x02,0x00,0x00,0xe4,0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00, 0x00,0x20,0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x01, 0x00,0x00,0x02,0x00,0x00,0xe4,0x84,0x10,0x42,0x08,0x21,0x84, 0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42, 0x08,0x21,0x84,0x10,0x42,0x08,0x21,0xe4,0x84,0x10,0x42,0x08, 0x21,0x84,0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0x84, 0x10,0x42,0x08,0x21,0x84,0x10,0x42,0x08,0x21,0xe4,0xfc,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7}; flrig-2.0.04/src/images/idd25.xbm0000664000175000017500000000467414475136651013325 00000000000000#define idd25_width 205 #define idd25_height 18 static unsigned char idd25_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x1c,0x00,0x00, 0x00,0x1e,0x00,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x00,0x79,0x00,0x00,0x00, 0xc0,0x71,0x00,0x00,0x00,0x00,0x00,0x94,0x24,0x00,0x00,0x00,0x01,0x00,0x00, 0x00,0xc0,0x45,0x00,0x00,0x00,0xc0,0x05,0x00,0x00,0x00,0x20,0x8a,0x00,0x00, 0x00,0x00,0x00,0x14,0x45,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x45,0x00, 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x14, 0x45,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x3d, 0x00,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x14,0x45,0x00,0x00,0x00, 0x11,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00, 0x89,0x00,0x00,0x00,0x00,0x00,0x14,0x45,0x00,0x00,0x00,0x20,0x00,0x00,0x00, 0x00,0x45,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x88,0x00,0x00,0x00, 0x00,0x00,0x14,0x45,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x45,0x00,0x00, 0x00,0x00,0x81,0x00,0x00,0x00,0x40,0x88,0x00,0x00,0x00,0x00,0x00,0x94,0x24, 0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x45,0x00, 0x00,0x00,0x20,0x88,0x00,0x00,0x00,0x00,0x00,0x74,0x1c,0x00,0x00,0x00,0x0e, 0x00,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0xe0,0x73, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00, 0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x04,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x04,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x07 }; flrig-2.0.04/src/images/S60.xbm0000664000175000017500000000567714475136651012772 00000000000000#define S60_width 205 #define S60_height 18 static unsigned char S60_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc3, 0x01, 0x00, 0x00, 0x1c, 0x0e, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x40, 0x24, 0x02, 0x00, 0x00, 0x22, 0x11, 0x00, 0x00, 0x91, 0x08, 0x00, 0x00, 0x22, 0x11, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0xa2, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x81, 0x08, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x80, 0x89, 0x00, 0x20, 0x82, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x81, 0x08, 0x00, 0x40, 0x20, 0x11, 0x00, 0x00, 0x42, 0x89, 0x00, 0x20, 0x82, 0x08, 0x00, 0x00, 0x00, 0x80, 0x83, 0x01, 0x00, 0x00, 0x1c, 0x0f, 0x00, 0x00, 0x0e, 0x0f, 0x00, 0x40, 0x10, 0x11, 0x00, 0x00, 0x42, 0x89, 0x00, 0xf8, 0x9e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x10, 0x08, 0x00, 0xf0, 0x09, 0x11, 0x00, 0x80, 0x2f, 0x89, 0x00, 0x20, 0xa2, 0x08, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x10, 0x08, 0x00, 0x40, 0x04, 0x11, 0x00, 0x00, 0xe2, 0x8b, 0x00, 0x20, 0xa2, 0x08, 0x00, 0x00, 0x00, 0x40, 0x24, 0x02, 0x00, 0x00, 0x22, 0x11, 0x00, 0x00, 0x91, 0x08, 0x00, 0x40, 0x02, 0x11, 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0xa2, 0x08, 0x00, 0x00, 0x00, 0x80, 0xc3, 0x01, 0x00, 0x00, 0x1c, 0x0e, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x20, 0x00, 0x02, 0x10, 0x00, 0x01, 0x08, 0x80, 0x00, 0x02, 0x08, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x04, 0x04, 0x20, 0x00, 0x02, 0x10, 0x00, 0x01, 0x08, 0x80, 0x00, 0x02, 0x08, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x04, 0x04, 0x20, 0x00, 0x02, 0x10, 0x00, 0x01, 0x08, 0x80, 0x00, 0x02, 0x08, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x04, 0x04, 0x20, 0x00, 0x02, 0x10, 0x00, 0x01, 0x08, 0x80, 0x00, 0x02, 0x08, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x04, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07 }; flrig-2.0.04/src/images/P20.xbm0000664000175000017500000000466614475136651012760 00000000000000#define P20_width 205 #define P20_height 18 static unsigned char P20_bits[] = { 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x54,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x05,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10, 0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x04, 0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04, 0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x04,0x00,0x40,0x00,0x00, 0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00, 0x04,0x00,0x40,0x00,0x00,0x04,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00, 0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00, 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x00,0x00,0x08,0x00,0xe0,0x00,0x00,0x0e,0x00,0x88,0x03,0x00,0x71,0x00, 0x10,0x04,0x00,0x71,0x00,0x10,0x07,0x00,0x00,0xf0,0x00,0x10,0x01,0x00,0x0c, 0x00,0x10,0x01,0x00,0x11,0x00,0x4e,0x04,0xc0,0x89,0x00,0x1c,0x06,0xc0,0x89, 0x00,0x9c,0x08,0x00,0x00,0x10,0x01,0x00,0x01,0x00,0x0c,0x00,0x10,0x00,0x00, 0x11,0x00,0x48,0x04,0x00,0x81,0x00,0x10,0x06,0x00,0x09,0x00,0x90,0x08,0x00, 0x00,0x10,0x01,0x00,0x01,0x00,0x0a,0x00,0x10,0x00,0x00,0x11,0x00,0x48,0x04, 0x00,0x81,0x00,0x10,0x05,0x00,0x09,0x00,0x90,0x08,0x00,0x00,0x10,0x01,0x80, 0x00,0x00,0x0a,0x00,0xf0,0x00,0x00,0x0e,0x00,0x48,0x04,0x00,0x41,0x00,0x10, 0x05,0x00,0x79,0x00,0x10,0x07,0x00,0x00,0xf0,0x0c,0x40,0x00,0x00,0x09,0x00, 0x10,0x01,0x00,0x11,0x00,0x48,0x04,0x00,0x21,0x00,0x90,0x04,0x00,0x89,0x00, 0x90,0x08,0x00,0x00,0x10,0x12,0x20,0x00,0x00,0x1f,0x00,0x10,0x01,0x00,0x11, 0x00,0x48,0x04,0x00,0x11,0x00,0x90,0x0f,0x00,0x89,0x00,0x90,0x08,0x00,0x00, 0x10,0x12,0x10,0x00,0x00,0x08,0x00,0x10,0x01,0x00,0x11,0x00,0x48,0x04,0x00, 0x09,0x00,0x10,0x04,0x00,0x89,0x00,0x90,0x08,0x00,0x00,0x10,0x0c,0xf0,0x01, 0x00,0x08,0x00,0xe0,0x00,0x00,0x0e,0x00,0x88,0x03,0x00,0xf9,0x00,0x10,0x04, 0x00,0x71,0x00,0x10,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00 }; flrig-2.0.04/src/images/P10.xbm0000664000175000017500000000466614475136651012757 00000000000000#define P10_width 205 #define P10_height 18 static unsigned char P10_bits[] = { 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x54,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x05,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10, 0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x04, 0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04, 0x10,0x40,0x00,0x01,0x04,0x10,0x40,0x00,0x01,0x04,0x04,0x00,0x40,0x00,0x00, 0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00, 0x04,0x00,0x40,0x00,0x00,0x04,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00, 0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00,0x00,0x04,0x00,0x40,0x00, 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x0e,0x00, 0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x11, 0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x11, 0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00, 0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00, 0x00,0x10,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00, 0x00,0x01,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x1f,0x00,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0xf0,0x0c,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x11,0x00, 0x00,0x00,0x00,0x00,0x10,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x80,0x0f, 0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00, 0x10,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00, 0x11,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x10,0x0c,0x00,0x00, 0x00,0x1f,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, 0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00 }; flrig-2.0.04/src/images/P200.xbm0000664000175000017500000000570214475136651013030 00000000000000#define P200_width 205 #define P200_height 18 static unsigned char P200_bits[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x20, 0x8e, 0x03, 0x00, 0x00, 0x20, 0x8e, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x38, 0x51, 0x04, 0x00, 0x00, 0x38, 0x51, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x50, 0x04, 0x00, 0x00, 0x20, 0x41, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x40, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x50, 0x04, 0x00, 0x00, 0x20, 0x41, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x40, 0x89, 0x00, 0x00, 0x00, 0xc0, 0x89, 0x00, 0x00, 0x00, 0x20, 0x48, 0x04, 0x00, 0x00, 0x20, 0x4f, 0x04, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x20, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x44, 0x04, 0x00, 0x00, 0x20, 0x51, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0xe0, 0x8b, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x42, 0x04, 0x00, 0x00, 0x20, 0x51, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x41, 0x04, 0x00, 0x00, 0x20, 0x51, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x20, 0x9f, 0x03, 0x00, 0x00, 0x20, 0x8e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; flrig-2.0.04/src/images/P100.xbm0000664000175000017500000000570214475136651013027 00000000000000#define P100_width 205 #define P100_height 18 static unsigned char P100_bits[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x40, 0x00, 0x01, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x80, 0x89, 0x00, 0x00, 0x00, 0x20, 0x88, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x40, 0x89, 0x00, 0x00, 0x00, 0x20, 0x88, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x40, 0x89, 0x00, 0x00, 0x00, 0xe0, 0x8b, 0x00, 0x00, 0x00, 0xc0, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x80, 0x88, 0x00, 0x00, 0x00, 0x20, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x40, 0x88, 0x00, 0x00, 0x00, 0xe0, 0x8b, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x20, 0x88, 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0xe0, 0x73, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; flrig-2.0.04/src/UI/0000775000175000017500000000000014511461606011013 500000000000000flrig-2.0.04/src/UI/KX3_ui.cxx0000664000175000017500000000575014504050407012563 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include #include "support.h" #include "debug.h" #include "gettext.h" #include "rig_io.h" #include "dialogs.h" #include "rigbase.h" #include "ptt.h" #include "rigs.h" #include "KX3_ui.h" extern std::queue queA; extern std::queue queB; void read_KX3_vfo() { unsigned long long freq; freq = selrig->get_vfoA(); if (freq != vfoA.freq) { vfoA.freq = freq; Fl::awake(setFreqDispA); vfo = &vfoA; } freq = selrig->get_vfoB(); if (freq != vfoB.freq) { vfoB.freq = freq; Fl::awake(setFreqDispB); } } void read_KX3_mode() { int nu_mode; nu_mode = selrig->get_modeA(); if (nu_mode != vfoA.imode) { vfoA.imode = vfo->imode = nu_mode; selrig->set_bwA(vfo->iBW = selrig->adjust_bandwidth(nu_mode)); Fl::awake(setModeControl); Fl::awake(updateBandwidthControl); } nu_mode = selrig->get_modeB(); if (nu_mode != vfoB.imode) { vfoB.imode = nu_mode; } } void read_KX3_bw() { int nu_BW; nu_BW = selrig->get_bwA(); if (nu_BW != vfoA.iBW) { vfoA.iBW = vfo->iBW = nu_BW; Fl::awake(setBWControl); } nu_BW = selrig->get_bwB(); if (nu_BW != vfoB.iBW) { vfoB.iBW = nu_BW; } } void KX3_set_split(int val) { guard_lock serial_lock(&mutex_serial); selrig->set_split(val); } void cb_KX3_A2B() { guard_lock serial_lock(&mutex_serial); vfoB = vfoA; selrig->set_vfoB(vfoB.freq); selrig->set_bwB(vfoB.iBW); selrig->set_modeB(vfoB.imode); FreqDispB->value(vfoB.freq); } void cb_KX3_swapAB() { guard_lock serial_lock(&mutex_serial); XCVR_STATE nuB = vfoA, nuA = vfoB; selrig->set_vfoB(nuB.freq); selrig->set_bwB(nuB.iBW); selrig->set_modeB(nuB.imode); selrig->set_vfoA(nuA.freq); selrig->set_bwA(nuA.iBW); selrig->set_modeA(nuA.imode); vfoA = nuA; vfoB = nuB; vfo = &vfoA; FreqDispA->value(vfoA.freq); opBW->index(vfoA.iBW); opMODE->index(vfoA.imode); FreqDispB->value(vfoB.freq); } void cb_KX3_IFsh() { guard_lock serial_lock(&mutex_serial); selrig->set_if_shift(9999); } flrig-2.0.04/src/UI/K4_ui.cxx0000664000175000017500000000557414504050407012440 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include #include "support.h" #include "debug.h" #include "gettext.h" #include "rig_io.h" #include "dialogs.h" #include "rigbase.h" #include "ptt.h" #include "rigs.h" #include "K4_ui.h" extern std::queue queA; extern std::queue queB; void read_K4_vfo() { unsigned long long freq; freq = selrig->get_vfoA(); if (freq != vfoA.freq) { vfoA.freq = freq; Fl::awake(setFreqDispA); vfo = &vfoA; } freq = selrig->get_vfoB(); if (freq != vfoB.freq) { vfoB.freq = freq; Fl::awake(setFreqDispB); } } void read_K4_mode() { int nu_mode; nu_mode = selrig->get_modeA(); if (nu_mode != vfoA.imode) { vfoA.imode = vfo->imode = nu_mode; selrig->set_bwA(vfo->iBW = selrig->adjust_bandwidth(nu_mode)); Fl::awake(setModeControl); Fl::awake(updateBandwidthControl); } nu_mode = selrig->get_modeB(); if (nu_mode != vfoB.imode) { vfoB.imode = nu_mode; } } void read_K4_bw() { int nu_BW; nu_BW = selrig->get_bwA(); if (nu_BW != vfoA.iBW) { vfoA.iBW = vfo->iBW = nu_BW; Fl::awake(setBWControl); } nu_BW = selrig->get_bwB(); if (nu_BW != vfoB.iBW) { vfoB.iBW = nu_BW; } } void K4_set_split(int val) { guard_lock serial_lock(&mutex_serial); selrig->set_split(val); } void K4_A2B() { guard_lock serial_lock(&mutex_serial); vfoB = vfoA; selrig->set_vfoB(vfoB.freq); selrig->set_bwB(vfoB.iBW); selrig->set_modeB(vfoB.imode); FreqDispB->value(vfoB.freq); } void cb_K4_swapAB() { guard_lock serial_lock(&mutex_serial); XCVR_STATE temp = vfoA; vfoA = vfoB; vfoB = temp; selrig->set_vfoB(vfoB.freq); selrig->set_bwB(vfoB.iBW); selrig->set_modeB(vfoB.imode); FreqDispB->value(vfoB.freq); selrig->set_vfoA(vfoA.freq); selrig->set_bwA(vfoA.iBW); selrig->set_modeA(vfoA.imode); opBW->index(vfoA.iBW); opMODE->index(vfoA.imode); FreqDispA->value(vfoA.freq); vfo = &vfoA; } flrig-2.0.04/src/UI/gpio.cxx0000664000175000017500000001233414504050407012413 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "gpio.h" #include "gpio_ptt.h" static const char *gpio_label[] = { " 17 00 11", " 18 01 12", " 27 02 13", " 22 03 15", " 23 04 16", " 24 05 18", " 25 06 22", " 4 07 7", " 5 21 29", " 6 22 31", " 13 23 33", " 19 24 35", " 26 25 37", " 12 26 32", " 16 27 36", " 20 28 38", " 21 29 40" }; static void show_pins() { printf("%05x | %05x\n", progStatus.enable_gpio, progStatus.gpio_on); } void cb_btn_enable_gpio(Fl_Check_Button* btn, void *val) { size_t n = (size_t)(val); if (btn->value()) { progStatus.enable_gpio |= (1 << n); } else { progStatus.enable_gpio &= ~(1 << n); } show_pins(); } static void cb_btn_gpio_on(Fl_Check_Button* btn, void *val) { size_t n = (size_t)(val); if (btn->value()) { progStatus.gpio_on |= (1 << n); } else { progStatus.gpio_on &= ~(1 << n); } show_pins(); } static void cb_cnt_gpio_pulse_width(Fl_Counter* o, void*) { progStatus.gpio_pulse_width = (int)o->value(); } static void cb_btn_use_gpio(Fl_Check_Button* btn, void *) { if (btn->value()) { progStatus.gpio_ptt = true; open_gpio(); } else { progStatus.gpio_ptt = false; close_gpio(); } } Fl_Group *createGPIO(int X, int Y, int W, int H, const char *label) { Fl_Group *tab = new Fl_Group(X, Y, W, H, label); size_t w = (W - 20)/4; size_t h = 18; size_t hd = (H - 4)/ 11; size_t y = Y + 2 + hd; size_t col1 = X + 20; size_t col2 = col1 + w; size_t col3 = col2 + w; size_t col4 = col3 + w; Fl_Check_Button * btn_use_gpio = new Fl_Check_Button (col2 + w/2, Y + 2, w, h, "Use GPIO PTT"); btn_use_gpio->down_box(FL_DOWN_BOX); btn_use_gpio->labelfont(FL_COURIER); btn_use_gpio->labelsize(12); btn_use_gpio->value(progStatus.gpio_ptt); btn_use_gpio->callback((Fl_Callback*)cb_btn_use_gpio); Fl_Box* bx1 = new Fl_Box(col1, y, w, h, " BCM GPIO Pin ON"); bx1->labelfont(FL_COURIER); bx1->labelsize(12); bx1->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); Fl_Box* bx3 = new Fl_Box(col3, y, w, h, " BCM GPIO Pin ON"); bx3->labelfont(FL_COURIER); bx3->labelsize(12); bx3->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); for (size_t n = 0; n < 8; n++) { btn_enable_gpio[n] = new Fl_Check_Button(col1, y + hd * (n + 1), w, h, gpio_label[n]); btn_enable_gpio[n]->tooltip(_("Select pin number")); btn_enable_gpio[n]->down_box(FL_DOWN_BOX); btn_enable_gpio[n]->labelfont(FL_COURIER); btn_enable_gpio[n]->labelsize(12); btn_enable_gpio[n]->callback((Fl_Callback*)cb_btn_enable_gpio, (void *)n); btn_enable_gpio[n]->value((progStatus.enable_gpio >> n)& 0x01); } for (size_t n = 8; n < 17; n++) { btn_enable_gpio[n] = new Fl_Check_Button(col3, y + hd * (n - 7), w, h, gpio_label[n]); btn_enable_gpio[n]->tooltip(_("Select pin number")); btn_enable_gpio[n]->down_box(FL_DOWN_BOX); btn_enable_gpio[n]->labelfont(FL_COURIER); btn_enable_gpio[n]->labelsize(12); btn_enable_gpio[n]->callback((Fl_Callback*)cb_btn_enable_gpio, (void *)n); btn_enable_gpio[n]->value((progStatus.enable_gpio >> n)& 0x01); } for (size_t n = 0; n < 8; n++) { btn_gpio_on[n] = new Fl_Check_Button(col2, y + hd * (n + 1), w, h, ""); btn_gpio_on[n]->tooltip(_("Select PTT on state")); btn_gpio_on[n]->down_box(FL_DOWN_BOX); btn_gpio_on[n]->labelfont(FL_COURIER); btn_gpio_on[n]->labelsize(12); btn_gpio_on[n]->callback((Fl_Callback*)cb_btn_gpio_on, (void *)n); btn_gpio_on[n]->value((progStatus.gpio_on >> n) & 0x01); } for (size_t n = 8; n < 17; n++) { btn_gpio_on[n] = new Fl_Check_Button(col4, y + hd * (n - 7), w, h, ""); btn_gpio_on[n]->tooltip(_("Select PTT on state")); btn_gpio_on[n]->down_box(FL_DOWN_BOX); btn_gpio_on[n]->labelfont(FL_COURIER); btn_gpio_on[n]->labelsize(12); btn_gpio_on[n]->callback((Fl_Callback*)cb_btn_gpio_on, (void *)n); btn_gpio_on[n]->value((progStatus.gpio_on >> n) & 0x01); } cnt_gpio_pulse_width = new Fl_Counter(col1, y + hd * 9, 80, 20, "Pulse width (msec)"); cnt_gpio_pulse_width->tooltip(_("Set >0 if pulsed PTT used")); cnt_gpio_pulse_width->type(1); cnt_gpio_pulse_width->labelfont(FL_COURIER); cnt_gpio_pulse_width->labelsize(12); cnt_gpio_pulse_width->minimum(0); cnt_gpio_pulse_width->maximum(50); cnt_gpio_pulse_width->step(1); cnt_gpio_pulse_width->callback((Fl_Callback*)cb_cnt_gpio_pulse_width); cnt_gpio_pulse_width->align(Fl_Align(FL_ALIGN_RIGHT)); cnt_gpio_pulse_width->value(progStatus.gpio_pulse_width); tab->end(); return tab; } flrig-2.0.04/src/UI/ui_small.cxx0000664000175000017500000023015714505022320013261 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- Fl_Group *gsmall = (Fl_Group *)0; Fl_Menu_Item menu_small_menu[] = { {_("&File"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("E&xit"), 0, (Fl_Callback*)cb_mnuExit, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Config"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Setup"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Transceiver"), 0, (Fl_Callback*)cb_mnuConfigXcvr, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("TCPIP - TCI"), 0, (Fl_Callback*)cb_mnuTCPIP, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-CMedia"), 0, (Fl_Callback*)cb_mnuCMEDIA, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-Generic"), 0, (Fl_Callback*)cb_mnuPTT, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-GPIO"), 0, (Fl_Callback*)cb_mnuGPIO, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Other"), 0, (Fl_Callback*)cb_mnuOTHER, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("TMATE-2"), 0, (Fl_Callback*)cb_mnuTMATE2, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Server"), 0, (Fl_Callback*)cb_mnuSERVER, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Client"), 0, (Fl_Callback*)cb_mnuCLIENT, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Polling"), 0, (Fl_Callback*)cb_Polling, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Commands"), 0, (Fl_Callback*)cb_mnuCommands, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Send command"), 0, (Fl_Callback*)cb_Send, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Restore"), 0, (Fl_Callback*)cb_Restore, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Trace"), 0, (Fl_Callback*)cb_mnuTrace, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("UI"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Meters dialog"), 0, (Fl_Callback*)cb_mnu_show_meters, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Meter filtering"), 0, (Fl_Callback*)cb_mnu_meter_filtering, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Power meter scale"), 0, (Fl_Callback*)cb_mnu_power_meter_scale, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Small sliders"), 0, (Fl_Callback*)cb_mnuSchema, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("Embed tabs"), 0, (Fl_Callback*)cb_mnu_embed_tabs, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("Tooltips"), 0, (Fl_Callback*)cb_mnuTooltips, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("Voltmeter"), 0, (Fl_Callback*)cb_mnuVoltmeter, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("User Interface"), 0, (Fl_Callback*)cb_mnuColorConfig, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {_("&Memory"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Save"), 0, (Fl_Callback*)cb_save_me, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Manage"), 0, (Fl_Callback*)cb_Memory, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Keyer"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("&CW Keyer"), 0, (Fl_Callback*)cb_CWkeyer, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&FSK Keyer"), 0, (Fl_Callback*)cb_FSKkeyer, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Help"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("On Line Help"), 0, (Fl_Callback*)cb_mnuOnLineHelp, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&About"), 0, (Fl_Callback*)cb_mnuAbout, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("&Events"), 0, (Fl_Callback*)cb_Events, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&xml-help"), 0, (Fl_Callback*)cb_xml_help, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0} }; int small_menuH = SMALL_MENUH; int small_mainW = SMALL_MAINW; int small_mainH = SMALL_MAINH; Fl_Group *small_main_group(int X, int Y, int W, int H) { Fl_Group *g = new Fl_Group(X,Y,W,H); g->box(FL_FLAT_BOX); FreqDispA = new cFreqControl(1, 24, 210, 35, _("10")); FreqDispA->when(FL_WHEN_CHANGED); FreqDispA->callback((Fl_Callback*)movFreqA); FreqDispB = new cFreqControl(213, 24, 210, 35, _("10")); FreqDispB->when(FL_WHEN_CHANGED); FreqDispB->callback((Fl_Callback*)movFreqB); btnVol = new Fl_Light_Button(2, 125, 50, 18, _("Vol")); btnVol->tooltip(_("Speaker on/off")); btnVol->down_box(FL_THIN_DOWN_BOX); btnVol->value(1); btnVol->labelsize(12); btnVol->callback((Fl_Callback*)cb_btnVol); sldrVOLUME = new Fl_Wheel_Value_Slider(54, 125, 156, 18); sldrVOLUME->tooltip(_("Adjust Audio Volume")); sldrVOLUME->type(5); sldrVOLUME->box(FL_THIN_DOWN_BOX); sldrVOLUME->color(FL_BACKGROUND_COLOR); sldrVOLUME->selection_color(FL_BACKGROUND_COLOR); sldrVOLUME->labeltype(FL_NORMAL_LABEL); sldrVOLUME->labelfont(0); sldrVOLUME->labelsize(12); sldrVOLUME->labelcolor(FL_FOREGROUND_COLOR); sldrVOLUME->maximum(100); sldrVOLUME->step(1); sldrVOLUME->textsize(12); sldrVOLUME->callback((Fl_Callback*)cb_sldrVOLUME); sldrVOLUME->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrVOLUME->when(FL_WHEN_CHANGED | FL_MOUSEWHEEL | FL_LEAVE); sldrVOLUME->reverse(true); btnAGC = new Fl_Light_Button(2, 145, 50, 18, _("AGC")); btnAGC->tooltip(_("Automatic Gain Control")); btnAGC->down_box(FL_THIN_DOWN_BOX); btnAGC->value(0); btnAGC->labelsize(12); btnAGC->callback((Fl_Callback*)cb_btnAGC); sldrRFGAIN = new Fl_Wheel_Value_Slider(54, 145, 156, 18); sldrRFGAIN->tooltip(_("Adjust RF gain")); sldrRFGAIN->type(5); sldrRFGAIN->box(FL_THIN_DOWN_BOX); sldrRFGAIN->color(FL_BACKGROUND_COLOR); sldrRFGAIN->selection_color(FL_BACKGROUND_COLOR); sldrRFGAIN->labeltype(FL_NORMAL_LABEL); sldrRFGAIN->labelfont(0); sldrRFGAIN->labelsize(12); sldrRFGAIN->labelcolor(FL_FOREGROUND_COLOR); sldrRFGAIN->maximum(100); sldrRFGAIN->step(1); sldrRFGAIN->value(15); sldrRFGAIN->textsize(12); sldrRFGAIN->callback((Fl_Callback*)cb_sldrRFGAIN); sldrRFGAIN->align(Fl_Align(FL_ALIGN_LEFT)); sldrRFGAIN->when(FL_WHEN_CHANGED); sldrRFGAIN->reverse(true); sldrSQUELCH = new Fl_Wheel_Value_Slider(54, 165, 156, 18, _("SQL")); sldrSQUELCH->tooltip(_("Adjust Squelch")); sldrSQUELCH->type(5); sldrSQUELCH->box(FL_THIN_DOWN_BOX); sldrSQUELCH->color(FL_BACKGROUND_COLOR); sldrSQUELCH->selection_color(FL_BACKGROUND_COLOR); sldrSQUELCH->labeltype(FL_NORMAL_LABEL); sldrSQUELCH->labelfont(0); sldrSQUELCH->labelsize(12); sldrSQUELCH->labelcolor(FL_FOREGROUND_COLOR); sldrSQUELCH->maximum(100); sldrSQUELCH->step(1); sldrSQUELCH->value(15); sldrSQUELCH->textsize(12); sldrSQUELCH->callback((Fl_Callback*)cb_sldrSQUELCH); sldrSQUELCH->align(Fl_Align(FL_ALIGN_LEFT)); sldrSQUELCH->when(FL_WHEN_CHANGED); sldrSQUELCH->reverse(true); btnNR = new Fl_Light_Button(2, 185, 50, 18, _("NR")); btnNR->tooltip(_("Noise Reduction On/Off")); btnNR->down_box(FL_THIN_DOWN_BOX); btnNR->labelsize(12); btnNR->callback((Fl_Callback*)cb_btnNR); sldrNR = new Fl_Wheel_Value_Slider(54, 185, 156, 18); sldrNR->tooltip(_("Adjust noise reduction")); sldrNR->type(5); sldrNR->box(FL_THIN_DOWN_BOX); sldrNR->color(FL_BACKGROUND_COLOR); sldrNR->selection_color(FL_BACKGROUND_COLOR); sldrNR->labeltype(FL_NORMAL_LABEL); sldrNR->labelfont(0); sldrNR->labelsize(12); sldrNR->labelcolor(FL_FOREGROUND_COLOR); sldrNR->maximum(100); sldrNR->step(2); sldrNR->textsize(12); sldrNR->callback((Fl_Callback*)cb_sldrNR); sldrNR->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrNR->when(FL_WHEN_CHANGED); sldrNR->reverse(true); btnNotch = new Fl_Light_Button(2, 205, 50, 18, _("Nch")); btnNotch->tooltip(_("Notch - Manual (off) Auto (on)")); btnNotch->down_box(FL_THIN_DOWN_BOX); btnNotch->labelsize(12); btnNotch->callback((Fl_Callback*)cb_btnNotch); sldrNOTCH = new Fl_Wheel_Value_Slider(54, 205, 156, 18); sldrNOTCH->tooltip(_("Adjust Notch Frequency")); sldrNOTCH->type(5); sldrNOTCH->box(FL_THIN_DOWN_BOX); sldrNOTCH->color(FL_BACKGROUND_COLOR); sldrNOTCH->selection_color(FL_BACKGROUND_COLOR); sldrNOTCH->labeltype(FL_NORMAL_LABEL); sldrNOTCH->labelfont(0); sldrNOTCH->labelsize(12); sldrNOTCH->labelcolor(FL_FOREGROUND_COLOR); sldrNOTCH->minimum(-1000); sldrNOTCH->maximum(1000); sldrNOTCH->step(10); sldrNOTCH->textsize(12); sldrNOTCH->callback((Fl_Callback*)cb_sldrNOTCH); sldrNOTCH->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrNOTCH->when(FL_WHEN_CHANGED); sldrNOTCH->reverse(true); btnLOCK = new Fl_Light_Button(2, 225, 50, 18, _("Lock")); btnLOCK->tooltip(_("Lock PBT Inner/Outer sliders")); btnLOCK->down_box(FL_THIN_DOWN_BOX); btnLOCK->labelsize(12); btnLOCK->callback((Fl_Callback*)cb_btnLOCK); sldrINNER = new Fl_Wheel_Value_Slider(54, 225, 156, 18, ""); sldrINNER->tooltip(_("Adjust Icom Inner PBT")); sldrINNER->type(5); sldrINNER->box(FL_THIN_DOWN_BOX); sldrINNER->color(FL_BACKGROUND_COLOR); sldrINNER->selection_color(FL_BACKGROUND_COLOR); sldrINNER->labeltype(FL_NORMAL_LABEL); sldrINNER->labelfont(0); sldrINNER->labelsize(12); sldrINNER->labelcolor(FL_FOREGROUND_COLOR); sldrINNER->minimum(-50); sldrINNER->maximum(50); sldrINNER->step(1); sldrINNER->textsize(12); sldrINNER->callback((Fl_Callback*)cb_sldrINNER); sldrINNER->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); sldrINNER->when(FL_WHEN_CHANGED); sldrINNER->reverse(true); btnCLRPBT = new Fl_Button( 2, 245, 50, 18, _("ClrPBT")); btnCLRPBT->tooltip(_("Zero PBT Inner/Outer sliders")); btnCLRPBT->down_box(FL_THIN_DOWN_BOX); btnCLRPBT->labelsize(12); btnCLRPBT->callback((Fl_Callback*)cb_btnCLRPBT); sldrOUTER = new Fl_Wheel_Value_Slider(54, 245, 156, 18, ""); sldrOUTER->tooltip(_("Adjust Icom Outer PBT")); sldrOUTER->type(5); sldrOUTER->box(FL_THIN_DOWN_BOX); sldrOUTER->color(FL_BACKGROUND_COLOR); sldrOUTER->selection_color(FL_BACKGROUND_COLOR); sldrOUTER->labeltype(FL_NORMAL_LABEL); sldrOUTER->labelfont(0); sldrOUTER->labelsize(12); sldrOUTER->labelcolor(FL_FOREGROUND_COLOR); sldrOUTER->minimum(-50); sldrOUTER->maximum(50); sldrOUTER->step(1); sldrOUTER->textsize(12); sldrOUTER->callback((Fl_Callback*)cb_sldrOUTER); sldrOUTER->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); sldrOUTER->when(FL_WHEN_CHANGED); sldrOUTER->reverse(true); btnIFsh = new Fl_Light_Button(2, 265, 50, 18, _("IFsh")); btnIFsh->tooltip(_("IF Shift On/Off")); btnIFsh->down_box(FL_THIN_DOWN_BOX); btnIFsh->labelsize(12); btnIFsh->callback((Fl_Callback*)cb_btnIFsh); btn_KX3_IFsh = new Fl_Button(2, 265, 50, 18, _("Cntr")); btn_KX3_IFsh->tooltip(_("Center IF shift")); btn_KX3_IFsh->down_box(FL_THIN_DOWN_BOX); btn_KX3_IFsh->labelsize(12); btn_KX3_IFsh->callback((Fl_Callback*)cb_KX3_IFsh); btn_KX3_IFsh->hide(); sldrIFSHIFT = new Fl_Wheel_Value_Slider(54, 265, 156, 18); sldrIFSHIFT->tooltip(_("Adjust IF Shift")); sldrIFSHIFT->type(5); sldrIFSHIFT->box(FL_THIN_DOWN_BOX); sldrIFSHIFT->color(FL_BACKGROUND_COLOR); sldrIFSHIFT->selection_color(FL_BACKGROUND_COLOR); sldrIFSHIFT->labeltype(FL_NORMAL_LABEL); sldrIFSHIFT->labelfont(0); sldrIFSHIFT->labelsize(12); sldrIFSHIFT->labelcolor(FL_FOREGROUND_COLOR); sldrIFSHIFT->minimum(-1000); sldrIFSHIFT->maximum(1000); sldrIFSHIFT->step(10); sldrIFSHIFT->textsize(12); sldrIFSHIFT->callback((Fl_Callback*)cb_sldrIFSHIFT); sldrIFSHIFT->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrIFSHIFT->when(FL_WHEN_CHANGED); sldrIFSHIFT->reverse(true); btnDataPort = new Fl_Light_Button(2, 285, 50, 18, _("Data")); btnDataPort->tooltip(_("Input on Data Port")); btnDataPort->down_box(FL_THIN_DOWN_BOX); btnDataPort->labelsize(12); btnDataPort->callback((Fl_Callback*)cb_btnDataPort); btnDataPort->hide(); btnDataPort->value(progStatus.data_port); sldrMICGAIN = new Fl_Wheel_Value_Slider(54, 285, 156, 18, _("Mic")); sldrMICGAIN->tooltip(_("Adjust Mic Gain")); sldrMICGAIN->type(5); sldrMICGAIN->box(FL_THIN_DOWN_BOX); sldrMICGAIN->color(FL_BACKGROUND_COLOR); sldrMICGAIN->selection_color(FL_BACKGROUND_COLOR); sldrMICGAIN->labeltype(FL_NORMAL_LABEL); sldrMICGAIN->labelfont(0); sldrMICGAIN->labelsize(12); sldrMICGAIN->labelcolor(FL_FOREGROUND_COLOR); sldrMICGAIN->maximum(100); sldrMICGAIN->step(1); sldrMICGAIN->textsize(12); sldrMICGAIN->callback((Fl_Callback*)cb_sldrMICGAIN); sldrMICGAIN->align(Fl_Align(FL_ALIGN_LEFT)); sldrMICGAIN->when(FL_WHEN_CHANGED); sldrMICGAIN->reverse(true); btnPOWER = new Fl_Light_Button(2, 305, 50, 18, _("Pwr")); btnPOWER->tooltip(_("Enable/Disable Power adjuster")); btnPOWER->value(1); btnPOWER-> callback((Fl_Callback*) cb_btnPOWER); sldrPOWER = new Fl_Wheel_Value_Slider(54, 305, 156, 18, ""); sldrPOWER->tooltip(_("Adjust power level")); sldrPOWER->type(5); sldrPOWER->box(FL_THIN_DOWN_BOX); sldrPOWER->color(FL_BACKGROUND_COLOR); sldrPOWER->selection_color(FL_BACKGROUND_COLOR); sldrPOWER->labeltype(FL_NORMAL_LABEL); sldrPOWER->labelfont(0); sldrPOWER->labelsize(12); sldrPOWER->labelcolor(FL_FOREGROUND_COLOR); sldrPOWER->maximum(100); sldrPOWER->step(1); sldrPOWER->value(15); sldrPOWER->textsize(12); sldrPOWER->callback((Fl_Callback*)cb_sldrPOWER); sldrPOWER->align(Fl_Align(FL_ALIGN_LEFT)); sldrPOWER->when(FL_WHEN_CHANGED); sldrPOWER->reverse(true); btnA = new Fl_Light_Button(212, 62, 52, 20, _("vfoA")); btnA->tooltip(_("Rx-A / Tx-A")); btnA->down_box(FL_THIN_DOWN_BOX); btnA->labelsize(12); btnA->callback((Fl_Callback*)cb_btnA); btnA->value(1); btnB = new Fl_Light_Button(265, 62, 52, 20, _("vfoB")); btnB->tooltip(_("Rx-B / Tx-B")); btnB->down_box(FL_THIN_DOWN_BOX); btnB->labelsize(12); btnB->callback((Fl_Callback*)cb_btnB); btnB->value(0); btn_KX3_swapAB = new Fl_Button(212, 62, 52, 20, _("A / B")); btn_KX3_swapAB->tooltip(_("Swap A/B")); btn_KX3_swapAB->down_box(FL_DOWN_BOX); btn_KX3_swapAB->labelsize(12); btn_KX3_swapAB->callback((Fl_Callback*)cb_btn_KX3_swapAB); btn_KX3_swapAB->hide(); btn_KX3_A2B = new Fl_Button(265, 62, 52, 20, _("A->B")); btn_KX3_A2B->tooltip(_("Copy A to B")); btn_KX3_A2B->down_box(FL_DOWN_BOX); btn_KX3_A2B->labelsize(12); btn_KX3_A2B->callback((Fl_Callback*)cb_KX3_A2B); btn_KX3_A2B->hide(); btn_K3_swapAB = new Fl_Button(212, 62, 52, 20, _("A / B")); btn_K3_swapAB->tooltip(_("Swap Vfo A / Vfo B")); btn_K3_swapAB->down_box(FL_DOWN_BOX); btn_K3_swapAB->labelsize(12); btn_K3_swapAB->callback((Fl_Callback*)cb_btn_K3_swapAB); btn_K3_swapAB->hide(); btn_K3_A2B = new Fl_Button(265, 62, 52, 20, _("A -> B")); btn_K3_A2B->tooltip(_("Copy A to B")); btn_K3_A2B->down_box(FL_DOWN_BOX); btn_K3_A2B->labelsize(12); btn_K3_A2B->callback((Fl_Callback*)K3_A2B); btn_K3_A2B->hide(); labelMEMORY = new Fl_Box(212, 62, 105, 20, _("MEMORY")); labelMEMORY->box(FL_DOWN_BOX); labelMEMORY->color(FL_YELLOW); labelMEMORY->align(FL_ALIGN_CENTER); labelMEMORY->hide(); btnAswapB = new Fl_Button(318, 62, 52, 20, _("A / B")); btnAswapB->tooltip(_("\ Left click:Swap A/B\n\ Right click:Copy A to B\n\ SHIFT click: FreqA -> FreqB\n\ CTRL click: FreqB -> FreqA\ ")); btnAswapB->down_box(FL_DOWN_BOX); btnAswapB->labelsize(12); btnAswapB->callback((Fl_Callback*)cb_btnAswapB); btnSplit = new Fl_Light_Button(371, 62, 52, 20, _("Split")); btnSplit->tooltip(_("Rx-A / Tx-B")); btnSplit->down_box(FL_THIN_DOWN_BOX); btnSplit->labelsize(12); btnSplit->callback((Fl_Callback*)cb_btnSplit); btnSplit->value(progStatus.split); btnCENTER = new Fl_Button(212, 84, 18, 18, _("W")); btnCENTER->callback((Fl_Callback*)cb_btnCENTER); btnCENTER->tooltip(_("Center/Wid")); btnCENTER->hide(); opBW = new Fl_ComboBox(212, 84, 105, 18, ""); opBW->tooltip(_("Select Transceiver Bandwidth")); opBW->box(FL_NO_BOX); opBW->color(FL_BACKGROUND2_COLOR); opBW->selection_color(FL_BACKGROUND_COLOR); opBW->labeltype(FL_NORMAL_LABEL); opBW->labelfont(0); opBW->labelsize(12); opBW->labelcolor(FL_FOREGROUND_COLOR); opBW->callback((Fl_Callback*)cb_opBW); opBW->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opBW->when(FL_WHEN_RELEASE); opBW->readonly(); opBW->end(); opBW_A = new Fl_ComboBox(212, 84, 86, 18, ""); opBW_A->tooltip("BW vfoA"); opBW_A->box(FL_NO_BOX); opBW_A->color(FL_BACKGROUND2_COLOR); opBW_A->selection_color(FL_BACKGROUND_COLOR); opBW_A->labeltype(FL_NORMAL_LABEL); opBW_A->labelfont(0); opBW_A->labelsize(12); opBW_A->labelcolor(FL_FOREGROUND_COLOR); opBW_A->callback((Fl_Callback*)cb_opBW); opBW_A->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opBW_A->when(FL_WHEN_RELEASE); opBW_A->readonly(); opBW_A->hide(); opBW_A->end(); opBW_B = new Fl_ComboBox(212, 84, 86, 18, ""); opBW_B->tooltip("BW vfoB"); opBW_B->box(FL_NO_BOX); opBW_B->color(FL_BACKGROUND2_COLOR); opBW_B->selection_color(FL_BACKGROUND_COLOR); opBW_B->labeltype(FL_NORMAL_LABEL); opBW_B->labelfont(0); opBW_B->labelsize(12); opBW_B->labelcolor(FL_FOREGROUND_COLOR); opBW_B->callback((Fl_Callback*)cb_opBW); opBW_B->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opBW_B->when(FL_WHEN_RELEASE); opBW_B->readonly(); opBW_B->hide(); opBW_B->end(); opCENTER = new Fl_ComboBox(231, 84, 86, 18, ""); opCENTER->tooltip(_("Center Frequency")); opCENTER->box(FL_FLAT_BOX); opCENTER->color(FL_BACKGROUND2_COLOR); opCENTER->selection_color(FL_BACKGROUND_COLOR); opCENTER->labeltype(FL_NORMAL_LABEL); opCENTER->labelfont(0); opCENTER->labelsize(12); opCENTER->labelcolor(FL_FOREGROUND_COLOR); opCENTER->callback((Fl_Callback*)cb_opCENTER); opCENTER->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opCENTER->when(FL_WHEN_RELEASE); opCENTER->readonly(); opCENTER->hide(); opCENTER->end(); btnDSP = new Fl_Button(212, 84, 18, 18, _("L")); btnDSP->callback((Fl_Callback*)cb_btnDSP); btnDSP->hide(); btnFILT = new Fl_Button(btnDSP->x(), btnDSP->y(), 18, 18, _("1")); btnFILT->callback((Fl_Callback*)cb_btnFILT); btnFILT->tooltip(_("Select filter")); btnFILT->hide(); opDSP_lo = new Fl_ComboBox(231, 84, 86, 18, _("Lo Cut")); opDSP_lo->tooltip(_("Lo Cut Freq")); opDSP_lo->box(FL_FLAT_BOX); opDSP_lo->color(FL_BACKGROUND2_COLOR); opDSP_lo->selection_color(FL_BACKGROUND_COLOR); opDSP_lo->labeltype(FL_NORMAL_LABEL); opDSP_lo->labelfont(0); opDSP_lo->labelsize(12); opDSP_lo->labelcolor(FL_FOREGROUND_COLOR); opDSP_lo->callback((Fl_Callback*)cb_opDSP_lo); opDSP_lo->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opDSP_lo->when(FL_WHEN_RELEASE); opDSP_lo->readonly(); opDSP_lo->hide(); opDSP_lo->end(); opDSP_hi = new Fl_ComboBox(231, 84, 86, 18, _("Hi Cut")); opDSP_hi->tooltip(_("Hi Cut Freq")); opDSP_hi->box(FL_FLAT_BOX); opDSP_hi->color(FL_BACKGROUND2_COLOR); opDSP_hi->selection_color(FL_BACKGROUND_COLOR); opDSP_hi->labeltype(FL_NORMAL_LABEL); opDSP_hi->labelfont(0); opDSP_hi->labelsize(12); opDSP_hi->labelcolor(FL_FOREGROUND_COLOR); opDSP_hi->callback((Fl_Callback*)cb_opDSP_hi); opDSP_hi->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opDSP_hi->when(FL_WHEN_RELEASE); opDSP_hi->readonly(); opDSP_hi->hide(); opDSP_hi->end(); opFilterInner = new Fl_Counter(231, 84, 86, 18, ""); opFilterInner->minimum(-4000); opFilterInner->maximum(4000); opFilterInner->step(10); opFilterInner->lstep(100); opFilterInner->align(Fl_Align(FL_ALIGN_INSIDE)); opFilterInner->tooltip("Inner cutoff"); opFilterInner->hide(); opFilterOuter = new Fl_Counter(231, 84, 86, 18, ""); opFilterOuter->minimum(-4000); opFilterOuter->maximum(4000); opFilterOuter->step(10); opFilterOuter->lstep(100); opFilterOuter->align(Fl_Align(FL_ALIGN_INSIDE)); opFilterOuter->tooltip("Outer cutoff"); opFilterOuter->hide(); opMODE = new Fl_ComboBox(318, 84, 105, 18, _("Mode")); opMODE->tooltip(_("Select transceiver operating mode")); opMODE->box(FL_NO_BOX); opMODE->color(FL_BACKGROUND2_COLOR); opMODE->selection_color(FL_BACKGROUND_COLOR); opMODE->labeltype(FL_NORMAL_LABEL); opMODE->labelfont(0); opMODE->labelsize(12); opMODE->labelcolor(FL_FOREGROUND_COLOR); opMODE->callback((Fl_Callback*)cb_opMODE); opMODE->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opMODE->when(FL_WHEN_RELEASE); opMODE->readonly(); opMODE->end(); btn_show_controls = new Fl_Button(3, 325, 18, 18, _("@-22->")); btn_show_controls->tooltip(_("Show/Hide controls")); btn_show_controls->callback((Fl_Callback*)cb_btn_show_controls); btnAttenuator = new Fl_Light_Button(26, 325, 60, 18, _("ATT")); btnAttenuator->tooltip(_("Attenuator On/Off")); btnAttenuator->down_box(FL_THIN_DOWN_BOX); btnAttenuator->labelsize(12); btnAttenuator->callback((Fl_Callback*)cb_btnAttenuator); cbo_preamp = new Fl_ComboBox(26, 325, 80, 18, ""); cbo_preamp->tooltip(_("Preamp in dB")); cbo_preamp->labelsize(12); cbo_preamp->add("-10 dB|0 dB|10 dB|20 dB|30 dB"); cbo_preamp->color(FL_BACKGROUND2_COLOR); cbo_preamp->selection_color(FL_BACKGROUND_COLOR); cbo_preamp->align(FL_ALIGN_LEFT); cbo_preamp->index(progStatus.preamp); cbo_preamp->readonly(); cbo_preamp->callback((Fl_Callback*)cb_cbo_preamp); cbo_preamp->hide(); btnPreamp = new Fl_Light_Button(93, 325, 60, 18, _("PRE")); btnPreamp->tooltip(_("Preamp On/Off")); btnPreamp->down_box(FL_THIN_DOWN_BOX); btnPreamp->labelsize(12); btnPreamp->callback((Fl_Callback*)cb_btnPreamp); btnNOISE = new Fl_Light_Button(160, 325, 60, 18, _("NB")); btnNOISE->tooltip(_("Noise Blanker On/Off")); btnNOISE->down_box(FL_THIN_DOWN_BOX); btnNOISE->labelsize(12); btnNOISE->callback((Fl_Callback*)cb_btnNOISE); btnAutoNotch = new Fl_Light_Button(227, 325, 60, 18, _("AN")); btnAutoNotch->tooltip(_("Auto Notch On/Off")); btnAutoNotch->down_box(FL_THIN_DOWN_BOX); btnAutoNotch->labelsize(12); btnAutoNotch->callback((Fl_Callback*)cb_btnAutoNotch); btn_tune_on_off = new Fl_Light_Button(294, 325, 20, 18, ""); btn_tune_on_off->tooltip("Tuner On/Off"); btn_tune_on_off->callback((Fl_Callback*)cb_btn_tune_on_off); btnTune = new Fl_Button( btn_tune_on_off->x() + btn_tune_on_off->w(), btn_tune_on_off->y(), 40, 18, _("Tune")); btnTune->tooltip(_("Manual Tune")); btnTune->callback((Fl_Callback*)cb_btnTune); btnPTT = new Fl_Light_Button( btnTune->x() + btnTune->w() + 4, btnTune->y(), 60, 18, _("PTT")); // 362, 325, 60, 18, _("PTT")); btnPTT->tooltip(_("Xmt On/Off")); btnPTT->callback((Fl_Callback*)cb_btnPTT); sm_grp1 = new Fl_Group(1, 62, 210, 60); sm_grp1->box(FL_DOWN_BOX); grpMeters = new Fl_Group(sm_grp1->x() + 2, sm_grp1->y() + 2, sm_grp1->w() - 4, sm_grp1->h() - 4); grpMeters->box(FL_FLAT_BOX); scaleSmeter = new Fl_Box(grpMeters->x(), grpMeters->y(), grpMeters->w(), 20); scaleSmeter->box(FL_FLAT_BOX); scaleSmeter->image(image_S60); scaleSmeter->tooltip(_("S units meter")); btnALC_IDD_SWR = new Fl_Button(grpMeters->x(), grpMeters->y(), grpMeters->w(), 20); btnALC_IDD_SWR->tooltip(_("Press SWR / ALC")); btnALC_IDD_SWR->box(FL_FLAT_BOX); btnALC_IDD_SWR->down_box(FL_FLAT_BOX); btnALC_IDD_SWR->image(image_SWR); btnALC_IDD_SWR->callback((Fl_Callback*)cb_btnALC_IDD_SWR); btnALC_IDD_SWR->hide(); sldrRcvSignal = new Fl_SigBar(5, 85, 200, 6); sldrRcvSignal->box(FL_FLAT_BOX); sldrRcvSignal->color(FL_BACKGROUND_COLOR); sldrRcvSignal->selection_color(FL_BACKGROUND_COLOR); sldrRcvSignal->labeltype(FL_NORMAL_LABEL); sldrRcvSignal->labelfont(0); sldrRcvSignal->labelsize(12); sldrRcvSignal->labelcolor(FL_FOREGROUND_COLOR); sldrRcvSignal->align(Fl_Align(FL_ALIGN_CENTER)); sldrRcvSignal->when(FL_WHEN_CHANGED); sldrRcvSignal->hide(); sldrRcvSignal->minimum(0); sldrRcvSignal->maximum(100); sldrALC = new Fl_SigBar(5, 85, 200, 6); sldrALC->box(FL_FLAT_BOX); sldrALC->color(FL_BACKGROUND_COLOR); sldrALC->selection_color(FL_BACKGROUND_COLOR); sldrALC->labeltype(FL_NORMAL_LABEL); sldrALC->labelfont(0); sldrALC->labelsize(12); sldrALC->labelcolor(FL_FOREGROUND_COLOR); sldrALC->align(Fl_Align(FL_ALIGN_CENTER)); sldrALC->when(FL_WHEN_CHANGED); sldrALC->hide(); sldrALC->minimum(0); sldrALC->maximum(100); sldrIDD = new Fl_SigBar(5, 85, 200, 6); sldrIDD->box(FL_FLAT_BOX); sldrIDD->color(FL_BACKGROUND_COLOR); sldrIDD->selection_color(FL_BACKGROUND_COLOR); sldrIDD->labeltype(FL_NORMAL_LABEL); sldrIDD->labelfont(0); sldrIDD->labelsize(12); sldrIDD->labelcolor(FL_FOREGROUND_COLOR); sldrIDD->align(Fl_Align(FL_ALIGN_CENTER)); sldrIDD->when(FL_WHEN_CHANGED); sldrIDD->hide(); sldrIDD->minimum(0); sldrIDD->maximum(25);; sldrSWR = new Fl_SigBar(5, 85, 200, 6); sldrSWR->box(FL_FLAT_BOX); sldrSWR->color(FL_BACKGROUND_COLOR); sldrSWR->selection_color(FL_BACKGROUND_COLOR); sldrSWR->labeltype(FL_NORMAL_LABEL); sldrSWR->labelfont(0); sldrSWR->labelsize(12); sldrSWR->labelcolor(FL_FOREGROUND_COLOR); sldrSWR->align(Fl_Align(FL_ALIGN_CENTER)); sldrSWR->when(FL_WHEN_CHANGED); sldrSWR->hide(); sldrSWR->minimum(0); sldrSWR->maximum(100); sldrFwdPwr = new Fl_SigBar(5, 92, 200, 6); sldrFwdPwr->box(FL_FLAT_BOX); sldrFwdPwr->color(FL_BACKGROUND_COLOR); sldrFwdPwr->selection_color(FL_BACKGROUND_COLOR); sldrFwdPwr->labeltype(FL_NORMAL_LABEL); sldrFwdPwr->labelfont(0); sldrFwdPwr->labelsize(12); sldrFwdPwr->labelcolor(FL_FOREGROUND_COLOR); sldrFwdPwr->align(Fl_Align(FL_ALIGN_CENTER)); sldrFwdPwr->when(FL_WHEN_CHANGED); sldrFwdPwr->hide(); sldrFwdPwr->minimum(0); sldrFwdPwr->maximum(100); scalePower = new Fl_Button(3, 99, 206, 20); scalePower->tooltip(_("right-click to select power scale")); scalePower->box(FL_FLAT_BOX); scalePower->down_box(FL_FLAT_BOX); scalePower->image(image_P100); scalePower->callback((Fl_Callback*)cb_scalePower); sldrVoltage = new Fl_SigBar(5, 92, 200, 6); sldrVoltage->box(FL_FLAT_BOX); sldrVoltage->color(FL_BACKGROUND_COLOR); sldrVoltage->selection_color(FL_BACKGROUND_COLOR); sldrVoltage->labeltype(FL_NORMAL_LABEL); sldrVoltage->labelfont(0); sldrVoltage->labelsize(12); sldrVoltage->labelcolor(FL_FOREGROUND_COLOR); sldrVoltage->align(Fl_Align(FL_ALIGN_CENTER)); sldrVoltage->when(FL_WHEN_CHANGED); sldrVoltage->hide(); sldrVoltage->minimum(0); sldrVoltage->maximum(100); scaleVoltage = new Fl_Box(3, 99, 206, 20); scaleVoltage->box(FL_FLAT_BOX); scaleVoltage->image(image_voltmeter); scaleVoltage->tooltip(_("DC power")); sldrVoltage->hide(); scaleVoltage->hide(); meter_fill_box = new Fl_Box(207, 63, 0, 57); meter_fill_box->box(FL_FLAT_BOX); meter_fill_box->color((Fl_Color)246); grpMeters->end(); sm_grp1->end(); g->end(); return g; } static Fl_Box *filler = (Fl_Box *)0; Fl_Double_Window *tabs_window() { int gph = 70 + 22; Fl_Double_Window *w = new Fl_Double_Window( 0, 0, small_mainW, gph, "flrig extra controls"); grpTABS = new Fl_Group(0, 0, small_mainW, gph); tabs550 = new Fl_Tabs(0, 0, small_mainW, gph); { tabs550->selection_color(FL_LIGHT1); tabs550->hide(); tt550_CW = new Fl_Group(0, 24, small_mainW, gph - 24, _("CW")); tt550_CW->color(FL_LIGHT1); tt550_CW->selection_color(FL_LIGHT1); spnr_tt550_cw_wpm = new Hspinner( 2, 28, 70, 22, _("wpm")); spnr_tt550_cw_wpm->type(FL_INT_INPUT); spnr_tt550_cw_wpm->minimum(1); spnr_tt550_cw_wpm->maximum(80); spnr_tt550_cw_wpm->step(1); spnr_tt550_cw_wpm->value(24); spnr_tt550_cw_wpm->callback((Fl_Callback*)cb_spnr_tt550_cw_wpm); spnr_tt550_cw_wpm->value(progStatus.tt550_cw_wpm); spnr_tt550_cw_wpm->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_cw_weight = new Hspinner( spnr_tt550_cw_wpm->x() + spnr_tt550_cw_wpm->w() + 2, 40, 70, 22, _("Weight")); spnr_tt550_cw_weight->type(FL_FLOAT_INPUT); spnr_tt550_cw_weight->minimum(0.75); spnr_tt550_cw_weight->maximum(1.5); spnr_tt550_cw_weight->step(0.05); spnr_tt550_cw_weight->format("%.2f"); spnr_tt550_cw_weight->value(1); spnr_tt550_cw_weight->callback((Fl_Callback*)cb_spnr_tt550_cw_weight); spnr_tt550_cw_weight->value(progStatus.tt550_cw_weight); spnr_tt550_cw_weight->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_cw_qsk = new Hspinner( spnr_tt550_cw_weight->x() + spnr_tt550_cw_weight->w() + 2, 40, 70, 22, _("Delay")); spnr_tt550_cw_qsk->tooltip(_("QSK delay (msec)")); spnr_tt550_cw_qsk->type(1); spnr_tt550_cw_qsk->minimum(0); spnr_tt550_cw_qsk->maximum(100); spnr_tt550_cw_qsk->step(1); spnr_tt550_cw_qsk->value(20); spnr_tt550_cw_qsk->callback((Fl_Callback*)cb_spnr_tt550_cw_qsk); spnr_tt550_cw_qsk->value(progStatus.tt550_cw_qsk); spnr_tt550_cw_qsk->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_cw_vol = new Hspinner( spnr_tt550_cw_qsk->x() + spnr_tt550_cw_qsk->w() + 2, 40, 70, 22, _("S-T vol")); spnr_tt550_cw_vol->tooltip(_("Side tone volume")); spnr_tt550_cw_vol->type(1); spnr_tt550_cw_vol->minimum(5); spnr_tt550_cw_vol->maximum(80); spnr_tt550_cw_vol->step(1); spnr_tt550_cw_vol->value(24); spnr_tt550_cw_vol->callback((Fl_Callback*)cb_spnr_tt550_cw_vol); spnr_tt550_cw_vol->value(progStatus.tt550_cw_vol); spnr_tt550_cw_vol->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_cw_spot = new Hspinner( spnr_tt550_cw_vol->x() + spnr_tt550_cw_vol->w() + 2, 40, 70, 22, _("Spot Vol")); spnr_tt550_cw_spot->tooltip(_("Spot volume")); spnr_tt550_cw_spot->type(1); spnr_tt550_cw_spot->minimum(0); spnr_tt550_cw_spot->maximum(100); spnr_tt550_cw_spot->step(1); spnr_tt550_cw_spot->value(20); spnr_tt550_cw_spot->callback((Fl_Callback*)cb_spnr_tt550_cw_spot); spnr_tt550_cw_spot->value(progStatus.tt550_cw_spot); spnr_tt550_cw_spot->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); btn_tt550_enable_keyer = new Fl_Check_Button( spnr_tt550_cw_spot->x() + spnr_tt550_cw_spot->w() + 2, 40, 50, 22, _("Keyer")); btn_tt550_enable_keyer->tooltip(_("Enable keyer")); btn_tt550_enable_keyer->down_box(FL_DOWN_BOX); btn_tt550_enable_keyer->callback((Fl_Callback*)cb_btn_tt550_enable_keyer); btn_tt550_enable_keyer->value(progStatus.tt550_enable_keyer); tt550_CW->end(); tt550_VOX = new Fl_Group(0, 24, small_mainW, gph - 24, _("Vox")); tt550_VOX->hide(); spnr_tt550_vox_gain = new Hspinner( 2, 40, 70, 22, _("gain")); spnr_tt550_vox_gain->type(1); spnr_tt550_vox_gain->minimum(0); spnr_tt550_vox_gain->maximum(100); spnr_tt550_vox_gain->step(1); spnr_tt550_vox_gain->callback((Fl_Callback*)cb_spnr_tt550_vox_gain); spnr_tt550_vox_gain->value(progStatus.tt550_vox_gain); spnr_tt550_vox_gain->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_anti_vox = new Hspinner( spnr_tt550_vox_gain->x() + spnr_tt550_vox_gain->w() + 4, 40, 70, 22, _("anti")); spnr_tt550_anti_vox->type(1); spnr_tt550_anti_vox->minimum(0); spnr_tt550_anti_vox->maximum(100); spnr_tt550_anti_vox->step(1); spnr_tt550_anti_vox->callback((Fl_Callback*)cb_spnr_tt550_anti_vox); spnr_tt550_anti_vox->value(progStatus.tt550_vox_anti); spnr_tt550_anti_vox->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_vox_hang = new Hspinner( spnr_tt550_anti_vox->x() + spnr_tt550_anti_vox->w() + 4, 40, 70, 22, _("hang")); spnr_tt550_vox_hang->type(1); spnr_tt550_vox_hang->minimum(0); spnr_tt550_vox_hang->maximum(100); spnr_tt550_vox_hang->step(1); spnr_tt550_vox_hang->callback((Fl_Callback*)cb_spnr_tt550_vox_hang); spnr_tt550_vox_hang->value(progStatus.tt550_vox_hang); spnr_tt550_vox_hang->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); btn_tt550_vox = new Fl_Light_Button( spnr_tt550_vox_hang->x() + spnr_tt550_vox_hang->w() + 4, 40, 50, 22, _("VOX")); btn_tt550_vox->callback((Fl_Callback*)cb_btn_tt550_vox); btn_tt550_vox->value(progStatus.tt550_vox_onoff); tt550_VOX->end(); tt550_Speech = new Fl_Group(0, 24, small_mainW, gph - 24, _("Spch")); tt550_Speech->hide(); btn_tt550_CompON = new Fl_Light_Button( 4, 40, 60, 22, _("On")); btn_tt550_CompON->callback((Fl_Callback*)cb_btn_tt550_CompON); btn_tt550_CompON->value(progStatus.tt550_compON); spnr_tt550_compression = new Hspinner( btn_tt550_CompON->x() + btn_tt550_CompON->w() + 4, 40, 70, 22, _("Comp")); spnr_tt550_compression->type(1); spnr_tt550_compression->minimum(0); spnr_tt550_compression->maximum(100); spnr_tt550_compression->step(1); spnr_tt550_compression->callback((Fl_Callback*)cb_spnr_tt550_compression); spnr_tt550_compression->value(progStatus.tt550_compression); spnr_tt550_compression->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_mon_vol = new Hspinner( spnr_tt550_compression->x() + spnr_tt550_compression->w() + 4, 40, 70, 22, _("Mon vol")); spnr_tt550_mon_vol->tooltip(_("Side tone volume")); spnr_tt550_mon_vol->type(1); spnr_tt550_mon_vol->minimum(0); spnr_tt550_mon_vol->maximum(100); spnr_tt550_mon_vol->step(1); spnr_tt550_mon_vol->value(25); spnr_tt550_mon_vol->callback((Fl_Callback*)cb_spnr_tt550_mon_vol); spnr_tt550_mon_vol->value(progStatus.tt550_mon_vol); spnr_tt550_mon_vol->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); tt550_Speech->end(); tt550_Audio = new Fl_Group(0, 24, small_mainW, gph, _("Audio")); tt550_Audio->hide(); spnr_tt550_line_out = new Hspinner( 4, 40, 70, 22, _("line out")); spnr_tt550_line_out->type(1); spnr_tt550_line_out->minimum(0); spnr_tt550_line_out->maximum(100); spnr_tt550_line_out->step(1); spnr_tt550_line_out->value(20); spnr_tt550_line_out->callback((Fl_Callback*)cb_spnr_tt550_line_out); spnr_tt550_line_out->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_line_out->value(progStatus.tt550_line_out); spnr_tt550_line_out->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); btnAccInp = new Fl_Check_Button( spnr_tt550_line_out->x() + spnr_tt550_line_out->w() + 4, 40, 80, 22, _("Acc Inp")); btnAccInp->tooltip(_("Enable to use accessory audio input")); btnAccInp->down_box(FL_DOWN_BOX); btnAccInp->callback((Fl_Callback*)cb_btnAccInp); btnAccInp->value(progStatus.tt550_use_line_in); tt550_Audio->end(); tt550_Rx = new Fl_Group(0, 24, small_mainW, gph - 24, _("RX")); tt550_Rx->hide(); cbo_tt550_nb_level = new Fl_ComboBox( 4, 40, 80, 22, _("NB level")); cbo_tt550_nb_level->tooltip(_("Select Noise Blanker level")); cbo_tt550_nb_level->box(FL_DOWN_BOX); cbo_tt550_nb_level->color(FL_WHITE); cbo_tt550_nb_level->selection_color(FL_BACKGROUND_COLOR); cbo_tt550_nb_level->labeltype(FL_NORMAL_LABEL); cbo_tt550_nb_level->labelfont(0); cbo_tt550_nb_level->labelsize(12); cbo_tt550_nb_level->labelcolor(FL_FOREGROUND_COLOR); cbo_tt550_nb_level->callback((Fl_Callback*)cb_cbo_tt550_nb_level); cbo_tt550_nb_level->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); cbo_tt550_nb_level->when(FL_WHEN_RELEASE); cbo_tt550_nb_level->index(progStatus.tt550_nb_level); cbo_tt550_nb_level->readonly(); cbo_tt550_nb_level->end(); cbo_tt550_agc_level = new Fl_ComboBox( cbo_tt550_nb_level->x() + cbo_tt550_nb_level->w() + 5, 40, 80, 22, _("AGC")); cbo_tt550_agc_level->tooltip(_("Select AGC")); cbo_tt550_agc_level->box(FL_DOWN_BOX); cbo_tt550_agc_level->color(FL_WHITE); cbo_tt550_agc_level->selection_color(FL_BACKGROUND_COLOR); cbo_tt550_agc_level->labeltype(FL_NORMAL_LABEL); cbo_tt550_agc_level->labelfont(0); cbo_tt550_agc_level->labelsize(12); cbo_tt550_agc_level->labelcolor(FL_FOREGROUND_COLOR); cbo_tt550_agc_level->callback((Fl_Callback*)cb_cbo_tt550_agc_level); cbo_tt550_agc_level->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); cbo_tt550_agc_level->when(FL_WHEN_RELEASE); cbo_tt550_agc_level->index(progStatus.tt550_agc_level); cbo_tt550_agc_level->readonly(); cbo_tt550_agc_level->end(); spnr_tt550_vfo_adj = new Hspinner( cbo_tt550_agc_level->x() + cbo_tt550_agc_level->w() + 5, 40, 100, 22, _("Vfo Adj(ppm)"), 16); spnr_tt550_vfo_adj->callback((Fl_Callback*)cb_spnr_tt550_vfo_adj); spnr_tt550_vfo_adj->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_vfo_adj->minimum(-100); spnr_tt550_vfo_adj->maximum(100); spnr_tt550_vfo_adj->type(FL_FLOAT_INPUT); spnr_tt550_vfo_adj->step(0.02); spnr_tt550_vfo_adj->format("%0.2f"); spnr_tt550_vfo_adj->value(progStatus.vfo_adj); tt550_Rx->end(); tt550_Tx = new Fl_Group(0, 24, small_mainW, gph - 24, _("TX")); tt550_Tx->hide(); btn_tt550_enable_xmtr = new Fl_Check_Button(10, 40, 70, 22, _("Tx ON")); btn_tt550_enable_xmtr->down_box(FL_DOWN_BOX); btn_tt550_enable_xmtr->value(1); btn_tt550_enable_xmtr->callback((Fl_Callback*)cb_btn_tt550_enable_xmtr); btn_tt550_enable_xmtr->value(progStatus.tt550_enable_xmtr); btn_tt550_enable_tloop = new Fl_Check_Button(87, 40, 70, 22, _("Tloop")); btn_tt550_enable_tloop->down_box(FL_DOWN_BOX); btn_tt550_enable_tloop->callback((Fl_Callback*)cb_btn_tt550_enable_tloop); btn_tt550_enable_tloop->value(progStatus.tt550_enable_tloop); btn_tt550_tuner_bypass = new Fl_Check_Button(164, 40, 70, 22, _("Tuner")); btn_tt550_tuner_bypass->tooltip(_("Check to bypass tuner")); btn_tt550_tuner_bypass->down_box(FL_DOWN_BOX); btn_tt550_tuner_bypass->callback((Fl_Callback*)cb_btn_tt550_tuner_bypass); op_tt550_XmtBW = new Fl_ComboBox(241, 40, 100, 22, _("Xmt BW")); op_tt550_XmtBW->tooltip(_("Select Transceiver Bandwidth")); op_tt550_XmtBW->box(FL_DOWN_BOX); op_tt550_XmtBW->color(FL_WHITE); op_tt550_XmtBW->selection_color(FL_BACKGROUND_COLOR); op_tt550_XmtBW->labeltype(FL_NORMAL_LABEL); op_tt550_XmtBW->labelfont(0); op_tt550_XmtBW->labelsize(12); op_tt550_XmtBW->labelcolor(FL_FOREGROUND_COLOR); op_tt550_XmtBW->callback((Fl_Callback*)cb_op_tt550_XmtBW); op_tt550_XmtBW->align(Fl_Align(FL_ALIGN_BOTTOM)); op_tt550_XmtBW->when(FL_WHEN_RELEASE); op_tt550_XmtBW->index(progStatus.tt550_xmt_bw); op_tt550_XmtBW->readonly(); op_tt550_XmtBW->end(); btn_tt550_use_xmt_bw = new Fl_Check_Button(345, 40, 21, 22, _("Enable")); btn_tt550_use_xmt_bw->tooltip(_("Use Xmt BW setting")); btn_tt550_use_xmt_bw->down_box(FL_DOWN_BOX); btn_tt550_use_xmt_bw->callback((Fl_Callback*)cb_btn_tt550_use_xmt_bw); btn_tt550_use_xmt_bw->align(Fl_Align(FL_ALIGN_RIGHT)); btn_tt550_use_xmt_bw->value(progStatus.tt550_use_xmt_bw); tt550_Tx->end(); tt550_302A = new Fl_Group(0, 24, small_mainW, gph - 24, _("302-A")); tt550_302A->hide(); spnr_tt550_keypad_time_out = new Hspinner(30, 40, 120, 22, _("Time out"), 16); spnr_tt550_keypad_time_out->tooltip(_("Clear M302 keypad after ## secs")); spnr_tt550_keypad_time_out->minimum(0.5); spnr_tt550_keypad_time_out->maximum(10); spnr_tt550_keypad_time_out->value(2); spnr_tt550_keypad_time_out->color(FL_WHITE); spnr_tt550_keypad_time_out->callback((Fl_Callback*)cb_spnr_tt550_keypad_time_out); spnr_tt550_keypad_time_out->align(Fl_Align(34)); spnr_tt550_keypad_time_out->value(progStatus.tt550_keypad_timeout/1000.0); spnr_tt550_keypad_time_out->step(0.1); spnr_tt550_keypad_time_out->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_encoder_sensitivity = new Hspinner( spnr_tt550_keypad_time_out->x() + spnr_tt550_keypad_time_out->w() + 10, 40, 80, 22, _("Sensitivity"), 16); spnr_tt550_encoder_sensitivity->tooltip(_("1 - most sensitive")); spnr_tt550_encoder_sensitivity->type(1); spnr_tt550_encoder_sensitivity->minimum(1); spnr_tt550_encoder_sensitivity->maximum(25); spnr_tt550_encoder_sensitivity->step(1); spnr_tt550_encoder_sensitivity->value(10); spnr_tt550_encoder_sensitivity->color(FL_WHITE); spnr_tt550_encoder_sensitivity->callback((Fl_Callback*)cb_spnr_tt550_encoder_sensitivity); spnr_tt550_encoder_sensitivity->value(progStatus.tt550_encoder_sensitivity); spnr_tt550_encoder_sensitivity->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); sel_tt550_encoder_step = new Fl_Choice(312, 277, 72, 21, _("Step size")); sel_tt550_encoder_step->down_box(FL_BORDER_BOX); sel_tt550_encoder_step->callback((Fl_Callback*)cb_sel_tt550_encoder_step); sel_tt550_encoder_step->align(Fl_Align(FL_ALIGN_BOTTOM)); sel_tt550_encoder_step->add("1|10|100|1 K|10 K"); sel_tt550_encoder_step->value(progStatus.tt550_encoder_step); sel_tt550_encoder_step->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); tt550_302A->end(); tt550_302B = new Fl_Group(0, 24, small_mainW, gph - 24, _("302-B")); tt550_302B->hide(); sel_tt550_F1_func = new Fl_Choice(34, 40, 99, 22, _("F1")); sel_tt550_F1_func->tooltip(_("Assign Func Key")); sel_tt550_F1_func->down_box(FL_BORDER_BOX); sel_tt550_F1_func->callback((Fl_Callback*)cb_sel_tt550_F1_func); sel_tt550_F1_func->add("None|Clear|CW++|CW--|Band++|Band--|Step++|Step--"); sel_tt550_F1_func->value(progStatus.tt550_F1_func); sel_tt550_F2_func = new Fl_Choice(169, 40, 99, 22, _("F2")); sel_tt550_F2_func->tooltip(_("Assign Func Key")); sel_tt550_F2_func->down_box(FL_BORDER_BOX); sel_tt550_F2_func->callback((Fl_Callback*)cb_sel_tt550_F2_func); sel_tt550_F2_func->add("None|Clear|CW++|CW--|Band++|Band--|Step++|Step--"); sel_tt550_F2_func->value(progStatus.tt550_F2_func); sel_tt550_F3_func = new Fl_Choice(50, 40, 99, 22, _("F3")); sel_tt550_F3_func->tooltip(_("Assign Func Key")); sel_tt550_F3_func->down_box(FL_BORDER_BOX); sel_tt550_F3_func->callback((Fl_Callback*)cb_sel_tt550_F3_func); sel_tt550_F3_func->add("None|Clear|CW++|CW--|Band++|Band--|Step++|Step--"); sel_tt550_F3_func->value(progStatus.tt550_F3_func); tt550_302B->end(); tt550_AT = new Fl_Group(0, 24, small_mainW, gph - 24, _("AT-11")); tt550_AT_inline = new Fl_Light_Button(5, 40, 100, 22, _("Inline")); tt550_AT_inline->tooltip(_("Enabled - autotune\nDisabled - bypass")); tt550_AT_inline->callback((Fl_Callback*)cb_AT_bypass); tt550_AT_Z = new Fl_Light_Button( RIGHT_OF(tt550_AT_inline) + 10, 40, 55, 22, _("Z hi")); tt550_AT_Z->tooltip(_("Hi / Lo Impedance network")); tt550_AT_Z->callback((Fl_Callback*)cb_AT_Z); tt550_AT_capUP = new Fl_Button( RIGHT_OF(tt550_AT_Z) + 4, 40, 40, 22, _("C >")); tt550_AT_capUP->tooltip(_("Increase C")); tt550_AT_capUP->callback((Fl_Callback*)cb_AT_capUP); tt550_AT_capDN = new Fl_Button( RIGHT_OF(tt550_AT_capUP) + 4, 40, 40, 22, _("C <")); tt550_AT_capDN->tooltip(_("Decrease C")); tt550_AT_capDN->callback((Fl_Callback*)cb_AT_capDN); tt550_AT_indUP = new Fl_Button( RIGHT_OF(tt550_AT_capDN) + 4, 40, 40, 22, _("L >")); tt550_AT_indUP->tooltip(_("Increase L")); tt550_AT_indUP->callback((Fl_Callback*)cb_AT_indUP); tt550_AT_indDN = new Fl_Button( RIGHT_OF(tt550_AT_indUP) + 4, 40, 40, 22, _("L <")); tt550_AT_indDN->tooltip(_("Decrease L")); tt550_AT_indDN->callback((Fl_Callback*)cb_AT_indDN); tt550_Nsamples = new Fl_Simple_Counter( RIGHT_OF(tt550_AT_indDN) + 4, 40, 50, 22, _("N")); tt550_Nsamples->tooltip(_("Fwd/Rev Pwr detect over # samples")); tt550_Nsamples->align(FL_ALIGN_RIGHT); tt550_Nsamples->step(1); tt550_Nsamples->minimum(1); tt550_Nsamples->maximum(FPLEN); tt550_Nsamples->value(progStatus.tt550_Nsamples); tt550_Nsamples->callback((Fl_Callback*)cb_tt550_Nsamples); tt550_AT->end(); tabs550->end(); } tabsGeneric = new Fl_Tabs(0, 0, small_mainW, gph); { tab_yaesu_bands = new Fl_Group(0, 24, small_mainW, gph - 24, _("Band")); { btn_yaesu_select_1 = new Fl_Button(4, 40, 60, 18, _("1.8")); btn_yaesu_select_1->tooltip(_("160m Band")); btn_yaesu_select_1->callback((Fl_Callback*)cb_btn_band_select, (void *)1); btn_yaesu_select_2 = new Fl_Button(74, 40, 60, 18, _("3.5")); btn_yaesu_select_2->tooltip(_("80m band")); btn_yaesu_select_2->callback((Fl_Callback*)cb_btn_band_select, (void *)2); btn_yaesu_select_3 = new Fl_Button(145, 40, 60, 18, _("7")); btn_yaesu_select_3->tooltip(_("40m band")); btn_yaesu_select_3->callback((Fl_Callback*)cb_btn_band_select, (void *)3); btn_yaesu_select_4 = new Fl_Button(216, 40, 60, 18, _("10")); btn_yaesu_select_4->tooltip(_("30m band")); btn_yaesu_select_4->callback((Fl_Callback*)cb_btn_band_select, (void *)4); btn_yaesu_select_5 = new Fl_Button(287, 40, 60, 18, _("14")); btn_yaesu_select_5->tooltip(_("20m band")); btn_yaesu_select_5->callback((Fl_Callback*)cb_btn_band_select, (void *)5); btn_yaesu_select_6 = new Fl_Button(358, 40, 60, 18, _("18")); btn_yaesu_select_6->tooltip(_("17m band")); btn_yaesu_select_6->callback((Fl_Callback*)cb_btn_band_select, (void *)6); btn_yaesu_select_7 = new Fl_Button(4, 60, 60, 18, _("21")); btn_yaesu_select_7->tooltip(_("15m band")); btn_yaesu_select_7->callback((Fl_Callback*)cb_btn_band_select, (void *)7); btn_yaesu_select_8 = new Fl_Button(74, 60, 60, 18, _("24")); btn_yaesu_select_8->tooltip(_("12m band")); btn_yaesu_select_8->callback((Fl_Callback*)cb_btn_band_select, (void *)8); btn_yaesu_select_9 = new Fl_Button(145, 60, 60, 18, _("28")); btn_yaesu_select_9->tooltip(_("10m band")); btn_yaesu_select_9->callback((Fl_Callback*)cb_btn_band_select, (void *)9); btn_yaesu_select_10 = new Fl_Button(216, 60, 60, 18, _("50")); btn_yaesu_select_10->tooltip(_("6m band")); btn_yaesu_select_10->callback((Fl_Callback*)cb_btn_band_select, (void *)10); btn_yaesu_select_11 = new Fl_Button(287, 60, 60, 18, _("GEN")); btn_yaesu_select_11->tooltip(_("General RX")); btn_yaesu_select_11->callback((Fl_Callback*)cb_btn_band_select, (void *)11); op_yaesu_select60 = new Fl_ComboBox(358, 60, 60, 18, _("combo")); op_yaesu_select60->tooltip(_("vfo / 60 meter channel")); op_yaesu_select60->box(FL_NO_BOX); op_yaesu_select60->selection_color(FL_BACKGROUND_COLOR); op_yaesu_select60->labeltype(FL_NORMAL_LABEL); op_yaesu_select60->labelfont(0); op_yaesu_select60->labelsize(12); op_yaesu_select60->labelcolor(FL_FOREGROUND_COLOR); op_yaesu_select60->callback((Fl_Callback*)cb_btn_band_select, (void *)13); op_yaesu_select60->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); op_yaesu_select60->when(FL_WHEN_RELEASE); op_yaesu_select60->readonly(); op_yaesu_select60->end(); tab_yaesu_bands->end(); } tab_ft991_bands = new Fl_Group(0, 24, small_mainW, gph - 24, _("Band")); { btn_ft991_select_1 = new Fl_Button(4, 30, 60, 18, _("1.8")); btn_ft991_select_1->tooltip(_("Left click - get")); btn_ft991_select_1->callback((Fl_Callback*)cb_btn_band_select, (void *)1); btn_ft991_select_2 = new Fl_Button(74, 30, 60, 18, _("3.5")); btn_ft991_select_2->tooltip(_("Left click - get")); btn_ft991_select_2->callback((Fl_Callback*)cb_btn_band_select, (void *)2); btn_ft991_select_3 = new Fl_Button(145, 30, 60, 18, _("7")); btn_ft991_select_3->tooltip(_("Left click - get")); btn_ft991_select_3->callback((Fl_Callback*)cb_btn_band_select, (void *)3); btn_ft991_select_4 = new Fl_Button(216, 30, 60, 18, _("10")); btn_ft991_select_4->tooltip(_("Left click - get")); btn_ft991_select_4->callback((Fl_Callback*)cb_btn_band_select, (void *)4); btn_ft991_select_5 = new Fl_Button(287, 30, 60, 18, _("14")); btn_ft991_select_5->tooltip(_("Left click - get")); btn_ft991_select_5->callback((Fl_Callback*)cb_btn_band_select, (void *)5); btn_ft991_select_6 = new Fl_Button(358, 30, 60, 18, _("18")); btn_ft991_select_6->tooltip(_("Left click - get")); btn_ft991_select_6->callback((Fl_Callback*)cb_btn_band_select, (void *)6); btn_ft991_select_7 = new Fl_Button(4, 50, 60, 18, _("21")); btn_ft991_select_7->tooltip(_("Left click - get")); btn_ft991_select_7->callback((Fl_Callback*)cb_btn_band_select, (void *)7); btn_ft991_select_8 = new Fl_Button(74, 50, 60, 18, _("24")); btn_ft991_select_8->tooltip(_("Left click - get")); btn_ft991_select_8->callback((Fl_Callback*)cb_btn_band_select, (void *)8); btn_ft991_select_9 = new Fl_Button(145, 50, 60, 18, _("28")); btn_ft991_select_9->tooltip(_("Left click - get")); btn_ft991_select_9->callback((Fl_Callback*)cb_btn_band_select, (void *)9); btn_ft991_select_10 = new Fl_Button(216, 50, 60, 18, _("50")); btn_ft991_select_10->tooltip(_("Left click - get")); btn_ft991_select_10->callback((Fl_Callback*)cb_btn_band_select, (void *)10); btn_ft991_select_11 = new Fl_Button(287, 50, 60, 18, _("144")); btn_ft991_select_11->tooltip(_("Left click - get")); btn_ft991_select_11->callback((Fl_Callback*)cb_btn_band_select, (void *)11); btn_ft991_select_12 = new Fl_Button(358, 50, 60, 18, _("430")); btn_ft991_select_12->tooltip(_("Left click - get")); btn_ft991_select_12->callback((Fl_Callback*)cb_btn_band_select, (void *)12); btn_ft991_select_13 = new Fl_Button(4, 70, 60, 18, _("Gen")); btn_ft991_select_13->tooltip(_("Left click - get")); btn_ft991_select_13->callback((Fl_Callback*)cb_btn_band_select, (void *)13); choice_ft991_tTONE = new Fl_PL_tone(145, 70, 75, 18, _("tTONE")); choice_ft991_tTONE->align((Fl_Align)FL_ALIGN_LEFT); choice_ft991_tTONE->value(8); choice_ft991_tTONE->end(); choice_ft991_tTONE->hide(); choice_ft991_rTONE = new Fl_PL_tone(287, 70, 75, 18, _("rTONE")); choice_ft991_rTONE->align((Fl_Align)FL_ALIGN_LEFT); choice_ft991_rTONE->value(8); choice_ft991_rTONE->end(); choice_ft991_rTONE->hide(); tab_ft991_bands->end(); } tab_FT8n_bands = new Fl_Group(0, 24, small_mainW, gph - 24, _("Band")); { static const char setsave[] = _("Left click - set\nRight click - save"); btn_FT8n_select_1 = new Fl_Button(4, 30, 60, 18, _("1.8")); btn_FT8n_select_1->tooltip(setsave); btn_FT8n_select_1->callback((Fl_Callback*)cb_btn_band_select, (void *)1); btn_FT8n_select_2 = new Fl_Button(74, 30, 60, 18, _("3.5")); btn_FT8n_select_2->tooltip(setsave); btn_FT8n_select_2->callback((Fl_Callback*)cb_btn_band_select, (void *)2); btn_FT8n_select_3 = new Fl_Button(145, 30, 60, 18, _("7")); btn_FT8n_select_3->tooltip(setsave); btn_FT8n_select_3->callback((Fl_Callback*)cb_btn_band_select, (void *)3); btn_FT8n_select_4 = new Fl_Button(216, 30, 60, 18, _("10")); btn_FT8n_select_4->tooltip(setsave); btn_FT8n_select_4->callback((Fl_Callback*)cb_btn_band_select, (void *)4); btn_FT8n_select_5 = new Fl_Button(287, 30, 60, 18, _("14")); btn_FT8n_select_5->tooltip(setsave); btn_FT8n_select_5->callback((Fl_Callback*)cb_btn_band_select, (void *)5); btn_FT8n_select_6 = new Fl_Button(358, 30, 60, 18, _("18")); btn_FT8n_select_6->tooltip(setsave); btn_FT8n_select_6->callback((Fl_Callback*)cb_btn_band_select, (void *)6); btn_FT8n_select_7 = new Fl_Button(4, 50, 60, 18, _("21")); btn_FT8n_select_7->tooltip(setsave); btn_FT8n_select_7->callback((Fl_Callback*)cb_btn_band_select, (void *)7); btn_FT8n_select_8 = new Fl_Button(74, 50, 60, 18, _("24")); btn_FT8n_select_8->tooltip(setsave); btn_FT8n_select_8->callback((Fl_Callback*)cb_btn_band_select, (void *)8); btn_FT8n_select_9 = new Fl_Button(145, 50, 60, 18, _("28")); btn_FT8n_select_9->tooltip(setsave); btn_FT8n_select_9->callback((Fl_Callback*)cb_btn_band_select, (void *)9); btn_FT8n_select_10 = new Fl_Button(216, 50, 60, 18, _("50")); btn_FT8n_select_10->tooltip(setsave); btn_FT8n_select_10->callback((Fl_Callback*)cb_btn_band_select, (void *)10); btn_FT8n_select_11 = new Fl_Button(287, 50, 60, 18, _("144")); btn_FT8n_select_11->tooltip(setsave); btn_FT8n_select_11->callback((Fl_Callback*)cb_btn_band_select, (void *)11); btn_FT8n_select_12 = new Fl_Button(358, 50, 60, 18, _("430")); btn_FT8n_select_12->tooltip(setsave); btn_FT8n_select_12->callback((Fl_Callback*)cb_btn_band_select, (void *)12); tab_FT8n_bands->end(); } tab_FT8n_CTCSS = new Fl_Group(0, 24, small_mainW, gph - 24, _("CTCSS")); { choice_FT8n_tTONE = new Fl_PL_tone(70, 34, 75, 18, _("Tone X:")); choice_FT8n_tTONE->align((Fl_Align)FL_ALIGN_LEFT); choice_FT8n_tTONE->value(8); choice_FT8n_tTONE->end(); choice_FT8n_rTONE = new Fl_PL_tone(70, 66, 75, 18, _("R:")); choice_FT8n_rTONE->align((Fl_Align)FL_ALIGN_LEFT); choice_FT8n_rTONE->value(8); choice_FT8n_rTONE->end(); setTONES = new Fl_Button(150, 34, 60, 18, _("Set")); setTONES->callback((Fl_Callback*)cb_tones, 0); FMoff_freq = new cFreqControl(225, 34, 100, 26, "5"); FMoff_freq->value(600); Fl_Box *MHZ = new Fl_Box(FMoff_freq->x() + FMoff_freq->w() + 4, 34, 50, 26, "MHz"); MHZ->box(FL_FLAT_BOX); MHZ->align(FL_ALIGN_CENTER); FMoffset = new Fl_ComboBox(225, 66, 100, 18, ""); FMoffset->tooltip(_("Select FM operation")); FMoffset->box(FL_NO_BOX); FMoffset->color(FL_BACKGROUND2_COLOR); FMoffset->selection_color(FL_BACKGROUND_COLOR); FMoffset->add("simplex|minus|plus"); FMoffset->index(0); setOFFSET = new Fl_Button(FMoffset->x() + FMoffset->w() + 5, 66, 60, 18, _("Set")); setOFFSET->callback((Fl_Callback*)cb_offset, 0); tab_FT8n_CTCSS->end(); } tab_icom_bands = new Fl_Group(0, 24, small_mainW, gph - 24, _("Band")); { btn_icom_select_1 = new Fl_Button(4, 30, 60, 18, _("1.8")); btn_icom_select_1->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_1->callback((Fl_Callback*)cb_btn_band_select, (void *)1); btn_icom_select_2 = new Fl_Button(74, 30, 60, 18, _("3.5")); btn_icom_select_2->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_2->callback((Fl_Callback*)cb_btn_band_select, (void *)2); btn_icom_select_3 = new Fl_Button(145, 30, 60, 18, _("7")); btn_icom_select_3->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_3->callback((Fl_Callback*)cb_btn_band_select, (void *)3); btn_icom_select_4 = new Fl_Button(216, 30, 60, 18, _("10")); btn_icom_select_4->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_4->callback((Fl_Callback*)cb_btn_band_select, (void *)4); btn_icom_select_5 = new Fl_Button(287, 30, 60, 18, _("14")); btn_icom_select_5->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_5->callback((Fl_Callback*)cb_btn_band_select, (void *)5); btn_icom_select_6 = new Fl_Button(358, 30, 60, 18, _("18")); btn_icom_select_6->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_6->callback((Fl_Callback*)cb_btn_band_select, (void *)6); btn_icom_select_7 = new Fl_Button(4, 50, 60, 18, _("21")); btn_icom_select_7->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_7->callback((Fl_Callback*)cb_btn_band_select, (void *)7); btn_icom_select_8 = new Fl_Button(74, 50, 60, 18, _("24")); btn_icom_select_8->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_8->callback((Fl_Callback*)cb_btn_band_select, (void *)8); btn_icom_select_9 = new Fl_Button(145, 50, 60, 18, _("28")); btn_icom_select_9->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_9->callback((Fl_Callback*)cb_btn_band_select, (void *)9); btn_icom_select_10 = new Fl_Button(216, 50, 60, 18, _("50")); btn_icom_select_10->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_10->callback((Fl_Callback*)cb_btn_band_select, (void *)10); btn_icom_select_11 = new Fl_Button(287, 50, 60, 18, _("144")); btn_icom_select_11->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_11->callback((Fl_Callback*)cb_btn_band_select, (void *)11); btn_icom_select_12 = new Fl_Button(358, 50, 60, 18, _("430")); btn_icom_select_12->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_12->callback((Fl_Callback*)cb_btn_band_select, (void *)12); btn_icom_select_13 = new Fl_Button(4, 70, 60, 18, _("1.2 G")); btn_icom_select_13->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_13->callback((Fl_Callback*)cb_btn_band_select, (void *)13); choice_tTONE = new Fl_PL_tone(145, 70, 75, 18, _("tTONE")); choice_tTONE->align((Fl_Align)FL_ALIGN_LEFT); choice_tTONE->value(8); choice_tTONE->end(); choice_rTONE = new Fl_PL_tone(287, 70, 75, 18, _("rTONE")); choice_rTONE->align((Fl_Align)FL_ALIGN_LEFT); choice_rTONE->value(8); choice_rTONE->end(); tab_icom_bands->end(); } genericCW = new Fl_Group(0, 24, small_mainW, gph - 24, _("CW")); { genericCW->color(FL_LIGHT1); genericCW->selection_color(FL_LIGHT1); genericCW->hide(); spnr_cw_wpm = new Hspinner( 4, 40, 85, 22, _("wpm"), 18); spnr_cw_wpm->type(1); spnr_cw_wpm->minimum(5); spnr_cw_wpm->maximum(80); spnr_cw_wpm->step(1); spnr_cw_wpm->callback((Fl_Callback*)cb_spnr_cw_wpm); spnr_cw_wpm->value(progStatus.cw_wpm); spnr_cw_wpm->labelsize(12); spnr_cw_wpm->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_cw_wpm->tooltip(_("CW words per minute")); spnr_cw_weight = new Hspinner( spnr_cw_wpm->x() + spnr_cw_wpm->w() + 4, 40, 85, 22, _("Weight"), 18); spnr_cw_weight->type(1); spnr_cw_weight->minimum(2.5); spnr_cw_weight->maximum(4.5); spnr_cw_weight->step(0.1); spnr_cw_weight->value(3); spnr_cw_weight->callback((Fl_Callback*)cb_spnr_cw_weight); spnr_cw_weight->value(progStatus.cw_weight); spnr_cw_weight->labelsize(12); spnr_cw_weight->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_cw_weight->tooltip(_("CW weight")); spnr_cw_spot_tone= new Hspinner( spnr_cw_weight->w() + spnr_cw_weight->x() + 4, 40, 85, 22, _("Spot tone"), 18); spnr_cw_spot_tone->tooltip(_("Spot volume")); spnr_cw_spot_tone->type(1); spnr_cw_spot_tone->minimum(50); spnr_cw_spot_tone->maximum(1050); spnr_cw_spot_tone->step(5); spnr_cw_spot_tone->value(700); spnr_cw_spot_tone->callback((Fl_Callback*)cb_spnr_cw_spot_tone); spnr_cw_spot_tone->value(progStatus.cw_spot); spnr_cw_spot_tone->labelsize(12); spnr_cw_spot_tone->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); btnSpot = new Fl_Light_Button( spnr_cw_spot_tone->x() + spnr_cw_spot_tone->w() + 4, 36, 60, 22, _("Spot")); btnSpot->tooltip(_("Spot tone on/off")); btnSpot->callback((Fl_Callback*)cb_btnSpot); btnSpot->value(progStatus.cw_spot); btn_enable_keyer = new Fl_Check_Button( btnSpot->x(), 62, 60, 15, _("Keyer")); btn_enable_keyer->tooltip(_("Enable internal keyer")); btn_enable_keyer->down_box(FL_DOWN_BOX); btn_enable_keyer->callback((Fl_Callback*)cb_btn_enable_keyer); btn_enable_keyer->value(progStatus.enable_keyer); genericCW->end(); } genericQSK = new Fl_Group(0, 24, small_mainW, gph - 24, _("QSK")); { genericQSK->color(FL_LIGHT1); genericQSK->selection_color(FL_LIGHT1); genericQSK->hide(); btnBreakIn = new Fl_Button( 5, 40, 60, 22, _("QSK")); btnBreakIn->tooltip(_("Full break in")); btnBreakIn->callback((Fl_Callback*)cb_btnBreakIn); btnBreakIn->value(progStatus.break_in); spnr_cw_qsk = new Hspinner( btnBreakIn->x() + btnBreakIn->w() + 4, 40, 85, 22, _("Bk-in Dly"), 18); spnr_cw_qsk->tooltip(_("msec")); spnr_cw_qsk->type(1); spnr_cw_qsk->minimum(0); spnr_cw_qsk->maximum(100); spnr_cw_qsk->step(1); spnr_cw_qsk->value(20); spnr_cw_qsk->callback((Fl_Callback*)cb_spnr_cw_qsk); spnr_cw_qsk->value(progStatus.cw_qsk); spnr_cw_qsk->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_cw_delay = new Hspinner( spnr_cw_qsk->x() + spnr_cw_qsk->w() + 4, 40, 120, 22, _("QSK delay"), 18); spnr_cw_delay->tooltip(_("msec")); spnr_cw_delay->type(0); spnr_cw_delay->minimum(30); spnr_cw_delay->maximum(500); spnr_cw_delay->step(10); spnr_cw_delay->callback((Fl_Callback*)cb_spnr_cw_delay); spnr_cw_delay->value(progStatus.cw_delay); spnr_cw_delay->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); genericQSK->end(); } genericVOX = new Fl_Group(0, 24, small_mainW, gph - 24, _("Vox")); { genericVOX->hide(); spnr_vox_gain = new Hspinner( 4, 40, 80, 22, _("gain"), 18); spnr_vox_gain->type(1); spnr_vox_gain->minimum(0); spnr_vox_gain->maximum(100); spnr_vox_gain->step(1); spnr_vox_gain->tooltip(_("VOX gain")); spnr_vox_gain->callback((Fl_Callback*)cb_spnr_vox_gain); spnr_vox_gain->value(progStatus.vox_gain); spnr_vox_gain->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_anti_vox = new Hspinner( spnr_vox_gain->x() + spnr_vox_gain->w() + 10, 40, 80, 22, _("anti"), 18); spnr_anti_vox->type(1); spnr_anti_vox->minimum(0); spnr_anti_vox->maximum(100); spnr_anti_vox->step(1); spnr_anti_vox->tooltip(_("Anti VOX gain")); spnr_anti_vox->callback((Fl_Callback*)cb_spnr_anti_vox); spnr_anti_vox->value(progStatus.vox_anti); spnr_anti_vox->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_vox_hang = new Hspinner( spnr_anti_vox->x() + spnr_anti_vox->w() + 10, 40, 80, 22, _("hang"), 18); spnr_vox_hang->type(1); spnr_vox_hang->minimum(0); spnr_vox_hang->maximum(100); spnr_vox_hang->step(1); spnr_vox_hang->tooltip(_("VOX hang time")); spnr_vox_hang->callback((Fl_Callback*)cb_spnr_vox_hang); spnr_vox_hang->value(progStatus.vox_hang); spnr_vox_hang->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); btn_vox = new Fl_Light_Button( spnr_vox_hang->x() + spnr_vox_hang->w() + 10, 40, 50, 22, _("VOX")); btn_vox->callback((Fl_Callback*)cb_btn_vox); btn_vox->value(progStatus.vox_onoff); btn_vox->tooltip(_("VOX on/off")); btn_vox_on_dataport = new Fl_Check_Button( btn_vox->x() + btn_vox->w() + 10, 44, 50, 15, _("Data port")); btn_vox_on_dataport->tooltip(_("Data port signal triggers VOX")); btn_vox_on_dataport->down_box(FL_DOWN_BOX); btn_vox_on_dataport->callback((Fl_Callback*)cb_btn_vox_on_dataport); btn_vox_on_dataport->value(progStatus.vox_on_dataport); genericVOX->end(); } genericSpeech = new Fl_Group(0, 24, small_mainW, gph - 24, _("Spch")); { genericSpeech->hide(); btnCompON = new Fl_Light_Button(215, 40, 100, 22, _("On")); btnCompON->callback((Fl_Callback*)cb_btnCompON); btnCompON->value(progStatus.compON); btnCompON->tooltip(_("Compression on/off")); spnr_compression = new Hspinner(138, 40, 70, 22, _("Comp"), 18); spnr_compression->type(1); spnr_compression->minimum(0); spnr_compression->maximum(100); spnr_compression->step(1); spnr_compression->tooltip(_("Compression level")); spnr_compression->callback((Fl_Callback*)cb_spnr_compression); spnr_compression->value(progStatus.compression); genericSpeech->end(); } genericRx = new Fl_Group(0, 24, small_mainW, gph - 24, _("RX")); { genericRx->hide(); sldr_nb_level = new Fl_Wheel_Value_Slider(5, 35, 100, 22, _("NB level")); sldr_nb_level->tooltip(_("Noise Blanker level")); sldr_nb_level->type(5); sldr_nb_level->box(FL_THIN_DOWN_BOX); sldr_nb_level->color(FL_BACKGROUND_COLOR); sldr_nb_level->selection_color(FL_BACKGROUND_COLOR); sldr_nb_level->labeltype(FL_NORMAL_LABEL); sldr_nb_level->labelfont(0); sldr_nb_level->labelsize(12); sldr_nb_level->labelcolor(FL_FOREGROUND_COLOR); sldr_nb_level->minimum(0); sldr_nb_level->maximum(0); sldr_nb_level->step(1); sldr_nb_level->callback((Fl_Callback*)cb_sldr_nb_level); sldr_nb_level->align(FL_ALIGN_BOTTOM); sldr_nb_level->when(FL_WHEN_CHANGED); sldr_nb_level->value(progStatus.nb_level); spnr_bpf_center = new Hspinner(115, 35, 90, 22, _("BPF Cntr"), 18); spnr_bpf_center->tooltip(_("Bandpass Filter Center Freq in Hz")); spnr_bpf_center->type(1); spnr_bpf_center->minimum(600); spnr_bpf_center->maximum(2500); spnr_bpf_center->step(10); spnr_bpf_center->value(1500); spnr_bpf_center->callback((Fl_Callback*)cb_spnr_bpf_center); spnr_bpf_center->align(FL_ALIGN_BOTTOM); spnr_bpf_center->value(progStatus.bpf_center); btn_use_bpf_center = new Fl_Check_Button(120, 72, 50, 15, _("BPF On")); btn_use_bpf_center->tooltip(_("Use Filter Center Freq Adj")); btn_use_bpf_center->down_box(FL_DOWN_BOX); btn_use_bpf_center->value(1); btn_use_bpf_center->align(FL_ALIGN_RIGHT); btn_use_bpf_center->callback((Fl_Callback*)cb_btn_use_bpf_center); btn_use_bpf_center->value(progStatus.use_bpf_center); spnr_vfo_adj = new Hspinner(210, 35, 100, 22, _("Vfo Adj"), 18); spnr_vfo_adj->type(FL_FLOAT_INPUT); spnr_vfo_adj->callback((Fl_Callback*)cb_spnr_vfo_adj); spnr_vfo_adj->align(FL_ALIGN_BOTTOM); spnr_vfo_adj->step(0.1); spnr_vfo_adj->format("%.1f"); spnr_vfo_adj->value(progStatus.vfo_adj); spnr_line_out = new Hspinner(335, 35, 80, 22, _("line out"), 18); spnr_line_out->type(1); spnr_line_out->minimum(0); spnr_line_out->maximum(100); spnr_line_out->step(1); spnr_line_out->value(20); spnr_line_out->align(FL_ALIGN_BOTTOM); spnr_line_out->callback((Fl_Callback*)cb_spnr_line_out); spnr_line_out->value(progStatus.line_out); genericRx->end(); } genericMisc = new Fl_Group(0, 24, small_mainW, gph - 24, _("Misc")); { genericMisc->hide(); btnSpecial = new Fl_Light_Button(5, 35, 75, 22, _("Special")); btnSpecial->callback((Fl_Callback*)cb_btnSpecial); btn_ext_tuner = new Fl_Check_Button(5, 60, 75, 22, _("Ext tuner")); btn_ext_tuner->tooltip(_("use external auto tuner")); btn_ext_tuner->down_box(FL_DOWN_BOX); btn_ext_tuner->callback((Fl_Callback*)cb_btn_ext_tuner); btn_ext_tuner->value(progStatus.external_tuner); btn_xcvr_auto_on = new Fl_Check_Button(100, 35, 100, 22, _("Rig auto On")); btn_xcvr_auto_on->tooltip(_("Auto Turn Rig On with Flrig startup")); btn_xcvr_auto_on->down_box(FL_DOWN_BOX); btn_xcvr_auto_on->callback((Fl_Callback*)cb_btn_xcvr_auto_on); btn_xcvr_auto_on->value(progStatus.xcvr_auto_on); btn_xcvr_auto_off = new Fl_Check_Button(100, 60, 100, 22, _("Rig auto Off")); btn_xcvr_auto_off->tooltip(_("Auto Turn Rig Off with Flrig exit")); btn_xcvr_auto_off->down_box(FL_DOWN_BOX); btn_xcvr_auto_off->callback((Fl_Callback*)cb_btn_xcvr_auto_off); btn_xcvr_auto_off->value(progStatus.xcvr_auto_off); btn_xcvr_synch_clock = new Fl_Check_Button(215, 35, 100, 22, _("Sync Clk")); btn_xcvr_synch_clock->tooltip(_("Synchronize xcvr clock to PC")); btn_xcvr_synch_clock->down_box(FL_DOWN_BOX); btn_xcvr_synch_clock->callback((Fl_Callback*)cb_btn_xcvr_synch_clock); btn_xcvr_synch_clock->value(progStatus.sync_clock); btn_xcvr_synch_gmt = new Fl_Check_Button(215, 60, 100, 22, _("Use GMT")); btn_xcvr_synch_gmt->tooltip(_("Synchronize to Greenwich Mean Time")); btn_xcvr_synch_gmt->down_box(FL_DOWN_BOX); btn_xcvr_synch_gmt->callback((Fl_Callback*)cb_btn_xcvr_synch_gmt); btn_xcvr_synch_gmt->value(progStatus.sync_gmt); btn_xcvr_synch_now = new Fl_Button(320, 35, 90, 22, _("Sync Now")); btn_xcvr_synch_now->tooltip(_("Force clock synch at next minute")); btn_xcvr_synch_now->callback((Fl_Callback*)cb_btn_xcvr_synch_now); txt_xcvr_synch = new Fl_Output(320, 60, 90, 22, ""); txt_xcvr_synch->value(""); txt_xcvr_synch->align(FL_ALIGN_CENTER); genericMisc->end(); } // kx3_extras = new Fl_Group(0, 24, small_mainW, gph - 24, _("KX3")); { // kxpa_enabled = new Fl_Check_Button( 15, kx3_extras->y() + 12, 18, 18, _("KXPA100 ON")); // kxpa_enabled->callback((Fl_Callback*)cb_kxpa_enabled); // kxpa_enabled->value(progStatus.kxpa); // kx3_extras->end(); } genericUser_1 = new Fl_Group(0, 24, small_mainW, gph - 24, _("A")); { btnUser1 = new Fl_Button(5, genericUser_1->y() + 12, 100, 20, "USER 1"); btnUser1->callback((Fl_Callback*)cb_btnUser, (void*)1); btnUser2 = new Fl_Button(110, genericUser_1->y() + 12, 100, 20, "USER 2"); btnUser2->callback((Fl_Callback*)cb_btnUser, (void*)2); btnUser3 = new Fl_Button(215, genericUser_1->y() + 12, 100, 20, "USER 3"); btnUser3->callback((Fl_Callback*)cb_btnUser, (void*)3); btnUser4 = new Fl_Button(320, genericUser_1->y() + 12, 100, 20, "USER 4"); btnUser4->callback((Fl_Callback*)cb_btnUser, (void*)4); btnUser5 = new Fl_Button(5, genericUser_1->y() + 36, 100, 20, "USER 5"); btnUser5->callback((Fl_Callback*)cb_btnUser, (void*)5); btnUser6 = new Fl_Button(110, genericUser_1->y() + 36, 100, 20, "USER 6"); btnUser6->callback((Fl_Callback*)cb_btnUser, (void*)6); btnUser7 = new Fl_Button(215, genericUser_1->y() + 36, 100, 20, "USER 7"); btnUser7->callback((Fl_Callback*)cb_btnUser, (void*)7); btnUser8 = new Fl_Button(320, genericUser_1->y() + 36, 100, 20, "USER 8"); btnUser8->callback((Fl_Callback*)cb_btnUser, (void*)8); genericUser_1->end(); } genericUser_2 = new Fl_Group(0, 24, small_mainW, gph - 24, _("B")); { btnUser9 = new Fl_Button(5, genericUser_2->y() + 12, 100, 20, "USER 9"); btnUser9->callback((Fl_Callback*)cb_btnUser, (void*)9); btnUser10 = new Fl_Button(110, genericUser_2->y() + 12, 100, 20, "USER 10"); btnUser10->callback((Fl_Callback*)cb_btnUser, (void*)10); btnUser11 = new Fl_Button(215, genericUser_2->y() + 12, 100, 20, "USER 11"); btnUser11->callback((Fl_Callback*)cb_btnUser, (void*)11); btnUser12 = new Fl_Button(320, genericUser_2->y() + 12, 100, 20, "USER 12"); btnUser12->callback((Fl_Callback*)cb_btnUser, (void*)12); btnUser13 = new Fl_Button(5, genericUser_2->y() + 36, 100, 20, "USER 13"); btnUser13->callback((Fl_Callback*)cb_btnUser, (void*)13); btnUser14 = new Fl_Button(110, genericUser_2->y() + 36, 100, 20, "USER 14"); btnUser14->callback((Fl_Callback*)cb_btnUser, (void*)14); btnUser15 = new Fl_Button(215, genericUser_2->y() + 36, 100, 20, "USER 15"); btnUser15->callback((Fl_Callback*)cb_btnUser, (void*)15); btnUser16 = new Fl_Button(320, genericUser_2->y() + 36, 100, 20, "USER 16"); btnUser16->callback((Fl_Callback*)cb_btnUser, (void*)16); genericUser_2->end(); } genericUser_3 = new Fl_Group(0, 24, small_mainW, gph - 24, _("C")); { btnUser17 = new Fl_Button(5, genericUser_3->y() + 12, 100, 20, "USER 17"); btnUser17->callback((Fl_Callback*)cb_btnUser, (void*)17); btnUser18 = new Fl_Button(110, genericUser_3->y() + 12, 100, 20, "USER 18"); btnUser18->callback((Fl_Callback*)cb_btnUser, (void*)18); btnUser19 = new Fl_Button(215, genericUser_3->y() + 12, 100, 20, "USER 19"); btnUser19->callback((Fl_Callback*)cb_btnUser, (void*)19); btnUser20 = new Fl_Button(320, genericUser_3->y() + 12, 100, 20, "USER 20"); btnUser20->callback((Fl_Callback*)cb_btnUser, (void*)20); btnUser21 = new Fl_Button(5, genericUser_3->y() + 36, 100, 20, "USER 21"); btnUser21->callback((Fl_Callback*)cb_btnUser, (void*)21); btnUser22 = new Fl_Button(110, genericUser_3->y() + 36, 100, 20, "USER 22"); btnUser22->callback((Fl_Callback*)cb_btnUser, (void*)22); btnUser23 = new Fl_Button(215, genericUser_3->y() + 36, 100, 20, "USER 23"); btnUser23->callback((Fl_Callback*)cb_btnUser, (void*)23); btnUser24 = new Fl_Button(320, genericUser_3->y() + 36, 100, 20, "USER 24"); btnUser24->callback((Fl_Callback*)cb_btnUser, (void*)24); genericUser_3->end(); } tab7610 = new Fl_Group(0, 24, small_mainW, gph - 24, _("IC7610")); { ic7610digi_sel_on_off = new Fl_Light_Button(5, tab7610->y() + 10, 70, 22, "Digi-Sel"); ic7610digi_sel_on_off->value(progStatus.digi_sel_on_off); ic7610digi_sel_on_off->callback((Fl_Callback *)cb_digi_sel_on_off); ic7610_digi_sel_val = new Fl_Wheel_Value_Slider(80, tab7610->y() + 10, small_mainW - 85, 22, ""); ic7610_digi_sel_val->tooltip(_("Digi-Sel value")); ic7610_digi_sel_val->type(5); ic7610_digi_sel_val->box(FL_THIN_DOWN_BOX); ic7610_digi_sel_val->color(FL_BACKGROUND_COLOR); ic7610_digi_sel_val->selection_color(FL_BACKGROUND_COLOR); ic7610_digi_sel_val->labeltype(FL_NORMAL_LABEL); ic7610_digi_sel_val->labelfont(0); ic7610_digi_sel_val->labelsize(12); ic7610_digi_sel_val->labelcolor(FL_FOREGROUND_COLOR); ic7610_digi_sel_val->minimum(0); ic7610_digi_sel_val->maximum(255); ic7610_digi_sel_val->step(1); ic7610_digi_sel_val->callback((Fl_Callback*)cb_digi_sel_val); ic7610_digi_sel_val->align(Fl_Align(FL_ALIGN_BOTTOM)); ic7610_digi_sel_val->when(FL_WHEN_CHANGED); ic7610_digi_sel_val->value(progStatus.digi_sel_val); ic7610att = new Fl_ComboBox(5, tab7610->y() + 40, 80, 22, "Att level"); ic7610att->add("OFF|3db|6db|9db|12db|15db|18db|21db|24db|27db|30db|33db|36db|39db|42db|45db"); ic7610att->box(FL_NO_BOX); ic7610att->color(FL_BACKGROUND2_COLOR); ic7610att->selection_color(FL_BACKGROUND_COLOR); ic7610att->align(FL_ALIGN_RIGHT); ic7610att->index(progStatus.index_ic7610att); ic7610att->readonly(); ic7610att->callback((Fl_Callback *)cb_ic7610_att); ic7610dual_watch = new Fl_Light_Button(150, tab7610->y() + 40, 120, 22, "Dual Watch"); ic7610dual_watch->value(progStatus.dual_watch); ic7610dual_watch->callback((Fl_Callback *)cb_dual_watch); tab7610->end(); } genericRXB = new Fl_Group(0, 24, small_mainW, gph - 24, _("RIT/XIT/BFO")); { cntRIT = new Hspinner(5, genericRXB->y() + 10, 100, 24, _("Rit")); cntRIT->tooltip(_("RIT")); cntRIT->type(FL_INT_INPUT); cntRIT->labelsize(12); cntRIT->minimum(-1000); cntRIT->maximum(1000); cntRIT->step(10); cntRIT->callback((Fl_Callback*)cb_cntRIT); cntRIT->align(Fl_Align(FL_ALIGN_RIGHT)); cntXIT = new Hspinner( cntRIT->x() + cntRIT->w() + 15, cntRIT->y(), 100, 24, _("Xit")); cntXIT->tooltip(_("XIT")); cntXIT->type(FL_INT_INPUT); cntXIT->labelsize(12); cntXIT->minimum(-1000); cntXIT->maximum(1000); cntXIT->step(10); cntXIT->callback((Fl_Callback*)cb_cntXIT); cntXIT->align(Fl_Align(FL_ALIGN_RIGHT)); cntBFO = new Hspinner( cntXIT->x() + cntXIT->w() + 15, cntXIT->y(), 100, 24, _("Bfo")); cntBFO->tooltip(_("BFO")); cntBFO->type(FL_INT_INPUT); cntBFO->labelsize(12); cntBFO->minimum(0); cntBFO->maximum(1000); cntBFO->step(10); cntBFO->value(600); cntBFO->callback((Fl_Callback*)cb_cntBFO); cntBFO->align(Fl_Align(FL_ALIGN_RIGHT)); genericRXB->end(); genericRXB->hide(); } genericAux = new Fl_Group(0, 24, small_mainW, gph - 24, _("Aux")); { btnAuxRTS = new Fl_Light_Button(5, genericAux->y() + 10, 60, 18, _("RTS")); btnAuxRTS->tooltip(_("RTS control pin")); btnAuxRTS->down_box(FL_THIN_DOWN_BOX); btnAuxRTS->labelsize(12); btnAuxRTS->callback((Fl_Callback*)cb_btnAuxRTS); btnAuxRTS->value(progStatus.aux_rts); btnAuxDTR = new Fl_Light_Button(btnAuxRTS->x() + 80, btnAuxRTS->y(), 60, 18, _("DTR")); btnAuxDTR->tooltip(_("DTR control pin")); btnAuxDTR->down_box(FL_THIN_DOWN_BOX); btnAuxDTR->labelsize(12); btnAuxDTR->callback((Fl_Callback*)cb_btnAuxDTR); btnAuxDTR->value(progStatus.aux_dtr); genericAux->end(); genericAux->hide(); } tabsGeneric->resizable(genericUser_3); tabsGeneric->callback((Fl_Callback *)cb_tabsGeneric); tabsGeneric->end(); } grpTABS->end(); w->end(); w->resizable(grpTABS); w->size_range (small_mainW, gph, 0, gph); Fl_Color clr = fl_rgb_color( progStatus.tab_red, progStatus.tab_green, progStatus.tab_blue); tabsGeneric->selection_color(clr); tabsGeneric->redraw(); tabs550->selection_color(clr); tabs550->redraw(); return w; } Fl_Double_Window* Small_rig_window() { Fl_Double_Window* w = new Fl_Double_Window(small_mainW, small_mainH, _("Flrig")); w->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE)); grp_menu = new Fl_Group(0,0,small_mainW,small_menuH); small_menu = new Fl_Menu_Bar(0, 0, small_mainW - 64, small_menuH); small_menu->textsize(12); small_menu->menu(menu_small_menu); Fl_Menu_Item * mnu = getMenuItem(_("Tooltips"), menu_small_menu); if (mnu) { progStatus.tooltips ? mnu->set() : mnu->clear(); mnuTooltips = mnu; } mnu = getMenuItem(_("Voltmeter"), menu_small_menu); if (mnu) { progStatus.display_voltmeter ? mnu->set() : mnu->clear(); mnuVoltmeter = mnu; } mnu = getMenuItem(_("Small sliders"), menu_small_menu); if (mnu) { progStatus.schema ? mnu->set() : mnu->clear(); mnuSchema = mnu; } mnu = getMenuItem(_("Embed tabs"), menu_small_menu); if (mnu) { progStatus.embed_tabs ? mnu->set() : mnu->clear(); mnuEmbedTabs = mnu; } Fl_Group *mnu_box = new Fl_Group(small_mainW-64, 0, 64, small_menuH); mnu_box->box(FL_UP_BOX); tcpip_box = new Fl_Group(small_mainW-62, 2, 60, 18); tcpip_box->box(FL_FLAT_BOX); tcpip_menu_box = new Fl_Box(small_mainH - 62, 3, 16, 16); tcpip_menu_box->box(FL_DIAMOND_BOX); tcpip_menu_box->color(FL_GREEN); Fl_Box *tcpip_menu_label = new Fl_Box(small_mainH - 62 + 18, 3, 64 - 22, 16, _("tcpip")); tcpip_menu_label->box(FL_FLAT_BOX); tcpip_menu_label->align(FL_ALIGN_CENTER); tcpip_menu_label->tooltip(_("lit when connected to remote tcpip")); tcpip_box->end(); tcpip_box->hide(); mnu_box->end(); grp_menu->resizable(small_menu); grp_menu->end(); txt_encA = new Fl_Output( small_mainW - 90, 1, 90, 20, ""); txt_encA->box(FL_THIN_DOWN_BOX); txt_encA->align(20); txt_encA->hide(); main_group = small_main_group( 0, small_menuH, small_mainW, small_mainH - small_menuH); grpInitializing = new Fl_Group( 0, 0, small_mainW, small_mainH); grpInitializing->box(FL_FLAT_BOX); grpInitializing->color(FL_LIGHT2); progress = new Fl_Progress( small_mainW / 4, small_mainH / 2, small_mainW / 2, 20, "Initializing"); progress->maximum(100); progress->minimum(0); progress->labelcolor(FL_DARK_RED); progress->labelsize(12); progress->align(Fl_Align(FL_ALIGN_TOP)); progress->selection_color(FL_GREEN); filler = new Fl_Box( 0, small_mainH - 4, small_mainW, 4); filler->box(FL_FLAT_BOX); filler->color(FL_GREEN); grpInitializing->end(); grpInitializing->resizable(filler); grpInitializing->show(); w->end(); return w; } flrig-2.0.04/src/UI/xcvr_setup.cxx0000664000175000017500000030103714504050407013660 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "dialogs.h" #include "cmedia.h" #include "tmate2.h" #include "rigs.h" #include "trace.h" #include "xml_server.h" #include "xmlrpc_rig.h" #include "XmlRpc.h" Fl_Group *tabXCVR = (Fl_Group *)0; Fl_ComboBox *selectRig = (Fl_ComboBox *)0; Fl_Counter *cntRigCatRetries = (Fl_Counter *)0; Fl_Counter *cntRigCatTimeout = (Fl_Counter *)0; Fl_Counter *cntPostWriteDelay = (Fl_Counter *)0; Fl_Counter *query_interval = (Fl_Counter *)0; Fl_Counter *cntWriteDelay = (Fl_Counter *)0; Fl_Light_Button *btnActivateDelays = (Fl_Light_Button *)0; Fl_ComboBox *selectCommPort = (Fl_ComboBox *)0; Fl_ComboBox *mnuBaudrate = (Fl_ComboBox *)0; Fl_Check_Button *btnTwoStopBit = (Fl_Check_Button *)0; Fl_Check_Button *btnOneStopBit = (Fl_Check_Button *)0; Fl_ListBox *lbox_catptt = (Fl_ListBox *)0; Fl_ListBox *lbox_rtsptt = (Fl_ListBox *)0; Fl_ListBox *lbox_dtrptt = (Fl_ListBox *)0; Fl_Check_Button *chkrtscts = (Fl_Check_Button *)0; Fl_Check_Button *btnrtsplus1 = (Fl_Check_Button *)0; Fl_Check_Button *btndtrplus1 = (Fl_Check_Button *)0; Fl_Check_Button *btnrtsplus2 = (Fl_Check_Button *)0; Fl_Check_Button *btndtrplus2 = (Fl_Check_Button *)0; //Fl_Check_Button *btn_notxqsy = (Fl_Check_Button *)0; Fl_Int_Input *txtCIV = (Fl_Int_Input *)0; Fl_Button *btnCIVdefault = (Fl_Button *)0; Fl_Check_Button *btnUSBaudio = (Fl_Check_Button *)0; Fl_Group *tabTCPIP = (Fl_Group *)0; Fl_Input2 *inp_tcpip_addr = (Fl_Input2 *)0; Fl_Input2 *inp_tcpip_port = (Fl_Input2 *)0; Fl_Check_Button *chk_use_tcpip = (Fl_Check_Button *)0; Fl_Box *box_tcpip_connect = (Fl_Box *)0; Fl_Counter *inp_tcpip_ping_delay = (Fl_Counter *)0; Fl_Counter *cntRetryAfter = (Fl_Counter *)0; Fl_Counter *cntDropsAllowed = (Fl_Counter *)0; Fl_Input2 *inp_tci_address = (Fl_Input2 *)0; Fl_Input2 *inp_tci_port = (Fl_Input2 *)0; Fl_Group *tabPTTGEN = (Fl_Group *)0; Fl_ComboBox *selectSepPTTPort = (Fl_ComboBox *)0; Fl_Check_Button *btnSep_SCU_17 = (Fl_Check_Button *)0; Fl_ListBox *lbox_sep_rtsptt = (Fl_ListBox *)0; Fl_Check_Button *btnSepRTSplus = (Fl_Check_Button *)0; Fl_ListBox *lbox_sep_dtrptt = (Fl_ListBox *)0; Fl_Check_Button *btnSepDTRplus = (Fl_Check_Button *)0; Fl_Group *tabGPIO = (Fl_Group *)0; Fl_Check_Button *btn_enable_gpio[17]; Fl_Check_Button *btn_gpio_on[17]; Fl_Counter *cnt_gpio_pulse_width; Fl_Group *tabOTHER = (Fl_Group *)0; Fl_ComboBox *selectAuxPort = (Fl_ComboBox *)0; Fl_Check_Button *btnAux_SCU_17 = (Fl_Check_Button *)0; Fl_Counter *cnt_power_limit = (Fl_Counter *)0; Fl_Check_Button *btn_enable_power_limit = (Fl_Check_Button *)0; Fl_Group *tabCLIENT = (Fl_Group *)0; Fl_Box *client_text = (Fl_Box *)0; Fl_Input2 *inp_client_addr = (Fl_Input2 *)0; Fl_Input2 *inp_client_port = (Fl_Input2 *)0; Fl_Group *tabSERVER = (Fl_Group *)0; Fl_Box *server_text = (Fl_Box *)0; Fl_Input2 *inp_serverport = (Fl_Input2 *)0; Fl_Box *box_fldigi_connect = (Fl_Box *)0; Fl_Group *tabPOLLING = (Fl_Group *)0; Fl_Check_Button *poll_smeter = (Fl_Check_Button *)0; Fl_Check_Button *poll_pout = (Fl_Check_Button *)0; Fl_Check_Button *poll_swr = (Fl_Check_Button *)0; Fl_Check_Button *poll_alc = (Fl_Check_Button *)0; Fl_Check_Button *poll_frequency = (Fl_Check_Button *)0; Fl_Check_Button *poll_mode = (Fl_Check_Button *)0; Fl_Check_Button *poll_bandwidth = (Fl_Check_Button *)0; Fl_Check_Button *poll_volume = (Fl_Check_Button *)0; Fl_Check_Button *poll_micgain = (Fl_Check_Button *)0; Fl_Check_Button *poll_rfgain = (Fl_Check_Button *)0; Fl_Check_Button *poll_power_control = (Fl_Check_Button *)0; Fl_Check_Button *poll_ifshift = (Fl_Check_Button *)0; Fl_Check_Button *poll_pbt = (Fl_Check_Button *)0; Fl_Check_Button *poll_notch = (Fl_Check_Button *)0; Fl_Check_Button *poll_auto_notch = (Fl_Check_Button *)0; Fl_Check_Button *poll_pre_att = (Fl_Check_Button *)0; Fl_Check_Button *poll_squelch = (Fl_Check_Button *)0; Fl_Check_Button *poll_split = (Fl_Check_Button *)0; Fl_Check_Button *poll_noise = (Fl_Check_Button *)0; Fl_Check_Button *poll_nr = (Fl_Check_Button *)0; Fl_Check_Button *poll_compression = (Fl_Check_Button *)0; Fl_Check_Button *poll_tuner = (Fl_Check_Button *)0; Fl_Check_Button *poll_ptt = (Fl_Check_Button *)0; Fl_Check_Button *poll_break_in = (Fl_Check_Button *)0; Fl_Button *btnClearAddControls = (Fl_Button *)0; Fl_Button *btnSetMeters = (Fl_Button *)0; Fl_Button *btnSetOps = (Fl_Button *)0; Fl_Button *btnSetAdd = (Fl_Button *)0; Fl_Check_Button *poll_meters = (Fl_Check_Button *)0; Fl_Check_Button *poll_ops = (Fl_Check_Button *)0; Fl_Check_Button *poll_all = (Fl_Check_Button *)0; Fl_Check_Button *disable_polling = (Fl_Check_Button *)0; Fl_Check_Button *disable_xmlrpc = (Fl_Check_Button *)0; Fl_Group *tabSNDCMD = (Fl_Group *)0; Fl_Input2 *txt_command = (Fl_Input2 *)0; Fl_Button *btn_icom_pre = (Fl_Button *)0; Fl_Button *btn_icom_post = (Fl_Button *)0; Fl_Button *btn_send_command = (Fl_Button *)0; Fl_Output *txt_response = (Fl_Output *)0; Fl_Box *box_xcvr_connect = (Fl_Box *)0; Fl_Button *btn_init_ser_port = (Fl_Button *)0; Fl_Button *btn2_init_ser_port = (Fl_Button *)0; Fl_Button *btnCloseCommConfig = (Fl_Button *)0; Fl_Button *btnOkSepSerial = (Fl_Button *)0; Fl_Button *btnOkAuxSerial = (Fl_Button *)0; Fl_Group *tabTRACE = (Fl_Group *)0; Fl_Check_Button *btn_trace = (Fl_Check_Button *)0; Fl_Check_Button *btn_xmltrace = (Fl_Check_Button *)0; Fl_Check_Button *btn_rigtrace = (Fl_Check_Button *)0; Fl_Check_Button *btn_gettrace = (Fl_Check_Button *)0; Fl_Check_Button *btn_settrace = (Fl_Check_Button *)0; Fl_Check_Button *btn_debugtrace = (Fl_Check_Button *)0; Fl_Check_Button *btn_rpctrace = (Fl_Check_Button *)0; Fl_Check_Button *btn_serialtrace = (Fl_Check_Button *)0; Fl_Check_Button *btn_start_stop_trace = (Fl_Check_Button *)0; Fl_ComboBox *selectlevel = (Fl_ComboBox *)0; Fl_Button *btn_viewtrace = (Fl_Button *)0; Fl_Group *tabCOMMANDS = (Fl_Group *)0; Fl_Tabs *tabCmds = (Fl_Tabs *)0; Fl_Group *tabCmds1 = (Fl_Group *)0; Fl_Group *tabCmds2 = (Fl_Group *)0; Fl_Group *tabCmds3 = (Fl_Group *)0; Fl_Group *tabCmds4 = (Fl_Group *)0; Fl_Group *tabCmds5 = (Fl_Group *)0; Fl_Group *tabCmds6 = (Fl_Group *)0; Fl_Group *tabCmds_on_start_exit = (Fl_Group *)0; Fl_Box *bx1a = (Fl_Box *)0; Fl_Box *bx1b = (Fl_Box *)0; Fl_Box *bx2a = (Fl_Box *)0; Fl_Box *bx2b = (Fl_Box *)0; Fl_Box *bx3a = (Fl_Box *)0; Fl_Box *bx3b = (Fl_Box *)0; Fl_Box *bx4a = (Fl_Box *)0; Fl_Box *bx4b = (Fl_Box *)0; Fl_Box *bx5a = (Fl_Box *)0; Fl_Box *bx5b = (Fl_Box *)0; Fl_Box *bx6a = (Fl_Box *)0; Fl_Box *bx6b = (Fl_Box *)0; Fl_Input2 * cmdlbl1 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl2 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl3 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl4 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl5 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl6 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl7 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl8 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl9 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl10 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl11 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl12 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl13 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl14 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl15 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl16 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl17 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl18 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl19 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl20 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl21 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl22 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl23 = (Fl_Input2 *)0; Fl_Input2 * cmdlbl24 = (Fl_Input2 *)0; Fl_Input2 * cmdtext1 = (Fl_Input2 *)0; Fl_Input2 * cmdtext2 = (Fl_Input2 *)0; Fl_Input2 * cmdtext3 = (Fl_Input2 *)0; Fl_Input2 * cmdtext4 = (Fl_Input2 *)0; Fl_Input2 * cmdtext5 = (Fl_Input2 *)0; Fl_Input2 * cmdtext6 = (Fl_Input2 *)0; Fl_Input2 * cmdtext7 = (Fl_Input2 *)0; Fl_Input2 * cmdtext8 = (Fl_Input2 *)0; Fl_Input2 * cmdtext9 = (Fl_Input2 *)0; Fl_Input2 * cmdtext10 = (Fl_Input2 *)0; Fl_Input2 * cmdtext11 = (Fl_Input2 *)0; Fl_Input2 * cmdtext12 = (Fl_Input2 *)0; Fl_Input2 * cmdtext13 = (Fl_Input2 *)0; Fl_Input2 * cmdtext14 = (Fl_Input2 *)0; Fl_Input2 * cmdtext15 = (Fl_Input2 *)0; Fl_Input2 * cmdtext16 = (Fl_Input2 *)0; Fl_Input2 * cmdtext17 = (Fl_Input2 *)0; Fl_Input2 * cmdtext18 = (Fl_Input2 *)0; Fl_Input2 * cmdtext19 = (Fl_Input2 *)0; Fl_Input2 * cmdtext20 = (Fl_Input2 *)0; Fl_Input2 * cmdtext21 = (Fl_Input2 *)0; Fl_Input2 * cmdtext22 = (Fl_Input2 *)0; Fl_Input2 * cmdtext23 = (Fl_Input2 *)0; Fl_Input2 * cmdtext24 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext1 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext2 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext3 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext4 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext5 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext6 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext7 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext8 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext9 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext10 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext11 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext12 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext13 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext14 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext15 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext16 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext17= (Fl_Input2 *)0; Fl_Input2 * shftcmdtext18 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext19 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext20 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext21 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext22 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext23 = (Fl_Input2 *)0; Fl_Input2 * shftcmdtext24 = (Fl_Input2 *)0; Fl_Input2 * start_exit_label1 = (Fl_Input2 *)0; Fl_Input2 * start_exit_text1 = (Fl_Input2 *)0; Fl_Input2 * start_exit_label2 = (Fl_Input2 *)0; Fl_Input2 * start_exit_text2 = (Fl_Input2 *)0; Fl_Input2 * start_exit_label3 = (Fl_Input2 *)0; Fl_Input2 * start_exit_text3 = (Fl_Input2 *)0; Fl_Input2 * start_exit_label4 = (Fl_Input2 *)0; Fl_Input2 * start_exit_text4 = (Fl_Input2 *)0; Fl_Input2 * start_exit_label5 = (Fl_Input2 *)0; Fl_Input2 * start_exit_text5 = (Fl_Input2 *)0; Fl_Input2 * start_exit_label6 = (Fl_Input2 *)0; Fl_Input2 * start_exit_text6 = (Fl_Input2 *)0; Fl_Input2 * start_exit_label7 = (Fl_Input2 *)0; Fl_Input2 * start_exit_text7 = (Fl_Input2 *)0; Fl_Input2 * start_exit_label8 = (Fl_Input2 *)0; Fl_Input2 * start_exit_text8 = (Fl_Input2 *)0; Fl_Output * cmdResponse = (Fl_Output *)0; Fl_Group *tabRESTORE = (Fl_Group *)0; Fl_Check_Button *btnRestoreFrequency = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreMode = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreBandwidth = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreVolume = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreMicGain = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreRfGain = (Fl_Check_Button *)0; Fl_Check_Button *btnRestorePowerControl = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreIFshift = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreNotch = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreAutoNotch = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreSquelch = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreSplit = (Fl_Check_Button *)0; Fl_Check_Button *btnRestorePreAtt = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreNoise = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreNR = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreCompOnOff = (Fl_Check_Button *)0; Fl_Check_Button *btnRestoreCompLevel = (Fl_Check_Button *)0; Fl_Check_Button *btnUseRigData = (Fl_Check_Button *)0; static void cb_btn_trace(Fl_Check_Button *, void *) { progStatus.trace = btn_trace->value(); } static void cb_btn_rigtrace(Fl_Check_Button *, void *) { progStatus.rigtrace = btn_rigtrace->value(); } static void cb_btn_gettrace(Fl_Check_Button *, void *) { progStatus.gettrace = btn_gettrace->value(); } static void cb_btn_settrace(Fl_Check_Button *, void *) { progStatus.settrace = btn_settrace->value(); } static void cb_btn_xmltrace(Fl_Check_Button *, void *) { progStatus.xmltrace = btn_xmltrace->value(); } static void cb_btn_debugtrace(Fl_Check_Button *, void *) { progStatus.debugtrace = btn_debugtrace->value(); } static void cb_btn_rpctrace(Fl_Check_Button *, void *) { progStatus.rpctrace = btn_rpctrace->value(); } static void cb_btn_serialtrace(Fl_Check_Button *, void *) { progStatus.serialtrace = btn_serialtrace->value(); } static void cb_btn_start_stop_trace(Fl_Check_Button *, void *) { progStatus.start_stop_trace = btn_start_stop_trace->value(); } static void cb_selectlevel(Fl_ComboBox *, void *) { progStatus.rpc_level = selectlevel->index(); XmlRpc::setVerbosity(progStatus.rpc_level); } static void cb_btn_viewtrace(Fl_Button *, void *) { if (!tracewindow) make_trace_window(); tracewindow->show(); } static void cb_selectRig(Fl_ComboBox*, void*) { initConfigDialog(); btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_cntRigCatRetries(Fl_Counter* o, void*) { progStatus.serial_retries = (int)o->value(); } static void cb_cntRigCatTimeout(Fl_Counter* o, void*) { progStatus.serial_timeout = (int)o->value(); } static void cb_cntPostWriteDelay(Fl_Counter* o, void*) { progStatus.serial_post_write_delay = (int)o->value(); } static void cb_query_interval(Fl_Counter* o, void*) { progStatus.serloop_timing = (int)o->value(); } static void cb_cntWriteDelay(Fl_Counter* o, void*) { progStatus.serial_write_delay = (int)o->value(); } static void cbActivateDelays(Fl_Light_Button* o, void*) { if (o->value()) { cntRigCatRetries->activate(); cntRigCatTimeout->activate(); cntPostWriteDelay->activate(); cntWriteDelay->activate(); } else { cntRigCatRetries->deactivate(); cntRigCatTimeout->deactivate(); cntPostWriteDelay->deactivate(); cntWriteDelay->deactivate(); } } static void cb_selectCommPort(Fl_ComboBox*, void*) { btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_mnuBaudrate(Fl_ComboBox*, void*) { btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_btnTwoStopBit(Fl_Check_Button* o, void*) { if (o->value() == true) { btnOneStopBit->value(false); progStatus.stopbits = 2; } else o->value(true); btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_btnOneStopBit(Fl_Check_Button* o, void*) { if (o->value() == true) { btnTwoStopBit->value(false); progStatus.stopbits = 1; } else o->value(true); btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_tcpip_addr(Fl_Input2* o, void*) { progStatus.tcpip_addr = o->value(); } static void cb_tcpip_port(Fl_Input2* o, void*) { progStatus.tcpip_port = o->value(); } static void cb_tcpip_ping_delay(Fl_Counter* o, void*) { progStatus.tcpip_ping_delay = o->value(); } static void cb_use_tcpip(Fl_Check_Button* o, void*) { progStatus.use_tcpip = o->value(); if (!progStatus.use_tcpip) disconnect_from_remote(); else try { connect_to_remote(); initRig(); } catch (...) { progStatus.use_tcpip = 0; o->value(0); return; } } static void cb_cntRetryAfter(Fl_Counter* o, void *) { progStatus.tcpip_reconnect_after = o->value(); } static void cb_cntDropsAllowed(Fl_Counter* o, void *) { progStatus.tcpip_drops_allowed = o->value(); } static void cb_tci_addr(Fl_Input2* o, void*) { progStatus.tci_addr = o->value(); } static void cb_tci_port(Fl_Input2* o, void*) { progStatus.tci_port = o->value(); } static void cb_lbox_catptt(Fl_ListBox* o, void*) { progStatus.serial_catptt = o->index(); btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_lbox_rtsptt(Fl_ListBox* o, void*) { progStatus.serial_rtsptt = o->index(); btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_lbox_dtrptt(Fl_ListBox* o, void*) { progStatus.serial_dtrptt = o->index(); btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_chkrtscts(Fl_Check_Button*, void*) { btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); } static void cb_btnrtsplus(Fl_Check_Button *b, void*) { int val = b->value(); btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); btnrtsplus1->value(val); btnrtsplus2->value(val); } static void cb_btndtrplus(Fl_Check_Button *b, void*) { int val = b->value(); btn_init_ser_port->labelcolor(FL_RED); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_RED); btn2_init_ser_port->redraw_label(); btndtrplus1->value(val); btndtrplus2->value(val); } static void cb_txtCIV(Fl_Int_Input* o, void*) { cbCIV(); } static void cb_btnCIVdefault(Fl_Button*, void*) { cbCIVdefault(); } static void cb_btnUSBaudio(Fl_Check_Button*, void*) { cbUSBaudio(); } static void cb_selectSepPTTPort(Fl_ComboBox*, void*) { btnOkSepSerial->labelcolor(FL_RED); btnOkSepSerial->redraw_label(); } static void cb_lbox_sep_rtsptt(Fl_ListBox* o, void*) { progStatus.sep_rtsptt = o->index(); btnOkSepSerial->labelcolor(FL_RED); btnOkSepSerial->redraw_label(); } static void cb_btnSepRTSplus(Fl_Check_Button*, void*) { btnOkSepSerial->labelcolor(FL_RED); btnOkSepSerial->redraw_label(); } static void cb_lbox_sep_dtrptt(Fl_ListBox* o, void*) { progStatus.sep_dtrptt = o->index(); btnOkSepSerial->labelcolor(FL_RED); btnOkSepSerial->redraw_label(); } static void cb_btnSepDTRplus(Fl_Check_Button*, void*) { btnOkSepSerial->labelcolor(FL_RED); btnOkSepSerial->redraw_label(); } static void cb_btnSep_SCU_17(Fl_Check_Button*, void*) { btnOkSepSerial->labelcolor(FL_RED); btnOkSepSerial->redraw_label(); } static void cb_selectAuxPort(Fl_ComboBox*, void*) { btnOkAuxSerial->labelcolor(FL_RED); btnOkAuxSerial->redraw_label(); } static void cb_btnAux_SCU_17(Fl_Check_Button*, void*) { btnOkAuxSerial->labelcolor(FL_RED); btnOkAuxSerial->redraw_label(); } static void cb_power_limit(Fl_Counter*, void*) { progStatus.power_limit = cnt_power_limit->value(); if (progStatus.enable_power_limit) execute_setPower(); }; static void cb_enable_power_limit(Fl_Check_Button*, void *) { progStatus.enable_power_limit = btn_enable_power_limit->value(); if (progStatus.enable_power_limit) execute_setPower(); } static void cb_disable_CW_ptt(Fl_Check_Button *btn, void*) { progStatus.disable_CW_ptt = btn->value(); } static void cb_server_port(Fl_Input2* o, void*) { progStatus.xmlport = o->value(); ::xmlport = atoi(progStatus.xmlport.c_str()); set_server_port(::xmlport); } static void cb_client_addr(Fl_Input2* o, void*) { progStatus.xmlrig_addr = o->value(); } static void cb_client_port(Fl_Input2* o, void*) { progStatus.xmlrig_port = o->value(); } static void cb_poll_smeter(Fl_Check_Button* o, void*) { progStatus.poll_smeter = o->value(); } static void cb_poll_pout(Fl_Check_Button* o, void*) { progStatus.poll_pout = o->value(); } static void cb_poll_swr(Fl_Check_Button* o, void*) { progStatus.poll_swr = o->value(); } static void cb_poll_alc(Fl_Check_Button* o, void*) { progStatus.poll_alc = o->value(); } static void cb_poll_frequency(Fl_Check_Button* o, void*) { progStatus.poll_frequency = o->value(); } static void cb_poll_mode(Fl_Check_Button* o, void*) { progStatus.poll_mode = o->value(); } static void cb_poll_bandwidth(Fl_Check_Button* o, void*) { progStatus.poll_bandwidth = o->value(); } static void cb_poll_volume(Fl_Check_Button* o, void*) { progStatus.poll_volume = o->value(); } static void cb_poll_micgain(Fl_Check_Button* o, void*) { progStatus.poll_micgain = o->value(); } static void cb_poll_rfgain(Fl_Check_Button* o, void*) { progStatus.poll_rfgain = o->value(); } static void cb_poll_power_control(Fl_Check_Button* o, void*) { progStatus.poll_power_control = o->value(); } static void cb_poll_ifshift(Fl_Check_Button* o, void*) { progStatus.poll_ifshift = o->value(); } static void cb_poll_pbt(Fl_Check_Button* o, void*) { progStatus.poll_pbt = o->value(); } static void cb_poll_notch(Fl_Check_Button* o, void*) { progStatus.poll_notch = o->value(); } static void cb_poll_auto_notch(Fl_Check_Button* o, void*) { progStatus.poll_auto_notch = o->value(); } static void cb_poll_pre_att(Fl_Check_Button* o, void*) { progStatus.poll_pre_att = o->value(); } static void cb_poll_squelch(Fl_Check_Button* o, void*) { progStatus.poll_squelch = o->value(); } static void cb_poll_split(Fl_Check_Button* o, void*) { progStatus.poll_split = o->value(); } static void cb_poll_noise(Fl_Check_Button* o, void*) { progStatus.poll_noise = o->value(); } static void cb_poll_nr(Fl_Check_Button* o, void*) { progStatus.poll_nr = o->value(); } static void cb_poll_compression(Fl_Check_Button* o, void *) { progStatus.poll_compression = o->value(); } static void cb_poll_tuner(Fl_Check_Button* o, void *) { progStatus.poll_tuner = o->value(); } static void cb_poll_meters(Fl_Check_Button* o, void*) { progStatus.poll_meters = o->value(); } static void cb_poll_ptt(Fl_Check_Button* o, void*) { progStatus.poll_ptt = o->value(); } static void cb_poll_break_in(Fl_Check_Button* 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); poll_swr->value(progStatus.poll_meters); poll_alc->value(progStatus.poll_meters); progStatus.poll_smeter = progStatus.poll_meters; progStatus.poll_pout = progStatus.poll_meters; progStatus.poll_swr = progStatus.poll_meters; progStatus.poll_alc = progStatus.poll_meters; } static void cb_poll_ops(Fl_Check_Button* o, void*) { progStatus.poll_ops = o->value(); } static void cb_btnSetOps(Fl_Button*, void*) { poll_frequency->value(progStatus.poll_ops); poll_mode->value(progStatus.poll_ops); poll_bandwidth->value(progStatus.poll_ops); progStatus.poll_frequency = progStatus.poll_ops; progStatus.poll_mode = progStatus.poll_ops; progStatus.poll_bandwidth = progStatus.poll_ops; } static void cb_poll_all(Fl_Check_Button* o, void*) { progStatus.poll_all = o->value(); } static void cb_btnSetAdd(Fl_Button*, void*) { poll_volume->value(progStatus.poll_all); poll_micgain->value(progStatus.poll_all); poll_rfgain->value(progStatus.poll_all); poll_power_control->value(progStatus.poll_all); poll_ifshift->value(progStatus.poll_all); poll_pbt->value(progStatus.poll_all); poll_notch->value(progStatus.poll_all); poll_auto_notch->value(progStatus.poll_all); poll_pre_att->value(progStatus.poll_all); poll_squelch->value(progStatus.poll_all); poll_split->value(progStatus.poll_all); poll_noise->value(progStatus.poll_all); poll_nr->value(progStatus.poll_all); poll_compression->value(progStatus.poll_all); poll_tuner->value(progStatus.poll_all); poll_ptt->value(progStatus.poll_all); poll_break_in->value(progStatus.poll_all); progStatus.poll_volume = progStatus.poll_micgain = progStatus.poll_rfgain = progStatus.poll_power_control = progStatus.poll_ifshift = progStatus.poll_pbt = progStatus.poll_notch = progStatus.poll_auto_notch = progStatus.poll_pre_att = progStatus.poll_squelch = progStatus.poll_split = progStatus.poll_noise = progStatus.poll_nr = progStatus.poll_compression = progStatus.poll_tuner = progStatus.poll_ptt = progStatus.poll_break_in = progStatus.poll_all; } static void cb_btn_send_command(Fl_Button *o, void*) { cb_send_command(txt_command->value(), txt_response); } static const char hexsym[] = "0123456789ABCDEF"; static std::string str2hex(std::string str) { static std::string hexbuf; size_t len = str.length(); if (!len) return ""; hexbuf.clear(); for (size_t i = 0; i < len; i++) { hexbuf += 'x'; hexbuf += hexsym[(str[i] & 0xFF) >> 4]; hexbuf += hexsym[str[i] & 0xF]; hexbuf += ' '; } return hexbuf; } static void cb_btn_icom_pre(Fl_Button *o, void*) { if (!selrig->ICOMrig) return; txt_command->value(str2hex(selrig->pre_to).c_str()); } static void cb_btn_icom_post(Fl_Button *o, void*) { if (!selrig->ICOMrig) return; std::string s = txt_command->value(); s.append(str2hex(selrig->post)); txt_command->value(s.c_str()); } static void cb_cmdlbl(Fl_Input2 *o, void *d) { size_t val = reinterpret_cast(d); struct BPAIR { std::string *plbl; Fl_Button *b; } bpairs[] = { { &progStatus.label1, btnUser1 }, { &progStatus.label2, btnUser2 }, { &progStatus.label3, btnUser3 }, { &progStatus.label4, btnUser4 }, { &progStatus.label5, btnUser5 }, { &progStatus.label6, btnUser6 }, { &progStatus.label7, btnUser7 }, { &progStatus.label8, btnUser8 }, { &progStatus.label9, btnUser9 }, { &progStatus.label10, btnUser10 }, { &progStatus.label11, btnUser11 }, { &progStatus.label12, btnUser12 }, { &progStatus.label13, btnUser13 }, { &progStatus.label14, btnUser14 }, { &progStatus.label15, btnUser15 }, { &progStatus.label16, btnUser16 }, { &progStatus.label17, btnUser17 }, { &progStatus.label18, btnUser18 }, { &progStatus.label19, btnUser19 }, { &progStatus.label20, btnUser20 }, { &progStatus.label21, btnUser21 }, { &progStatus.label22, btnUser22 }, { &progStatus.label23, btnUser23 }, { &progStatus.label24, btnUser24 } }; if (val < 0) val = 0; if (val > 23) val = 23; *bpairs[val].plbl = o->value(); bpairs[val].b->label(o->value()); bpairs[val].b->redraw_label(); } static void cb_cmdtext(Fl_Input2 *o, void *d) { size_t val = reinterpret_cast(d); std::string *cmd[] = { &progStatus.command1, &progStatus.command2, &progStatus.command3, &progStatus.command4, &progStatus.command5, &progStatus.command6, &progStatus.command7, &progStatus.command8, &progStatus.command9, &progStatus.command10, &progStatus.command11, &progStatus.command12, &progStatus.command13, &progStatus.command14, &progStatus.command15, &progStatus.command16, &progStatus.command17, &progStatus.command18, &progStatus.command19, &progStatus.command20, &progStatus.command21, &progStatus.command22, &progStatus.command23, &progStatus.command24 }; if (val < 0) val = 0; if (val > 23) val = 23; *cmd[val] = o->value(); } static void cb_shftcmdtext(Fl_Input2 *o, void *d) { size_t val = reinterpret_cast(d); std::string *cmd[] = { &progStatus.shftcmd1, &progStatus.shftcmd2, &progStatus.shftcmd3, &progStatus.shftcmd4, &progStatus.shftcmd5, &progStatus.shftcmd6, &progStatus.shftcmd7, &progStatus.shftcmd8, &progStatus.shftcmd9, &progStatus.shftcmd10, &progStatus.shftcmd11, &progStatus.shftcmd12, &progStatus.shftcmd13, &progStatus.shftcmd14, &progStatus.shftcmd15, &progStatus.shftcmd16, &progStatus.shftcmd17, &progStatus.shftcmd18, &progStatus.shftcmd19, &progStatus.shftcmd20, &progStatus.shftcmd21, &progStatus.shftcmd22, &progStatus.shftcmd23, &progStatus.shftcmd24 }; if (val < 0) val = 0; if (val > 23) val = 23; *cmd[val] = o->value(); } static void cb_se_label(Fl_Input2 *o, void *d) { size_t val = reinterpret_cast(d); std::string *labels[] = { &progStatus.label_on_start1, &progStatus.label_on_start2, &progStatus.label_on_start3, &progStatus.label_on_start4, &progStatus.label_on_exit1, &progStatus.label_on_exit2, &progStatus.label_on_exit3, &progStatus.label_on_exit4, }; if (val < 0) val = 0; if (val > 8) val = 8; *labels[val] = o->value(); } static void cb_se_text(Fl_Input2 *o, void *d) { size_t val = reinterpret_cast(d); std::string *cmd[] = { &progStatus.cmd_on_start1, &progStatus.cmd_on_start2, &progStatus.cmd_on_start3, &progStatus.cmd_on_start4, &progStatus.cmd_on_exit1, &progStatus.cmd_on_exit2, &progStatus.cmd_on_exit3, &progStatus.cmd_on_exit4, }; if (val < 0) val = 0; if (val > 8) val = 8; *cmd[val] = o->value(); } static void cb_init_ser_port(Fl_Return_Button*, void*) { if (selrig->io_class == TCI) { initRig(); return; } std::string p1 = selectCommPort->value(); std::string p2 = selectAuxPort->value(); std::string p3 = selectSepPTTPort->value(); if ( (p1 == "NONE") && (p1 == p2 || p1 == p3) ) { fl_message("Select separate ports"); return; } if (progStatus.UIsize == wide_ui) { btn_show_controls->label("@-22->"); btn_show_controls->redraw_label(); mainwindow->size(mainwindow->w(), WIDE_MAINH); mainwindow->size_range(WIDE_MAINW, WIDE_MAINH, 0, WIDE_MAINH); } // close the current rig control closeRig(); // local serial comm connection { guard_lock gl_serial(&mutex_serial); bypass_serial_thread_loop = true; trace(1, "close serial port"); progStatus.xcvr_serial_port = p1; if (p1 == "xml_client") { if (connect_to_client()) progStatus.xmlrpc_rig = true; else progStatus.xmlrpc_rig = false;; } else { RigSerial->ClosePort(); progStatus.serial_baudrate = mnuBaudrate->index(); progStatus.stopbits = btnOneStopBit->value() ? 1 : 2; progStatus.serial_retries = (int)cntRigCatRetries->value(); progStatus.serial_timeout = (int)cntRigCatTimeout->value(); progStatus.serial_post_write_delay = (int)cntPostWriteDelay->value(); progStatus.serial_rtsptt = lbox_rtsptt->index(); progStatus.serial_catptt = lbox_catptt->index(); progStatus.serial_dtrptt = lbox_dtrptt->index(); progStatus.serial_rtscts = chkrtscts->value(); progStatus.serial_rtsplus = btnrtsplus1->value(); progStatus.serial_dtrplus = btndtrplus1->value(); } } trace(1, "clear frequency list"); clearList(); saveFreqList(); selrig = (rigbase *)(selectRig->data()); xcvr_name = selrig->name_; progStatus.imode_B = progStatus.imode_A = selrig->def_mode; progStatus.iBW_B = progStatus.iBW_A = selrig->def_bw; progStatus.freq_B = progStatus.freq_A = selrig->def_freq; trace(1, "initialize title bar"); init_title(); trace(1, "start tranceiver serial port"); if (!startXcvrSerial()) { trace(1, "FAILED"); if (progStatus.xcvr_serial_port == "NONE") { LOG_WARN("No comm port ... test mode"); } else { // progStatus.xcvr_serial_port = "NONE"; // selectCommPort->value(progStatus.xcvr_serial_port.c_str()); } } trace(1, "initialize transceiver"); initRig(); btn_init_ser_port->labelcolor(FL_BLACK); btn_init_ser_port->redraw_label(); btn2_init_ser_port->labelcolor(FL_BLACK); btn2_init_ser_port->redraw_label(); } static void cb_btnOkSepSerial(Fl_Button*, void*) { std::string p2 = selectAuxPort->value(); std::string p3 = selectSepPTTPort->value(); if ((p3.compare("NONE") != 0) && p2 == p3) { fl_message("Port used for Aux i/o"); return; } progStatus.sep_serial_port = selectSepPTTPort->value(); progStatus.sep_SCU_17 = btnSep_SCU_17->value(); progStatus.sep_dtrplus = btnSepDTRplus->value(); progStatus.sep_dtrptt = lbox_sep_dtrptt->index(); progStatus.sep_rtsplus = btnSepRTSplus->value(); progStatus.sep_rtsptt = lbox_sep_rtsptt->index(); if (!startSepSerial()) { if (progStatus.sep_serial_port.compare("NONE") != 0) { progStatus.sep_serial_port = "NONE"; selectSepPTTPort->value(progStatus.sep_serial_port.c_str()); } } btnOkSepSerial->labelcolor(FL_BLACK); btnOkSepSerial->redraw_label(); } static void cb_btnOkAuxSerial(Fl_Button*, void*) { AuxSerial->ClosePort(); std::string p2 = selectAuxPort->value(); std::string p3 = selectSepPTTPort->value(); if ((p2.compare("NONE") != 0) && p2 == p3) { fl_message("Port used for Sep serial"); return; } progStatus.aux_serial_port = selectAuxPort->value(); progStatus.aux_SCU_17 = btnAux_SCU_17->value(); if (!startAuxSerial()) { if (progStatus.aux_serial_port.compare("NONE") != 0) { progStatus.aux_serial_port = "NONE"; selectAuxPort->value(progStatus.aux_serial_port.c_str()); } } btnOkAuxSerial->labelcolor(FL_BLACK); btnOkAuxSerial->redraw_label(); } static void cb_restore(Fl_Check_Button *btn, void*) { progStatus.restore_frequency = btnRestoreFrequency->value(); progStatus.restore_mode = btnRestoreMode->value(); progStatus.restore_bandwidth = btnRestoreBandwidth->value(); progStatus.restore_volume = btnRestoreVolume->value(); progStatus.restore_mic_gain = btnRestoreMicGain->value(); progStatus.restore_rf_gain = btnRestoreRfGain->value(); progStatus.restore_power_control = btnRestorePowerControl->value(); progStatus.restore_if_shift = btnRestoreIFshift->value(); progStatus.restore_notch = btnRestoreNotch->value(); progStatus.restore_auto_notch = btnRestoreAutoNotch->value(); progStatus.restore_noise = btnRestoreNoise->value(); progStatus.restore_squelch = btnRestoreSquelch->value(); progStatus.restore_split = btnRestoreSplit->value(); progStatus.restore_pre_att = btnRestorePreAtt->value(); progStatus.restore_nr = btnRestoreNR->value(); progStatus.restore_comp_on_off = btnRestoreCompOnOff->value(); progStatus.restore_comp_level = btnRestoreCompLevel->value(); progStatus.use_rig_data = btnUseRigData->value(); } void cb_comports(Fl_Button *b, void* d) { init_port_combos(); } Fl_Group *createXCVR(int X, int Y, int W, int H, const char *label) { Fl_Group *tabXCVR = new Fl_Group(X, Y, W, H, label); selectRig = new Fl_ComboBox( tabXCVR->x() + 60, tabXCVR->y() + 4, tabXCVR->w() - 64, 22, _("Rig:")); selectRig->tooltip(_("Select Transceiver")); selectRig->box(FL_DOWN_BOX); selectRig->color(FL_BACKGROUND2_COLOR); selectRig->selection_color(FL_BACKGROUND_COLOR); selectRig->labeltype(FL_NORMAL_LABEL); selectRig->labelfont(0); selectRig->labelsize(14); selectRig->labelcolor(FL_FOREGROUND_COLOR); selectRig->callback((Fl_Callback*)cb_selectRig); selectRig->align(Fl_Align(FL_ALIGN_LEFT)); selectRig->readonly(); selectRig->when(FL_WHEN_RELEASE); selectRig->end(); Fl_Button *comports = new Fl_Button( tabXCVR->x() + 4, selectRig->y() + 26, 52, 22, _("Update")); comports->box(FL_THIN_UP_BOX); comports->tooltip(_("Update serial port combo")); comports->callback((Fl_Callback*)cb_comports); comports->when(FL_WHEN_RELEASE); selectCommPort = new Fl_ComboBox( selectRig->x(), comports->y(), selectRig->w(), 22, ""); selectCommPort->tooltip(_("Xcvr serial port")); selectCommPort->box(FL_DOWN_BOX); selectCommPort->color(FL_BACKGROUND2_COLOR); selectCommPort->selection_color(FL_BACKGROUND_COLOR); selectCommPort->labeltype(FL_NORMAL_LABEL); selectCommPort->labelfont(0); selectCommPort->labelsize(14); selectCommPort->labelcolor(FL_FOREGROUND_COLOR); selectCommPort->callback((Fl_Callback*)cb_selectCommPort); selectCommPort->align(Fl_Align(FL_ALIGN_CENTER)); selectCommPort->when(FL_WHEN_RELEASE); selectCommPort->end(); mnuBaudrate = new Fl_ComboBox( selectCommPort->x(), selectCommPort->y() + 26, 160, 22, _("Baud:")); mnuBaudrate->tooltip(_("Xcvr baudrate")); mnuBaudrate->box(FL_DOWN_BOX); mnuBaudrate->color(FL_BACKGROUND2_COLOR); mnuBaudrate->selection_color(FL_BACKGROUND_COLOR); mnuBaudrate->labeltype(FL_NORMAL_LABEL); mnuBaudrate->labelfont(0); mnuBaudrate->labelsize(14); mnuBaudrate->labelcolor(FL_FOREGROUND_COLOR); mnuBaudrate->callback((Fl_Callback*)cb_mnuBaudrate); mnuBaudrate->align(Fl_Align(FL_ALIGN_LEFT)); mnuBaudrate->readonly(); mnuBaudrate->when(FL_WHEN_RELEASE); mnuBaudrate->end(); btnOneStopBit = new Fl_Check_Button( mnuBaudrate->x(), mnuBaudrate->y() + 26, 100, 22, _("1 Stop Bit")); btnOneStopBit->tooltip(_("One Stop Bit")); btnOneStopBit->down_box(FL_DOWN_BOX); btnOneStopBit->callback((Fl_Callback*)cb_btnOneStopBit); btnOneStopBit->value(progStatus.stopbits == 1); btnTwoStopBit = new Fl_Check_Button( btnOneStopBit->x() + 120, btnOneStopBit->y(), 100, 22, _("2 Stop Bits")); btnTwoStopBit->down_box(FL_DOWN_BOX); btnTwoStopBit->callback((Fl_Callback*)cb_btnTwoStopBit); btnTwoStopBit->value(progStatus.stopbits == 2); chkrtscts = new Fl_Check_Button( btnTwoStopBit->x(), btnTwoStopBit->y() + 25, 100, 22, _("RTS/CTS")); chkrtscts->tooltip(_("Xcvr uses RTS/CTS handshake")); chkrtscts->down_box(FL_DOWN_BOX); chkrtscts->callback((Fl_Callback*)cb_chkrtscts); chkrtscts->value(progStatus.serial_rtscts); btnrtsplus1 = new Fl_Check_Button( btnOneStopBit->x(), btnOneStopBit->y() + 50, 100, 22, _("RTS +12 v")); btnrtsplus1->tooltip(_("Initial state of RTS")); btnrtsplus1->callback((Fl_Callback*)cb_btnrtsplus); btnrtsplus1->value(progStatus.serial_rtsplus); btndtrplus1 = new Fl_Check_Button( chkrtscts->x(), btnrtsplus1->y(), 100, 22, _("DTR +12 v")); btndtrplus1->tooltip(_("Initia state of DTR")); btndtrplus1->callback((Fl_Callback*)cb_btndtrplus); btndtrplus1->value(progStatus.serial_dtrplus); cntRigCatRetries = new Fl_Counter( tabXCVR->x() + tabXCVR->w() - 110 - 4, mnuBaudrate->y(), 110, 22, _("Retries")); cntRigCatRetries->tooltip(_("Number of times to resend\ncommand before giving up")); cntRigCatRetries->minimum(1); cntRigCatRetries->maximum(10); cntRigCatRetries->step(1); cntRigCatRetries->value(5); cntRigCatRetries->callback((Fl_Callback*)cb_cntRigCatRetries); cntRigCatRetries->align(Fl_Align(FL_ALIGN_LEFT)); cntRigCatRetries->value(progStatus.serial_retries); cntRigCatRetries->lstep(10); cntRigCatRetries->deactivate(); cntRigCatTimeout = new Fl_Counter( cntRigCatRetries->x(), cntRigCatRetries->y() + 26, 110, 22, _("Timeout")); cntRigCatTimeout->tooltip(_("Serial port select timeout")); cntRigCatTimeout->minimum(0); cntRigCatTimeout->maximum(500); cntRigCatTimeout->step(1); cntRigCatTimeout->value(10); cntRigCatTimeout->callback((Fl_Callback*)cb_cntRigCatTimeout); cntRigCatTimeout->align(Fl_Align(FL_ALIGN_LEFT)); cntRigCatTimeout->value(progStatus.serial_timeout); cntRigCatTimeout->lstep(10); cntRigCatTimeout->deactivate(); cntWriteDelay = new Fl_Counter( cntRigCatRetries->x(), cntRigCatTimeout->y() + 26, 110, 22, _("Write delay")); cntWriteDelay->tooltip(_("Wait msecs between serial bytes")); cntWriteDelay->minimum(0); cntWriteDelay->maximum(200); cntWriteDelay->step(1); cntWriteDelay->value(0); cntWriteDelay->callback((Fl_Callback*)cb_cntWriteDelay); cntWriteDelay->align(Fl_Align(FL_ALIGN_LEFT)); cntWriteDelay->value(progStatus.serial_write_delay); cntWriteDelay->lstep(10); cntWriteDelay->deactivate(); cntPostWriteDelay = new Fl_Counter( cntRigCatRetries->x(), cntWriteDelay->y() + 26, 110, 22, _("Post delay")); cntPostWriteDelay->tooltip(_("Wait msecs after last byte sent")); cntPostWriteDelay->minimum(0); cntPostWriteDelay->maximum(500); cntPostWriteDelay->step(1); cntPostWriteDelay->value(5); cntPostWriteDelay->callback((Fl_Callback*)cb_cntPostWriteDelay); cntPostWriteDelay->align(Fl_Align(FL_ALIGN_LEFT)); cntPostWriteDelay->value(progStatus.serial_post_write_delay); cntPostWriteDelay->lstep(10); cntPostWriteDelay->deactivate(); query_interval = new Fl_Counter( cntRigCatRetries->x(), cntPostWriteDelay->y() + 26, 110, 22, _("Poll intvl")); query_interval->tooltip(_("Polling interval in msec")); query_interval->minimum(10); query_interval->maximum(5000); query_interval->step(1); query_interval->value(50); query_interval->callback((Fl_Callback*)cb_query_interval); query_interval->align(Fl_Align(FL_ALIGN_LEFT)); query_interval->value(progStatus.serloop_timing); query_interval->lstep(10); btnActivateDelays = new Fl_Light_Button( query_interval->x(), query_interval->y() + 26, 110, 22, _("Activate")); btnActivateDelays->tooltip(_("Activate timing controls")); btnActivateDelays->value(0); btnActivateDelays->callback((Fl_Callback*)cbActivateDelays); txtCIV = new Fl_Int_Input( tabXCVR->x() + 6, tabXCVR->y() + 170, 58, 22, _("CI-V adr")); txtCIV->tooltip(_("Enter hex value, ie: 0x5F")); txtCIV->type(2); txtCIV->callback((Fl_Callback*)cb_txtCIV); txtCIV->align(Fl_Align(FL_ALIGN_RIGHT)); btnCIVdefault = new Fl_Button( txtCIV->x() + txtCIV->w() + 4, txtCIV->y(), 70, 22, _("Default")); btnCIVdefault->callback((Fl_Callback*)cb_btnCIVdefault); btnUSBaudio = new Fl_Check_Button( tabXCVR->x() + 6, btnCIVdefault->y() + 30, 100, 18, _("USB audio")); btnUSBaudio->down_box(FL_DOWN_BOX); btnUSBaudio->callback((Fl_Callback*)cb_btnUSBaudio); box_xcvr_connect = new Fl_Box( X + W - 90, Y + H - 27, 18, 18, _("Connected")); box_xcvr_connect->tooltip(_("Lit when connected")); box_xcvr_connect->box(FL_DIAMOND_DOWN_BOX); box_xcvr_connect->color(FL_LIGHT1); box_xcvr_connect->align(Fl_Align(FL_ALIGN_LEFT)); btn_init_ser_port = new Fl_Button( X + W - 60, Y + H - 30, 50, 24, _("Init")); btn_init_ser_port->callback((Fl_Callback*)cb_init_ser_port); tabXCVR->end(); return tabXCVR; } Fl_Group *createTRACE(int X, int Y, int W, int H, const char *label) { Fl_Group *tabTRACE = new Fl_Group(X, Y, W, H, label); tabTRACE->hide(); btn_trace = new Fl_Check_Button(X + 10, Y + 20, 80, 20, _("Trace support code")); btn_trace->value(progStatus.trace); btn_trace->callback((Fl_Callback*)cb_btn_trace); btn_trace->tooltip(_("Enable trace support")); btn_debugtrace = new Fl_Check_Button(X + 10, Y + 50, 80, 20, _("Trace debug code")); btn_debugtrace->value(progStatus.debugtrace); btn_debugtrace->callback((Fl_Callback*)cb_btn_debugtrace); btn_debugtrace->tooltip(_("Display debug output on trace view")); btn_rigtrace = new Fl_Check_Button(X + 10, Y + 80, 80, 20, _("Trace rig class code")); btn_rigtrace->value(progStatus.rigtrace); btn_rigtrace->callback((Fl_Callback*)cb_btn_rigtrace); btn_rigtrace->tooltip(_("Enable trace of rig methods")); btn_gettrace = new Fl_Check_Button(X + 10, Y + 110, 80, 20, _("Trace rig class get code")); btn_gettrace->value(progStatus.gettrace); btn_gettrace->callback((Fl_Callback*)cb_btn_gettrace); btn_gettrace->tooltip(_("Enable trace of rig get methods")); btn_settrace = new Fl_Check_Button(X + 10, Y + 140, 80, 20, _("Trace rig class set code")); btn_settrace->value(progStatus.settrace); btn_settrace->callback((Fl_Callback*)cb_btn_settrace); btn_settrace->tooltip(_("Enable trace of rig set methods")); btn_xmltrace = new Fl_Check_Button(X + 240, Y + 20, 80, 20, _("Trace xml_server code")); btn_xmltrace->value(progStatus.xmltrace); btn_xmltrace->callback((Fl_Callback*)cb_btn_xmltrace); btn_xmltrace->tooltip(_("Enable trace of xmlrpc functions")); btn_rpctrace = new Fl_Check_Button(X + 240, Y + 50, 80, 20, _("Trace xmlrpcpp code")); btn_rpctrace->value(progStatus.rpctrace); btn_rpctrace->callback((Fl_Callback*)cb_btn_rpctrace); btn_rpctrace->tooltip(_("Enable trace of XmlRpc methods")); btn_serialtrace = new Fl_Check_Button(X + 240, Y + 80, 80, 20, _("Trace serial code")); btn_serialtrace->value(progStatus.serialtrace); btn_serialtrace->callback((Fl_Callback*)cb_btn_serialtrace); btn_serialtrace->tooltip(_("Enable trace of serial i/o")); btn_start_stop_trace = new Fl_Check_Button(X + 240, Y + 110, 80, 20, _("Trace start/stop code")); btn_start_stop_trace->value(progStatus.start_stop_trace); btn_start_stop_trace->callback((Fl_Callback*)cb_btn_start_stop_trace); btn_start_stop_trace->tooltip(_("Enable trace of start/stop operations")); selectlevel = new Fl_ComboBox(X + 240, Y + 140, 80, 20, _("XmlRpc trace level")); selectlevel->add("0|1|2|3|4"); selectlevel->align(FL_ALIGN_RIGHT); selectlevel->index(progStatus.rpc_level); selectlevel->tooltip(_("0 = off ... 4 maximum depth")); selectlevel->readonly(); selectlevel->callback((Fl_Callback*)cb_selectlevel); btn_viewtrace = new Fl_Button(X + W - 90, Y + H - 30, 85, 24, _("View Trace")); btn_viewtrace->callback((Fl_Callback*)cb_btn_viewtrace); tabTRACE->end(); return tabTRACE; } Fl_Group *createTCPIP(int X, int Y, int W, int H, const char *label) { Fl_Group * tabTCPIP = new Fl_Group(X, Y, W, H, label); tabTCPIP->hide(); Fl_Group *tcpip_grp1 = new Fl_Group(X + 5, Y + 5, W - 10, 140, _("Remote flrig")); tcpip_grp1->box(FL_ENGRAVED_BOX); tcpip_grp1->align(FL_ALIGN_TOP_LEFT | FL_ALIGN_INSIDE); inp_tcpip_addr = new Fl_Input2(X + 120, Y + 30, W - 140, 22, _("TCPIP address:")); inp_tcpip_addr->tooltip(_("remote tcpip server address")); inp_tcpip_addr->callback((Fl_Callback*)cb_tcpip_addr); inp_tcpip_addr->value(progStatus.tcpip_addr.c_str()); inp_tcpip_port = new Fl_Input2(X + 120, Y + 60, 100, 22, _("TCPIP port:")); inp_tcpip_port->tooltip(_("remote tcpip server port")); inp_tcpip_port->type(2); inp_tcpip_port->callback((Fl_Callback*)cb_tcpip_port); inp_tcpip_port->value(progStatus.tcpip_port.c_str()); inp_tcpip_ping_delay = new Fl_Counter(X + 120, Y + 85, 100, 22, _("Ping delay")); inp_tcpip_ping_delay->tooltip(_("enter round trip ping delay")); inp_tcpip_ping_delay->callback((Fl_Callback*)cb_tcpip_ping_delay); inp_tcpip_ping_delay->minimum(0); inp_tcpip_ping_delay->maximum(500); inp_tcpip_ping_delay->step(5); inp_tcpip_ping_delay->lstep(20); inp_tcpip_ping_delay->value(progStatus.tcpip_ping_delay); inp_tcpip_ping_delay->align(Fl_Align(FL_ALIGN_LEFT)); chk_use_tcpip = new Fl_Check_Button(X + 120, Y + 110, 18, 18, _("Use tcpip")); chk_use_tcpip->tooltip(_("Rig control via tcpip")); chk_use_tcpip->callback((Fl_Callback*)cb_use_tcpip); chk_use_tcpip->value(progStatus.use_tcpip); chk_use_tcpip->align(Fl_Align(FL_ALIGN_LEFT)); box_tcpip_connect = new Fl_Box(X + 200, Y + 110, 18, 18, _("Connected")); box_tcpip_connect->tooltip(_("Lit when connected to remote tcpip")); box_tcpip_connect->box(FL_DIAMOND_DOWN_BOX); box_tcpip_connect->color(FL_LIGHT1); box_tcpip_connect->align(Fl_Align(FL_ALIGN_RIGHT)); cntRetryAfter = new Fl_Counter(X + W - 120, Y + 60, 100, 20, _("Retry (secs)")); cntRetryAfter->tooltip(_("Retry connection if lost")); cntRetryAfter->minimum(1); cntRetryAfter->maximum(120); cntRetryAfter->step(1); cntRetryAfter->lstep(10); cntRetryAfter->callback((Fl_Callback*)cb_cntRetryAfter); cntRetryAfter->align(Fl_Align(FL_ALIGN_LEFT)); cntRetryAfter->value(progStatus.tcpip_reconnect_after); cntDropsAllowed = new Fl_Counter(cntRetryAfter->x(), Y + 80, 100, 20, _("Allowed drops")); cntDropsAllowed->tooltip(_("# tcpip drop-outs before connection declared down")); cntDropsAllowed->minimum(1); cntDropsAllowed->maximum(25); cntDropsAllowed->step(1); cntDropsAllowed->lstep(5); cntDropsAllowed->callback((Fl_Callback*)cb_cntDropsAllowed); cntDropsAllowed->align(Fl_Align(FL_ALIGN_LEFT)); cntDropsAllowed->value(progStatus.tcpip_drops_allowed); tcpip_grp1->end(); Fl_Group *tcpip_grp2 = new Fl_Group(X + 5, Y + 150, W - 10, 90, _("TCI interface")); tcpip_grp2->box(FL_ENGRAVED_BOX); tcpip_grp2->align(FL_ALIGN_TOP_LEFT | FL_ALIGN_INSIDE); inp_tci_address = new Fl_Input2(X + 120, Y + 175, W - 140, 22, _("TCI address:")); inp_tci_address->tooltip(_("local/remote TCI server address")); inp_tci_address->callback((Fl_Callback*)cb_tci_addr); inp_tci_address->value(progStatus.tci_addr.c_str()); inp_tci_port = new Fl_Input2(inp_tci_address->x(), inp_tci_address->y() + 25, 100, 22, _("TCI port:")); inp_tci_port->tooltip(_("local/remote TCI server port")); inp_tci_port->type(2); inp_tci_port->callback((Fl_Callback*)cb_tci_port); inp_tci_port->value(progStatus.tci_port.c_str()); tcpip_grp2->end(); tabTCPIP->end(); return tabTCPIP; } Fl_Group *createPTT(int X, int Y, int W, int H, const char *label) { Fl_Group *tab = new Fl_Group(X, Y, W, H, label); tab->hide(); Fl_Group *grp_CW_ptt = new Fl_Group(X + 2, Y + 20, W - 4, 30, _("CW mode PTT")); grp_CW_ptt->box(FL_ENGRAVED_BOX); grp_CW_ptt->align(Fl_Align(FL_ALIGN_TOP_LEFT)); Fl_Check_Button *btn_disable_CW_ptt = new Fl_Check_Button( grp_CW_ptt->x() + 10, grp_CW_ptt->y() + 4, 200, 22, _("disable PTT in CW mode")); btn_disable_CW_ptt->value(progStatus.disable_CW_ptt); btn_disable_CW_ptt->callback((Fl_Callback*)cb_disable_CW_ptt); grp_CW_ptt->end(); Fl_Group *grp_catptt = new Fl_Group ( grp_CW_ptt->x(), grp_CW_ptt->y() + grp_CW_ptt->h() + 20, grp_CW_ptt->w(), 60, _("PTT on CAT Serial Port")); grp_catptt->box(FL_ENGRAVED_BOX); grp_catptt->align(Fl_Align(FL_ALIGN_TOP_LEFT)); int incr = (grp_CW_ptt->w() - 10) / 3.5; lbox_catptt = new Fl_ListBox( grp_catptt->x() + 5, grp_catptt->y() + 8, 90, 22, _("CAT")); lbox_catptt->tooltip(_("PTT is a CAT command (not hardware)")); lbox_catptt->callback((Fl_Callback*)cb_lbox_catptt); lbox_catptt->add("OFF|BOTH|SET|GET"); lbox_catptt->index(progStatus.serial_catptt); lbox_catptt->align(FL_ALIGN_RIGHT); lbox_rtsptt = new Fl_ListBox( lbox_catptt->x() + incr, grp_catptt->y() + 8, 90, 22, _("RTS")); lbox_rtsptt->tooltip(_("RTS is ptt line")); lbox_rtsptt->callback((Fl_Callback*)cb_lbox_rtsptt); lbox_rtsptt->add("OFF|BOTH|SET|GET"); lbox_rtsptt->index(progStatus.serial_rtsptt); lbox_rtsptt->align(FL_ALIGN_RIGHT); lbox_dtrptt = new Fl_ListBox( lbox_rtsptt->x() + incr, grp_catptt->y() + 8, 90, 22, _("DTR")); lbox_dtrptt->tooltip(_("DTR is ptt line")); lbox_dtrptt->callback((Fl_Callback*)cb_lbox_dtrptt); lbox_dtrptt->add("OFF|BOTH|SET|GET"); lbox_dtrptt->index(progStatus.serial_dtrptt); lbox_dtrptt->align(FL_ALIGN_RIGHT); btn2_init_ser_port = new Fl_Button( lbox_dtrptt->x() + incr, lbox_dtrptt->y(), 50, 24, _("Init")); btn2_init_ser_port->callback((Fl_Callback*)cb_init_ser_port); btnrtsplus2 = new Fl_Check_Button( lbox_rtsptt->x(), lbox_rtsptt->y() + 24, 100, 21, _("RTS +12 v")); btnrtsplus2->tooltip(_("Initial state of RTS")); btnrtsplus2->callback((Fl_Callback*)cb_btnrtsplus); btnrtsplus2->value(progStatus.serial_rtsplus); btndtrplus2 = new Fl_Check_Button( lbox_dtrptt->x(), lbox_dtrptt->y() + 24, 100, 21, _("DTR +12 v")); btndtrplus2->tooltip(_("Initial state of DTR")); btndtrplus2->callback((Fl_Callback*)cb_btndtrplus); btndtrplus2->value(progStatus.serial_dtrplus); grp_catptt->end(); Fl_Group *grp_ptt = new Fl_Group( grp_catptt->x(), grp_catptt->y() + grp_catptt->h() + 20, grp_catptt->w(), H - (grp_catptt->y() + grp_catptt->h() + 20), _("PTT control on Separate Serial Port")); grp_ptt->box(FL_ENGRAVED_BOX); grp_ptt->align(Fl_Align(FL_ALIGN_TOP_LEFT)); selectSepPTTPort = new Fl_ComboBox( grp_catptt->x() + 50, grp_ptt->y() + 10, grp_ptt->w() - 54, 22, _("Port")); selectSepPTTPort->tooltip(_("PTT on Separate Serial Port")); selectSepPTTPort->box(FL_DOWN_BOX); selectSepPTTPort->color(FL_BACKGROUND2_COLOR); selectSepPTTPort->selection_color(FL_BACKGROUND_COLOR); selectSepPTTPort->labeltype(FL_NORMAL_LABEL); selectSepPTTPort->labelfont(0); selectSepPTTPort->labelsize(14); selectSepPTTPort->labelcolor(FL_FOREGROUND_COLOR); selectSepPTTPort->callback((Fl_Callback*)cb_selectSepPTTPort); selectSepPTTPort->align(Fl_Align(FL_ALIGN_LEFT)); selectSepPTTPort->when(FL_WHEN_RELEASE); selectSepPTTPort->end(); btnSep_SCU_17 = new Fl_Check_Button( selectSepPTTPort->x(), selectSepPTTPort->y() + 28, 128, 22, _("SCU-17")); btnSep_SCU_17->tooltip(_("Port is SCU-17 auxilliary\nSet stop bits to ZERO")); btnSep_SCU_17->callback((Fl_Callback*)cb_btnSep_SCU_17); btnSep_SCU_17->value(progStatus.sep_SCU_17); lbox_sep_rtsptt = new Fl_ListBox( lbox_rtsptt->x(), selectSepPTTPort->y() + 30, 90, 22, _("RTS")); lbox_sep_rtsptt->tooltip(_("RTS is ptt line")); lbox_sep_rtsptt->callback((Fl_Callback*)cb_lbox_sep_rtsptt); lbox_sep_rtsptt->add("OFF|BOTH|SET|GET"); lbox_sep_rtsptt->index(progStatus.sep_rtsptt); lbox_sep_rtsptt->align(FL_ALIGN_RIGHT); lbox_sep_dtrptt = new Fl_ListBox( lbox_dtrptt->x(), lbox_sep_rtsptt->y(), 90, 22, _("DTR")); lbox_sep_dtrptt->tooltip(_("DTR is ptt line")); lbox_sep_dtrptt->callback((Fl_Callback*)cb_lbox_sep_dtrptt); lbox_sep_dtrptt->add("OFF|BOTH|SET|GET"); lbox_sep_dtrptt->index(progStatus.sep_dtrptt); lbox_sep_dtrptt->align(FL_ALIGN_RIGHT); btnOkSepSerial = new Fl_Button( lbox_sep_dtrptt->x() + incr, lbox_sep_dtrptt->y(), 50, 24, _("Init")); btnOkSepSerial->callback((Fl_Callback*)cb_btnOkSepSerial); btnSepRTSplus = new Fl_Check_Button( lbox_rtsptt->x(), lbox_sep_rtsptt->y() + 24, 125, 22, _("RTS +12 v")); btnSepRTSplus->tooltip(_("Initial state of RTS")); btnSepRTSplus->callback((Fl_Callback*)cb_btnSepRTSplus); btnSepRTSplus->value(progStatus.sep_rtsplus); btnSepDTRplus = new Fl_Check_Button( lbox_dtrptt->x(), btnSepRTSplus->y(), 125, 22, _("DTR +12 v")); btnSepDTRplus->tooltip(_("Initial state of DTR")); btnSepDTRplus->callback((Fl_Callback*)cb_btnSepDTRplus); btnSepDTRplus->value(progStatus.sep_dtrplus); grp_ptt->end(); tab->end(); return tab; } Fl_Group *createAUX(int X, int Y, int W, int H, const char *label) { Fl_Group * tabOTHER = new Fl_Group(X, Y, W, H, label); tabOTHER->hide(); Fl_Group *other_grp1 = new Fl_Group(X+5, Y+5, W-10, (H-10) / 2, "Auxiliary Port"); other_grp1->box(FL_ENGRAVED_BOX); other_grp1->align(FL_ALIGN_TOP_LEFT | FL_ALIGN_INSIDE); Fl_Box *bxsep = new Fl_Box(X + 70, Y + 10, W-140, 45, _("Use only if your setup requires a separate\nSerial Port for a special Control Signals")); bxsep->box(FL_FLAT_BOX); selectAuxPort = new Fl_ComboBox(X + 130, Y + 60, 240, 22, _("Aux")); selectAuxPort->tooltip(_("Aux control port")); selectAuxPort->box(FL_DOWN_BOX); selectAuxPort->color(FL_BACKGROUND2_COLOR); selectAuxPort->selection_color(FL_BACKGROUND_COLOR); selectAuxPort->labeltype(FL_NORMAL_LABEL); selectAuxPort->labelfont(0); selectAuxPort->labelsize(14); selectAuxPort->labelcolor(FL_FOREGROUND_COLOR); selectAuxPort->callback((Fl_Callback*)cb_selectAuxPort); selectAuxPort->align(Fl_Align(FL_ALIGN_LEFT)); selectAuxPort->when(FL_WHEN_RELEASE); selectAuxPort->end(); btnAux_SCU_17 = new Fl_Check_Button(X + 130, Y + 90, 128, 22, _(" SCU-17 auxiliary\n Yaesu 2nd USB port")); btnAux_SCU_17->tooltip(_("Set stop bits to ZERO")); btnAux_SCU_17->callback((Fl_Callback*)cb_btnAux_SCU_17); btnAux_SCU_17->value(progStatus.aux_SCU_17); btnOkAuxSerial = new Fl_Button(X + W - 70, Y + (H - 10) / 2 - 30, 50, 24, _("Init")); btnOkAuxSerial->callback((Fl_Callback*)cb_btnOkAuxSerial); other_grp1->end(); Fl_Group *other_grp2 = new Fl_Group(X+5, Y + (H-10)/2 + 10, W-10, H/2 - 15, _("Power limit")); other_grp2->box(FL_ENGRAVED_BOX); other_grp2->align(FL_ALIGN_TOP_LEFT | FL_ALIGN_INSIDE); cnt_power_limit = new Fl_Counter( X+ (W-150)/2, other_grp2->y() + 20, 150, 24, _("Limit power to % of full")); cnt_power_limit->step(1); cnt_power_limit->minimum(0); cnt_power_limit->maximum(100); cnt_power_limit->lstep(10); cnt_power_limit->value(progStatus.power_limit); cnt_power_limit->callback((Fl_Callback*)cb_power_limit); btn_enable_power_limit = new Fl_Check_Button( cnt_power_limit->x(), cnt_power_limit->y() + 45, 50, 22, _("Enable power limit")); btn_enable_power_limit->callback((Fl_Callback*)cb_enable_power_limit); btn_enable_power_limit->value(progStatus.enable_power_limit); other_grp2->end(); tabOTHER->end(); return tabOTHER; } Fl_Group *createSERVER(int X, int Y, int W, int H, const char *label) { Fl_Group * tabSERVER = new Fl_Group(X, Y, W, H, label); tabSERVER->hide(); server_text = new Fl_Box(X + 30, Y + 10, W - 60, 60, _("\ Change port if multiple instances of flrig / fldigi will\n\ execute concurrently. Be sure to change the respective\n\ fldigi configuration item for xmlrpc server port.")); server_text->box(FL_FLAT_BOX); server_text->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); inp_serverport = new Fl_Input2(X + 120, Y + 80, 100, 22, _("Xmlrpc port:")); inp_serverport->tooltip(_("Socket port for xmlrpc server")); inp_serverport->type(2); inp_serverport->callback((Fl_Callback*)cb_server_port); inp_serverport->value(progStatus.xmlport.c_str()); inp_serverport->when(FL_ENTER); box_fldigi_connect = new Fl_Box(X + 25, Y + 145, 18, 18, _("Xmlrpc Client Connected")); box_fldigi_connect->tooltip(_("Lit when connected to external xmlrpc client")); box_fldigi_connect->box(FL_DIAMOND_DOWN_BOX); box_fldigi_connect->color(FL_LIGHT1); box_fldigi_connect->align(Fl_Align(FL_ALIGN_RIGHT)); tabSERVER->end(); return tabSERVER; } Fl_Group *createCLIENT(int X, int Y, int W, int H, const char *label) { Fl_Group * tabCLIENT = new Fl_Group(X, Y, W, H, label); tabCLIENT->hide(); client_text = new Fl_Box(X + 30, Y + 10, W - 60, 70, _("\ This address / port is the server flrig to which this client\n\ flrig will connect. Address may any valid http port: localhost,\n\ LAN or WAN.")); client_text->box(FL_FLAT_BOX); client_text->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); inp_client_addr = new Fl_Input2( X + 130, Y + 90, 180, 22, _("Xmlrpc addr:")); inp_client_addr->tooltip(_("Socket address for xmlrpc server")); inp_client_addr->callback((Fl_Callback*)cb_client_addr); inp_client_addr->value(progStatus.xmlrig_addr.c_str()); inp_client_addr->when(FL_ENTER); inp_client_port = new Fl_Input2( X + 130, Y + 120, 100, 22, _("Xmlrpc port:")); inp_client_port->tooltip(_("Socket port for xmlrpc server")); inp_client_port->callback((Fl_Callback*)cb_client_port); inp_client_port->value(progStatus.xmlrig_port.c_str()); inp_client_port->when(FL_ENTER); tabCLIENT->end(); return tabCLIENT; } Fl_Group *createPOLLING(int X, int Y, int W, int H, const char *label) { tabPOLLING = new Fl_Group(X, Y, W, H, label); tabPOLLING->hide(); Fl_Group* xcvr_grp7 = new Fl_Group(X + 5, Y + 5, W - 10, 45, _("Meters")); xcvr_grp7->box(FL_ENGRAVED_BOX); xcvr_grp7->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE)); poll_smeter = new Fl_Check_Button(X + 10, Y + 25, 30, 20, _("S-mtr")); poll_smeter->tooltip(_("Poll every Nth interval")); poll_smeter->value(1); poll_smeter->callback((Fl_Callback*)cb_poll_smeter); poll_smeter->align(Fl_Align(FL_ALIGN_RIGHT)); poll_smeter->value(progStatus.poll_smeter); poll_pout = new Fl_Check_Button(X + 100, Y + 25, 30, 20, _("Pwr out")); poll_pout->tooltip(_("Poll every Nth interval")); poll_pout->value(1); poll_pout->callback((Fl_Callback*)cb_poll_pout); poll_pout->align(Fl_Align(FL_ALIGN_RIGHT)); poll_pout->value(progStatus.poll_pout); poll_swr = new Fl_Check_Button(X + 190, Y + 25, 30, 20, _("SWR")); poll_swr->tooltip(_("Poll every Nth interval")); poll_swr->value(1); poll_swr->callback((Fl_Callback*)cb_poll_swr); poll_swr->align(Fl_Align(FL_ALIGN_RIGHT)); poll_swr->value(progStatus.poll_swr); poll_alc = new Fl_Check_Button(X + 280, Y + 25, 30, 20, _("ALC")); poll_alc->tooltip(_("Poll every Nth interval")); poll_alc->value(1); poll_alc->callback((Fl_Callback*)cb_poll_alc); poll_alc->align(Fl_Align(FL_ALIGN_RIGHT)); poll_alc->value(progStatus.poll_alc); btnSetMeters = new Fl_Button(X + 370, Y + 25, 60, 20, _("Set all")); btnSetMeters->tooltip("Set all meter polls"); btnSetMeters->callback((Fl_Callback*)cb_btnSetMeters); poll_meters = new Fl_Check_Button(X + 435, Y + 25, 30, 20); poll_meters->tooltip(_("Poll all")); poll_meters->value(progStatus.poll_meters); poll_meters->callback((Fl_Callback*)cb_poll_meters); poll_meters->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); poll_meters->value(progStatus.poll_meters); xcvr_grp7->end(); Fl_Group* xcvr_grp8 = new Fl_Group(X + 5, Y + 50, W - 10, 45, _("Operating Controls")); xcvr_grp8->box(FL_ENGRAVED_BOX); xcvr_grp8->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE)); poll_frequency = new Fl_Check_Button(X + 10, Y + 70, 30, 20, _("Freq")); poll_frequency->tooltip(_("Poll xcvr frequency")); poll_frequency->value(1); poll_frequency->callback((Fl_Callback*)cb_poll_frequency); poll_frequency->align(Fl_Align(FL_ALIGN_RIGHT)); poll_frequency->value(progStatus.poll_frequency); poll_mode = new Fl_Check_Button(X + 100, Y + 70, 30, 20, _("Mode")); poll_mode->tooltip(_("Poll xcvr mode")); poll_mode->value(1); poll_mode->callback((Fl_Callback*)cb_poll_mode); poll_mode->align(Fl_Align(FL_ALIGN_RIGHT)); poll_mode->value(progStatus.poll_mode); poll_bandwidth = new Fl_Check_Button(X + 190, Y + 70, 30, 20, _("BW")); poll_bandwidth->tooltip(_("Poll xcvr bandwidth")); poll_bandwidth->value(1); poll_bandwidth->callback((Fl_Callback*)cb_poll_bandwidth); poll_bandwidth->align(Fl_Align(FL_ALIGN_RIGHT)); poll_bandwidth->value(progStatus.poll_bandwidth); btnSetOps = new Fl_Button(X + 370, Y + 70, 60, 20, _("Set all")); btnSetOps->tooltip("Poll all operating values"); btnSetOps->callback((Fl_Callback*)cb_btnSetOps); poll_ops = new Fl_Check_Button(X + 435, Y + 70, 30, 20); poll_ops->tooltip(_("Poll all")); poll_ops->value(progStatus.poll_ops); poll_ops->callback((Fl_Callback*)cb_poll_ops); poll_ops->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); poll_ops->value(progStatus.poll_ops); xcvr_grp8->end(); Fl_Group* xcvr_grp9 = new Fl_Group(X + 5, Y + 95, W - 10, 130, _("Additional Controls")); xcvr_grp9->box(FL_ENGRAVED_FRAME); xcvr_grp9->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE)); poll_volume = new Fl_Check_Button(X + 10, Y + 115, 30, 20, _("Volume")); poll_volume->tooltip(_("Volume control")); poll_volume->callback((Fl_Callback*)cb_poll_volume); poll_volume->align(Fl_Align(FL_ALIGN_RIGHT)); poll_volume->value(progStatus.poll_volume); poll_micgain = new Fl_Check_Button(X + 100, Y + 115, 30, 20, _("Mic")); poll_micgain->tooltip(_("Microphone gain")); poll_micgain->callback((Fl_Callback*)cb_poll_micgain); poll_micgain->align(Fl_Align(FL_ALIGN_RIGHT)); poll_micgain->value(progStatus.poll_micgain); poll_rfgain = new Fl_Check_Button(X + 190, Y + 115, 30, 20, _("RF")); poll_rfgain->tooltip(_("RF gain")); poll_rfgain->callback((Fl_Callback*)cb_poll_rfgain); poll_rfgain->align(Fl_Align(FL_ALIGN_RIGHT)); poll_rfgain->value(progStatus.poll_rfgain); poll_power_control = new Fl_Check_Button(X + 280, Y + 115, 30, 20, _("Power")); poll_power_control->tooltip(_("Power output")); poll_power_control->callback((Fl_Callback*)cb_poll_power_control); poll_power_control->align(Fl_Align(FL_ALIGN_RIGHT)); poll_power_control->value(progStatus.poll_power_control); poll_ptt = new Fl_Check_Button(X + 370, Y + 115, 30, 20, _("PTT")); poll_ptt->tooltip(_("Push to talk")); poll_ptt->callback((Fl_Callback*)cb_poll_ptt); poll_ptt->align(Fl_Align(FL_ALIGN_RIGHT)); poll_ptt->value(progStatus.poll_ptt); poll_ifshift = new Fl_Check_Button(X + 10, Y + 140, 30, 20, _("IF")); poll_ifshift->tooltip(_("IF shift")); poll_ifshift->callback((Fl_Callback*)cb_poll_ifshift); poll_ifshift->align(Fl_Align(FL_ALIGN_RIGHT)); poll_ifshift->value(progStatus.poll_ifshift); poll_notch = new Fl_Check_Button(X + 100, Y + 140, 30, 20, _("Notch")); poll_notch->tooltip(_("Manual notch")); poll_notch->callback((Fl_Callback*)cb_poll_notch); poll_notch->align(Fl_Align(FL_ALIGN_RIGHT)); poll_notch->value(progStatus.poll_notch); poll_auto_notch = new Fl_Check_Button(X + 190, Y + 140, 30, 20, _("Auto")); poll_auto_notch->tooltip(_("Auto notch")); poll_auto_notch->callback((Fl_Callback*)cb_poll_auto_notch); poll_auto_notch->align(Fl_Align(FL_ALIGN_RIGHT)); poll_auto_notch->value(progStatus.poll_auto_notch); poll_tuner = new Fl_Check_Button(X + 280, Y + 140, 30, 20, _("Tuner")); poll_tuner->tooltip(_("Auto Tuner")); poll_tuner->callback((Fl_Callback*)cb_poll_tuner); poll_tuner->align(Fl_Align(FL_ALIGN_RIGHT)); poll_tuner->value(progStatus.poll_tuner); poll_pre_att = new Fl_Check_Button(X + 10, Y + 165, 30, 20, _("Pre/Att")); poll_pre_att->tooltip(_("Preamp / Attenuator")); poll_pre_att->callback((Fl_Callback*)cb_poll_pre_att); poll_pre_att->align(Fl_Align(FL_ALIGN_RIGHT)); poll_pre_att->value(progStatus.poll_pre_att); poll_squelch = new Fl_Check_Button(X + 100, Y + 165, 30, 20, _("Squelch")); poll_squelch->tooltip(_("Squelch")); poll_squelch->callback((Fl_Callback*)cb_poll_squelch); poll_squelch->align(Fl_Align(FL_ALIGN_RIGHT)); poll_squelch->value(progStatus.poll_squelch); poll_split = new Fl_Check_Button(X + 190, Y + 165, 30, 20, _("Split")); poll_split->tooltip(_("Split vfo operation")); poll_split->callback((Fl_Callback*)cb_poll_split); poll_split->align(Fl_Align(FL_ALIGN_RIGHT)); poll_split->value(progStatus.poll_split); poll_noise = new Fl_Check_Button(X + 10, Y + 190, 30, 20, _("Blanker")); poll_noise->tooltip(_("Noise blanker")); poll_noise->callback((Fl_Callback*)cb_poll_noise); poll_noise->align(Fl_Align(FL_ALIGN_RIGHT)); poll_noise->value(progStatus.poll_noise); poll_nr = new Fl_Check_Button(X + 100, Y + 190, 30, 20, _("Noise red")); poll_nr->tooltip(_("Noise reduction")); poll_nr->callback((Fl_Callback*)cb_poll_nr); poll_nr->align(Fl_Align(FL_ALIGN_RIGHT)); poll_nr->value(progStatus.poll_nr); poll_compression = new Fl_Check_Button(X + 190, Y + 190, 30, 20, _("Comp")); poll_compression->tooltip(_("Compression")); poll_compression->callback((Fl_Callback*)cb_poll_compression); poll_compression->align(Fl_Align(FL_ALIGN_RIGHT)); poll_compression->value(progStatus.poll_compression); poll_break_in = new Fl_Check_Button(X + 280, Y + 165, 30, 20, _("QSK")); poll_break_in->tooltip(_("Break In")); 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); poll_pbt = new Fl_Check_Button(X + 280, Y + 190, 30, 20, _("PBT")); poll_pbt->tooltip(_("Passband tuning")); poll_pbt->callback((Fl_Callback*)cb_poll_pbt); poll_pbt->align(Fl_Align(FL_ALIGN_RIGHT)); poll_pbt->value(progStatus.poll_pbt); btnSetAdd = new Fl_Button(X + 370, Y + 190, 60, 20, _("Set all")); btnSetAdd->callback((Fl_Callback*)cb_btnSetAdd); poll_all = new Fl_Check_Button(X + 435, Y + 190, 30, 20); poll_all->tooltip(_("Poll all")); poll_all->value(1); poll_all->callback((Fl_Callback*)cb_poll_all); poll_all->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); poll_all->value(progStatus.poll_all); xcvr_grp9->end(); disable_xmlrpc = new Fl_Check_Button(X + 10, Y + 230, 18, 18, _("Disable XmlRpc Server")); disable_xmlrpc->tooltip(_("Use for testing ONLY!")); disable_xmlrpc->value(0); disable_polling = new Fl_Check_Button(X + 280, Y + 230, 18, 18, _("Disable Polling")); disable_polling->tooltip(_("Use for testing ONLY!")); disable_polling->value(0); tabPOLLING->end(); return tabPOLLING; } Fl_Group *createSNDCMD(int X, int Y, int W, int H, const char *label) { Fl_Group *tabSNDCMD = new Fl_Group(X, Y, W, H, label); tabSNDCMD->hide(); txt_command = new Fl_Input2(X + 25, Y + 20, 435, 24, _("Enter text as ASCII std::string\nOr sequence of hex values, x80 etc separated by spaces")); txt_command->box(FL_DOWN_BOX); txt_command->color(FL_BACKGROUND2_COLOR); txt_command->selection_color(FL_SELECTION_COLOR); txt_command->labeltype(FL_NORMAL_LABEL); txt_command->labelfont(0); txt_command->labelsize(14); txt_command->labelcolor(FL_FOREGROUND_COLOR); txt_command->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT)); txt_command->when(FL_WHEN_RELEASE); txt_response = new Fl_Output(X + 25, Y + 80, 435, 24, _("Response to the SEND button")); txt_response->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT)); btn_icom_pre = new Fl_Button(X + 380, Y + 115, 80, 20, _("ICOM pre")); btn_icom_pre->callback((Fl_Callback*)cb_btn_icom_pre); btn_icom_post = new Fl_Button(X + 380, Y + 145, 80, 20, _("ICOM post")); btn_icom_post->callback((Fl_Callback*)cb_btn_icom_post); btn_send_command = new Fl_Button(X + 380, Y + 180, 80, 20, _("SEND")); btn_send_command->callback((Fl_Callback*)cb_btn_send_command); tabSNDCMD->end(); return tabSNDCMD; } Fl_Group *createCOMMANDS(int X, int Y, int W, int H, const char *label) { Fl_Group *tabCOMMANDS = new Fl_Group(X, Y, W, H, label); Fl_Tabs *tabCmds = new Fl_Tabs(X, Y, W, H - 25); std::string *cmdlbls[] = { &progStatus.label1, &progStatus.label2, &progStatus.label3, &progStatus.label4, &progStatus.label5, &progStatus.label6, &progStatus.label7, &progStatus.label8, &progStatus.label9, &progStatus.label10, &progStatus.label11, &progStatus.label12, &progStatus.label13, &progStatus.label14, &progStatus.label15, &progStatus.label16, &progStatus.label17, &progStatus.label18, &progStatus.label19, &progStatus.label20, &progStatus.label21, &progStatus.label22, &progStatus.label23, &progStatus.label24 }; Fl_Input2 *cmdbtns[] = { cmdlbl1, cmdlbl2, cmdlbl3, cmdlbl4, cmdlbl5, cmdlbl6, cmdlbl7, cmdlbl8, cmdlbl9, cmdlbl10, cmdlbl11, cmdlbl12, cmdlbl13, cmdlbl14, cmdlbl15, cmdlbl16, cmdlbl17, cmdlbl18, cmdlbl19, cmdlbl20, cmdlbl21, cmdlbl22, cmdlbl23, cmdlbl24 }; Fl_Input2 *cmdtexts[] = { cmdtext1, cmdtext2, cmdtext3, cmdtext4, cmdtext5, cmdtext6, cmdtext7, cmdtext8, cmdtext9, cmdtext10, cmdtext11, cmdtext12, cmdtext13, cmdtext14, cmdtext15, cmdtext16, cmdtext17, cmdtext18, cmdtext19, cmdtext20, cmdtext21, cmdtext22, cmdtext23, cmdtext24 }; Fl_Input2 *shftcmdtexts[] = { shftcmdtext1, shftcmdtext2, shftcmdtext3, shftcmdtext4, shftcmdtext5, shftcmdtext6, shftcmdtext7, shftcmdtext8, shftcmdtext9, shftcmdtext10, shftcmdtext11, shftcmdtext12, shftcmdtext13, shftcmdtext14, shftcmdtext15, shftcmdtext16, shftcmdtext17, shftcmdtext18, shftcmdtext19, shftcmdtext20, shftcmdtext21, shftcmdtext22, shftcmdtext23, shftcmdtext24 }; std::string *cmd[] = { &progStatus.command1, &progStatus.command2, &progStatus.command3, &progStatus.command4, &progStatus.command5, &progStatus.command6, &progStatus.command7, &progStatus.command8, &progStatus.command9, &progStatus.command10, &progStatus.command11, &progStatus.command12, &progStatus.command13, &progStatus.command14, &progStatus.command15, &progStatus.command16, &progStatus.command17, &progStatus.command18, &progStatus.command19, &progStatus.command20, &progStatus.command21, &progStatus.command22, &progStatus.command23, &progStatus.command24 }; std::string *shftcmd[] = { &progStatus.shftcmd1, &progStatus.shftcmd2, &progStatus.shftcmd3, &progStatus.shftcmd4, &progStatus.shftcmd5, &progStatus.shftcmd6, &progStatus.shftcmd7, &progStatus.shftcmd8, &progStatus.shftcmd9, &progStatus.shftcmd10, &progStatus.shftcmd11, &progStatus.shftcmd12, &progStatus.shftcmd13, &progStatus.shftcmd14, &progStatus.shftcmd15, &progStatus.shftcmd16, &progStatus.shftcmd17, &progStatus.shftcmd18, &progStatus.shftcmd19, &progStatus.shftcmd20, &progStatus.shftcmd21, &progStatus.shftcmd22, &progStatus.shftcmd23, &progStatus.shftcmd24 }; Fl_Input2 *start_exit_label[] = { start_exit_label1, start_exit_label2, start_exit_label3, start_exit_label4, start_exit_label5, start_exit_label6, start_exit_label7, start_exit_label8 }; Fl_Input2 *start_exit_text[] = { start_exit_text1, start_exit_text2, start_exit_text3, start_exit_text4, start_exit_text5, start_exit_text6, start_exit_text7, start_exit_text8, }; std::string *se_label[] = { &progStatus.label_on_start1, &progStatus.label_on_start2, &progStatus.label_on_start3, &progStatus.label_on_start4, &progStatus.label_on_exit1, &progStatus.label_on_exit2, &progStatus.label_on_exit3, &progStatus.label_on_exit4 }; std::string *se_cmd[] = { &progStatus.cmd_on_start1, &progStatus.cmd_on_start2, &progStatus.cmd_on_start3, &progStatus.cmd_on_start4, &progStatus.cmd_on_exit1, &progStatus.cmd_on_exit2, &progStatus.cmd_on_exit3, &progStatus.cmd_on_exit4 }; static const char *lbl[24] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24" }; tabCmds1 = new Fl_Group(X, Y + 20, W, H - 50, _("1-4")); bx1a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label"); bx1a->box(FL_FLAT_BOX); bx1a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); bx1b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command"); bx1b->box(FL_FLAT_BOX); bx1b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); for (int n = 0; n < 4; n++) { cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]); cmdbtns[n]->align(FL_ALIGN_LEFT); cmdbtns[n]->value(cmdlbls[n]->c_str()); cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, reinterpret_cast(n)); cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, ""); cmdtexts[n]->align(FL_ALIGN_LEFT); cmdtexts[n]->value(cmd[n]->c_str()); cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, reinterpret_cast(n)); shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT"); shftcmdtexts[n]->align(FL_ALIGN_LEFT); shftcmdtexts[n]->value(shftcmd[n]->c_str()); shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, reinterpret_cast(n)); } tabCmds1->end(); tabCmds2 = new Fl_Group(X, Y + 20, W, H - 50, _("5-8")); bx2a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label"); bx2a->box(FL_FLAT_BOX); bx2a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); bx2b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command"); bx2b->box(FL_FLAT_BOX); bx2b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); for (int n = 4; n < 8; n++) { cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]); cmdbtns[n]->align(FL_ALIGN_LEFT); cmdbtns[n]->value(cmdlbls[n]->c_str()); cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, reinterpret_cast(n)); cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, ""); cmdtexts[n]->align(FL_ALIGN_LEFT); cmdtexts[n]->value(cmd[n]->c_str()); cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, reinterpret_cast(n)); shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT"); shftcmdtexts[n]->align(FL_ALIGN_LEFT); shftcmdtexts[n]->value(shftcmd[n]->c_str()); shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, reinterpret_cast(n)); } tabCmds2->end(); tabCmds3 = new Fl_Group(X, Y + 20, W, H - 50, _("9-12")); tabCmds2->hide(); bx3a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label"); bx3a->box(FL_FLAT_BOX); bx3a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); bx3b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command"); bx3b->box(FL_FLAT_BOX); bx3b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); for (int n = 8; n < 12; n++) { cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]); cmdbtns[n]->align(FL_ALIGN_LEFT); cmdbtns[n]->value(cmdlbls[n]->c_str()); cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, reinterpret_cast(n)); cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, ""); cmdtexts[n]->align(FL_ALIGN_LEFT); cmdtexts[n]->value(cmd[n]->c_str()); cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, reinterpret_cast(n)); shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT"); shftcmdtexts[n]->align(FL_ALIGN_LEFT); shftcmdtexts[n]->value(shftcmd[n]->c_str()); shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, reinterpret_cast(n)); } tabCmds3->end(); tabCmds4 = new Fl_Group(X, Y + 20, W, H - 50, _("13-16")); bx4a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label"); bx4a->box(FL_FLAT_BOX); bx4a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); bx4b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command"); bx4b->box(FL_FLAT_BOX); bx4b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); for (int n = 12; n < 16; n++) { cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]); cmdbtns[n]->align(FL_ALIGN_LEFT); cmdbtns[n]->value(cmdlbls[n]->c_str()); cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, reinterpret_cast(n)); cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, ""); cmdtexts[n]->align(FL_ALIGN_LEFT); cmdtexts[n]->value(cmd[n]->c_str()); cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, reinterpret_cast(n)); shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT"); shftcmdtexts[n]->align(FL_ALIGN_LEFT); shftcmdtexts[n]->value(shftcmd[n]->c_str()); shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, reinterpret_cast(n)); } tabCmds4->end(); tabCmds5 = new Fl_Group(X, Y + 20, W, H - 50, _("17-20")); bx5a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label"); bx5a->box(FL_FLAT_BOX); bx5a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); bx5b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command"); bx5b->box(FL_FLAT_BOX); bx5b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); for (int n = 16; n < 20; n++) { cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]); cmdbtns[n]->align(FL_ALIGN_LEFT); cmdbtns[n]->value(cmdlbls[n]->c_str()); cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, reinterpret_cast(n)); cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, ""); cmdtexts[n]->align(FL_ALIGN_LEFT); cmdtexts[n]->value(cmd[n]->c_str()); cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, reinterpret_cast(n)); shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT"); shftcmdtexts[n]->align(FL_ALIGN_LEFT); shftcmdtexts[n]->value(shftcmd[n]->c_str()); shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, reinterpret_cast(n)); } tabCmds5->end(); tabCmds6 = new Fl_Group(X, Y + 20, W, H - 50, _("21-24")); bx6a = new Fl_Box(X + 23, Y + 26, 75, 16, "Label"); bx6a->box(FL_FLAT_BOX); bx6a->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); bx6b = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command"); bx6b->box(FL_FLAT_BOX); bx6b->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); for (int n = 20; n < 24; n++) { cmdbtns[n] = new Fl_Input2(X + 27, Y + 46 + (n % 4) * 40, 80, 20, lbl[n]); cmdbtns[n]->align(FL_ALIGN_LEFT); cmdbtns[n]->value(cmdlbls[n]->c_str()); cmdbtns[n]->callback((Fl_Callback*)cb_cmdlbl, reinterpret_cast(n)); cmdtexts[n] = new Fl_Input2(X + 110, Y + 46 + (n % 4) * 40, W - 110 - 2, 20, ""); cmdtexts[n]->align(FL_ALIGN_LEFT); cmdtexts[n]->value(cmd[n]->c_str()); cmdtexts[n]->callback((Fl_Callback*)cb_cmdtext, reinterpret_cast(n)); shftcmdtexts[n] = new Fl_Input2(X + 110, Y + 66 + (n % 4) * 40, W - 110 - 2, 20, "SHIFT"); shftcmdtexts[n]->align(FL_ALIGN_LEFT); shftcmdtexts[n]->value(shftcmd[n]->c_str()); shftcmdtexts[n]->callback((Fl_Callback*)cb_shftcmdtext, reinterpret_cast(n)); } tabCmds6->end(); tabCmds_on_start_exit = new Fl_Group(X, Y + 20, W, H - 50, _("Start/Exit")); Fl_Box *start_labels = new Fl_Box(X + 23, Y + 26, 75, 16, "Label"); start_labels->box(FL_FLAT_BOX); start_labels->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); Fl_Box *start_commands = new Fl_Box(X + 80, Y + 26, W - 80 - 2, 16, "Command"); start_commands->box(FL_FLAT_BOX); start_commands->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); for (int n = 0; n < 8; n++) { start_exit_label[n] = new Fl_Input2( X + 27, Y + 46 + n * 20, 80, 20, n < 4 ? "St" : "Ex"); start_exit_label[n]->align(FL_ALIGN_LEFT); start_exit_label[n]->value(se_label[n]->c_str()); start_exit_label[n]->callback((Fl_Callback*)cb_se_label, reinterpret_cast(n)); start_exit_text[n] = new Fl_Input2( X + 110, start_exit_label[n]->y(), W - 110 - 2, 20, ""); start_exit_text[n]->align(FL_ALIGN_LEFT); start_exit_text[n]->value(se_cmd[n]->c_str()); start_exit_text[n]->callback((Fl_Callback*)cb_se_text, reinterpret_cast(n)); } tabCmds_on_start_exit->end(); tabCmds->end(); cmdResponse = new Fl_Output(cmdtexts[0]->x(), Y + H - 20, cmdtexts[0]->w(), 20, "Response:"); cmdResponse->align(FL_ALIGN_LEFT); tabCOMMANDS->end(); return tabCOMMANDS; } Fl_Group *createRestore(int X, int Y, int W, int H, const char *label) { Fl_Group *tabRESTORE = new Fl_Group(X, Y, W, H, label); tabRESTORE->hide(); Fl_Box *restore_box = new Fl_Box(X + 8, Y + 5, 455, 30, _("Read / Restore these parameters")); restore_box->box(FL_ENGRAVED_FRAME); btnRestoreFrequency = new Fl_Check_Button(X + 8, Y + 40, 20, 20, _("Freq")); btnRestoreFrequency->tooltip(_("Restore frequency")); btnRestoreFrequency->callback((Fl_Callback*)cb_restore); btnRestoreFrequency->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreFrequency->value(progStatus.restore_frequency == 1); btnRestoreMode = new Fl_Check_Button(X + 8, Y + 65, 20, 20, _("Mode")); btnRestoreMode->tooltip(_("Restore Mode")); btnRestoreMode->callback((Fl_Callback*)cb_restore); btnRestoreMode->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreMode->value(progStatus.restore_mode == 1); btnRestoreBandwidth = new Fl_Check_Button(X + 8, Y + 90, 20, 20, _("Bandwidth")); btnRestoreBandwidth->tooltip(_("Restore bandwidth")); btnRestoreBandwidth->callback((Fl_Callback*)cb_restore); btnRestoreBandwidth->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreBandwidth->value(progStatus.restore_bandwidth == 1); btnRestoreVolume = new Fl_Check_Button(X + 8, Y + 115, 20, 20, _("Volume")); btnRestoreVolume->tooltip(_("Restore volume control")); btnRestoreVolume->callback((Fl_Callback*)cb_restore); btnRestoreVolume->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreVolume->value(progStatus.restore_volume == 1); btnRestoreMicGain = new Fl_Check_Button(X + 8, Y + 140, 20, 20, _("Mic gain")); btnRestoreMicGain->tooltip(_("Restore mic gain")); btnRestoreMicGain->callback((Fl_Callback*)cb_restore); btnRestoreMicGain->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreMicGain->value(progStatus.restore_mic_gain == 1); btnRestoreRfGain = new Fl_Check_Button(X + 8, Y + 165, 20, 20, _("RF gain")); btnRestoreRfGain->tooltip(_("Restore RF gain")); btnRestoreRfGain->callback((Fl_Callback*)cb_restore); btnRestoreRfGain->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreRfGain->value(progStatus.restore_rf_gain == 1); btnRestorePowerControl = new Fl_Check_Button(X + 8, Y + 190, 20, 20, _("Pwr level")); btnRestorePowerControl->tooltip(_("Restore power control")); btnRestorePowerControl->callback((Fl_Callback*)cb_restore); btnRestorePowerControl->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestorePowerControl->value(progStatus.restore_power_control == 1); btnRestoreIFshift = new Fl_Check_Button(X + 128, Y + 40, 20, 20, _("IFshift")); btnRestoreIFshift->tooltip(_("Restore IF shift control")); btnRestoreIFshift->callback((Fl_Callback*)cb_restore); btnRestoreIFshift->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreIFshift->value(progStatus.restore_if_shift == 1); btnRestoreNotch = new Fl_Check_Button(X + 128, Y + 65, 20, 20, _("Notch")); btnRestoreNotch->tooltip(_("Restore notch control")); btnRestoreNotch->callback((Fl_Callback*)cb_restore); btnRestoreNotch->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreNotch->value(progStatus.restore_notch == 1); btnRestoreAutoNotch = new Fl_Check_Button(X + 128, Y + 90, 20, 20, _("Auto Ntch")); btnRestoreAutoNotch->tooltip(_("Restore auto notch setting")); btnRestoreAutoNotch->callback((Fl_Callback*)cb_restore); btnRestoreAutoNotch->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreAutoNotch->value(progStatus.restore_auto_notch == 1); btnRestoreSquelch = new Fl_Check_Button(X + 128, Y + 115, 20, 20, _("Squelch")); btnRestoreSquelch->tooltip(_("Restore squelch")); btnRestoreSquelch->callback((Fl_Callback*)cb_restore); btnRestoreSquelch->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreSquelch->value(progStatus.restore_squelch == 1); btnRestoreSplit = new Fl_Check_Button(X + 128, Y + 140, 20, 20, _("Split")); btnRestoreSplit->tooltip(_("Restore split")); btnRestoreSplit->callback((Fl_Callback*)cb_restore); btnRestoreSplit->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreSplit->value(progStatus.restore_split == 1); btnRestorePreAtt = new Fl_Check_Button(X + 128, Y + 165, 20, 20, _("Pre/Att")); btnRestorePreAtt->tooltip(_("Restore Pre/Att")); btnRestorePreAtt->callback((Fl_Callback*)cb_restore); btnRestorePreAtt->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestorePreAtt->value(progStatus.restore_pre_att == 1); btnRestoreNoise = new Fl_Check_Button(X + 128, Y + 190, 20, 20, _("Blanker")); btnRestoreNoise->tooltip(_("Restore noise blanker control")); btnRestoreNoise->callback((Fl_Callback*)cb_restore); btnRestoreNoise->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreNoise->value(progStatus.restore_noise == 1); btnRestoreNR = new Fl_Check_Button(X + 248, Y + 40, 20, 20, _("Noise Red'")); btnRestoreNR->tooltip(_("Restore noise reduction")); btnRestoreNR->callback((Fl_Callback*)cb_restore); btnRestoreNR->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreNR->value(progStatus.restore_nr == 1); btnRestoreCompOnOff = new Fl_Check_Button(X + 248, Y + 65, 20, 20, _("Comp On/Off")); btnRestoreCompOnOff->tooltip(_("Restore Comp On/Off")); btnRestoreCompOnOff->callback((Fl_Callback*)cb_restore); btnRestoreCompOnOff->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreCompOnOff->value(progStatus.restore_comp_on_off == 1); btnRestoreCompLevel = new Fl_Check_Button(X + 248, Y + 90, 20, 20, _("Comp Level")); btnRestoreCompLevel->tooltip(_("Restore comp level")); btnRestoreCompLevel->callback((Fl_Callback*)cb_restore); btnRestoreCompLevel->align(Fl_Align(FL_ALIGN_RIGHT)); btnRestoreCompLevel->value(progStatus.restore_comp_level == 1); btnUseRigData = new Fl_Check_Button(X + 248, Y + 190, 20, 20, _("Use xcvr data")); btnUseRigData->tooltip(_("Set flrig to xcvr values at startup")); btnUseRigData->callback((Fl_Callback*)cb_restore); btnUseRigData->align(Fl_Align(FL_ALIGN_RIGHT)); btnUseRigData->value(progStatus.use_rig_data == 1); tabRESTORE->end(); init_hids(); tmate2_init_hids(); return tabRESTORE; } //---------------------------------------------------------------------- Fl_Group *tabCMEDIA=(Fl_Group *)0; Fl_Round_Button *btn_use_cmedia_PTT=(Fl_Round_Button *)0; Fl_ComboBox *inp_cmedia_dev=(Fl_ComboBox *)0; Fl_ComboBox *inp_cmedia_GPIO_line=(Fl_ComboBox *)0; Fl_Button *btn_refresh_cmedia=(Fl_Button *)0; Fl_Button *btn_init_cmedia_PTT=(Fl_Button *)0; Fl_Button *btn_test_cmedia=(Fl_Button *)0; static void cb_btn_use_cmedia(Fl_Round_Button* o, void*) { if (o->value()) { progStatus.cmedia_ptt = PTT_BOTH; btn_init_cmedia_PTT->labelcolor(FL_RED); btn_init_cmedia_PTT->redraw(); lbox_catptt->index(PTT_NONE); lbox_rtsptt->index(PTT_NONE); lbox_dtrptt->index(PTT_NONE); lbox_sep_rtsptt->index(PTT_NONE); lbox_sep_dtrptt->index(PTT_NONE); progStatus.serial_catptt = PTT_NONE; progStatus.serial_rtsptt = PTT_NONE; progStatus.serial_dtrptt = PTT_NONE; progStatus.sep_dtrptt = PTT_NONE; progStatus.sep_rtsptt = PTT_NONE; } else { progStatus.cmedia_ptt = PTT_NONE; close_cmedia(); } } static void cb_inp_cmedia_dev(Fl_ComboBox* o, void*) { close_cmedia(); progStatus.cmedia_device = o->value(); btn_init_cmedia_PTT->labelcolor(FL_RED); btn_init_cmedia_PTT->redraw(); } static void cb_inp_cmedia_GPIO_line(Fl_ComboBox* o, void*) { progStatus.cmedia_gpio_line = o->value(); } static void cb_btn_init_cmedia_PTT(Fl_Button* o, void*) { open_cmedia(progStatus.cmedia_device); o->labelcolor(FL_FOREGROUND_COLOR); } static void cb_btn_refresh_cmedia(Fl_Button* o, void*) { init_hids(); } static void cb_btn_test_cmedia(Fl_Button*, void*) { test_hid_ptt(); } Fl_Group *createCmediaTab(int X, int Y, int W, int H, const char *label) { Fl_Group *tab = new Fl_Group(X, Y, W, H, label); tab->hide(); Fl_Box *bx = new Fl_Box(X + 2, Y + 2, W - 4, H / 2 - 2, _( "C-Media audio codecs used in DRA Series have 8 user controllable GPIO pins. \ GPIO signal line 3 (pin 13) is used for PTT control.\n\ On Linux: add a file named cmedia.rules to /etc/udev/rules.d/ containing:\n\ \n\ KERNEL==\"hidraw*\", \\\n\ SUBSYSTEM==\"hidraw\", MODE=\"0664\", GROUP=\"plugdev\"")); bx->box(FL_FLAT_BOX); bx->align(Fl_Align(132|FL_ALIGN_INSIDE)); bx->labelfont(0); bx->labelsize(13); btn_use_cmedia_PTT = new Fl_Round_Button(X + 10, Y + H/2 + 5, 100, 20, _("Use C-Media PTT")); btn_use_cmedia_PTT->down_box(FL_DOWN_BOX); btn_use_cmedia_PTT->selection_color((Fl_Color)1); btn_use_cmedia_PTT->value(progStatus.cmedia_ptt); btn_use_cmedia_PTT->callback((Fl_Callback*)cb_btn_use_cmedia); inp_cmedia_dev = new Fl_ComboBox(X + 10, Y + H/2 + 50, 350, 20, _("C-Media device")); inp_cmedia_dev->box(FL_DOWN_BOX); inp_cmedia_dev->color(FL_BACKGROUND2_COLOR); inp_cmedia_dev->selection_color(FL_BACKGROUND_COLOR); inp_cmedia_dev->labeltype(FL_NORMAL_LABEL); inp_cmedia_dev->labelfont(0); inp_cmedia_dev->labelsize(13); inp_cmedia_dev->labelcolor(FL_FOREGROUND_COLOR); inp_cmedia_dev->callback((Fl_Callback*)cb_inp_cmedia_dev); inp_cmedia_dev->align(Fl_Align(FL_ALIGN_TOP_LEFT)); inp_cmedia_dev->when(FL_WHEN_RELEASE); inp_cmedia_dev->labelsize(FL_NORMAL_SIZE); inp_cmedia_dev->value(progStatus.cmedia_device.c_str()); inp_cmedia_dev->end(); inp_cmedia_GPIO_line = new Fl_ComboBox(X + 10, Y + H/2 + 95, 350, 20, _("GPIO line")); inp_cmedia_GPIO_line->box(FL_DOWN_BOX); inp_cmedia_GPIO_line->color(FL_BACKGROUND2_COLOR); inp_cmedia_GPIO_line->selection_color(FL_BACKGROUND_COLOR); inp_cmedia_GPIO_line->labeltype(FL_NORMAL_LABEL); inp_cmedia_GPIO_line->labelfont(0); inp_cmedia_GPIO_line->labelsize(13); inp_cmedia_GPIO_line->labelcolor(FL_FOREGROUND_COLOR); inp_cmedia_GPIO_line->callback((Fl_Callback*)cb_inp_cmedia_GPIO_line); inp_cmedia_GPIO_line->align(Fl_Align(FL_ALIGN_TOP_LEFT)); inp_cmedia_GPIO_line->when(FL_WHEN_RELEASE); inp_cmedia_GPIO_line->labelsize(FL_NORMAL_SIZE); inp_cmedia_GPIO_line->value(progStatus.cmedia_gpio_line.c_str()); inp_cmedia_GPIO_line->add("GPIO-1|GPIO-2|GPIO-3|GPIO-4"); inp_cmedia_GPIO_line->end(); btn_refresh_cmedia = new Fl_Button(X + W - 80, Y + H/2 + 5, 70, 20, _("Refresh")); btn_refresh_cmedia->tooltip(_("Refresh the list of Cmedia devices")); btn_refresh_cmedia->callback((Fl_Callback*)cb_btn_refresh_cmedia); btn_init_cmedia_PTT = new Fl_Button(X + W - 80, Y + H/2 + 50, 70, 20, _("Select")); btn_init_cmedia_PTT->tooltip(_("Select device & Initialize the H/W PTT interface")); btn_init_cmedia_PTT->callback((Fl_Callback*)cb_btn_init_cmedia_PTT); btn_test_cmedia = new Fl_Button(X + W - 80, Y + H/2 + 95, 70, 20, _("TEST")); btn_test_cmedia->tooltip(_("Toggles PTT line 20x; check DRA ptt LED")); btn_test_cmedia->callback((Fl_Callback*)cb_btn_test_cmedia); tab->end(); return tab; } //---------------------------------------------------------------------- Fl_Group *tabTMATE2 = (Fl_Group *)0; Fl_ComboBox *cbo_tmate2_dev = (Fl_ComboBox *)0; Fl_ComboBox *cbo_tmate2_freq_step = (Fl_ComboBox *)0; Fl_Button *btn_refresh_tmate2 = (Fl_Button *)0; Fl_Button *btn_init_tmate2 = (Fl_Button *)0; static void cb_cbo_tmate2_dev(Fl_ComboBox* o, void*) { tmate2_close(); progStatus.tmate2_device = o->value(); btn_init_tmate2->labelcolor(FL_RED); btn_init_tmate2->redraw(); } static void cb_cbo_tmate2_freq_step(Fl_ComboBox* o, void*) { progStatus.tmate2_freq_step = o->value(); } static void cb_btn_refresh_tmate2(Fl_Button* o, void*) { tmate2_init_hids(); } static void cb_btn_init_tmate2(Fl_Button* o, void*) { tmate2_open(); o->labelcolor(FL_FOREGROUND_COLOR); } Fl_Group *createTMATE2Tab(int X, int Y, int W, int H, const char *label) { Fl_Group *tab = new Fl_Group(X, Y, W, H, label); tab->hide(); Fl_Box *bx = new Fl_Box(X + 2, Y + 2, W - 4, H / 2 - 2, _( "TMATE-2 interface units use hid i/o.\n\ Gn Linux: add a file named tmate2.rules to /etc/udev/rules.d/ containing:\n\ \n\ KERNEL==\"hidraw*\", \\\n\ SUBSYSTEM==\"hidraw\", MODE=\"0664\", GROUP=\"plugdev\"")); bx->box(FL_FLAT_BOX); bx->align(Fl_Align(132|FL_ALIGN_INSIDE)); bx->labelfont(0); bx->labelsize(13); cbo_tmate2_dev = new Fl_ComboBox(X + 10, Y + H/2 + 50, 350, 20, _("Elad TMATE-2")); cbo_tmate2_dev->box(FL_DOWN_BOX); cbo_tmate2_dev->color(FL_BACKGROUND2_COLOR); cbo_tmate2_dev->selection_color(FL_BACKGROUND_COLOR); cbo_tmate2_dev->labeltype(FL_NORMAL_LABEL); cbo_tmate2_dev->labelfont(0); cbo_tmate2_dev->labelsize(13); cbo_tmate2_dev->labelcolor(FL_FOREGROUND_COLOR); cbo_tmate2_dev->callback((Fl_Callback*)cb_cbo_tmate2_dev); cbo_tmate2_dev->align(Fl_Align(FL_ALIGN_TOP_LEFT)); cbo_tmate2_dev->when(FL_WHEN_RELEASE); cbo_tmate2_dev->labelsize(FL_NORMAL_SIZE); cbo_tmate2_dev->value(progStatus.tmate2_device.c_str()); cbo_tmate2_dev->end(); cbo_tmate2_freq_step = new Fl_ComboBox(X + 10, Y + H/2 + 95, 350, 20, _("Transceiver frequency tune step in Hz")); cbo_tmate2_freq_step->box(FL_DOWN_BOX); cbo_tmate2_freq_step->color(FL_BACKGROUND2_COLOR); cbo_tmate2_freq_step->selection_color(FL_BACKGROUND_COLOR); cbo_tmate2_freq_step->labeltype(FL_NORMAL_LABEL); cbo_tmate2_freq_step->labelfont(0); cbo_tmate2_freq_step->labelsize(13); cbo_tmate2_freq_step->labelcolor(FL_FOREGROUND_COLOR); cbo_tmate2_freq_step->callback((Fl_Callback*)cb_cbo_tmate2_freq_step); cbo_tmate2_freq_step->align(Fl_Align(FL_ALIGN_TOP_LEFT)); cbo_tmate2_freq_step->when(FL_WHEN_RELEASE); cbo_tmate2_freq_step->labelsize(FL_NORMAL_SIZE); cbo_tmate2_freq_step->add("1|100|500|1000|2500|5000|6250|10000|12500|15000|20000|25000|30000|50000|100000|125000|200000"); cbo_tmate2_freq_step->value(progStatus.tmate2_freq_step.c_str()); cbo_tmate2_freq_step->end(); btn_refresh_tmate2 = new Fl_Button(X + W - 80, Y + H/2 + 5, 70, 20, _("Refresh")); btn_refresh_tmate2->tooltip(_("Refresh the list of hid devices")); btn_refresh_tmate2->callback((Fl_Callback*)cb_btn_refresh_tmate2); btn_init_tmate2 = new Fl_Button(X + W - 80, Y + H/2 + 50, 70, 20, _("Select")); btn_init_tmate2->tooltip(_("Select device & Initialize the interface")); btn_init_tmate2->callback((Fl_Callback*)cb_btn_init_tmate2); tab->end(); return tab; } //---------------------------------------------------------------------- #include "gpio.cxx" #include std::vector< Fl_Group* > config_pages; static Fl_Group *current = 0; Fl_Tree *tab_tree; void add_tree_item(Fl_Group *g) { config_pages.push_back(g); tab_tree->add(g->label()); g->hide(); } void cleartabs() { tabXCVR->hide(); tabTRACE->hide(); tabTCPIP->hide(); tabPTTGEN->hide(); tabOTHER->hide(); tabGPIO->hide(); tabCMEDIA->hide(); tabPOLLING->hide(); tabSNDCMD->hide(); tabCOMMANDS->hide(); tabRESTORE->hide(); Fl_Tree_Item *item = tab_tree->last_selected_item(); if (item) tab_tree->deselect(item,0); } void select_tab(const char *label) { cleartabs(); tab_tree->select(label); dlgXcvrConfig->show(); } void SelectItem_CB(Fl_Widget *w) { cleartabs(); Fl_Tree *tree = (Fl_Tree*)w; Fl_Tree_Item *item = tree->callback_item(); tree->select_only(item, 0); if (tree->callback_reason() == FL_TREE_REASON_SELECTED) { std::string pname; char pn[200]; tree->item_pathname(pn, 200, item); pname = pn; size_t pos = std::string::npos; for (size_t i = 0; i < config_pages.size(); i++) { if ((pos = pname.find(config_pages[i]->label())) != std::string::npos) { if (pname.substr(pos) == config_pages[i]->label()) { if (current) current->hide(); current = config_pages[i];//->grp; current->show(); return; } } } } } extern Fl_Double_Window *dlgXcvrConfig; Fl_Double_Window* XcvrDialog() { int W = 675, H = 260; Fl_Double_Window* w = new Fl_Double_Window(W, H, _("Configuration")); w->size_range(W, H, W, H); int xtree = 2; int ytree = 2; int htree = H - 2*ytree; int wtree = 180; int wtabs = W - wtree - 2 * xtree; int xtabs = xtree + wtree; tab_tree = new Fl_Tree(xtree, ytree, wtree, htree); tab_tree->callback((Fl_Callback*)SelectItem_CB); Fl_Group::current()->resizable(tab_tree); tab_tree->root_label(_("Configure")); tab_tree->selectmode(FL_TREE_SELECT_SINGLE); tab_tree->connectorstyle(FL_TREE_CONNECTOR_DOTTED); tab_tree->connectorwidth(14); // default is 17 tabXCVR = createXCVR(xtabs, ytree, wtabs, htree, _("Xcvr")); tabCMEDIA = createCmediaTab(xtabs, ytree, wtabs, htree, ("PTT-Cmedia")); tabTMATE2 = createTMATE2Tab(xtabs, ytree, wtabs, htree, ("TMATE-2")); tabGPIO = createGPIO(xtabs, ytree, wtabs, htree, _("PTT-GPIO")); tabPTTGEN = createPTT(xtabs, ytree, wtabs, htree, _("PTT-Generic")); tabTCPIP = createTCPIP(xtabs, ytree, wtabs, htree, _("TCPIP & TCI")); tabOTHER = createAUX(xtabs, ytree, wtabs, htree, _("Other")); tabSERVER = createSERVER(xtabs, ytree, wtabs, htree, _("Server")); tabCLIENT = createCLIENT(xtabs, ytree, wtabs, htree, _("Client")); tabPOLLING = createPOLLING(xtabs, ytree, wtabs, htree, _("Poll")); tabRESTORE = createRestore(xtabs, ytree, wtabs, htree, _("Restore")); tabCOMMANDS = createCOMMANDS(xtabs, ytree, wtabs, htree, _("Commands")); tabSNDCMD = createSNDCMD(xtabs, ytree, wtabs, htree, _("Send")); tabTRACE = createTRACE(xtabs, ytree, wtabs, htree, _("Trace")); tab_tree->begin(); add_tree_item(tabXCVR); add_tree_item(tabPTTGEN); add_tree_item(tabCMEDIA); add_tree_item(tabTMATE2); add_tree_item(tabTCPIP); add_tree_item(tabOTHER); add_tree_item(tabSERVER); add_tree_item(tabCLIENT); add_tree_item(tabPOLLING); add_tree_item(tabRESTORE); add_tree_item(tabCOMMANDS); add_tree_item(tabSNDCMD); add_tree_item(tabTRACE); tab_tree->end(); w->end(); return w; } flrig-2.0.04/src/UI/ui_wide.cxx0000664000175000017500000010712514505111350013101 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- Fl_Group *gwide = (Fl_Group *)0; Fl_Group *grp_row1b1b = (Fl_Group *)0; //Fl_Group *tabs = (Fl_Group *)0; Fl_Menu_Item menu_wide_menu[] = { {_("&File"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("E&xit"), 0, (Fl_Callback*)cb_mnuExit, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Config"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Setup"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Transceiver"), 0, (Fl_Callback*)cb_mnuConfigXcvr, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("TCPIP - TCI"), 0, (Fl_Callback*)cb_mnuTCPIP, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-CMedia"), 0, (Fl_Callback*)cb_mnuCMEDIA, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-Generic"), 0, (Fl_Callback*)cb_mnuPTT, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-GPIO"), 0, (Fl_Callback*)cb_mnuGPIO, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("AUX"), 0, (Fl_Callback*)cb_mnuOTHER, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("TMATE-2"), 0, (Fl_Callback*)cb_mnuTMATE2, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Server"), 0, (Fl_Callback*)cb_mnuSERVER, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Client"), 0, (Fl_Callback*)cb_mnuCLIENT, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Polling"), 0, (Fl_Callback*)cb_Polling, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Commands"), 0, (Fl_Callback*)cb_mnuCommands, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Send command"), 0, (Fl_Callback*)cb_Send, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Restore"), 0, (Fl_Callback*)cb_Restore, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Trace"), 0, (Fl_Callback*)cb_mnuTrace, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("UI"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Meters dialog"), 0, (Fl_Callback*)cb_mnu_show_meters, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Meter filtering"), 0, (Fl_Callback*)cb_mnu_meter_filtering, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Power meter scale"), 0, (Fl_Callback*)cb_mnu_power_meter_scale, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Embed tabs"), 0, (Fl_Callback*)cb_mnu_embed_tabs, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("Tooltips"), 0, (Fl_Callback*)cb_mnuTooltips, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("Voltmeter"), 0, (Fl_Callback*)cb_mnuVoltmeter, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("User Interface"), 0, (Fl_Callback*)cb_mnuColorConfig, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {_("&Memory"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Save"), 0, (Fl_Callback*)cb_save_me, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Manage"), 0, (Fl_Callback*)cb_Memory, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Keyer"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("&CW Keyer"), 0, (Fl_Callback*)cb_CWkeyer, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&FSK Keyer"), 0, (Fl_Callback*)cb_FSKkeyer, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Help"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("On Line Help"), 0, (Fl_Callback*)cb_mnuOnLineHelp, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&About"), 0, (Fl_Callback*)cb_mnuAbout, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("&Events"), 0, (Fl_Callback*)cb_Events, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&xml-help"), 0, (Fl_Callback*)cb_xml_help, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0} }; Fl_Group *wide_main_group(int X, int Y, int W, int H) { Fl_Group *g = new Fl_Group(X, Y, W, H); g->box(FL_FLAT_BOX); int xpos = X + 2; int ypos = Y + 2; txt_encA = new Fl_Output( H - 90, Y+1, 90, 20, ""); txt_encA->box(FL_THIN_DOWN_BOX); txt_encA->align(20); txt_encA->hide(); Fl_Group *wd_grp1, *wd_grp1a, *wd_grp1b, *wd_grp1c; wd_grp1 = new Fl_Group(xpos, ypos, W - 4, 60, ""); { // Meters wd_grp1a = new Fl_Group( wd_grp1->x(), wd_grp1->y(), 208, wd_grp1->h(), ""); { grpMeters = new Fl_Group(wd_grp1a->x(), wd_grp1a->y(), wd_grp1a->w(), wd_grp1a->h()); { grpMeters->box(FL_DOWN_BOX); grpMeters->color((Fl_Color)246); scaleSmeter = new Fl_Box(xpos+1, ypos+1, 206, 20); scaleSmeter->box(FL_FLAT_BOX); scaleSmeter->color((Fl_Color)246); scaleSmeter->image(image_S60); scaleSmeter->tooltip(_("S units meter")); btnALC_IDD_SWR = new Fl_Button(xpos+1, ypos+1, 206, 20); btnALC_IDD_SWR->tooltip(_("Press SWR / ALC")); btnALC_IDD_SWR->box(FL_FLAT_BOX); btnALC_IDD_SWR->down_box(FL_FLAT_BOX); btnALC_IDD_SWR->color((Fl_Color)246); btnALC_IDD_SWR->image(image_SWR); btnALC_IDD_SWR->callback((Fl_Callback*)cb_btnALC_IDD_SWR); btnALC_IDD_SWR->hide(); sldrRcvSignal = new Fl_SigBar(xpos+2, ypos+22, 200, 6); sldrRcvSignal->box(FL_FLAT_BOX); sldrRcvSignal->color(FL_BACKGROUND_COLOR); sldrRcvSignal->selection_color(FL_BACKGROUND_COLOR); sldrRcvSignal->labeltype(FL_NORMAL_LABEL); sldrRcvSignal->labelfont(0); sldrRcvSignal->labelsize(12); sldrRcvSignal->labelcolor(FL_FOREGROUND_COLOR); sldrRcvSignal->align(Fl_Align(FL_ALIGN_CENTER)); sldrRcvSignal->when(FL_WHEN_CHANGED); sldrRcvSignal->hide(); sldrRcvSignal->minimum(0); sldrRcvSignal->maximum(100); sldrALC = new Fl_SigBar(xpos+3, ypos+22, 200, 6); sldrALC->box(FL_FLAT_BOX); sldrALC->color(FL_BACKGROUND_COLOR); sldrALC->selection_color(FL_BACKGROUND_COLOR); sldrALC->labeltype(FL_NORMAL_LABEL); sldrALC->labelfont(0); sldrALC->labelsize(12); sldrALC->labelcolor(FL_FOREGROUND_COLOR); sldrALC->align(Fl_Align(FL_ALIGN_CENTER)); sldrALC->when(FL_WHEN_CHANGED); sldrALC->hide(); sldrALC->minimum(0); sldrALC->maximum(100); sldrIDD = new Fl_SigBar(xpos+3, ypos+22, 200, 6); sldrIDD->box(FL_FLAT_BOX); sldrIDD->color(FL_BACKGROUND_COLOR); sldrIDD->selection_color(FL_BACKGROUND_COLOR); sldrIDD->labeltype(FL_NORMAL_LABEL); sldrIDD->labelfont(0); sldrIDD->labelsize(12); sldrIDD->labelcolor(FL_FOREGROUND_COLOR); sldrIDD->align(Fl_Align(FL_ALIGN_CENTER)); sldrIDD->when(FL_WHEN_CHANGED); sldrIDD->hide(); sldrIDD->minimum(0); sldrIDD->maximum(25);; sldrSWR = new Fl_SigBar(xpos+2, ypos+22, 200, 6); sldrSWR->box(FL_FLAT_BOX); sldrSWR->color(FL_BACKGROUND_COLOR); sldrSWR->selection_color(FL_BACKGROUND_COLOR); sldrSWR->labeltype(FL_NORMAL_LABEL); sldrSWR->labelfont(0); sldrSWR->labelsize(12); sldrSWR->labelcolor(FL_FOREGROUND_COLOR); sldrSWR->align(Fl_Align(FL_ALIGN_CENTER)); sldrSWR->when(FL_WHEN_CHANGED); sldrSWR->hide(); sldrSWR->minimum(0); sldrSWR->maximum(100); sldrFwdPwr = new Fl_SigBar(xpos+2, ypos+29, 200, 6); sldrFwdPwr->box(FL_FLAT_BOX); sldrFwdPwr->color(FL_BACKGROUND_COLOR); sldrFwdPwr->selection_color(FL_BACKGROUND_COLOR); sldrFwdPwr->labeltype(FL_NORMAL_LABEL); sldrFwdPwr->labelfont(0); sldrFwdPwr->labelsize(12); sldrFwdPwr->labelcolor(FL_FOREGROUND_COLOR); sldrFwdPwr->align(Fl_Align(FL_ALIGN_CENTER)); sldrFwdPwr->when(FL_WHEN_CHANGED); sldrFwdPwr->hide(); sldrFwdPwr->minimum(0); sldrFwdPwr->maximum(100); scalePower = new Fl_Button(xpos+1, ypos+36, 206, 20); scalePower->tooltip(_("right-click to select power scale")); scalePower->box(FL_FLAT_BOX); scalePower->down_box(FL_FLAT_BOX); scalePower->color((Fl_Color)246); scalePower->image(image_P100); scalePower->callback((Fl_Callback*)cb_scalePower); sldrVoltage = new Fl_SigBar(xpos+2, ypos+29, 200, 6); sldrVoltage->box(FL_FLAT_BOX); sldrVoltage->color(FL_BACKGROUND_COLOR); sldrVoltage->selection_color(FL_BACKGROUND_COLOR); sldrVoltage->labeltype(FL_NORMAL_LABEL); sldrVoltage->labelfont(0); sldrVoltage->labelsize(12); sldrVoltage->labelcolor(FL_FOREGROUND_COLOR); sldrVoltage->align(Fl_Align(FL_ALIGN_CENTER)); sldrVoltage->when(FL_WHEN_CHANGED); sldrVoltage->hide(); sldrVoltage->minimum(0); sldrVoltage->maximum(100); scaleVoltage = new Fl_Box(xpos+1, ypos+36, 206, 20); scaleVoltage->box(FL_FLAT_BOX); scaleVoltage->image(image_voltmeter); scaleVoltage->tooltip(_("DC power")); sldrVoltage->hide(); scaleVoltage->hide(); meter_fill_box = new Fl_Box(xpos+207, ypos, 0, 60); meter_fill_box->box(FL_FLAT_BOX); meter_fill_box->color((Fl_Color)246); } grpMeters->end(); } wd_grp1a->end(); // FreqDisp A group int x_1b = wd_grp1a->x() + wd_grp1a->w() + 2; wd_grp1b = new Fl_Group( x_1b, wd_grp1->y(), 290, wd_grp1->h(), ""); { FreqDispA = new cFreqControl( wd_grp1b->x(), wd_grp1b->y(), wd_grp1b->w(), wd_grp1b->h(), "10"); FreqDispA->when(FL_WHEN_CHANGED); FreqDispA->callback((Fl_Callback*)movFreqA); } wd_grp1b->end(); // FreqDisp B & vfo selection controls group int x_1c = wd_grp1b->x() + wd_grp1b->w() + 2; wd_grp1c = new Fl_Group( x_1c, wd_grp1->y(), W - x_1c - 2, wd_grp1->h(),""); { FreqDispB = new cFreqControl( wd_grp1c->x(), wd_grp1->y(), wd_grp1c->w(), 38, "10"); FreqDispB->when(FL_WHEN_CHANGED); FreqDispB->callback((Fl_Callback*)movFreqB); grp_row0a = new Fl_Group( wd_grp1c->x() + 2, wd_grp1c->y() + FreqDispB->h() + 2, FreqDispB->w(), wd_grp1c->h() - FreqDispB->h() - 2); { int halfwidth = (wd_grp1c->w() - 8) / 10; btnA = new Fl_Light_Button( grp_row0a->x(), grp_row0a->y(), 3 * halfwidth, grp_row0a->h(), _("vfoA")); btnA->tooltip(_("Rx-A / Tx-A")); btnA->down_box(FL_THIN_DOWN_BOX); btnA->labelsize(12); btnA->callback((Fl_Callback*)cb_btnA); btnA->value(1); btn_KX3_swapAB = new Fl_Button( grp_row0a->x(), grp_row0a->y(), 3 * halfwidth, grp_row0a->h(), _("A / B")); btn_KX3_swapAB->tooltip(_("Swap A/B")); btn_KX3_swapAB->down_box(FL_DOWN_BOX); btn_KX3_swapAB->labelsize(12); btn_KX3_swapAB->callback((Fl_Callback*)cb_btn_KX3_swapAB); btn_KX3_swapAB->hide(); btnB = new Fl_Light_Button( btnA->x() + btnA->w() + 2, btnA->y(), btnA->w(), btnA->h(), _("vfoB")); btnB->tooltip(_("Rx-B / Tx-B")); btnB->down_box(FL_THIN_DOWN_BOX); btnB->labelsize(12); btnB->callback((Fl_Callback*)cb_btnB); btnB->value(0); btn_KX3_A2B = new Fl_Button( btnA->x() + btnA->w() + 2, btnA->y(), btnA->w(), btnA->h(), _("A -> B")); btn_KX3_A2B->tooltip(_("Copy A to B")); btn_KX3_A2B->down_box(FL_DOWN_BOX); btn_KX3_A2B->labelsize(12); btn_KX3_A2B->callback((Fl_Callback*)cb_KX3_A2B); btn_KX3_A2B->hide(); btn_K3_A2B = new Fl_Button( btn_KX3_A2B->x(), btn_KX3_A2B->y(), btn_KX3_A2B->w(), btn_KX3_A2B->h(), _("A -> B")); btn_K3_A2B->tooltip(_("Copy A to B")); btn_K3_A2B->down_box(FL_DOWN_BOX); btn_K3_A2B->labelsize(12); btn_K3_A2B->callback((Fl_Callback*)K3_A2B); btn_K3_A2B->hide(); btn_tune_on_off = new Fl_Light_Button( btnB->x() + btnB->w() + 2, btnA->y(), halfwidth, btnA->h(), ""); btn_tune_on_off->tooltip("Tuner On/Off"); btn_tune_on_off->callback((Fl_Callback*)cb_btn_tune_on_off); btnTune = new Fl_Button( btn_tune_on_off->x() + btn_tune_on_off->w(), btnA->y(), 2 * halfwidth, btnA->h(), _("Tune")); btnTune->tooltip(_("Manual Tune")); btnTune->callback((Fl_Callback*)cb_btnTune); btn_show_controls = new Fl_Button( btnTune->x() + btnTune->w() + 2, btnA->y(), halfwidth, btnA->h(), _("@-22->")); btn_show_controls->tooltip(_("Show/Hide controls")); btn_show_controls->callback((Fl_Callback*)cb_btn_show_controls); } grp_row0a->end(); } wd_grp1c->end(); } wd_grp1->end(); wd_grp1->resizable(wd_grp1b); ypos += 62; { // grp_row1 bandwidth, mode, att, ipo, nb, an a/b split ptt grp_row1 = new Fl_Group(xpos, ypos, W - 4, 20); grp_row1->box(FL_FLAT_BOX); { // grp_row1a grp_row1a = new Fl_Group( xpos, ypos, grpMeters->w(), 20); int w1a = (grpMeters->w() - 2) / 2; opBW = new Fl_ComboBox( xpos, ypos, w1a, 20, ""); opBW->tooltip(_("Select Transceiver Bandwidth")); opBW->box(FL_FLAT_BOX); opBW->color(FL_BACKGROUND2_COLOR); opBW->selection_color(FL_BACKGROUND_COLOR); opBW->labeltype(FL_NORMAL_LABEL); opBW->labelfont(0); opBW->labelsize(12); opBW->labelcolor(FL_FOREGROUND_COLOR); opBW->callback((Fl_Callback*)cb_opBW); opBW->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opBW->when(FL_WHEN_RELEASE); opBW->readonly(); opBW->end(); btnFILT = new Fl_Button(xpos, ypos, 20, 20, _("1")); btnFILT->callback((Fl_Callback*)cb_btnFILT); btnFILT->tooltip(_("Select filter")); btnFILT->hide(); btnCENTER = new Fl_Button(xpos, ypos, 20, 20, _("W")); btnCENTER->callback((Fl_Callback*)cb_btnCENTER); btnCENTER->tooltip(_("Center/Wid")); btnCENTER->hide(); opCENTER = new Fl_ComboBox(xpos + 20, ypos, w1a - 20, 20, ""); opCENTER->tooltip(_("Center frequency")); opCENTER->box(FL_FLAT_BOX); opCENTER->color(FL_BACKGROUND2_COLOR); opCENTER->selection_color(FL_BACKGROUND_COLOR); opCENTER->labeltype(FL_NORMAL_LABEL); opCENTER->labelfont(0); opCENTER->labelsize(12); opCENTER->labelcolor(FL_FOREGROUND_COLOR); opCENTER->callback((Fl_Callback*)cb_opCENTER); opCENTER->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opCENTER->when(FL_WHEN_RELEASE); opCENTER->hide(); opCENTER->readonly(); opCENTER->end(); btnDSP = new Fl_Button(xpos, ypos, 20, 20, _("L")); btnDSP->callback((Fl_Callback*)cb_btnDSP); btnDSP->hide(); opDSP_lo = new Fl_ComboBox(xpos + 20, ypos, w1a - 20, 20, _("Lo Cut")); opDSP_lo->tooltip(_("Lo Cut Freq")); opDSP_lo->box(FL_FLAT_BOX); opDSP_lo->color(FL_BACKGROUND2_COLOR); opDSP_lo->selection_color(FL_BACKGROUND_COLOR); opDSP_lo->labeltype(FL_NORMAL_LABEL); opDSP_lo->labelfont(0); opDSP_lo->labelsize(12); opDSP_lo->labelcolor(FL_FOREGROUND_COLOR); opDSP_lo->callback((Fl_Callback*)cb_opDSP_lo); opDSP_lo->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opDSP_lo->when(FL_WHEN_RELEASE); opDSP_lo->hide(); opDSP_lo->readonly(); opDSP_lo->end(); opDSP_hi = new Fl_ComboBox(xpos + 20, ypos, w1a - 20, 20, _("Lo Cut")); opDSP_hi->tooltip(_("Hi Cut Freq")); opDSP_hi->box(FL_FLAT_BOX); opDSP_hi->color(FL_BACKGROUND2_COLOR); opDSP_hi->selection_color(FL_BACKGROUND_COLOR); opDSP_hi->labeltype(FL_NORMAL_LABEL); opDSP_hi->labelfont(0); opDSP_hi->labelsize(12); opDSP_hi->labelcolor(FL_FOREGROUND_COLOR); opDSP_hi->callback((Fl_Callback*)cb_opDSP_hi); opDSP_hi->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opDSP_hi->when(FL_WHEN_RELEASE); opDSP_hi->hide(); opDSP_hi->readonly(); opDSP_hi->end(); opFilterInner = new Fl_Counter(xpos + 20, ypos, w1a - 20, 20, _("Inner cutoff")); opFilterInner->minimum(-4000); opFilterInner->maximum(4000); opFilterInner->step(10); opFilterInner->lstep(100); opFilterInner->align(Fl_Align(FL_ALIGN_LEFT)); opFilterInner->tooltip("Inner cutoff"); opFilterInner->hide(); opFilterOuter = new Fl_Counter(xpos + 20, ypos, w1a - 20, 20, _("Inner cutoff")); opFilterOuter->minimum(-4000); opFilterOuter->maximum(4000); opFilterOuter->step(10); opFilterOuter->lstep(100); opFilterOuter->align(Fl_Align(FL_ALIGN_LEFT)); opFilterOuter->tooltip("Outer cutoff"); opFilterOuter->hide(); opBW_A = new Fl_ComboBox(xpos + 20, ypos, w1a - 20, 20, _("BW vfoA")); opBW_A->align(Fl_Align(FL_ALIGN_LEFT)); opBW_A->tooltip("BW vfoA"); opBW_A->end(); opBW_A->hide(); opBW_B = new Fl_ComboBox(xpos + 20, ypos, w1a - 20, 20, _("BW vfoB")); opBW_B->align(Fl_Align(FL_ALIGN_LEFT)); opBW_B->tooltip("BW vfoB"); opBW_B->end(); opBW_B->hide(); opMODE = new Fl_ComboBox( opBW->x() + opBW->w() + 2, ypos, w1a, 20, _("Mode")); opMODE->tooltip(_("Select transceiver operating mode")); opMODE->box(FL_FLAT_BOX); opMODE->color(FL_BACKGROUND2_COLOR); opMODE->selection_color(FL_BACKGROUND_COLOR); opMODE->labeltype(FL_NORMAL_LABEL); opMODE->labelfont(0); opMODE->labelsize(12); opMODE->labelcolor(FL_FOREGROUND_COLOR); opMODE->callback((Fl_Callback*)cb_opMODE); opMODE->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opMODE->when(FL_WHEN_RELEASE); opMODE->readonly(); opMODE->end(); grp_row1a->end(); } { // grp_row1b int x1b = FreqDispA->x(); grp_row1b = new Fl_Group( x1b, ypos, FreqDispA->w(), 20); int x2b = FreqDispA->w() / 2; grp_row1b1 = new Fl_Group(x1b, ypos, FreqDispA->w(), 20); Fl_Group* grp_row1b1a = new Fl_Group(x1b, ypos, x2b, 20); Fl_Box* bx_row1b1a = new Fl_Box(x1b, ypos, 0, 20); bx_row1b1a->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); btnAttenuator = new Fl_Light_Button( bx_row1b1a->x() + bx_row1b1a->w(), ypos, 70, 20, _("ATT")); btnAttenuator->tooltip(_("Attenuator On/Off")); btnAttenuator->down_box(FL_THIN_DOWN_BOX); btnAttenuator->labelsize(12); btnAttenuator->callback((Fl_Callback*)cb_btnAttenuator); cbo_preamp = new Fl_ComboBox(bx_row1b1a->x() + bx_row1b1a->w(), ypos, 70, 20, ""); cbo_preamp->tooltip(_("Preamp in dB")); cbo_preamp->labelsize(12); cbo_preamp->add("-10 dB|0 dB|10 dB|20 dB|30 dB"); cbo_preamp->color(FL_BACKGROUND2_COLOR); cbo_preamp->selection_color(FL_BACKGROUND_COLOR); cbo_preamp->align(FL_ALIGN_LEFT); cbo_preamp->index(progStatus.preamp); cbo_preamp->readonly(); cbo_preamp->callback((Fl_Callback*)cb_cbo_preamp); cbo_preamp->hide(); btnPreamp = new Fl_Light_Button( btnAttenuator->x() + btnAttenuator->w() + 2, ypos, 70, 20, _("PRE")); btnPreamp->tooltip(_("Preamp On/Off")); btnPreamp->down_box(FL_THIN_DOWN_BOX); btnPreamp->labelsize(12); btnPreamp->callback((Fl_Callback*)cb_btnPreamp); grp_row1b1a->resizable(bx_row1b1a); grp_row1b1a->end(); grp_row1b1b = new Fl_Group( grp_row1b1a->x() + x2b, ypos, FreqDispA->w() - x2b, 20); btnNOISE = new Fl_Light_Button( grp_row1b1b->x(), ypos, 70, 20, _("NB")); btnNOISE->tooltip(_("Noise Blanker On/Off")); btnNOISE->down_box(FL_THIN_DOWN_BOX); btnNOISE->labelsize(12); btnNOISE->callback((Fl_Callback*)cb_btnNOISE); btnAutoNotch = new Fl_Light_Button( btnNOISE->x() + btnNOISE->w() + 2, ypos, grp_row1b1b->w() - btnNOISE->w() - 4, 20, _("AN")); btnAutoNotch->tooltip(_("Auto Notch On/Off")); btnAutoNotch->down_box(FL_THIN_DOWN_BOX); btnAutoNotch->labelsize(12); btnAutoNotch->callback((Fl_Callback*)cb_btnAutoNotch); Fl_Box* bx_row1b1b = new Fl_Box( btnAutoNotch->x() + btnAutoNotch->w(), ypos, 2, 20); grp_row1b1b->end(); grp_row1b1b->resizable(bx_row1b1b); grp_row1b1->end(); grp_row1b->end(); } { // grp_row1c Fl_Group *grp_row1c = new Fl_Group( grp_row0a->x(), ypos, grp_row0a->w(), 20); btnAswapB = new Fl_Button( btnA->x(), ypos, btnA->w(), 20, _("A / B")); btnAswapB->tooltip(_("\ Left click:Swap A/B\n\ Right click:Copy A to B\n\ SHIFT click: FreqA -> FreqB\n\ CTRL click: FreqB -> FreqA\ ")); btnAswapB->down_box(FL_DOWN_BOX); btnAswapB->labelsize(12); btnAswapB->callback((Fl_Callback*)cb_btnAswapB); btn_K3_swapAB = new Fl_Button( btnA->x(), ypos, btnA->w(), btnAswapB->h(), _("A / B")); btn_K3_swapAB->tooltip(_("Left click: Swap A/B\nRight click: Copy A to B")); btn_K3_swapAB->down_box(FL_DOWN_BOX); btn_K3_swapAB->labelsize(12); btn_K3_swapAB->callback((Fl_Callback*)cb_btn_K3_swapAB); btn_K3_swapAB->hide(); labelMEMORY = new Fl_Box( btnA->x(), ypos, btnA->w(), btnAswapB->h(), _("MEMORY")); labelMEMORY->box(FL_DOWN_BOX); labelMEMORY->color(FL_YELLOW); labelMEMORY->align(FL_ALIGN_CENTER); labelMEMORY->hide(); btnSplit = new Fl_Light_Button( btnB->x(), ypos, btnB->w(), 20, _("Split")); btnSplit->tooltip(_("Rx-A / Tx-B")); btnSplit->down_box(FL_THIN_DOWN_BOX); btnSplit->labelsize(12); btnSplit->callback((Fl_Callback*)cb_btnSplit); btnSplit->value(progStatus.split); btnPTT = new Fl_Light_Button( btnTune->x(), ypos, btnTune->w(), 20, _("PTT")); btnPTT->tooltip(_("Xmt On/Off")); btnPTT->down_box(FL_THIN_DOWN_BOX); btnPTT->labelsize(12); btnPTT->callback((Fl_Callback*)cb_btnPTT); bx_row1_expander2 = new Fl_Box( btnPTT->x() + btnPTT->w(), ypos, 1, 20); grp_row1c->end(); grp_row1c->resizable(bx_row1_expander2); } grp_row1->end(); grp_row1->resizable(grp_row1b); } // grp_row2 sliders grp_row2 = new Fl_Group(0, 107, WIDE_MAINW, 62); { int colW = WIDE_MAINW / 3; grp_row2a = new Fl_Group(0, 107, colW, 62); // sql, mic sldrSQUELCH = new Fl_Wheel_Value_Slider( grp_row2a->x() + 54, grp_row2a->y(), grp_row2a->w() - 54, 18, _("SQL")); sldrSQUELCH->tooltip(_("Adjust Squelch")); sldrSQUELCH->type(5); sldrSQUELCH->box(FL_THIN_DOWN_BOX); sldrSQUELCH->color(FL_BACKGROUND_COLOR); sldrSQUELCH->selection_color(FL_BACKGROUND_COLOR); sldrSQUELCH->labeltype(FL_NORMAL_LABEL); sldrSQUELCH->labelfont(0); sldrSQUELCH->labelsize(12); sldrSQUELCH->labelcolor(FL_FOREGROUND_COLOR); sldrSQUELCH->maximum(100); sldrSQUELCH->step(1); sldrSQUELCH->value(15); sldrSQUELCH->textsize(12); sldrSQUELCH->callback((Fl_Callback*)cb_sldrSQUELCH); sldrSQUELCH->align(Fl_Align(FL_ALIGN_LEFT)); sldrSQUELCH->when(FL_WHEN_CHANGED); sldrSQUELCH->reverse(true); btnDataPort = new Fl_Light_Button( grp_row2a->x() + 2, grp_row2a->y() + 22, 50, 18, _("Data")); btnDataPort->tooltip(_("Input on Data Port")); btnDataPort->down_box(FL_THIN_DOWN_BOX); btnDataPort->labelsize(12); btnDataPort->callback((Fl_Callback*)cb_btnDataPort); btnDataPort->hide(); btnDataPort->value(progStatus.data_port); sldrMICGAIN = new Fl_Wheel_Value_Slider( grp_row2a->x() + 54, grp_row2a->y() + 22, grp_row2a->w() - 54, 18, _("Mic")); sldrMICGAIN->tooltip(_("Adjust Mic Gain")); sldrMICGAIN->type(5); sldrMICGAIN->box(FL_THIN_DOWN_BOX); sldrMICGAIN->color(FL_BACKGROUND_COLOR); sldrMICGAIN->selection_color(FL_BACKGROUND_COLOR); sldrMICGAIN->labeltype(FL_NORMAL_LABEL); sldrMICGAIN->labelfont(0); sldrMICGAIN->labelsize(12); sldrMICGAIN->labelcolor(FL_FOREGROUND_COLOR); sldrMICGAIN->maximum(100); sldrMICGAIN->step(1); sldrMICGAIN->textsize(12); sldrMICGAIN->callback((Fl_Callback*)cb_sldrMICGAIN); sldrMICGAIN->align(Fl_Align(FL_ALIGN_LEFT)); sldrMICGAIN->when(FL_WHEN_CHANGED); sldrMICGAIN->reverse(true); btnPOWER = new Fl_Light_Button( grp_row2a->x() + 2, grp_row2a->y() + 44, 50, 18, _("Pwr")); btnPOWER->tooltip(_("Enable/Disable Power adjuster")); btnPOWER->value(1); btnPOWER-> callback((Fl_Callback*) cb_btnPOWER); sldrPOWER = new Fl_Wheel_Value_Slider( grp_row2a->x() + 54, grp_row2a->y() + 44, grp_row2a->w() - 54, 18, ""); sldrPOWER->tooltip(_("Adjust power level")); sldrPOWER->type(5); sldrPOWER->box(FL_THIN_DOWN_BOX); sldrPOWER->color(FL_BACKGROUND_COLOR); sldrPOWER->selection_color(FL_BACKGROUND_COLOR); sldrPOWER->labeltype(FL_NORMAL_LABEL); sldrPOWER->labelfont(0); sldrPOWER->labelsize(12); sldrPOWER->labelcolor(FL_FOREGROUND_COLOR); sldrPOWER->maximum(100); sldrPOWER->step(1); sldrPOWER->value(15); sldrPOWER->textsize(12); sldrPOWER->callback((Fl_Callback*)cb_sldrPOWER); sldrPOWER->align(Fl_Align(FL_ALIGN_LEFT)); // TODO: Needed to fix bug in setPower(), where once slider is used, power levels stop tracking radio // TODO: Other sliders might need same change? // TODO: See also ui_small, and ui_touch for similar sldrPOWER->when(FL_WHEN_CHANGED); sldrPOWER->reverse(true); Fl_Group::current()->resizable(sldrPOWER); grp_row2a->end(); grp_row2b = new Fl_Group(colW, 107, colW, 62); // IFshift, NR btnIFsh = new Fl_Light_Button( grp_row2b->x() + 2, grp_row2b->y(), 50, 18, _("IFsh")); btnIFsh->tooltip(_("IF Shift On/Off")); btnIFsh->down_box(FL_THIN_DOWN_BOX); btnIFsh->labelsize(12); btnIFsh->callback((Fl_Callback*)cb_btnIFsh); btn_KX3_IFsh = new Fl_Button( grp_row2b->x() + 2, grp_row2b->y(), 50, 18, _("Cntr")); btn_KX3_IFsh->tooltip(_("Center IF shift")); btn_KX3_IFsh->down_box(FL_THIN_DOWN_BOX); btn_KX3_IFsh->labelsize(12); btn_KX3_IFsh->callback((Fl_Callback*)cb_KX3_IFsh); btn_KX3_IFsh->hide(); sldrIFSHIFT = new Fl_Wheel_Value_Slider( grp_row2b->x() + 54, grp_row2b->y(), grp_row2b->w() - 54, 18); sldrIFSHIFT->tooltip(_("Adjust IF Shift")); sldrIFSHIFT->type(5); sldrIFSHIFT->box(FL_THIN_DOWN_BOX); sldrIFSHIFT->color(FL_BACKGROUND_COLOR); sldrIFSHIFT->selection_color(FL_BACKGROUND_COLOR); sldrIFSHIFT->labeltype(FL_NORMAL_LABEL); sldrIFSHIFT->labelfont(0); sldrIFSHIFT->labelsize(12); sldrIFSHIFT->labelcolor(FL_FOREGROUND_COLOR); sldrIFSHIFT->minimum(-1000); sldrIFSHIFT->maximum(1000); sldrIFSHIFT->step(10); sldrIFSHIFT->textsize(12); sldrIFSHIFT->callback((Fl_Callback*)cb_sldrIFSHIFT); sldrIFSHIFT->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrIFSHIFT->when(FL_WHEN_CHANGED); sldrIFSHIFT->reverse(true); btnLOCK = new Fl_Light_Button( grp_row2b->x() + 2, grp_row2b->y(), 50, 18, _("Lock")); btnLOCK->tooltip(_("Lock PBT Inner/Outer sliders")); btnLOCK->down_box(FL_THIN_DOWN_BOX); btnLOCK->labelsize(12); btnLOCK->callback((Fl_Callback*)cb_btnLOCK); sldrINNER = new Fl_Wheel_Value_Slider( grp_row2b->x() + 54, grp_row2b->y(), grp_row2b->w() - 54, 18, ""); sldrINNER->tooltip(_("Adjust Icom Inner PBT")); sldrINNER->type(5); sldrINNER->box(FL_THIN_DOWN_BOX); sldrINNER->color(FL_BACKGROUND_COLOR); sldrINNER->selection_color(FL_BACKGROUND_COLOR); sldrINNER->labeltype(FL_NORMAL_LABEL); sldrINNER->labelfont(0); sldrINNER->labelsize(12); sldrINNER->labelcolor(FL_FOREGROUND_COLOR); sldrINNER->minimum(-50); sldrINNER->maximum(50); sldrINNER->step(1); sldrINNER->textsize(12); sldrINNER->callback((Fl_Callback*)cb_sldrINNER); sldrINNER->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrINNER->when(FL_WHEN_CHANGED); sldrINNER->reverse(true); btnCLRPBT = new Fl_Button( grp_row2b->x() + 2, grp_row2b->y() + 22, 50, 18, _("ClrPBT")); btnCLRPBT->tooltip(_("Zero PBT Inner/Outer sliders")); btnCLRPBT->down_box(FL_THIN_DOWN_BOX); btnCLRPBT->labelsize(12); btnCLRPBT->callback((Fl_Callback*)cb_btnCLRPBT); sldrOUTER = new Fl_Wheel_Value_Slider( grp_row2b->x() + 54, grp_row2b->y() + 22, grp_row2b->w() - 54, 18, ""); sldrOUTER->tooltip(_("Adjust Icom Outer PBT")); sldrOUTER->type(5); sldrOUTER->box(FL_THIN_DOWN_BOX); sldrOUTER->color(FL_BACKGROUND_COLOR); sldrOUTER->selection_color(FL_BACKGROUND_COLOR); sldrOUTER->labeltype(FL_NORMAL_LABEL); sldrOUTER->labelfont(0); sldrOUTER->labelsize(12); sldrOUTER->labelcolor(FL_FOREGROUND_COLOR); sldrOUTER->minimum(-50); sldrOUTER->maximum(50); sldrOUTER->step(1); sldrOUTER->textsize(12); sldrOUTER->callback((Fl_Callback*)cb_sldrOUTER); sldrOUTER->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrOUTER->when(FL_WHEN_CHANGED); sldrOUTER->reverse(true); btnNotch = new Fl_Light_Button( grp_row2b->x() + 2, grp_row2b->y() + 44, 50, 18, _("Nch")); btnNotch->tooltip(_("Notch - Manual (off) Auto (on)")); btnNotch->down_box(FL_THIN_DOWN_BOX); btnNotch->labelsize(12); btnNotch->callback((Fl_Callback*)cb_btnNotch); sldrNOTCH = new Fl_Wheel_Value_Slider( grp_row2b->x() + 54, grp_row2b->y() + 44, grp_row2b->w() - 54, 18); sldrNOTCH->tooltip(_("Adjust Notch Frequency")); sldrNOTCH->type(5); sldrNOTCH->box(FL_THIN_DOWN_BOX); sldrNOTCH->color(FL_BACKGROUND_COLOR); sldrNOTCH->selection_color(FL_BACKGROUND_COLOR); sldrNOTCH->labeltype(FL_NORMAL_LABEL); sldrNOTCH->labelfont(0); sldrNOTCH->labelsize(12); sldrNOTCH->labelcolor(FL_FOREGROUND_COLOR); sldrNOTCH->minimum(-1000); sldrNOTCH->maximum(1000); sldrNOTCH->step(10); sldrNOTCH->textsize(12); sldrNOTCH->callback((Fl_Callback*)cb_sldrNOTCH); sldrNOTCH->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrNOTCH->when(FL_WHEN_CHANGED); sldrNOTCH->reverse(true); Fl_Group::current()->resizable(sldrINNER); grp_row2b->end(); grp_row2c = new Fl_Group(2*colW, 107, WIDE_MAINW - 2*colW - 2, 62); // AGC/RF gain, power, volume btnAGC = new Fl_Light_Button( grp_row2c->x() + 2, grp_row2c->y(), 50, 18, _("AGC")); btnAGC->tooltip(_("Automatic Gain Control")); btnAGC->down_box(FL_THIN_DOWN_BOX); btnAGC->value(0); btnAGC->labelsize(12); btnAGC->callback((Fl_Callback*)cb_btnAGC); sldrRFGAIN = new Fl_Wheel_Value_Slider( grp_row2c->x() + 54, grp_row2c->y(), grp_row2c->w() - 54, 18); sldrRFGAIN->tooltip(_("Adjust RF gain")); sldrRFGAIN->type(5); sldrRFGAIN->box(FL_THIN_DOWN_BOX); sldrRFGAIN->color(FL_BACKGROUND_COLOR); sldrRFGAIN->selection_color(FL_BACKGROUND_COLOR); sldrRFGAIN->labeltype(FL_NORMAL_LABEL); sldrRFGAIN->labelfont(0); sldrRFGAIN->labelsize(12); sldrRFGAIN->labelcolor(FL_FOREGROUND_COLOR); sldrRFGAIN->maximum(100); sldrRFGAIN->step(1); sldrRFGAIN->value(15); sldrRFGAIN->textsize(12); sldrRFGAIN->callback((Fl_Callback*)cb_sldrRFGAIN); sldrRFGAIN->align(Fl_Align(FL_ALIGN_LEFT)); sldrRFGAIN->when(FL_WHEN_CHANGED); sldrRFGAIN->reverse(true); btnNR = new Fl_Light_Button( grp_row2c->x() + 2, grp_row2c->y() + 22, 50, 18, _("NR")); btnNR->tooltip(_("Noise Reduction On/Off")); btnNR->down_box(FL_THIN_DOWN_BOX); btnNR->labelsize(12); btnNR->callback((Fl_Callback*)cb_btnNR); sldrNR = new Fl_Wheel_Value_Slider( grp_row2c->x() + 54, grp_row2c->y() + 22, grp_row2c->w() - 54, 18); sldrNR->tooltip(_("Adjust noise reduction")); sldrNR->type(5); sldrNR->box(FL_THIN_DOWN_BOX); sldrNR->color(FL_BACKGROUND_COLOR); sldrNR->selection_color(FL_BACKGROUND_COLOR); sldrNR->labeltype(FL_NORMAL_LABEL); sldrNR->labelfont(0); sldrNR->labelsize(12); sldrNR->labelcolor(FL_FOREGROUND_COLOR); sldrNR->maximum(100); sldrNR->step(2); sldrNR->textsize(12); sldrNR->callback((Fl_Callback*)cb_sldrNR); sldrNR->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); // TODO: Needed to fix bug in setNR(), where once slider is used, levels stop tracking radio // TODO: Other sliders might need same change? // TODO: See also ui_small, and ui_touch for similar sldrNR->when(FL_WHEN_CHANGED); sldrNR->reverse(true); btnVol = new Fl_Light_Button( grp_row2c->x() + 2, grp_row2c->y() + 44, 50, 18, _("Vol")); btnVol->tooltip(_("Speaker on/off")); btnVol->down_box(FL_THIN_DOWN_BOX); btnVol->value(1); btnVol->labelsize(12); btnVol->callback((Fl_Callback*)cb_btnVol); #ifdef __APPLE__ sldrVOLUME = new Fl_Wheel_Value_Slider( grp_row2c->x() + 54, grp_row2c->y() + 44, grp_row2c->w() - 54 - 18, 18); sldrVOLUME->tooltip(_("Adjust Audio Volume")); sldrVOLUME->type(5); sldrVOLUME->box(FL_THIN_DOWN_BOX); sldrVOLUME->color(FL_BACKGROUND_COLOR); sldrVOLUME->selection_color(FL_BACKGROUND_COLOR); sldrVOLUME->labeltype(FL_NORMAL_LABEL); sldrVOLUME->labelfont(0); sldrVOLUME->labelsize(12); sldrVOLUME->labelcolor(FL_FOREGROUND_COLOR); sldrVOLUME->maximum(100); sldrVOLUME->step(1); sldrVOLUME->textsize(12); sldrVOLUME->callback((Fl_Callback*)cb_sldrVOLUME); sldrVOLUME->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrVOLUME->when(FL_WHEN_CHANGED | FL_MOUSEWHEEL | FL_LEAVE); Fl_Group::current()->resizable(sldrVOLUME); sldrVOLUME->reverse(true); // box to keep right side of slider control from lying under the OS X // dialog resize window decoration Fl_Box *volbox = new Fl_Box( W-18, grp_row2c->y() + 44, 18, 18); volbox->box(FL_FLAT_BOX); #else sldrVOLUME = new Fl_Wheel_Value_Slider( grp_row2c->x() + 54, grp_row2c->y() + 44, grp_row2c->w() - 54, 18); sldrVOLUME->tooltip(_("Adjust Audio Volume")); sldrVOLUME->type(5); sldrVOLUME->box(FL_THIN_DOWN_BOX); sldrVOLUME->color(FL_BACKGROUND_COLOR); sldrVOLUME->selection_color(FL_BACKGROUND_COLOR); sldrVOLUME->labeltype(FL_NORMAL_LABEL); sldrVOLUME->labelfont(0); sldrVOLUME->labelsize(12); sldrVOLUME->labelcolor(FL_FOREGROUND_COLOR); sldrVOLUME->maximum(100); sldrVOLUME->step(1); sldrVOLUME->textsize(12); sldrVOLUME->callback((Fl_Callback*)cb_sldrVOLUME); sldrVOLUME->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrVOLUME->when(FL_WHEN_CHANGED | FL_MOUSEWHEEL | FL_LEAVE); Fl_Group::current()->resizable(sldrVOLUME); sldrVOLUME->reverse(true); #endif Fl_Group::current()->resizable(sldrVOLUME); grp_row2c->end(); } grp_row2->end(); g->end(); return g; } Fl_Double_Window* Wide_rig_window() { int mainW = WIDE_MAINW; int menuH = WIDE_MENUH; int mainH = WIDE_MAINH; int tabsH = WIDE_TABSH; Fl_Double_Window* w = new Fl_Double_Window(mainW, menuH + mainH + tabsH, _("Flrig")); w->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE)); grp_menu = new Fl_Group(0, 0, mainW, menuH); wide_menu = new Fl_Menu_Bar(0, 0, mainW - 64, menuH); wide_menu->textsize(12); wide_menu->menu(menu_wide_menu); Fl_Menu_Item * mnu = getMenuItem(_("Tooltips"), menu_wide_menu); if (mnu) { progStatus.tooltips ? mnu->set() : mnu->clear(); mnuTooltips = mnu; } mnu = getMenuItem(_("Voltmeter"), menu_wide_menu); if (mnu) { progStatus.display_voltmeter ? mnu->set() : mnu->clear(); mnuVoltmeter = mnu; } mnu = getMenuItem(_("Embed tabs"), menu_wide_menu); if (mnu) { progStatus.embed_tabs ? mnu->set() : mnu->clear(); mnuEmbedTabs = mnu; } Fl_Group *mnu_box = new Fl_Group(mainW - 64, 0, 64, menuH); mnu_box->box(FL_UP_BOX); tcpip_box = new Fl_Group(mainW - 62, 2, 60, 18); tcpip_box->box(FL_FLAT_BOX); tcpip_menu_box = new Fl_Box(mainW - 62, 3, 16, 16); tcpip_menu_box->box(FL_DIAMOND_BOX); tcpip_menu_box->color(FL_GREEN); Fl_Box *tcpip_menu_label = new Fl_Box(mainW - 62 + 18, 3, 64 - 22, 16, _("tcpip")); tcpip_menu_label->box(FL_FLAT_BOX); tcpip_menu_label->align(FL_ALIGN_CENTER); tcpip_menu_label->tooltip(_("lit when connected to remote tcpip")); tcpip_box->end(); tcpip_box->hide(); mnu_box->end(); grp_menu->resizable(wide_menu); grp_menu->end(); main_group = wide_main_group(0, menuH, mainW, mainH); main_group->end(); main_group->hide(); tabs = new Fl_Group(0, menuH + mainH, mainW, tabsH); tabs->box(FL_FLAT_BOX); tabs->end(); grpInitializing = new Fl_Group(0, menuH, mainW, mainH + tabsH, ""); grpInitializing->box(FL_FLAT_BOX); grpInitializing->color(FL_LIGHT2); progress = new Fl_Progress( mainW / 4, mainH / 2, mainW / 2, 20, "Initializing"); progress->maximum(100); progress->minimum(0); progress->labelcolor(FL_RED); progress->labelsize(12); progress->align(Fl_Align(FL_ALIGN_TOP)); progress->selection_color(FL_GREEN); grpInitializing->end(); grpInitializing->show(); w->resizable(tabs); w->end(); return w; } flrig-2.0.04/src/UI/power_meter_setup.cxx0000664000175000017500000001361614504050407015231 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- Fl_Button *sel_5 = (Fl_Button *)0; Fl_Button *sel_10 = (Fl_Button *)0; Fl_Button *sel_15 = (Fl_Button *)0; Fl_Button *sel_20 = (Fl_Button *)0; Fl_Button *sel_25 = (Fl_Button *)0; Fl_Button *sel_50 = (Fl_Button *)0; Fl_Button *sel_100 = (Fl_Button *)0; Fl_Button *sel_200 = (Fl_Button *)0; Fl_Button *sel_auto = (Fl_Button *)0; Fl_Output *pwr_scale_description=(Fl_Output *)0; static void cb_sel_5(Fl_Button*, void*) { progStatus.pwr_scale = 0; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); set_power_controlImage(0); } static void cb_sel_10(Fl_Button*, void*) { progStatus.pwr_scale = 1; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); set_power_controlImage(0); } static void cb_sel_15(Fl_Button*, void*) { progStatus.pwr_scale = 2; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); set_power_controlImage(0); } static void cb_sel_20(Fl_Button*, void*) { progStatus.pwr_scale = 3; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); set_power_controlImage(0); } static void cb_sel_25(Fl_Button*, void*) { progStatus.pwr_scale = 4; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); set_power_controlImage(0); } static void cb_sel_50(Fl_Button*, void*) { progStatus.pwr_scale = 5; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); set_power_controlImage(0); } static void cb_sel_100(Fl_Button*, void*) { progStatus.pwr_scale = 6; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); set_power_controlImage(0); } static void cb_sel_200(Fl_Button*, void*) { progStatus.pwr_scale = 7; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); set_power_controlImage(0); } static void cb_sel_auto(Fl_Button*, void*) { progStatus.pwr_scale = 8; pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); if (selrig->has_power_control) set_power_controlImage(sldrPOWER->value()); else set_power_controlImage(sldrFwdPwr->peak()); } static void cb_close_select(Fl_Button *b, void*) { // Fl_Double_Window *p = (Fl_Double_Window *)b->parent(); b->parent()->hide(); } Fl_Double_Window* power_meter_scale_select() { Fl_Double_Window* w = new Fl_Double_Window(455, 230, _("Select Power Meter Scale")); sel_5 = new Fl_Button(8, 5, 218, 40, _("5 watt")); sel_5->tooltip(_("Press to select")); sel_5->color((Fl_Color)215); sel_5->image(image_P5); sel_5->labelsize(12); sel_5->callback((Fl_Callback*)cb_sel_5); sel_5->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sel_10 = new Fl_Button(234, 5, 218, 40, _("10 watt")); sel_10->tooltip(_("Press to select")); sel_10->color((Fl_Color)215); sel_10->image(image_p10); sel_10->labelsize(12); sel_10->callback((Fl_Callback*)cb_sel_10); sel_10->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sel_15 = new Fl_Button(8, 50, 218, 40, _("15 watt")); sel_15->tooltip(_("Press to select")); sel_15->color((Fl_Color)215); sel_15->image(image_p15); sel_15->labelsize(12); sel_15->callback((Fl_Callback*)cb_sel_15); sel_15->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sel_20 = new Fl_Button(234, 50, 218, 40, _("20 watt")); sel_20->tooltip(_("Press to select")); sel_20->color((Fl_Color)215); sel_20->image(image_p20); sel_20->labelsize(12); sel_20->callback((Fl_Callback*)cb_sel_20); sel_20->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sel_25 = new Fl_Button(8, 95, 218, 40, _("25 watt")); sel_25->tooltip(_("Press to select")); sel_25->color((Fl_Color)215); sel_25->image(image_P25); sel_25->labelsize(12); sel_25->callback((Fl_Callback*)cb_sel_25); sel_25->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sel_50 = new Fl_Button(234, 95, 218, 40, _("50 watt")); sel_50->tooltip(_("Press to select")); sel_50->color((Fl_Color)215); sel_50->image(image_P50); sel_50->labelsize(12); sel_50->callback((Fl_Callback*)cb_sel_50); sel_50->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sel_100 = new Fl_Button(8, 140, 218, 40, _("100 watt")); sel_100->tooltip(_("Press to select")); sel_100->color((Fl_Color)215); sel_100->image(image_P100); sel_100->labelsize(12); sel_100->callback((Fl_Callback*)cb_sel_100); sel_100->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sel_200 = new Fl_Button(234, 140, 218, 40, _("200 watt")); sel_200->tooltip(_("Press to select")); sel_200->color((Fl_Color)215); sel_200->image(image_P200); sel_200->labelsize(12); sel_200->callback((Fl_Callback*)cb_sel_200); sel_200->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sel_auto = new Fl_Button(8, 185, 218, 40, _("Auto scaled")); sel_auto->tooltip(_("Press to select")); sel_auto->color((Fl_Color)215); sel_auto->labelsize(12); sel_auto->callback((Fl_Callback*)cb_sel_auto); sel_auto->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); pwr_scale_description = new Fl_Output(234, 185, 131, 24, _("Selected Meter")); pwr_scale_description->align(Fl_Align(FL_ALIGN_BOTTOM)); pwr_scale_description->value(mtr_scales[progStatus.pwr_scale]); Fl_Button *close_select = new Fl_Button(370, 185, 80, 24, _("Close")); close_select->callback((Fl_Callback*)cb_close_select); w->end(); return w; } flrig-2.0.04/src/UI/meters_setup.cxx0000664000175000017500000001224314504050407014173 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "Fl_SigBar.h" Fl_Wheel_Value_Slider *sldr_smeter_avg=(Fl_Wheel_Value_Slider *)0; Fl_Wheel_Value_Slider *sldr_smeter_peak=(Fl_Wheel_Value_Slider *)0; Fl_Wheel_Value_Slider *sldr_pout_avg=(Fl_Wheel_Value_Slider *)0; Fl_Wheel_Value_Slider *sldr_pout_peak=(Fl_Wheel_Value_Slider *)0; static void cb_sldr_smeter_avg(Fl_Wheel_Value_Slider* o, void*) { progStatus.rx_avg=o->value(); sldrRcvSignal->avg(o->value()); } static void cb_sldr_smeter_peak(Fl_Wheel_Value_Slider* o, void*) { progStatus.rx_peak=o->value(); sldrRcvSignal->aging(o->value()); } static void cb_sldr_pout_avg(Fl_Wheel_Value_Slider* o, void*) { progStatus.pwr_avg=o->value(); sldrFwdPwr->avg(o->value()); } static void cb_sldr_pout_peak(Fl_Wheel_Value_Slider* o, void*) { progStatus.pwr_peak=o->value(); sldrFwdPwr->aging(o->value()); } Fl_Double_Window* MetersDialog() { Fl_Double_Window* w = new Fl_Double_Window(410, 192, _("Meter Filters")); sldr_smeter_avg = new Fl_Wheel_Value_Slider(17, 31, 375, 18, _("S meter averaging")); sldr_smeter_avg->tooltip(_("Meter averaged over # samples")); sldr_smeter_avg->type(5); sldr_smeter_avg->box(FL_THIN_DOWN_BOX); sldr_smeter_avg->color(FL_LIGHT3); sldr_smeter_avg->selection_color((Fl_Color)4); sldr_smeter_avg->labeltype(FL_NORMAL_LABEL); sldr_smeter_avg->labelfont(0); sldr_smeter_avg->labelsize(14); sldr_smeter_avg->labelcolor(FL_FOREGROUND_COLOR); sldr_smeter_avg->minimum(1); sldr_smeter_avg->maximum(SIGBAR_ARRAY_SIZE); sldr_smeter_avg->step(1); sldr_smeter_avg->value(5); sldr_smeter_avg->textsize(12); sldr_smeter_avg->callback((Fl_Callback*)cb_sldr_smeter_avg); sldr_smeter_avg->align(Fl_Align(FL_ALIGN_TOP_LEFT)); sldr_smeter_avg->when(FL_WHEN_CHANGED); sldr_smeter_avg->reverse(true); sldr_smeter_avg->value(progStatus.rx_avg); sldr_smeter_peak = new Fl_Wheel_Value_Slider(17, 70, 375, 18, _("S meter peak ")); sldr_smeter_peak->tooltip(_("Max peak reading over last # averaged samples")); sldr_smeter_peak->type(5); sldr_smeter_peak->box(FL_THIN_DOWN_BOX); sldr_smeter_peak->color(FL_LIGHT3); sldr_smeter_peak->selection_color((Fl_Color)4); sldr_smeter_peak->labeltype(FL_NORMAL_LABEL); sldr_smeter_peak->labelfont(0); sldr_smeter_peak->labelsize(14); sldr_smeter_peak->labelcolor(FL_FOREGROUND_COLOR); sldr_smeter_peak->minimum(1); sldr_smeter_peak->maximum(SIGBAR_ARRAY_SIZE); sldr_smeter_peak->step(1); sldr_smeter_peak->value(5); sldr_smeter_peak->textsize(12); sldr_smeter_peak->callback((Fl_Callback*)cb_sldr_smeter_peak); sldr_smeter_peak->align(Fl_Align(FL_ALIGN_TOP_LEFT)); sldr_smeter_peak->when(FL_WHEN_CHANGED); sldr_smeter_peak->reverse(true); sldr_smeter_peak->value(progStatus.rx_peak); sldr_pout_avg = new Fl_Wheel_Value_Slider(17, 109, 375, 18, _("Pwr out averaging")); sldr_pout_avg->tooltip(_("Meter averaged over # samples")); sldr_pout_avg->type(5); sldr_pout_avg->box(FL_THIN_DOWN_BOX); sldr_pout_avg->color(FL_LIGHT3); sldr_pout_avg->selection_color((Fl_Color)4); sldr_pout_avg->labeltype(FL_NORMAL_LABEL); sldr_pout_avg->labelfont(0); sldr_pout_avg->labelsize(14); sldr_pout_avg->labelcolor(FL_FOREGROUND_COLOR); sldr_pout_avg->minimum(1); sldr_pout_avg->maximum(SIGBAR_ARRAY_SIZE); sldr_pout_avg->step(1); sldr_pout_avg->value(5); sldr_pout_avg->textsize(12); sldr_pout_avg->callback((Fl_Callback*)cb_sldr_pout_avg); sldr_pout_avg->align(Fl_Align(FL_ALIGN_TOP_LEFT)); sldr_pout_avg->when(FL_WHEN_CHANGED); sldr_pout_avg->reverse(true); sldr_pout_avg->value(progStatus.pwr_avg); sldr_pout_peak = new Fl_Wheel_Value_Slider(17, 149, 375, 18, _("Pwr out peak")); sldr_pout_peak->tooltip(_("Max peak reading over last # averaged samples")); sldr_pout_peak->type(5); sldr_pout_peak->box(FL_THIN_DOWN_BOX); sldr_pout_peak->color(FL_LIGHT3); sldr_pout_peak->selection_color((Fl_Color)4); sldr_pout_peak->labeltype(FL_NORMAL_LABEL); sldr_pout_peak->labelfont(0); sldr_pout_peak->labelsize(14); sldr_pout_peak->labelcolor(FL_FOREGROUND_COLOR); sldr_pout_peak->minimum(1); sldr_pout_peak->maximum(SIGBAR_ARRAY_SIZE); sldr_pout_peak->step(1); sldr_pout_peak->value(5); sldr_pout_peak->textsize(12); sldr_pout_peak->callback((Fl_Callback*)cb_sldr_pout_peak); sldr_pout_peak->align(Fl_Align(FL_ALIGN_TOP_LEFT)); sldr_pout_peak->when(FL_WHEN_CHANGED); sldr_pout_peak->reverse(true); sldr_pout_peak->value(progStatus.pwr_peak); w->end(); return w; } flrig-2.0.04/src/UI/ui_touch.cxx0000664000175000017500000024456514505022320013303 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- void cbMAIN(Fl_Widget *, void *); void cbSLIDERS(Fl_Widget *, void *); void cbBUTTONS(Fl_Widget *, void *); void cbOTHER(Fl_Widget *, void *); static void set_menu_item(std::string name, bool b); static void cb_TOUCH_btnAuxRTS(Fl_Light_Button* o, void*); static void cb_TOUCH_btnAuxDTR(Fl_Light_Button* o, void*); static void cb_TOUCH_mnuAuxRTS(Fl_Menu_Item* o, void*); static void cb_TOUCH_mnuAuxDTR(Fl_Menu_Item* o, void*); Fl_Menu_Item touch_menu[] = { {_("&File"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("E&xit"), 0, (Fl_Callback*)cb_mnuExit, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Config"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Setup"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Transceiver"), 0, (Fl_Callback*)cb_mnuConfigXcvr, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("TCPIP - TCI"), 0, (Fl_Callback*)cb_mnuTCPIP, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-CMedia"), 0, (Fl_Callback*)cb_mnuCMEDIA, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-Generic"), 0, (Fl_Callback*)cb_mnuPTT, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("PTT-GPIO"), 0, (Fl_Callback*)cb_mnuGPIO, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Other"), 0, (Fl_Callback*)cb_mnuOTHER, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("TMATE-2"), 0, (Fl_Callback*)cb_mnuTMATE2, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Server"), 0, (Fl_Callback*)cb_mnuSERVER, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Client"), 0, (Fl_Callback*)cb_mnuCLIENT, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Polling"), 0, (Fl_Callback*)cb_Polling, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Commands"), 0, (Fl_Callback*)cb_mnuCommands, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Send command"), 0, (Fl_Callback*)cb_Send, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Restore"), 0, (Fl_Callback*)cb_Restore, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Trace"), 0, (Fl_Callback*)cb_mnuTrace, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("UI"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Meters dialog"), 0, (Fl_Callback*)cb_mnu_show_meters, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Meter filtering"), 0, (Fl_Callback*)cb_mnu_meter_filtering, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Power meter scale"), 0, (Fl_Callback*)cb_mnu_power_meter_scale, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("Tooltips"), 0, (Fl_Callback*)cb_mnuTooltips, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("Voltmeter"), 0, (Fl_Callback*)cb_mnuVoltmeter, 0, 130, FL_NORMAL_LABEL, 0, 14, 0}, {_("User Interface"), 0, (Fl_Callback*)cb_mnuColorConfig, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {_("&Memory"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("Save"), 0, (Fl_Callback*)cb_save_me, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("Manage"), 0, (Fl_Callback*)cb_Memory, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Keyer"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("&CW Keyer"), 0, (Fl_Callback*)cb_CWkeyer, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&FSK Keyer"), 0, (Fl_Callback*)cb_FSKkeyer, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_("&Help"), 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0}, {_("On Line Help"), 0, (Fl_Callback*)cb_mnuOnLineHelp, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&About"), 0, (Fl_Callback*)cb_mnuAbout, 0, 128, FL_NORMAL_LABEL, 0, 14, 0}, {_("&Events"), 0, (Fl_Callback*)cb_Events, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {_("&xml-help"), 0, (Fl_Callback*)cb_xml_help, 0, 0, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {_(" "), 0, 0, 0, FL_MENU_DIVIDER, FL_NORMAL_LABEL, 0, 14, 0}, {_("MAIN "), 0, (Fl_Callback*)cbMAIN, 0, FL_MENU_RADIO | FL_MENU_VALUE, FL_NORMAL_LABEL, 0, 14, 0}, {_("SLIDERS "), 0, (Fl_Callback*)cbSLIDERS, 0, FL_MENU_RADIO, FL_NORMAL_LABEL, 0, 14, 0}, {_("BUTTONS "), 0, (Fl_Callback*)cbBUTTONS, 0, FL_MENU_RADIO, FL_NORMAL_LABEL, 0, 14, 0}, {_("OTHER "), 0, (Fl_Callback*)cbOTHER, 0, FL_MENU_RADIO | FL_MENU_DIVIDER, FL_NORMAL_LABEL, 0, 14, 0}, {"Aux DTR", 0, (Fl_Callback*)cb_TOUCH_mnuAuxDTR, 0, FL_MENU_TOGGLE | FL_MENU_DIVIDER, FL_NORMAL_LABEL, 0, 14, 0}, {"Aux RTS", 0, (Fl_Callback*)cb_TOUCH_mnuAuxRTS, 0, FL_MENU_TOGGLE | FL_MENU_DIVIDER, FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0} }; static void set_menu_item(std::string name, bool b) { for (size_t n = 0; n < sizeof(touch_menu) / sizeof(*touch_menu); n++) if (touch_menu[n].text && (name == touch_menu[n].text)) { if (b) touch_menu[n].set(); else touch_menu[n].clear(); if (mainwindow) mainwindow->redraw(); break; } } static void cb_TOUCH_btnAuxRTS(Fl_Light_Button* o, void*) { progStatus.aux_rts = o->value(); set_menu_item("Aux RTS", progStatus.aux_rts); btnAuxRTS->value(progStatus.aux_rts); cbAuxPort(); } static void cb_TOUCH_btnAuxDTR(Fl_Light_Button* o, void*) { progStatus.aux_dtr = o->value(); set_menu_item("Aux DTR", progStatus.aux_dtr); btnAuxDTR->value(progStatus.aux_dtr); cbAuxPort(); } static void cb_TOUCH_mnuAuxRTS(Fl_Menu_Item* o, void*) { progStatus.aux_rts = !progStatus.aux_rts; set_menu_item("Aux RTS", progStatus.aux_rts); btnAuxRTS->value(progStatus.aux_rts); cbAuxPort(); } static void cb_TOUCH_mnuAuxDTR(Fl_Menu_Item* o, void*) { progStatus.aux_dtr = !progStatus.aux_dtr; set_menu_item("Aux DTR", progStatus.aux_dtr); btnAuxDTR->value(progStatus.aux_dtr); cbAuxPort(); } Fl_Group *grpMAIN = (Fl_Group *)0; Fl_Group *grpSLIDERS = (Fl_Group *)0; Fl_Group *grpBUTTONS = (Fl_Group *)0; Fl_Group *grpOTHER = (Fl_Group *)0; void cbMAIN(Fl_Widget *, void *) { grpMAIN->show(); grpSLIDERS->hide(); grpBUTTONS->hide(); grpOTHER->hide(); } void cbSLIDERS(Fl_Widget *, void *) { grpMAIN->hide(); grpSLIDERS->show(); grpBUTTONS->hide(); grpOTHER->hide(); } void cbBUTTONS(Fl_Widget *, void *) { grpMAIN->hide(); grpSLIDERS->hide(); grpBUTTONS->show(); grpOTHER->hide(); } void cbOTHER(Fl_Widget *, void *) { grpMAIN->hide(); grpSLIDERS->hide(); grpBUTTONS->hide(); grpOTHER->show(); } void cb_touch_Vol(Fl_Widget *w, void *d) { cb_btnVol(btnVol, 0); if (btnVol->active()) Fl::focus(sldrVOLUME); } Fl_Group *touch_main_group(int X, int Y, int W, int H) { int ypos = Y + 2; int xpos = X + 2; Fl_Group *tmg = new Fl_Group(X,Y,W,H); grpMAIN = new Fl_Group(xpos, ypos, W-4, H-ypos-2, ""); ypos += 4; // meters group grpMeters = new Fl_Group(xpos, ypos, 208, 60); grpMeters->box(FL_FLAT_BOX); grpMeters->color((Fl_Color)246); scaleSmeter = new Fl_Box(xpos, ypos, 206, 20); scaleSmeter->box(FL_FLAT_BOX); scaleSmeter->color((Fl_Color)246); scaleSmeter->image(image_S60); scaleSmeter->tooltip(_("S units meter")); btnALC_IDD_SWR = new Fl_Button(xpos, ypos, 206, 20); btnALC_IDD_SWR->tooltip(_("Press SWR / ALC")); btnALC_IDD_SWR->box(FL_FLAT_BOX); btnALC_IDD_SWR->down_box(FL_FLAT_BOX); btnALC_IDD_SWR->color((Fl_Color)246); btnALC_IDD_SWR->image(image_SWR); btnALC_IDD_SWR->callback((Fl_Callback*)cb_btnALC_IDD_SWR); btnALC_IDD_SWR->hide(); sldrRcvSignal = new Fl_SigBar(xpos, ypos+22, 200, 6); sldrRcvSignal->box(FL_FLAT_BOX); sldrRcvSignal->color(FL_BACKGROUND_COLOR); sldrRcvSignal->selection_color(FL_BACKGROUND_COLOR); sldrRcvSignal->labeltype(FL_NORMAL_LABEL); sldrRcvSignal->labelfont(0); sldrRcvSignal->labelsize(14); sldrRcvSignal->labelcolor(FL_FOREGROUND_COLOR); sldrRcvSignal->align(Fl_Align(FL_ALIGN_CENTER)); sldrRcvSignal->when(FL_WHEN_CHANGED); sldrRcvSignal->hide(); sldrRcvSignal->minimum(0); sldrRcvSignal->maximum(100); sldrALC = new Fl_SigBar(xpos+2, ypos+22, 200, 6); sldrALC->box(FL_FLAT_BOX); sldrALC->color(FL_BACKGROUND_COLOR); sldrALC->selection_color(FL_BACKGROUND_COLOR); sldrALC->labeltype(FL_NORMAL_LABEL); sldrALC->labelfont(0); sldrALC->labelsize(14); sldrALC->labelcolor(FL_FOREGROUND_COLOR); sldrALC->align(Fl_Align(FL_ALIGN_CENTER)); sldrALC->when(FL_WHEN_CHANGED); sldrALC->hide(); sldrALC->minimum(0); sldrALC->maximum(100); sldrIDD = new Fl_SigBar(xpos+2, ypos+22, 200, 6); sldrIDD->box(FL_FLAT_BOX); sldrIDD->color(FL_BACKGROUND_COLOR); sldrIDD->selection_color(FL_BACKGROUND_COLOR); sldrIDD->labeltype(FL_NORMAL_LABEL); sldrIDD->labelfont(0); sldrIDD->labelsize(14); sldrIDD->labelcolor(FL_FOREGROUND_COLOR); sldrIDD->align(Fl_Align(FL_ALIGN_CENTER)); sldrIDD->when(FL_WHEN_CHANGED); sldrIDD->hide(); sldrIDD->minimum(0); sldrIDD->maximum(25);; sldrSWR = new Fl_SigBar(xpos+2, ypos+22, 200, 6); sldrSWR->box(FL_FLAT_BOX); sldrSWR->color(FL_BACKGROUND_COLOR); sldrSWR->selection_color(FL_BACKGROUND_COLOR); sldrSWR->labeltype(FL_NORMAL_LABEL); sldrSWR->labelfont(0); sldrSWR->labelsize(14); sldrSWR->labelcolor(FL_FOREGROUND_COLOR); sldrSWR->align(Fl_Align(FL_ALIGN_CENTER)); sldrSWR->when(FL_WHEN_CHANGED); sldrSWR->hide(); sldrSWR->minimum(0); sldrSWR->maximum(100); sldrFwdPwr = new Fl_SigBar(xpos+2, ypos+29, 200, 6); sldrFwdPwr->box(FL_FLAT_BOX); sldrFwdPwr->color(FL_BACKGROUND_COLOR); sldrFwdPwr->selection_color(FL_BACKGROUND_COLOR); sldrFwdPwr->labeltype(FL_NORMAL_LABEL); sldrFwdPwr->labelfont(0); sldrFwdPwr->labelsize(14); sldrFwdPwr->labelcolor(FL_FOREGROUND_COLOR); sldrFwdPwr->align(Fl_Align(FL_ALIGN_CENTER)); sldrFwdPwr->when(FL_WHEN_CHANGED); sldrFwdPwr->hide(); sldrFwdPwr->minimum(0); sldrFwdPwr->maximum(100); scalePower = new Fl_Button(xpos, ypos+36, 206, 20); scalePower->tooltip(_("right-click to select power scale")); scalePower->box(FL_FLAT_BOX); scalePower->down_box(FL_FLAT_BOX); scalePower->color((Fl_Color)246); scalePower->image(image_P100); scalePower->callback((Fl_Callback*)cb_scalePower); sldrVoltage = new Fl_SigBar(xpos+2, ypos+29, 200, 6); sldrVoltage->box(FL_FLAT_BOX); sldrVoltage->color(FL_BACKGROUND_COLOR); sldrVoltage->selection_color(FL_BACKGROUND_COLOR); sldrVoltage->labeltype(FL_NORMAL_LABEL); sldrVoltage->labelfont(0); sldrVoltage->labelsize(12); sldrVoltage->labelcolor(FL_FOREGROUND_COLOR); sldrVoltage->align(Fl_Align(FL_ALIGN_CENTER)); sldrVoltage->when(FL_WHEN_CHANGED); sldrVoltage->hide(); sldrVoltage->minimum(0); sldrVoltage->maximum(100); scaleVoltage = new Fl_Box(xpos, ypos+36, 206, 20); scaleVoltage->box(FL_FLAT_BOX); scaleVoltage->image(image_voltmeter); scaleVoltage->tooltip(_("DC power")); sldrVoltage->hide(); scaleVoltage->hide(); meter_fill_box = new Fl_Box(xpos+210, ypos+4, 0, 57); meter_fill_box->box(FL_FLAT_BOX); meter_fill_box->color((Fl_Color)246); Fl_Group::current()->resizable(meter_fill_box); grpMeters->end(); // end of meters group // bw / mode selector group ypos += 62; Fl_Group *grpcombos = new Fl_Group(xpos, ypos, 208, 35); btnCENTER = new Fl_Button(xpos, ypos, 30, 35, _("W")); btnCENTER->callback((Fl_Callback*)cb_btnCENTER); btnCENTER->tooltip(_("Center/Width")); btnCENTER->hide(); opBW = new Fl_ComboBox(xpos, ypos, 115, 35, ""); opBW->tooltip(_("Select Transceiver Bandwidth")); opBW->box(FL_FLAT_BOX); opBW->color(FL_BACKGROUND2_COLOR); opBW->selection_color(FL_BACKGROUND_COLOR); opBW->labeltype(FL_NORMAL_LABEL); opBW->labelfont(0); opBW->labelsize(12); opBW->textfont(0); opBW->textsize(14); opBW->labelcolor(FL_FOREGROUND_COLOR); opBW->callback((Fl_Callback*)cb_opBW); opBW->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opBW->when(FL_WHEN_RELEASE); opBW->readonly(); opBW->end(); opCENTER = new Fl_ComboBox(xpos+30, ypos, opBW->w() - 30, 35, ""); opCENTER->tooltip(_("Center frequency")); opCENTER->box(FL_FLAT_BOX); opCENTER->color(FL_BACKGROUND2_COLOR); opCENTER->selection_color(FL_BACKGROUND_COLOR); opCENTER->labeltype(FL_NORMAL_LABEL); opCENTER->labelfont(0); opCENTER->labelsize(12); opCENTER->textfont(0); opCENTER->textsize(14);; opCENTER->labelcolor(FL_FOREGROUND_COLOR); opCENTER->callback((Fl_Callback*)cb_opCENTER); opCENTER->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opCENTER->when(FL_WHEN_RELEASE); opCENTER->readonly(); opCENTER->hide(); opCENTER->end(); opMODE = new Fl_ComboBox(xpos + opBW->w() + 2, ypos, 208 - opBW->w() - 2, 35, ""); opMODE->tooltip(_("Select transceiver operating mode")); opMODE->box(FL_FLAT_BOX); opMODE->color(FL_BACKGROUND2_COLOR); opMODE->selection_color(FL_BACKGROUND_COLOR); opMODE->labeltype(FL_NORMAL_LABEL); opMODE->labelfont(0); opMODE->labelsize(12); opMODE->labelcolor(FL_FOREGROUND_COLOR); opMODE->textfont(0); opMODE->textsize(14); opMODE->callback((Fl_Callback*)cb_opMODE); opMODE->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opMODE->when(FL_WHEN_RELEASE); opMODE->readonly(); opMODE->end(); btnDSP = new Fl_Button(xpos, ypos, 30, 35, _("L")); btnDSP->callback((Fl_Callback*)cb_btnDSP); btnDSP->labelsize(14); btnDSP->hide(); btnFILT = new Fl_Button(btnDSP->x(), btnDSP->y(), 20, 20, _("1")); btnFILT->callback((Fl_Callback*)cb_btnFILT); btnFILT->labelsize(14); btnFILT->tooltip(_("Select filter")); btnFILT->hide(); opDSP_lo = new Fl_ComboBox(xpos+30, ypos, opBW->w() - 30, 35, ""); opDSP_lo->tooltip(_("Lo Cut Freq")); opDSP_lo->box(FL_FLAT_BOX); opDSP_lo->color(FL_BACKGROUND2_COLOR); opDSP_lo->selection_color(FL_BACKGROUND_COLOR); opDSP_lo->labeltype(FL_NORMAL_LABEL); opDSP_lo->labelfont(0); opDSP_lo->labelsize(12); opDSP_lo->textfont(0); opDSP_lo->textsize(14);; opDSP_lo->labelcolor(FL_FOREGROUND_COLOR); opDSP_lo->callback((Fl_Callback*)cb_opDSP_lo); opDSP_lo->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opDSP_lo->when(FL_WHEN_RELEASE); opDSP_lo->readonly(); opDSP_lo->hide(); opDSP_lo->end(); opDSP_hi = new Fl_ComboBox(xpos+30, ypos, opBW->w() - 30, 35, ""); opDSP_hi->tooltip(_("Hi Cut Freq")); opDSP_hi->box(FL_FLAT_BOX); opDSP_hi->color(FL_BACKGROUND2_COLOR); opDSP_hi->selection_color(FL_BACKGROUND_COLOR); opDSP_hi->labeltype(FL_NORMAL_LABEL); opDSP_hi->labelfont(0); opDSP_hi->labelsize(12); opDSP_hi->textfont(0); opDSP_hi->textsize(14);; opDSP_hi->labelcolor(FL_FOREGROUND_COLOR); opDSP_hi->callback((Fl_Callback*)cb_opDSP_hi); opDSP_hi->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); opDSP_hi->when(FL_WHEN_RELEASE); opDSP_hi->readonly(); opDSP_hi->hide(); opDSP_hi->end(); opFilterInner = new Fl_Counter(xpos+30, ypos, opBW->w() - 30, 35, _("Inner cutoff")); opFilterInner->minimum(-4000); opFilterInner->maximum(4000); opFilterInner->step(10); opFilterInner->lstep(100); opFilterInner->align(Fl_Align(FL_ALIGN_LEFT)); opFilterInner->tooltip("Inner cutoff"); opFilterInner->hide(); opFilterOuter = new Fl_Counter(xpos+30, ypos, opBW->w() - 30, 35, _("Inner cutoff")); opFilterOuter->minimum(-4000); opFilterOuter->maximum(4000); opFilterOuter->step(10); opFilterOuter->lstep(100); opFilterOuter->align(Fl_Align(FL_ALIGN_LEFT)); opFilterOuter->tooltip("Outer cutoff"); opFilterOuter->hide(); opBW_A = new Fl_ComboBox(xpos+30, ypos, opBW->w() - 30, 35, _("BW vfoA")); opBW_A->tooltip("BW vfoA"); opBW_A->align(Fl_Align(FL_ALIGN_LEFT)); opBW_A->end(); opBW_A->hide(); opBW_B = new Fl_ComboBox(xpos+30, ypos, opBW->w() - 30, 35, _("BW vfoB")); opBW_B->align(Fl_Align(FL_ALIGN_LEFT)); opBW_B->tooltip("Bw vfoB"); opBW_B->end(); opBW_B->hide(); grpcombos->end(); // end of bw / mode selector group xpos += grpMeters->w() + 2; ypos = Y + 2; FreqDispA = new cFreqControl(xpos, ypos, 480, 100, _("10")); FreqDispA->labeltype(FL_NORMAL_LABEL); FreqDispA->when(FL_WHEN_CHANGED); FreqDispA->callback((Fl_Callback*)movFreqA); // FreqDispB hides behind FreqDispA FreqDispB = new cFreqControl(xpos, ypos, 480, 100, _("10")); FreqDispB->when(FL_WHEN_CHANGED); FreqDispB->callback((Fl_Callback*)movFreqB); FreqDispB->hide(); xpos += FreqDispA->w() + 2; btnA = new Fl_Light_Button(xpos, ypos, 49, 49, _("A")); btnA->tooltip(_("vfo A")); btnA->down_box(FL_THIN_DOWN_BOX); btnA->labelsize(16);; btnA->callback((Fl_Callback*)cb_btnA); btnA->value(1); btn_KX3_swapAB = new Fl_Button(xpos, ypos, 49, 49, _("A / B")); btn_KX3_swapAB->tooltip(_("Swap A/B")); btn_KX3_swapAB->down_box(FL_DOWN_BOX); btn_KX3_swapAB->labelsize(16); btn_KX3_swapAB->callback((Fl_Callback*)cb_btn_KX3_swapAB); btn_KX3_swapAB->hide(); btnB = new Fl_Light_Button(xpos, ypos+51, 49, 49, _("B")); btnB->tooltip(_("vfo B")); btnB->down_box(FL_THIN_DOWN_BOX); btnB->labelsize(16); btnB->callback((Fl_Callback*)cb_btnB); btnB->value(0); btn_KX3_A2B = new Fl_Button(xpos, ypos+51, 49, 49, _("A -> B")); btn_KX3_A2B->tooltip(_("Copy A to B")); btn_KX3_A2B->down_box(FL_DOWN_BOX); btn_KX3_A2B->labelsize(16); btn_KX3_A2B->callback((Fl_Callback*)cb_KX3_A2B); btn_KX3_A2B->hide(); btn_K3_A2B = new Fl_Button( btn_KX3_A2B->x(), btn_KX3_A2B->y(), btn_KX3_A2B->w(), btn_KX3_A2B->h(), _("A -> B")); btn_K3_A2B->tooltip(_("Copy A to B")); btn_K3_A2B->down_box(FL_DOWN_BOX); btn_K3_A2B->labelsize(12); btn_K3_A2B->callback((Fl_Callback*)K3_A2B); btn_K3_A2B->hide(); labelMEMORY = new Fl_Box(xpos, ypos, 49, 100, _("MEMORY")); labelMEMORY->box(FL_DOWN_BOX); labelMEMORY->color(FL_YELLOW); labelMEMORY->align(FL_ALIGN_CENTER); labelMEMORY->hide(); xpos = W - 2 - 75; btnPTT = new Fl_Light_Button(xpos, ypos, 75, 100, _("PTT")); btnPTT->tooltip(_("Xmt On/Off")); btnPTT->down_box(FL_THIN_DOWN_BOX); btnPTT->labelsize(18);; btnPTT->callback((Fl_Callback*)cb_btnPTT); xpos = btnA->x() + btnA->w() + 2; int ws = btnPTT->x() - 8 - xpos; Fl_Group *sliders1 = new Fl_Group(xpos, ypos, ws, H - 30); Fl_Group *g1a = new Fl_Group(xpos, ypos, 50, H-30); btnVol = new Fl_Light_Button(xpos, ypos + 51, 49, 49, _("Vol")); btnVol->tooltip(_("Speaker on/off")); btnVol->down_box(FL_THIN_DOWN_BOX); btnVol->value(1); btnVol->labelsize(15);; btnVol->callback((Fl_Callback*)cb_touch_Vol); g1a->end(); Fl_Group *g1b = new Fl_Group(xpos + 50, ypos, ws - 50, H - 30); // int swidth = btnPTT->x() - 2 - xpos; sldrPOWER = new Fl_Wheel_Value_Slider(xpos+50, ypos, ws-50, 49, _("PWR")); sldrPOWER->tooltip(_("Adjust power level")); sldrPOWER->type(5); sldrPOWER->box(FL_THIN_DOWN_BOX); sldrPOWER->color(FL_BACKGROUND_COLOR); sldrPOWER->selection_color(FL_BACKGROUND_COLOR); sldrPOWER->labeltype(FL_NORMAL_LABEL); sldrPOWER->labelfont(0); sldrPOWER->labelsize(14); sldrPOWER->labelcolor(FL_FOREGROUND_COLOR); sldrPOWER->maximum(100); sldrPOWER->step(1); sldrPOWER->value(15); sldrPOWER->textsize(14); sldrPOWER->callback((Fl_Callback*)cb_sldrPOWER); sldrPOWER->align(Fl_Align(FL_ALIGN_LEFT)); sldrPOWER->when(FL_WHEN_CHANGED); sldrPOWER->reverse(true); sldrVOLUME = new Fl_Wheel_Value_Slider(xpos + 50, ypos + 51, ws - 50, 49); sldrVOLUME->tooltip(_("Adjust Audio Volume")); sldrVOLUME->type(5); sldrVOLUME->box(FL_THIN_DOWN_BOX); sldrVOLUME->color(FL_BACKGROUND_COLOR); sldrVOLUME->selection_color(FL_BACKGROUND_COLOR); sldrVOLUME->labeltype(FL_NORMAL_LABEL); sldrVOLUME->labelfont(0); sldrVOLUME->labelsize(12); sldrVOLUME->labelcolor(FL_FOREGROUND_COLOR); sldrVOLUME->maximum(100); sldrVOLUME->step(1); sldrVOLUME->textsize(14); sldrVOLUME->callback((Fl_Callback*)cb_sldrVOLUME); sldrVOLUME->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrVOLUME->when(FL_WHEN_CHANGED | FL_MOUSEWHEEL | FL_LEAVE); Fl_Group::current()->resizable(sldrVOLUME); sldrVOLUME->reverse(true); g1b->end(); sliders1->resizable(g1b); sliders1->end(); grpMAIN->resizable(sliders1); grpMAIN->end(); xpos = X + 4; ypos = Y + 4; grpSLIDERS = new Fl_Group(xpos, ypos, W, H-ypos, ""); int wg = (W - 16) / 3; int cw = 60; int rh = 48; int ch = 100; int spw = wg - cw; Fl_Group *col1 = new Fl_Group(xpos, ypos, wg, ch); Fl_Group *col1a = new Fl_Group(xpos, ypos, cw, ch, ""); col1a->end(); Fl_Group *col1b = new Fl_Group(xpos + cw, ypos, spw, ch, ""); sldrSQUELCH = new Fl_Wheel_Value_Slider(xpos + cw, ypos, spw, rh, _("SQL")); sldrSQUELCH->tooltip(_("Adjust Squelch")); sldrSQUELCH->type(5); sldrSQUELCH->box(FL_THIN_DOWN_BOX); sldrSQUELCH->color(FL_BACKGROUND_COLOR); sldrSQUELCH->selection_color(FL_BACKGROUND_COLOR); sldrSQUELCH->labeltype(FL_NORMAL_LABEL); sldrSQUELCH->labelfont(0); sldrSQUELCH->labelsize(14); sldrSQUELCH->labelcolor(FL_FOREGROUND_COLOR); sldrSQUELCH->maximum(100); sldrSQUELCH->step(1); sldrSQUELCH->value(15); sldrSQUELCH->textsize(14); sldrSQUELCH->callback((Fl_Callback*)cb_sldrSQUELCH); sldrSQUELCH->align(Fl_Align(FL_ALIGN_LEFT)); sldrSQUELCH->when(FL_WHEN_CHANGED); sldrSQUELCH->reverse(true); sldrMICGAIN = new Fl_Wheel_Value_Slider(xpos + cw, ypos + ch/2, spw, rh, _("Mic")); sldrMICGAIN->tooltip(_("Adjust Mic Gain")); sldrMICGAIN->type(5); sldrMICGAIN->box(FL_THIN_DOWN_BOX); sldrMICGAIN->color(FL_BACKGROUND_COLOR); sldrMICGAIN->selection_color(FL_BACKGROUND_COLOR); sldrMICGAIN->labeltype(FL_NORMAL_LABEL); sldrMICGAIN->labelfont(0); sldrMICGAIN->labelsize(14); sldrMICGAIN->labelcolor(FL_FOREGROUND_COLOR); sldrMICGAIN->maximum(100); sldrMICGAIN->step(1); sldrMICGAIN->textsize(14); sldrMICGAIN->callback((Fl_Callback*)cb_sldrMICGAIN); sldrMICGAIN->align(Fl_Align(FL_ALIGN_LEFT)); sldrMICGAIN->when(FL_WHEN_CHANGED); sldrMICGAIN->reverse(true); col1b->end(); col1->resizable(col1b); col1->end(); xpos += wg; Fl_Group *sep1 = new Fl_Group(xpos, ypos, 4, ch); sep1->box(FL_FLAT_BOX); sep1->end(); xpos += 4; Fl_Group *col2 = new Fl_Group(xpos, ypos, wg, ch); Fl_Group *col2a = new Fl_Group (xpos, ypos, cw, ch); btnIFsh = new Fl_Light_Button(xpos, ypos, cw, ch / 3 - 1, _("IFsh")); btnIFsh->tooltip(_("IF Shift On/Off")); btnIFsh->down_box(FL_THIN_DOWN_BOX); btnIFsh->labelsize(16); btnIFsh->callback((Fl_Callback*)cb_btnIFsh); btn_KX3_IFsh = new Fl_Button(xpos, ypos, cw, ch / 3 - 1, _("Cntr")); btn_KX3_IFsh->tooltip(_("Center IF shift")); btn_KX3_IFsh->down_box(FL_THIN_DOWN_BOX); btn_KX3_IFsh->labelsize(16); btn_KX3_IFsh->callback((Fl_Callback*)cb_KX3_IFsh); btn_KX3_IFsh->hide(); btnNR = new Fl_Light_Button(xpos, ypos + ch * 2 / 3, cw, ch / 3 - 1, _("NR")); btnNR->tooltip(_("Noise Reduction On/Off")); btnNR->down_box(FL_THIN_DOWN_BOX); btnNR->labelsize(16); btnNR->callback((Fl_Callback*)cb_btnNR); btnLOCK = new Fl_Light_Button(xpos, ypos, cw, ch / 3 - 1, _("Lock")); btnLOCK->tooltip(_("Lock PBT Inner/Outer")); btnLOCK->down_box(FL_THIN_DOWN_BOX); btnLOCK->labelsize(16); btnLOCK->callback((Fl_Callback*)cb_btnLOCK); btnCLRPBT = new Fl_Button( xpos, ypos + ch / 3, cw, ch / 3 - 1, _("ClrPBT")); btnCLRPBT->tooltip(_("Zero PBT Inner/Outer sliders")); btnCLRPBT->down_box(FL_THIN_DOWN_BOX); btnCLRPBT->labelsize(12); btnCLRPBT->callback((Fl_Callback*)cb_btnCLRPBT); col2a->end(); Fl_Group *col2b = new Fl_Group (xpos+cw, ypos, spw, ch); sldrIFSHIFT = new Fl_Wheel_Value_Slider(xpos+cw, ypos, spw, ch / 3 - 1); sldrIFSHIFT->tooltip(_("Adjust IF Shift")); sldrIFSHIFT->type(5); sldrIFSHIFT->box(FL_THIN_DOWN_BOX); sldrIFSHIFT->color(FL_BACKGROUND_COLOR); sldrIFSHIFT->selection_color(FL_BACKGROUND_COLOR); sldrIFSHIFT->labeltype(FL_NORMAL_LABEL); sldrIFSHIFT->labelfont(0); sldrIFSHIFT->labelsize(14); sldrIFSHIFT->labelcolor(FL_FOREGROUND_COLOR); sldrIFSHIFT->minimum(-1000); sldrIFSHIFT->maximum(1000); sldrIFSHIFT->step(10); sldrIFSHIFT->textsize(14); sldrIFSHIFT->callback((Fl_Callback*)cb_sldrIFSHIFT); sldrIFSHIFT->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrIFSHIFT->when(FL_WHEN_CHANGED); sldrIFSHIFT->reverse(true); sldrINNER = new Fl_Wheel_Value_Slider(xpos+cw, ypos, spw, ch / 3 - 1, ""); sldrINNER->tooltip(_("Adjust Icom Inner PBT")); sldrINNER->type(5); sldrINNER->box(FL_THIN_DOWN_BOX); sldrINNER->color(FL_BACKGROUND_COLOR); sldrINNER->selection_color(FL_BACKGROUND_COLOR); sldrINNER->labeltype(FL_NORMAL_LABEL); sldrINNER->labelfont(0); sldrINNER->labelsize(16); sldrINNER->labelcolor(FL_FOREGROUND_COLOR); sldrINNER->minimum(-50); sldrINNER->maximum(50); sldrINNER->step(1); sldrINNER->textsize(12); sldrINNER->callback((Fl_Callback*)cb_sldrINNER); sldrINNER->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrINNER->when(FL_WHEN_CHANGED); sldrINNER->reverse(true); sldrOUTER = new Fl_Wheel_Value_Slider( xpos+cw, ypos + ch / 3, spw, ch / 3 - 1, ""); sldrOUTER->tooltip(_("Adjust Icom Inner PBT")); sldrOUTER->type(5); sldrOUTER->box(FL_THIN_DOWN_BOX); sldrOUTER->color(FL_BACKGROUND_COLOR); sldrOUTER->selection_color(FL_BACKGROUND_COLOR); sldrOUTER->labeltype(FL_NORMAL_LABEL); sldrOUTER->labelfont(0); sldrOUTER->labelsize(16); sldrOUTER->labelcolor(FL_FOREGROUND_COLOR); sldrOUTER->minimum(-50); sldrOUTER->maximum(50); sldrOUTER->step(1); sldrOUTER->textsize(12); sldrOUTER->callback((Fl_Callback*)cb_sldrOUTER); sldrOUTER->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrOUTER->when(FL_WHEN_CHANGED); sldrOUTER->reverse(true); sldrNR = new Fl_Wheel_Value_Slider( xpos+cw, ypos + ch * 2 / 3, spw, ch / 3 - 1); sldrNR->tooltip(_("Adjust noise reduction")); sldrNR->type(5); sldrNR->box(FL_THIN_DOWN_BOX); sldrNR->color(FL_BACKGROUND_COLOR); sldrNR->selection_color(FL_BACKGROUND_COLOR); sldrNR->labeltype(FL_NORMAL_LABEL); sldrNR->labelfont(0); sldrNR->labelsize(12); sldrNR->labelcolor(FL_FOREGROUND_COLOR); sldrNR->maximum(100); sldrNR->step(2); sldrNR->textsize(14); sldrNR->callback((Fl_Callback*)cb_sldrNR); sldrNR->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrNR->when(FL_WHEN_CHANGED); sldrNR->reverse(true); col2b->end(); col2->resizable(col2b); col2->end(); xpos += wg; Fl_Group *sep2 = new Fl_Group(xpos, ypos, 4, ch); sep2->box(FL_FLAT_BOX); sep2->end(); xpos += 4; Fl_Group *col3 = new Fl_Group(xpos, ypos, wg, ch, ""); Fl_Group *col3a = new Fl_Group(xpos, ypos, cw, ch, ""); btnNotch = new Fl_Light_Button(xpos, ypos, cw, rh, _("Nch")); btnNotch->tooltip(_("Notch - Manual (off) Auto (on)")); btnNotch->down_box(FL_THIN_DOWN_BOX); btnNotch->labelsize(16); btnNotch->callback((Fl_Callback*)cb_btnNotch); btnAGC = new Fl_Light_Button(xpos, ypos + ch/2, cw, rh, _("AGC")); btnAGC->tooltip(_("Automatic Gain Control")); btnAGC->down_box(FL_THIN_DOWN_BOX); btnAGC->value(0); btnAGC->labelsize(16); btnAGC->callback((Fl_Callback*)cb_btnAGC); col3a->end(); Fl_Group *col3b = new Fl_Group(xpos+cw, ypos, spw, ch,""); sldrNOTCH = new Fl_Wheel_Value_Slider(xpos+cw, ypos, spw, rh); sldrNOTCH->tooltip(_("Adjust Notch Frequency")); sldrNOTCH->type(5); sldrNOTCH->box(FL_THIN_DOWN_BOX); sldrNOTCH->color(FL_BACKGROUND_COLOR); sldrNOTCH->selection_color(FL_BACKGROUND_COLOR); sldrNOTCH->labeltype(FL_NORMAL_LABEL); sldrNOTCH->labelfont(0); sldrNOTCH->labelsize(16); sldrNOTCH->labelcolor(FL_FOREGROUND_COLOR); sldrNOTCH->minimum(-1000); sldrNOTCH->maximum(1000); sldrNOTCH->step(10); sldrNOTCH->textsize(14); sldrNOTCH->callback((Fl_Callback*)cb_sldrNOTCH); sldrNOTCH->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); sldrNOTCH->when(FL_WHEN_CHANGED); sldrNOTCH->reverse(true); sldrRFGAIN = new Fl_Wheel_Value_Slider(xpos+cw, ypos + ch/2, spw, rh); sldrRFGAIN->tooltip(_("Adjust RF gain")); sldrRFGAIN->type(5); sldrRFGAIN->box(FL_THIN_DOWN_BOX); sldrRFGAIN->color(FL_BACKGROUND_COLOR); sldrRFGAIN->selection_color(FL_BACKGROUND_COLOR); sldrRFGAIN->labeltype(FL_NORMAL_LABEL); sldrRFGAIN->labelfont(0); sldrRFGAIN->labelsize(14); sldrRFGAIN->labelcolor(FL_FOREGROUND_COLOR); sldrRFGAIN->maximum(100); sldrRFGAIN->step(1); sldrRFGAIN->value(100); sldrRFGAIN->textsize(14); sldrRFGAIN->callback((Fl_Callback*)cb_sldrRFGAIN); sldrRFGAIN->align(Fl_Align(FL_ALIGN_LEFT)); sldrRFGAIN->when(FL_WHEN_CHANGED); sldrRFGAIN->reverse(true); col3b->end(); col3->resizable(col3b); col3->end(); grpSLIDERS->end(); xpos = X + 2; ypos = Y + 2; grpBUTTONS = new Fl_Group(xpos, ypos, W-4, H-ypos-2, ""); ypos += 4; int bw = (W-18)/8; int bh = 50; ypos += 15; xpos = 2; btnAttenuator = new Fl_Light_Button(xpos, ypos, bw, bh, _("ATT")); btnAttenuator->tooltip(_("Attenuator On/Off")); btnAttenuator->down_box(FL_THIN_DOWN_BOX); btnAttenuator->labelsize(16); btnAttenuator->callback((Fl_Callback*)cb_btnAttenuator); cbo_preamp = new Fl_ComboBox(xpos, ypos, 140, bh, ""); cbo_preamp->tooltip(_("Preamp in dB")); cbo_preamp->labelsize(12); cbo_preamp->add("-10 dB|0 dB|10 dB|20 dB|30 dB"); cbo_preamp->color(FL_BACKGROUND2_COLOR); cbo_preamp->selection_color(FL_BACKGROUND_COLOR); cbo_preamp->align(FL_ALIGN_LEFT); cbo_preamp->index(progStatus.preamp); cbo_preamp->readonly(); cbo_preamp->callback((Fl_Callback*)cb_cbo_preamp); cbo_preamp->hide(); xpos += btnAttenuator->w() + 2; btnPreamp = new Fl_Light_Button(xpos, ypos, bw, bh, _("PRE")); btnPreamp->tooltip(_("Preamp On/Off")); btnPreamp->down_box(FL_THIN_DOWN_BOX); btnPreamp->labelsize(16); btnPreamp->callback((Fl_Callback*)cb_btnPreamp); xpos += btnPreamp->w() + 2; btnNOISE = new Fl_Light_Button(xpos, ypos, bw, bh, _("NB")); btnNOISE->tooltip(_("Noise Blanker On/Off")); btnNOISE->down_box(FL_THIN_DOWN_BOX); btnNOISE->labelsize(16); btnNOISE->callback((Fl_Callback*)cb_btnNOISE); xpos += btnNOISE->w() + 2; btnAutoNotch = new Fl_Light_Button(xpos, ypos, bw, bh, _("AN")); btnAutoNotch->tooltip(_("Auto Notch On/Off")); btnAutoNotch->down_box(FL_THIN_DOWN_BOX); btnAutoNotch->labelsize(16); btnAutoNotch->callback((Fl_Callback*)cb_btnAutoNotch); xpos += btnAutoNotch->w() + 2; btnAswapB = new Fl_Button(xpos, ypos, bw, bh, _("A / B")); btnAswapB->tooltip(_("\ Left click:Swap A/B\n\ Right click:Copy A to B\n\ SHIFT click: FreqA -> FreqB\n\ CTRL click: FreqB -> FreqA\ ")); btnAswapB->down_box(FL_DOWN_BOX); btnAswapB->labelsize(16); btnAswapB->callback((Fl_Callback*)cb_btnAswapB); xpos += btnAswapB->w() + 2; btn_K3_swapAB = new Fl_Button(xpos, ypos, bw, bh, _("A / B")); btn_K3_swapAB->tooltip(_("Left click: Swap A/B\nRight click: Copy A to B")); btn_K3_swapAB->down_box(FL_DOWN_BOX); btn_K3_swapAB->labelsize(16); btn_K3_swapAB->callback((Fl_Callback*)cb_btn_K3_swapAB); btn_K3_swapAB->hide(); xpos += btn_K3_swapAB->w() + 2; btnSplit = new Fl_Light_Button(xpos, ypos, bw, bh, _("Split")); btnSplit->tooltip(_("Rx-A / Tx-B")); btnSplit->down_box(FL_THIN_DOWN_BOX); btnSplit->labelsize(16); btnSplit->callback((Fl_Callback*)cb_btnSplit); btnSplit->value(progStatus.split); xpos += btnSplit->w() + 2; btn_tune_on_off = new Fl_Light_Button( xpos, ypos, 30, bh, ""); btn_tune_on_off->tooltip("Tuner On/Off"); btn_tune_on_off->callback((Fl_Callback*)cb_btn_tune_on_off); btnTune = new Fl_Button( btn_tune_on_off->x() + btn_tune_on_off->w(), btn_tune_on_off->y(), bw - 30, bh, _("Tune")); btnTune->tooltip(_("Manual Tune")); btnTune->labelsize(16); btnTune->callback((Fl_Callback*)cb_btnTune); grpBUTTONS->end(); xpos = X; ypos = Y;// + 2; int tabh = 26; int tabb = 70; int by = ypos + 40; bh = 28; grpOTHER = new Fl_Group(xpos, ypos, W, H-ypos, ""); ypos += 2; tabsGeneric = new Fl_Tabs(xpos, ypos, W, H-ypos); tabsGeneric->selection_color(FL_LIGHT1); tab_yaesu_bands = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Band")); btn_yaesu_select_1 = new Fl_Button(xpos+4, by, 50, bh, _("1.8")); btn_yaesu_select_1->tooltip(_("160m Band")); btn_yaesu_select_1->callback((Fl_Callback*)cb_btn_band_select, (void *)1); btn_yaesu_select_2 = new Fl_Button(xpos+62, by, 50, bh, _("3.5")); btn_yaesu_select_2->tooltip(_("80m band")); btn_yaesu_select_2->callback((Fl_Callback*)cb_btn_band_select, (void *)2); btn_yaesu_select_3 = new Fl_Button(xpos+120, by, 50, bh, _("7")); btn_yaesu_select_3->tooltip(_("40m band")); btn_yaesu_select_3->callback((Fl_Callback*)cb_btn_band_select, (void *)3); btn_yaesu_select_4 = new Fl_Button(xpos+178, by, 50, bh, _("10")); btn_yaesu_select_4->tooltip(_("30m band")); btn_yaesu_select_4->callback((Fl_Callback*)cb_btn_band_select, (void *)4); btn_yaesu_select_5 = new Fl_Button(xpos+237, by, 50, bh, _("14")); btn_yaesu_select_5->tooltip(_("20m band")); btn_yaesu_select_5->callback((Fl_Callback*)cb_btn_band_select, (void *)5); btn_yaesu_select_6 = new Fl_Button(xpos+295, by, 50, bh, _("18")); btn_yaesu_select_6->tooltip(_("17m band")); btn_yaesu_select_6->callback((Fl_Callback*)cb_btn_band_select, (void *)6); btn_yaesu_select_7 = new Fl_Button(xpos+353, by, 50, bh, _("21")); btn_yaesu_select_7->tooltip(_("15m band")); btn_yaesu_select_7->callback((Fl_Callback*)cb_btn_band_select, (void *)7); btn_yaesu_select_8 = new Fl_Button(xpos+412, by, 50, bh, _("24")); btn_yaesu_select_8->tooltip(_("12m band")); btn_yaesu_select_8->callback((Fl_Callback*)cb_btn_band_select, (void *)8); btn_yaesu_select_9 = new Fl_Button(xpos+470, by, 50, bh, _("28")); btn_yaesu_select_9->tooltip(_("10m band")); btn_yaesu_select_9->callback((Fl_Callback*)cb_btn_band_select, (void *)9); btn_yaesu_select_10 = new Fl_Button(xpos+528, by, 50, bh, _("50")); btn_yaesu_select_10->tooltip(_("6m band")); btn_yaesu_select_10->callback((Fl_Callback*)cb_btn_band_select, (void *)10); btn_yaesu_select_11 = new Fl_Button(xpos+587, by, 50, bh, _("GEN")); btn_yaesu_select_11->tooltip(_("General RX")); btn_yaesu_select_11->callback((Fl_Callback*)cb_btn_band_select, (void *)11); op_yaesu_select60 = new Fl_ComboBox(xpos+653, by, 100, bh, _("combo")); op_yaesu_select60->tooltip(_("vfo / 60 meter channel")); op_yaesu_select60->box(FL_NO_BOX); op_yaesu_select60->selection_color(FL_BACKGROUND_COLOR); op_yaesu_select60->labeltype(FL_NORMAL_LABEL); op_yaesu_select60->labelfont(0); op_yaesu_select60->labelsize(12); op_yaesu_select60->labelcolor(FL_FOREGROUND_COLOR); op_yaesu_select60->callback((Fl_Callback*)cb_btn_band_select, (void *)13); op_yaesu_select60->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); op_yaesu_select60->when(FL_WHEN_RELEASE); op_yaesu_select60->readonly(); op_yaesu_select60->end(); tab_yaesu_bands->end(); tab_ft991_bands = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Band")); btn_ft991_select_1 = new Fl_Button(xpos+4, by, 50, bh, _("1.8")); btn_ft991_select_1->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_1->callback((Fl_Callback*)cb_btn_band_select, (void *)1); btn_ft991_select_2 = new Fl_Button(xpos+58, by, 50, bh, _("3.5")); btn_ft991_select_2->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_2->callback((Fl_Callback*)cb_btn_band_select, (void *)2); btn_ft991_select_3 = new Fl_Button(xpos+112, by, 50, bh, _("7")); btn_ft991_select_3->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_3->callback((Fl_Callback*)cb_btn_band_select, (void *)3); btn_ft991_select_4 = new Fl_Button(xpos+166, by, 50, bh, _("10")); btn_ft991_select_4->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_4->callback((Fl_Callback*)cb_btn_band_select, (void *)4); btn_ft991_select_5 = new Fl_Button(xpos+220, by, 50, bh, _("14")); btn_ft991_select_5->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_5->callback((Fl_Callback*)cb_btn_band_select, (void *)5); btn_ft991_select_6 = new Fl_Button(xpos+274, by, 50, bh, _("18")); btn_ft991_select_6->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_6->callback((Fl_Callback*)cb_btn_band_select, (void *)6); btn_ft991_select_7 = new Fl_Button(xpos+328, by, 50, bh, _("21")); btn_ft991_select_7->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_7->callback((Fl_Callback*)cb_btn_band_select, (void *)7); btn_ft991_select_8 = new Fl_Button(xpos+372, by, 50, bh, _("24")); btn_ft991_select_8->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_8->callback((Fl_Callback*)cb_btn_band_select, (void *)8); btn_ft991_select_9 = new Fl_Button(xpos+426, by, 50, bh, _("28")); btn_ft991_select_9->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_9->callback((Fl_Callback*)cb_btn_band_select, (void *)9); btn_ft991_select_10 = new Fl_Button(xpos+480, by, 50, bh, _("50")); btn_ft991_select_10->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_10->callback((Fl_Callback*)cb_btn_band_select, (void *)10); btn_ft991_select_11 = new Fl_Button(xpos+534, by, 50, bh, _("144")); btn_ft991_select_11->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_11->callback((Fl_Callback*)cb_btn_band_select, (void *)11); btn_ft991_select_12 = new Fl_Button(xpos+ 588, by, 50, bh, _("440")); btn_ft991_select_12->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_12->callback((Fl_Callback*)cb_btn_band_select, (void *)12); btn_ft991_select_13 = new Fl_Button(xpos+ 642, by, 50, bh, _("Gen")); btn_ft991_select_13->tooltip(_("Left click - get\nRight click - set")); btn_ft991_select_13->callback((Fl_Callback*)cb_btn_band_select, (void *)13); choice_ft991_tTONE = new Fl_PL_tone(xpos+ 696, by, 75, bh, _("tTONE")); choice_ft991_tTONE->align((Fl_Align)FL_ALIGN_BOTTOM); choice_ft991_tTONE->value(8); choice_ft991_tTONE->end(); choice_ft991_tTONE->hide(); choice_ft991_rTONE = new Fl_PL_tone(xpos+ 775, by, 75, bh, _("rTONE")); choice_ft991_rTONE->align((Fl_Align)FL_ALIGN_BOTTOM); choice_ft991_rTONE->value(8); choice_ft991_rTONE->end(); choice_ft991_rTONE->hide(); tab_ft991_bands->end(); tab_FT8n_bands = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Band")); static const char setsave[] = _("Left click - set\nRight click - save"); btn_FT8n_select_1 = new Fl_Button(xpos+4, by, 50, bh, _("1.8")); btn_FT8n_select_1->tooltip(setsave); btn_FT8n_select_1->callback((Fl_Callback*)cb_btn_band_select, (void *)1); btn_FT8n_select_2 = new Fl_Button(xpos+58, by, 50, bh, _("3.5")); btn_FT8n_select_2->tooltip(setsave); btn_FT8n_select_2->callback((Fl_Callback*)cb_btn_band_select, (void *)2); btn_FT8n_select_3 = new Fl_Button(xpos+112, by, 50, bh, _("7")); btn_FT8n_select_3->tooltip(setsave); btn_FT8n_select_3->callback((Fl_Callback*)cb_btn_band_select, (void *)3); btn_FT8n_select_4 = new Fl_Button(xpos+166, by, 50, bh, _("10")); btn_FT8n_select_4->tooltip(setsave); btn_FT8n_select_4->callback((Fl_Callback*)cb_btn_band_select, (void *)4); btn_FT8n_select_5 = new Fl_Button(xpos+220, by, 50, bh, _("14")); btn_FT8n_select_5->tooltip(setsave); btn_FT8n_select_5->callback((Fl_Callback*)cb_btn_band_select, (void *)5); btn_FT8n_select_6 = new Fl_Button(xpos+274, by, 50, bh, _("18")); btn_FT8n_select_6->tooltip(setsave); btn_FT8n_select_6->callback((Fl_Callback*)cb_btn_band_select, (void *)6); btn_FT8n_select_7 = new Fl_Button(xpos+328, by, 50, bh, _("21")); btn_FT8n_select_7->tooltip(setsave); btn_FT8n_select_7->callback((Fl_Callback*)cb_btn_band_select, (void *)7); btn_FT8n_select_8 = new Fl_Button(xpos+372, by, 50, bh, _("24")); btn_FT8n_select_8->tooltip(setsave); btn_FT8n_select_8->callback((Fl_Callback*)cb_btn_band_select, (void *)8); btn_FT8n_select_9 = new Fl_Button(xpos+426, by, 50, bh, _("28")); btn_FT8n_select_9->tooltip(setsave); btn_FT8n_select_9->callback((Fl_Callback*)cb_btn_band_select, (void *)9); btn_FT8n_select_10 = new Fl_Button(xpos+480, by, 50, bh, _("50")); btn_FT8n_select_10->tooltip(setsave); btn_FT8n_select_10->callback((Fl_Callback*)cb_btn_band_select, (void *)10); btn_FT8n_select_11 = new Fl_Button(xpos+534, by, 50, bh, _("144")); btn_FT8n_select_11->tooltip(setsave); btn_FT8n_select_11->callback((Fl_Callback*)cb_btn_band_select, (void *)11); btn_FT8n_select_12 = new Fl_Button(xpos+ 588, by, 50, bh, _("440")); btn_FT8n_select_12->tooltip(setsave); btn_FT8n_select_12->callback((Fl_Callback*)cb_btn_band_select, (void *)12); tab_FT8n_bands->end(); tab_FT8n_CTCSS = new Fl_Group(xpos, ypos+tabh, W, tabb, _("CTCSS")); choice_FT8n_tTONE = new Fl_PL_tone(xpos + 70, by+4, 75, 22, _("Tone X:")); choice_FT8n_tTONE->align((Fl_Align)FL_ALIGN_LEFT); choice_FT8n_tTONE->value(8); choice_FT8n_tTONE->end(); choice_FT8n_rTONE = new Fl_PL_tone( choice_FT8n_tTONE->x() + choice_FT8n_tTONE->w() + 30, by+4, 75, 22, _("R:")); choice_FT8n_rTONE->align((Fl_Align)FL_ALIGN_LEFT); choice_FT8n_rTONE->value(8); choice_FT8n_rTONE->end(); setTONES = new Fl_Button( choice_FT8n_rTONE->x() + choice_FT8n_rTONE->w() + 5, by+4, 80, 22, _("Set")); setTONES->callback((Fl_Callback*)cb_tones, 0); FMoffset = new Fl_ComboBox( setTONES->x() + setTONES->w() + 5, by+4, 100, 22, ""); FMoffset->tooltip(_("Select FM operation")); FMoffset->box(FL_NO_BOX); FMoffset->color(FL_BACKGROUND2_COLOR); FMoffset->selection_color(FL_BACKGROUND_COLOR); FMoffset->add("simplex|minus|plus"); FMoffset->index(0); FMoff_freq = new cFreqControl(FMoffset->x() + FMoffset->w() + 5, by+2, 100, 26, "5"); FMoff_freq->value(600); Fl_Box *MHZ = new Fl_Box(FMoff_freq->x() + FMoff_freq->w() + 4, by+6, 40, 30, "MHz"); MHZ->box(FL_FLAT_BOX); MHZ->align(FL_ALIGN_CENTER); MHZ->labelsize(18); setOFFSET = new Fl_Button( MHZ->x() + MHZ->w() + 5, by+4, 80, 22, _("Set")); setOFFSET->callback((Fl_Callback*)cb_offset, 0); tab_FT8n_CTCSS->end(); tab_icom_bands = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Band")); btn_icom_select_1 = new Fl_Button(xpos+4, by, 50, bh, _("1.8")); btn_icom_select_1->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_1->callback((Fl_Callback*)cb_btn_band_select, (void *)1); btn_icom_select_2 = new Fl_Button(xpos+58, by, 50, bh, _("3.5")); btn_icom_select_2->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_2->callback((Fl_Callback*)cb_btn_band_select, (void *)2); btn_icom_select_3 = new Fl_Button(xpos+112, by, 50, bh, _("7")); btn_icom_select_3->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_3->callback((Fl_Callback*)cb_btn_band_select, (void *)3); btn_icom_select_4 = new Fl_Button(xpos+166, by, 50, bh, _("10")); btn_icom_select_4->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_4->callback((Fl_Callback*)cb_btn_band_select, (void *)4); btn_icom_select_5 = new Fl_Button(xpos+220, by, 50, bh, _("14")); btn_icom_select_5->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_5->callback((Fl_Callback*)cb_btn_band_select, (void *)5); btn_icom_select_6 = new Fl_Button(xpos+274, by, 50, bh, _("18")); btn_icom_select_6->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_6->callback((Fl_Callback*)cb_btn_band_select, (void *)6); btn_icom_select_7 = new Fl_Button(xpos+328, by, 50, bh, _("21")); btn_icom_select_7->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_7->callback((Fl_Callback*)cb_btn_band_select, (void *)7); btn_icom_select_8 = new Fl_Button(xpos+372, by, 50, bh, _("24")); btn_icom_select_8->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_8->callback((Fl_Callback*)cb_btn_band_select, (void *)8); btn_icom_select_9 = new Fl_Button(xpos+426, by, 50, bh, _("28")); btn_icom_select_9->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_9->callback((Fl_Callback*)cb_btn_band_select, (void *)9); btn_icom_select_10 = new Fl_Button(xpos+480, by, 50, bh, _("50")); btn_icom_select_10->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_10->callback((Fl_Callback*)cb_btn_band_select, (void *)10); btn_icom_select_11 = new Fl_Button(xpos+534, by, 50, bh, _("144")); btn_icom_select_11->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_11->callback((Fl_Callback*)cb_btn_band_select, (void *)11); btn_icom_select_12 = new Fl_Button(xpos+ 588, by, 50, bh, _("440")); btn_icom_select_12->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_12->callback((Fl_Callback*)cb_btn_band_select, (void *)12); btn_icom_select_13 = new Fl_Button(xpos+ 642, by, 50, bh, _("1.2 G")); btn_icom_select_13->tooltip(_("Left click - get\nRight click - set")); btn_icom_select_13->callback((Fl_Callback*)cb_btn_band_select, (void *)13); choice_tTONE = new Fl_PL_tone(xpos+ 696, by, 75, bh, _("tTONE")); choice_tTONE->align((Fl_Align)FL_ALIGN_BOTTOM); choice_tTONE->value(8); choice_tTONE->end(); choice_rTONE = new Fl_PL_tone(xpos+ 775, by, 75, bh, _("rTONE")); choice_rTONE->align((Fl_Align)FL_ALIGN_BOTTOM); choice_rTONE->value(8); choice_rTONE->end(); tab_icom_bands->end(); genericCW = new Fl_Group(xpos, ypos+tabh, W, tabb, _("CW")); genericCW->color(FL_LIGHT1); genericCW->selection_color(FL_LIGHT1); genericCW->hide(); btnSpot = new Fl_Light_Button( xpos+13, by, 54, bh, _("Spot")); btnSpot->tooltip(_("Spot tone on/off")); btnSpot->callback((Fl_Callback*)cb_btnSpot); btnSpot->value(progStatus.cw_spot); spnr_cw_spot_tone = new Hspinner( btnSpot->x() + btnSpot->w() + 75, by, 5*bh, bh, _("Spot tone")); spnr_cw_spot_tone->tooltip(_("Spot tone freq")); spnr_cw_spot_tone->type(FL_INT_INPUT); spnr_cw_spot_tone->minimum(300); spnr_cw_spot_tone->maximum(1050); spnr_cw_spot_tone->step(50); spnr_cw_spot_tone->value(1050); spnr_cw_spot_tone->callback((Fl_Callback*)cb_spnr_cw_spot_tone); spnr_cw_spot_tone->value(progStatus.cw_spot); spnr_cw_spot_tone->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_cw_weight = new Hspinner( spnr_cw_spot_tone->x() + spnr_cw_spot_tone->w() + 75, by, 5*bh, bh, _("Weight")); spnr_cw_weight->type(FL_INT_INPUT); spnr_cw_weight->minimum(2.5); spnr_cw_weight->maximum(4.5); spnr_cw_weight->value(3); spnr_cw_weight->callback((Fl_Callback*)cb_spnr_cw_weight); spnr_cw_weight->value(progStatus.cw_weight); spnr_cw_weight->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_cw_weight->tooltip(_("CW weight")); spnr_cw_wpm = new Hspinner( spnr_cw_weight->x() + spnr_cw_weight->w() + 75, by, 5*bh, bh, _("wpm")); spnr_cw_wpm->type(FL_INT_INPUT); spnr_cw_wpm->minimum(5); spnr_cw_wpm->maximum(80); spnr_cw_wpm->step(1); spnr_cw_wpm->callback((Fl_Callback*)cb_spnr_cw_wpm); spnr_cw_wpm->value(progStatus.cw_wpm); spnr_cw_wpm->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_cw_wpm->tooltip(_("CW words per minute")); btn_enable_keyer = new Fl_Check_Button( spnr_cw_wpm->x() + spnr_cw_wpm->w() + 10, by, 5*bh, bh, _("Keyer")); btn_enable_keyer->tooltip(_("Enable internal keyer")); btn_enable_keyer->down_box(FL_DOWN_BOX); btn_enable_keyer->callback((Fl_Callback*)cb_btn_enable_keyer); btn_enable_keyer->value(progStatus.enable_keyer); genericCW->end(); genericQSK = new Fl_Group(xpos, ypos+tabh, W, tabb, _("QSK")); genericQSK->color(FL_LIGHT1); genericQSK->selection_color(FL_LIGHT1); genericQSK->hide(); btnBreakIn = new Fl_Button(xpos + 13, by, 60, bh, _("QSK")); btnBreakIn->tooltip(_("Full break in")); btnBreakIn->callback((Fl_Callback*)cb_btnBreakIn); btnBreakIn->value(progStatus.break_in); spnr_cw_qsk = new Hspinner( btnBreakIn->x() + btnBreakIn->w() + 75, by, 5*bh, bh, _("Bk-in Dly")); spnr_cw_qsk->tooltip(_("msec")); spnr_cw_qsk->type(FL_INT_INPUT); spnr_cw_qsk->minimum(0); spnr_cw_qsk->maximum(100); spnr_cw_qsk->step(1); spnr_cw_qsk->value(20); spnr_cw_qsk->callback((Fl_Callback*)cb_spnr_cw_qsk); spnr_cw_qsk->value(progStatus.cw_qsk); spnr_cw_qsk->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_cw_delay = new Hspinner( spnr_cw_qsk->x() + spnr_cw_qsk->w() + 75, by, 120, bh, _("QSK delay")); spnr_cw_delay->tooltip(_("msec")); spnr_cw_delay->type(0); spnr_cw_delay->minimum(30); spnr_cw_delay->maximum(3000); spnr_cw_delay->step(10); spnr_cw_delay->callback((Fl_Callback*)cb_spnr_cw_delay); spnr_cw_delay->value(progStatus.cw_delay); spnr_cw_delay->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); genericQSK->end(); genericVOX = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Vox")); genericVOX->hide(); spnr_vox_gain = new Hspinner(xpos+60, by, 5*bh, bh, _("gain")); spnr_vox_gain->type(FL_INT_INPUT); spnr_vox_gain->minimum(0); spnr_vox_gain->maximum(100); spnr_vox_gain->step(1); spnr_vox_gain->tooltip(_("VOX gain")); spnr_vox_gain->callback((Fl_Callback*)cb_spnr_vox_gain); spnr_vox_gain->value(progStatus.vox_gain); spnr_vox_gain->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_anti_vox = new Hspinner( spnr_vox_gain->x() + spnr_vox_gain->w() + 60, by, 5*bh, bh, _("anti")); spnr_anti_vox->type(FL_INT_INPUT); spnr_anti_vox->minimum(0); spnr_anti_vox->maximum(100); spnr_anti_vox->step(1); spnr_anti_vox->tooltip(_("Anti VOX gain")); spnr_anti_vox->callback((Fl_Callback*)cb_spnr_anti_vox); spnr_anti_vox->value(progStatus.vox_anti); spnr_anti_vox->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_vox_hang = new Hspinner( spnr_anti_vox->x() + spnr_anti_vox->w() + 60, by, 5*bh, bh, _("hang")); spnr_vox_hang->type(FL_INT_INPUT); spnr_vox_hang->minimum(0); spnr_vox_hang->maximum(100); spnr_vox_hang->step(1); spnr_vox_hang->tooltip(_("VOX hang time")); spnr_vox_hang->callback((Fl_Callback*)cb_spnr_vox_hang); spnr_vox_hang->value(progStatus.vox_hang); spnr_vox_hang->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); btn_vox = new Fl_Light_Button( spnr_vox_hang->x() + spnr_vox_hang->w() + 8, by, 70, bh, _("VOX")); btn_vox->callback((Fl_Callback*)cb_btn_vox); btn_vox->value(progStatus.vox_onoff); btn_vox->tooltip(_("VOX on/off")); btn_vox_on_dataport = new Fl_Check_Button( btn_vox->x() + btn_vox->w() + 8, by, 70, bh, _("Data port")); btn_vox_on_dataport->tooltip(_("Data port signal triggers VOX")); btn_vox_on_dataport->down_box(FL_DOWN_BOX); btn_vox_on_dataport->callback((Fl_Callback*)cb_btn_vox_on_dataport); btn_vox_on_dataport->value(progStatus.vox_on_dataport); genericVOX->end(); genericSpeech = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Spch")); genericSpeech->hide(); btnCompON = new Fl_Light_Button(xpos+230, by, 100, bh, _("On")); btnCompON->callback((Fl_Callback*)cb_btnCompON); btnCompON->value(progStatus.compON); btnCompON->tooltip(_("Compression on/off")); spnr_compression = new Hspinner(xpos+138, by, 5*bh, bh, _("Compression")); spnr_compression->type(FL_INT_INPUT); spnr_compression->minimum(0); spnr_compression->maximum(100); spnr_compression->step(1); spnr_compression->tooltip(_("Compression level")); spnr_compression->callback((Fl_Callback*)cb_spnr_compression); spnr_compression->value(progStatus.compression); spnr_compression->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); genericSpeech->end(); genericRx = new Fl_Group(xpos, ypos+tabh, W, tabb, _("RX")); genericRx->hide(); sldr_nb_level = new Fl_Wheel_Value_Slider(xpos+90, by, 180, bh, _("NB level")); sldr_nb_level->tooltip(_("Noise Blanker level")); sldr_nb_level->type(5); sldr_nb_level->box(FL_THIN_DOWN_BOX); sldr_nb_level->color(FL_BACKGROUND_COLOR); sldr_nb_level->selection_color(FL_BACKGROUND_COLOR); sldr_nb_level->labeltype(FL_NORMAL_LABEL); sldr_nb_level->labelfont(0); sldr_nb_level->labelsize(14); sldr_nb_level->labelcolor(FL_FOREGROUND_COLOR); sldr_nb_level->minimum(0); sldr_nb_level->maximum(0); sldr_nb_level->step(1); sldr_nb_level->callback((Fl_Callback*)cb_sldr_nb_level); sldr_nb_level->align(Fl_Align(FL_ALIGN_LEFT)); sldr_nb_level->when(FL_WHEN_CHANGED); sldr_nb_level->value(progStatus.nb_level); spnr_bpf_center = new Hspinner(xpos+474, by, 5*bh, bh, _("BPF Center Freq")); spnr_bpf_center->tooltip(_("Bandpass Filter Center Freq")); spnr_bpf_center->type(FL_INT_INPUT); spnr_bpf_center->minimum(600); spnr_bpf_center->maximum(2500); spnr_bpf_center->step(10); spnr_bpf_center->value(1500); spnr_bpf_center->callback((Fl_Callback*)cb_spnr_bpf_center); spnr_bpf_center->value(progStatus.bpf_center); spnr_bpf_center->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); btn_use_bpf_center = new Fl_Check_Button( spnr_bpf_center->x() + spnr_bpf_center->w() + 8, by, 50, bh, _("On")); btn_use_bpf_center->tooltip(_("Use Filter Center Freq Adj")); btn_use_bpf_center->down_box(FL_DOWN_BOX); btn_use_bpf_center->value(1); btn_use_bpf_center->callback((Fl_Callback*)cb_btn_use_bpf_center); btn_use_bpf_center->value(progStatus.use_bpf_center); genericRx->end(); genericMisc = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Misc")); genericMisc->hide(); spnr_vfo_adj = new Hspinner(xpos + 20, by, 5*bh, bh, _("Vfo Adj"), bh/2); spnr_vfo_adj->type(FL_FLOAT_INPUT); spnr_vfo_adj->callback((Fl_Callback*)cb_spnr_vfo_adj); spnr_vfo_adj->value(progStatus.vfo_adj); spnr_vfo_adj->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); spnr_line_out = new Hspinner( spnr_vfo_adj->x() + spnr_vfo_adj->w() + 5, by, 4*bh, bh, _("line out")); spnr_line_out->type(FL_INT_INPUT); spnr_line_out->minimum(0); spnr_line_out->maximum(100); spnr_line_out->step(1); spnr_line_out->value(20); spnr_line_out->callback((Fl_Callback*)cb_spnr_line_out); spnr_line_out->value(progStatus.line_out); spnr_line_out->align(FL_ALIGN_CENTER | FL_ALIGN_BOTTOM); btnSpecial = new Fl_Light_Button( spnr_line_out->x() + spnr_line_out->w() +5, by, 80, bh, _("Special")); btnSpecial->callback((Fl_Callback*)cb_btnSpecial); btn_ext_tuner = new Fl_Check_Button( btnSpecial->x() + btnSpecial->w() + 5, by, 100, bh, _("Ext tuner")); btn_ext_tuner->tooltip(_("use external auto tuner")); btn_ext_tuner->down_box(FL_DOWN_BOX); btn_ext_tuner->callback((Fl_Callback*)cb_btn_ext_tuner); btn_ext_tuner->value(progStatus.external_tuner); btn_xcvr_auto_on = new Fl_Check_Button( btn_ext_tuner->x() + btn_ext_tuner->w() + 5, by, 100, bh, _("Rig autOn")); btn_xcvr_auto_on->tooltip(_("Auto Turn Rig On with Flrig startup")); btn_xcvr_auto_on->down_box(FL_DOWN_BOX); btn_xcvr_auto_on->callback((Fl_Callback*)cb_btn_xcvr_auto_on); btn_xcvr_auto_on->value(progStatus.xcvr_auto_on); btn_xcvr_auto_off = new Fl_Check_Button( btn_xcvr_auto_on->x(), by + bh, 100, bh, _("Rig autOff")); btn_xcvr_auto_off->tooltip(_("Auto Turn Rig Off with Flrig exit")); btn_xcvr_auto_off->down_box(FL_DOWN_BOX); btn_xcvr_auto_off->callback((Fl_Callback*)cb_btn_xcvr_auto_off); btn_xcvr_auto_off->value(progStatus.xcvr_auto_off); btn_xcvr_synch_clock = new Fl_Check_Button( btn_xcvr_auto_on->x() + btn_xcvr_auto_on->w() + 5, by, 90, bh, _("Sync Clk")); btn_xcvr_synch_clock->tooltip(_("Synchronize xcvr clock to PC")); btn_xcvr_synch_clock->down_box(FL_DOWN_BOX); btn_xcvr_synch_clock->callback((Fl_Callback*)cb_btn_xcvr_synch_clock); btn_xcvr_synch_clock->value(progStatus.sync_clock); btn_xcvr_synch_gmt = new Fl_Check_Button( btn_xcvr_synch_clock->x(), by + bh + 2, 90, bh, _("Use GMT")); btn_xcvr_synch_gmt->tooltip(_("Synchronize to Greenwich Mean Time")); btn_xcvr_synch_gmt->down_box(FL_DOWN_BOX); btn_xcvr_synch_gmt->callback((Fl_Callback*)cb_btn_xcvr_synch_gmt); btn_xcvr_synch_gmt->value(progStatus.sync_gmt); btn_xcvr_synch_now = new Fl_Button( btn_xcvr_synch_gmt->x() + btn_xcvr_synch_gmt->w() + 5, by, 100, bh, _("Sync Now")); btn_xcvr_synch_now->tooltip(_("Force clock synch at next minute")); btn_xcvr_synch_now->callback((Fl_Callback*)cb_btn_xcvr_synch_now); txt_xcvr_synch = new Fl_Output( btn_xcvr_synch_now->x(), by + bh + 2, 100, bh, ""); txt_xcvr_synch->value(""); txt_xcvr_synch->align(FL_ALIGN_CENTER); genericMisc->end(); genericRXB = new Fl_Group(xpos, ypos+tabh, W, tabb, _("RIT/XIT/BFO")); genericRXB->hide(); cntRIT = new Hspinner(xpos+10, by, 5*bh, bh, _("Rit")); cntRIT->tooltip(_("RIT")); cntRIT->type(FL_INT_INPUT); cntRIT->labelsize(12); cntRIT->minimum(-1000); cntRIT->maximum(1000); cntRIT->step(10); cntRIT->callback((Fl_Callback*)cb_cntRIT); cntRIT->align(Fl_Align(FL_ALIGN_RIGHT)); cntXIT = new Hspinner( cntRIT->x() + cntRIT->w() + 8, by, 5*bh, bh, _("Xit")); cntXIT->tooltip(_("XIT")); cntXIT->type(FL_INT_INPUT); cntXIT->labelsize(12); cntXIT->minimum(-1000); cntXIT->maximum(1000); cntXIT->step(10); cntXIT->callback((Fl_Callback*)cb_cntXIT); cntXIT->align(Fl_Align(FL_ALIGN_RIGHT)); cntBFO = new Hspinner( cntXIT->x() + cntXIT->w() + 8, by, 5*bh, bh, _("Bfo")); cntBFO->tooltip(_("BFO")); cntBFO->type(FL_INT_INPUT); cntBFO->labelsize(12); cntBFO->minimum(0); cntBFO->maximum(1000); cntBFO->step(10); cntBFO->value(600); cntBFO->callback((Fl_Callback*)cb_cntBFO); cntBFO->align(Fl_Align(FL_ALIGN_RIGHT)); genericRXB->end(); genericAux = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Aux")); genericAux->hide(); btnAuxRTS = new Fl_Light_Button(xpos+272, by, 60, bh, _("RTS")); btnAuxRTS->tooltip(_("RTS control pin")); btnAuxRTS->down_box(FL_THIN_DOWN_BOX); btnAuxRTS->labelsize(12); btnAuxRTS->callback((Fl_Callback*)cb_TOUCH_btnAuxRTS); btnAuxRTS->value(progStatus.aux_rts); btnAuxDTR = new Fl_Light_Button(xpos+200, by, 60, bh, _("DTR")); btnAuxDTR->tooltip(_("DTR control pin")); btnAuxDTR->down_box(FL_THIN_DOWN_BOX); btnAuxDTR->labelsize(12); btnAuxDTR->callback((Fl_Callback*)cb_TOUCH_btnAuxDTR); btnAuxDTR->value(progStatus.aux_dtr); btnDataPort = new Fl_Light_Button(xpos+408, by, 60, bh, _("Data")); btnDataPort->tooltip(_("Input on Data Port")); btnDataPort->down_box(FL_THIN_DOWN_BOX); btnDataPort->labelsize(12); btnDataPort->callback((Fl_Callback*)cb_btnDataPort); btnDataPort->value(progStatus.data_port); genericAux->end(); genericAux->hide(); // kx3_extras = new Fl_Group(xpos, ypos+tabh, W, tabb, _("KX3")); // kxpa_enabled = new Fl_Check_Button( 15, by, 24, 24, _("KXPA100 ON")); // kxpa_enabled->callback((Fl_Callback*)cb_kxpa_enabled); // kxpa_enabled->value(progStatus.kxpa); // kx3_extras->end(); genericUser_1 = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Cmd A")); genericUser_1->hide(); btnUser1 = new Fl_Button(5, by, 80, 50, "USER 1"); btnUser1->callback((Fl_Callback*)cb_btnUser, (void*)1); btnUser2 = new Fl_Button(90, by, 80, 50, "USER 2"); btnUser2->callback((Fl_Callback*)cb_btnUser, (void*)2); btnUser3 = new Fl_Button(175, by, 80, 50, "USER 3"); btnUser3->callback((Fl_Callback*)cb_btnUser, (void*)3); btnUser4 = new Fl_Button(260, by, 80, 50, "USER 4"); btnUser4->callback((Fl_Callback*)cb_btnUser, (void*)4); btnUser5 = new Fl_Button(345, by, 80, 50, "USER 5"); btnUser5->callback((Fl_Callback*)cb_btnUser, (void*)5); btnUser6 = new Fl_Button(430, by, 80, 50, "USER 6"); btnUser6->callback((Fl_Callback*)cb_btnUser, (void*)6); btnUser7 = new Fl_Button(515, by, 80, 50, "USER 7"); btnUser7->callback((Fl_Callback*)cb_btnUser, (void*)7); btnUser8 = new Fl_Button(600, by, 80, 50, "USER 8"); btnUser8->callback((Fl_Callback*)cb_btnUser, (void*)8); genericUser_1->end(); genericUser_2 = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Cmd B")); genericUser_2->hide(); btnUser9 = new Fl_Button(5, by, 80, 50, "USER 9"); btnUser9->callback((Fl_Callback*)cb_btnUser, (void*)9); btnUser10 = new Fl_Button(90, by, 80, 50, "USER 10"); btnUser10->callback((Fl_Callback*)cb_btnUser, (void*)10); btnUser11 = new Fl_Button(175, by, 80, 50, "USER 11"); btnUser11->callback((Fl_Callback*)cb_btnUser, (void*)11); btnUser12 = new Fl_Button(260, by, 80, 50, "USER 12"); btnUser12->callback((Fl_Callback*)cb_btnUser, (void*)12); btnUser13 = new Fl_Button(345, by, 80, 50, "USER 13"); btnUser13->callback((Fl_Callback*)cb_btnUser, (void*)13); btnUser14 = new Fl_Button(430, by, 80, 50, "USER 14"); btnUser14->callback((Fl_Callback*)cb_btnUser, (void*)14); btnUser15 = new Fl_Button(515, by, 80, 50, "USER 15"); btnUser15->callback((Fl_Callback*)cb_btnUser, (void*)15); btnUser16 = new Fl_Button(600, by, 80, 50, "USER 16"); btnUser16->callback((Fl_Callback*)cb_btnUser, (void*)16); genericUser_2->end(); genericUser_3 = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Cmd C")); genericUser_3->hide(); btnUser17 = new Fl_Button(5, by, 80, 50, "USER 17"); btnUser17->callback((Fl_Callback*)cb_btnUser, (void*)17); btnUser18 = new Fl_Button(90, by, 80, 50, "USER 18"); btnUser18->callback((Fl_Callback*)cb_btnUser, (void*)18); btnUser19 = new Fl_Button(175, by, 80, 50, "USER 19"); btnUser19->callback((Fl_Callback*)cb_btnUser, (void*)19); btnUser20 = new Fl_Button(260, by, 80, 50, "USER 20"); btnUser20->callback((Fl_Callback*)cb_btnUser, (void*)20); btnUser21 = new Fl_Button(345, by, 80, 50, "USER 21"); btnUser21->callback((Fl_Callback*)cb_btnUser, (void*)21); btnUser22 = new Fl_Button(430, by, 80, 50, "USER 22"); btnUser22->callback((Fl_Callback*)cb_btnUser, (void*)22); btnUser23 = new Fl_Button(515, by, 80, 50, "USER 23"); btnUser23->callback((Fl_Callback*)cb_btnUser, (void*)23); btnUser24 = new Fl_Button(600, by, 80, 50, "USER 24"); btnUser24->callback((Fl_Callback*)cb_btnUser, (void*)24); genericUser_3->end(); by += 10; tab7610 = new Fl_Group(xpos, ypos+tabh, W, tabb, _("IC7610")); ic7610att = new Fl_ComboBox(5, by, 120, 30, "Att level"); ic7610att->add("OFF|3db|6db|9db|12db|15db|18db|21db|24db|27db|30db|33db|36db|39db|42db|45db|"); ic7610att->align(FL_ALIGN_RIGHT); ic7610att->index(progStatus.index_ic7610att); ic7610att->readonly(); ic7610att->callback((Fl_Callback *)cb_ic7610_att); ic7610dual_watch = new Fl_Light_Button(210, by, 100, 30, "Dual Watch"); ic7610dual_watch->value(progStatus.dual_watch); ic7610dual_watch->callback((Fl_Callback *)cb_dual_watch); ic7610digi_sel_on_off = new Fl_Light_Button(320, by, 100, 30, "Digi-Sel"); ic7610digi_sel_on_off->value(progStatus.digi_sel_on_off); ic7610digi_sel_on_off->callback((Fl_Callback *)cb_digi_sel_on_off); ic7610_digi_sel_val = new Fl_Wheel_Value_Slider(430, by, W - 440, 30, ""); ic7610_digi_sel_val->tooltip(_("Digi-Sel value")); ic7610_digi_sel_val->type(5); ic7610_digi_sel_val->box(FL_THIN_DOWN_BOX); ic7610_digi_sel_val->color(FL_BACKGROUND_COLOR); ic7610_digi_sel_val->selection_color(FL_BACKGROUND_COLOR); ic7610_digi_sel_val->labeltype(FL_NORMAL_LABEL); ic7610_digi_sel_val->labelfont(0); ic7610_digi_sel_val->labelsize(14); ic7610_digi_sel_val->labelcolor(FL_FOREGROUND_COLOR); ic7610_digi_sel_val->minimum(0); ic7610_digi_sel_val->maximum(255); ic7610_digi_sel_val->step(1); ic7610_digi_sel_val->callback((Fl_Callback*)cb_digi_sel_val); ic7610_digi_sel_val->align(Fl_Align(FL_ALIGN_BOTTOM)); ic7610_digi_sel_val->when(FL_WHEN_CHANGED); ic7610_digi_sel_val->value(progStatus.digi_sel_val); tab7610->end(); tabsGeneric->callback((Fl_Callback *)cb_tabsGeneric); tabsGeneric->end(); xpos = X; ypos = Y; tabs550 = new Fl_Tabs(xpos, ypos, W, H-ypos); tabs550->selection_color(FL_LIGHT1); tabs550->hide(); tt550_CW = new Fl_Group(xpos, ypos+tabh, W, tabb, _("CW")); tt550_CW->color(FL_LIGHT1); tt550_CW->selection_color(FL_LIGHT1); spnr_tt550_cw_wpm = new Hspinner(xpos+60, by, 5*bh, bh, _("wpm")); spnr_tt550_cw_wpm->type(FL_INT_INPUT); spnr_tt550_cw_wpm->minimum(5); spnr_tt550_cw_wpm->maximum(80); spnr_tt550_cw_wpm->step(1); spnr_tt550_cw_wpm->value(20); spnr_tt550_cw_wpm->callback((Fl_Callback*)cb_spnr_tt550_cw_wpm); spnr_tt550_cw_wpm->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_cw_wpm->value(progStatus.tt550_cw_wpm); spnr_tt550_cw_weight = new Hspinner( xpos + 60, by + bh + 2, 5*bh, bh, _("Weight")); spnr_tt550_cw_weight->type(FL_FLOAT_INPUT); spnr_tt550_cw_weight->minimum(0.75); spnr_tt550_cw_weight->maximum(1.5); spnr_tt550_cw_weight->step(0.05); spnr_tt550_cw_weight->format("%.2f"); spnr_tt550_cw_weight->value(20); spnr_tt550_cw_weight->callback((Fl_Callback*)cb_spnr_tt550_cw_weight); spnr_tt550_cw_weight->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_cw_weight->value(progStatus.tt550_cw_weight); spnr_tt550_cw_qsk = new Hspinner( spnr_tt550_cw_weight->x() + spnr_tt550_cw_weight->w() + 60, by, 5*bh, bh, _("Delay")); spnr_tt550_cw_qsk->tooltip(_("QSK delay (msec)")); spnr_tt550_cw_qsk->type(FL_INT_INPUT); spnr_tt550_cw_qsk->minimum(0); spnr_tt550_cw_qsk->maximum(100); spnr_tt550_cw_qsk->step(1); spnr_tt550_cw_qsk->value(20); spnr_tt550_cw_qsk->callback((Fl_Callback*)cb_spnr_tt550_cw_qsk); spnr_tt550_cw_qsk->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_cw_qsk->value(progStatus.tt550_cw_qsk); spnr_tt550_cw_vol = new Hspinner( spnr_tt550_cw_qsk->x() + spnr_tt550_cw_qsk->w() + 60, by, 5*bh, bh, _("S-T vol")); spnr_tt550_cw_vol->tooltip(_("Side tone volume")); spnr_tt550_cw_vol->type(FL_INT_INPUT); spnr_tt550_cw_vol->minimum(5); spnr_tt550_cw_vol->maximum(80); spnr_tt550_cw_vol->step(1); spnr_tt550_cw_vol->value(20); spnr_tt550_cw_vol->callback((Fl_Callback*)cb_spnr_tt550_cw_vol); spnr_tt550_cw_vol->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_cw_vol->value(progStatus.tt550_cw_vol); spnr_tt550_cw_spot = new Hspinner( spnr_tt550_cw_vol->x() + spnr_tt550_cw_vol->w() + 70, by, 5*bh, bh, _("Spot Vol")); spnr_tt550_cw_spot->tooltip(_("Spot volume")); spnr_tt550_cw_spot->type(FL_INT_INPUT); spnr_tt550_cw_spot->minimum(0); spnr_tt550_cw_spot->maximum(100); spnr_tt550_cw_spot->step(1); spnr_tt550_cw_spot->value(20); spnr_tt550_cw_spot->callback((Fl_Callback*)cb_spnr_tt550_cw_spot); spnr_tt550_cw_spot->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_cw_spot->value(progStatus.tt550_cw_spot); btn_tt550_enable_keyer = new Fl_Check_Button( spnr_tt550_cw_spot->x() + spnr_tt550_cw_spot->w() + 60, by, 63, bh, _("Keyer")); btn_tt550_enable_keyer->tooltip(_("Enable keyer")); btn_tt550_enable_keyer->down_box(FL_DOWN_BOX); btn_tt550_enable_keyer->callback((Fl_Callback*)cb_btn_tt550_enable_keyer); btn_tt550_enable_keyer->value(progStatus.tt550_enable_keyer); tt550_CW->end(); tt550_VOX = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Vox")); tt550_VOX->hide(); spnr_tt550_vox_gain = new Hspinner(xpos+60, by, 79, bh, _("gain")); spnr_tt550_vox_gain->type(FL_INT_INPUT); spnr_tt550_vox_gain->minimum(0); spnr_tt550_vox_gain->maximum(100); spnr_tt550_vox_gain->step(1); spnr_tt550_vox_gain->callback((Fl_Callback*)cb_spnr_tt550_vox_gain); spnr_tt550_vox_gain->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_vox_gain->value(progStatus.tt550_vox_gain); spnr_tt550_anti_vox = new Hspinner( spnr_tt550_vox_gain->x() + spnr_tt550_vox_gain->w() + 60, by, 5*bh, bh, _("anti")); spnr_tt550_anti_vox->type(FL_INT_INPUT); spnr_tt550_anti_vox->minimum(0); spnr_tt550_anti_vox->maximum(100); spnr_tt550_anti_vox->step(1); spnr_tt550_anti_vox->callback((Fl_Callback*)cb_spnr_tt550_anti_vox); spnr_tt550_anti_vox->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_anti_vox->value(progStatus.tt550_vox_anti); spnr_tt550_vox_hang = new Hspinner( spnr_tt550_anti_vox->x() + spnr_tt550_anti_vox->w() + 60, by, 5*bh, bh, _("hang")); spnr_tt550_vox_hang->type(FL_INT_INPUT); spnr_tt550_vox_hang->minimum(0); spnr_tt550_vox_hang->maximum(100); spnr_tt550_vox_hang->step(1); spnr_tt550_vox_hang->callback((Fl_Callback*)cb_spnr_tt550_vox_hang); spnr_tt550_vox_hang->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_vox_hang->value(progStatus.tt550_vox_hang); btn_tt550_vox = new Fl_Light_Button( spnr_tt550_vox_hang->x() + spnr_tt550_vox_hang->w() + 60, by, 78, bh, _("VOX")); btn_tt550_vox->callback((Fl_Callback*)cb_btn_tt550_vox); btn_tt550_vox->value(progStatus.tt550_vox_onoff); tt550_VOX->end(); tt550_Speech = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Spch")); tt550_Speech->hide(); btn_tt550_CompON = new Fl_Light_Button(xpos+60, by, 78, bh, _("On")); btn_tt550_CompON->callback((Fl_Callback*)cb_btn_tt550_CompON); btn_tt550_CompON->value(progStatus.tt550_compON); spnr_tt550_compression = new Hspinner( btn_tt550_CompON->x() + btn_tt550_CompON->w() + 60, by, 5*bh, bh, _("Comp")); spnr_tt550_compression->type(FL_INT_INPUT); spnr_tt550_compression->minimum(0); spnr_tt550_compression->maximum(100); spnr_tt550_compression->step(1); spnr_tt550_compression->callback((Fl_Callback*)cb_spnr_tt550_compression); spnr_tt550_compression->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_compression->value(progStatus.tt550_compression); spnr_tt550_mon_vol = new Hspinner( spnr_tt550_compression->x() + spnr_tt550_compression->w() + 60, by, 5*bh, bh, _("Mon vol")); spnr_tt550_mon_vol->tooltip(_("Side tone volume")); spnr_tt550_mon_vol->type(FL_INT_INPUT); spnr_tt550_mon_vol->minimum(0); spnr_tt550_mon_vol->maximum(100); spnr_tt550_mon_vol->step(1); spnr_tt550_mon_vol->value(25); spnr_tt550_mon_vol->callback((Fl_Callback*)cb_spnr_tt550_mon_vol); spnr_tt550_mon_vol->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_mon_vol->value(progStatus.tt550_mon_vol); tt550_Speech->end(); tt550_Audio = new Fl_Group(xpos, ypos+tabh, W, tabb, _("Audio")); tt550_Audio->hide(); spnr_tt550_line_out = new Hspinner(xpos+60, by, 5*bh, bh, _("line out")); spnr_tt550_line_out->type(FL_INT_INPUT); spnr_tt550_line_out->minimum(0); spnr_tt550_line_out->maximum(100); spnr_tt550_line_out->step(1); spnr_tt550_line_out->value(20); spnr_tt550_line_out->callback((Fl_Callback*)cb_spnr_tt550_line_out); spnr_tt550_line_out->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_line_out->value(progStatus.tt550_line_out); btnAccInp = new Fl_Check_Button( spnr_tt550_line_out->x() + spnr_tt550_line_out->w() + 8, by, 92, bh, _("Acc Inp.")); btnAccInp->tooltip(_("Enable to use accessory audio input")); btnAccInp->down_box(FL_DOWN_BOX); btnAccInp->callback((Fl_Callback*)cb_btnAccInp); btnAccInp->value(progStatus.tt550_use_line_in); tt550_Audio->end(); tt550_Rx = new Fl_Group(xpos, ypos+tabh, W, tabb, _("RX")); tt550_Rx->hide(); cbo_tt550_nb_level = new Fl_ComboBox(xpos+80, by, 89, bh, _("NB level")); cbo_tt550_nb_level->tooltip(_("Select Noise Blanker level")); cbo_tt550_nb_level->box(FL_DOWN_BOX); cbo_tt550_nb_level->color(FL_BACKGROUND_COLOR); cbo_tt550_nb_level->selection_color(FL_BACKGROUND_COLOR); cbo_tt550_nb_level->labeltype(FL_NORMAL_LABEL); cbo_tt550_nb_level->labelfont(0); cbo_tt550_nb_level->labelsize(14); cbo_tt550_nb_level->labelcolor(FL_FOREGROUND_COLOR); cbo_tt550_nb_level->callback((Fl_Callback*)cb_cbo_tt550_nb_level); cbo_tt550_nb_level->align(Fl_Align(FL_ALIGN_LEFT)); cbo_tt550_nb_level->when(FL_WHEN_RELEASE); cbo_tt550_nb_level->index(progStatus.tt550_nb_level); cbo_tt550_nb_level->readonly(); cbo_tt550_nb_level->end(); cbo_tt550_agc_level = new Fl_ComboBox( cbo_tt550_nb_level->x() + cbo_tt550_nb_level->w() + 60, by, 90, bh, _("AGC")); cbo_tt550_agc_level->tooltip(_("Select AGC")); cbo_tt550_agc_level->box(FL_DOWN_BOX); cbo_tt550_agc_level->color(FL_BACKGROUND_COLOR); cbo_tt550_agc_level->selection_color(FL_BACKGROUND_COLOR); cbo_tt550_agc_level->labeltype(FL_NORMAL_LABEL); cbo_tt550_agc_level->labelfont(0); cbo_tt550_agc_level->labelsize(14); cbo_tt550_agc_level->labelcolor(FL_FOREGROUND_COLOR); cbo_tt550_agc_level->callback((Fl_Callback*)cb_cbo_tt550_agc_level); cbo_tt550_agc_level->align(Fl_Align(FL_ALIGN_LEFT)); cbo_tt550_agc_level->when(FL_WHEN_RELEASE); cbo_tt550_agc_level->index(progStatus.tt550_agc_level); cbo_tt550_agc_level->readonly(); cbo_tt550_agc_level->end(); spnr_tt550_vfo_adj = new Hspinner( cbo_tt550_agc_level->x() + cbo_tt550_agc_level->w() + 120, by, 5*bh, bh, _("Vfo Adj(ppm)")); spnr_tt550_vfo_adj->callback((Fl_Callback*)cb_spnr_tt550_vfo_adj); spnr_tt550_vfo_adj->align(FL_ALIGN_BOTTOM | FL_ALIGN_CENTER); spnr_tt550_vfo_adj->minimum(-100); spnr_tt550_vfo_adj->maximum(100); spnr_tt550_vfo_adj->type(FL_FLOAT_INPUT); spnr_tt550_vfo_adj->step(0.02); spnr_tt550_vfo_adj->format("%.2f"); spnr_tt550_vfo_adj->value(progStatus.vfo_adj); tt550_Rx->end(); tt550_Tx = new Fl_Group(xpos, ypos+tabh, W, tabb, _("TX")); tt550_Tx->hide(); btn_tt550_enable_xmtr = new Fl_Check_Button(xpos+111, by, 78, bh, _("Tx ON")); btn_tt550_enable_xmtr->down_box(FL_DOWN_BOX); btn_tt550_enable_xmtr->value(1); btn_tt550_enable_xmtr->callback((Fl_Callback*)cb_btn_tt550_enable_xmtr); btn_tt550_enable_xmtr->value(progStatus.tt550_enable_xmtr); btn_tt550_enable_tloop = new Fl_Check_Button(xpos+197, by, 78, bh, _("Tloop")); btn_tt550_enable_tloop->down_box(FL_DOWN_BOX); btn_tt550_enable_tloop->callback((Fl_Callback*)cb_btn_tt550_enable_tloop); btn_tt550_enable_tloop->value(progStatus.tt550_enable_tloop); btn_tt550_tuner_bypass = new Fl_Check_Button(xpos+283, by, 78, bh, _("Tuner")); btn_tt550_tuner_bypass->tooltip(_("Check to bypass tuner")); btn_tt550_tuner_bypass->down_box(FL_DOWN_BOX); btn_tt550_tuner_bypass->callback((Fl_Callback*)cb_btn_tt550_tuner_bypass); op_tt550_XmtBW = new Fl_ComboBox(xpos+462, by, 112, bh, _("Xmt BW")); op_tt550_XmtBW->tooltip(_("Select Transceiver Bandwidth")); op_tt550_XmtBW->box(FL_DOWN_BOX); op_tt550_XmtBW->color(FL_WHITE); op_tt550_XmtBW->selection_color(FL_BACKGROUND_COLOR); op_tt550_XmtBW->labeltype(FL_NORMAL_LABEL); op_tt550_XmtBW->labelfont(0); op_tt550_XmtBW->labelsize(12); op_tt550_XmtBW->labelcolor(FL_FOREGROUND_COLOR); op_tt550_XmtBW->callback((Fl_Callback*)cb_op_tt550_XmtBW); op_tt550_XmtBW->align(Fl_Align(FL_ALIGN_LEFT)); op_tt550_XmtBW->when(FL_WHEN_RELEASE); op_tt550_XmtBW->index(progStatus.tt550_xmt_bw); op_tt550_XmtBW->readonly(); op_tt550_XmtBW->end(); btn_tt550_use_xmt_bw = new Fl_Check_Button(xpos+613, by, 23, bh, _("Enable")); btn_tt550_use_xmt_bw->tooltip(_("Use Xmt BW setting")); btn_tt550_use_xmt_bw->down_box(FL_DOWN_BOX); btn_tt550_use_xmt_bw->callback((Fl_Callback*)cb_btn_tt550_use_xmt_bw); btn_tt550_use_xmt_bw->align(Fl_Align(FL_ALIGN_RIGHT)); btn_tt550_use_xmt_bw->value(progStatus.tt550_use_xmt_bw); tt550_Tx->end(); tt550_302A = new Fl_Group(xpos, ypos+tabh, W, tabb, _("302-A")); tt550_302A->hide(); spnr_tt550_keypad_time_out = new Hspinner(xpos+100, by, 5*bh, bh, _("Time out")); spnr_tt550_keypad_time_out->tooltip(_("Clear M302 keypad after ## secs")); spnr_tt550_keypad_time_out->minimum(0.5); spnr_tt550_keypad_time_out->maximum(10); spnr_tt550_keypad_time_out->value(2); spnr_tt550_keypad_time_out->callback((Fl_Callback*)cb_spnr_tt550_keypad_time_out); spnr_tt550_keypad_time_out->align(Fl_Align(36)); spnr_tt550_keypad_time_out->value(progStatus.tt550_keypad_timeout/1000.0); spnr_tt550_keypad_time_out->step(0.1); spnr_tt550_encoder_sensitivity = new Hspinner( spnr_tt550_keypad_time_out->x() + spnr_tt550_keypad_time_out->w() + 100, by, 5*bh, bh, _("Sensitivity")); spnr_tt550_encoder_sensitivity->tooltip(_("1 - most sensitive")); spnr_tt550_encoder_sensitivity->type(FL_INT_INPUT); spnr_tt550_encoder_sensitivity->minimum(1); spnr_tt550_encoder_sensitivity->maximum(25); spnr_tt550_encoder_sensitivity->step(1); spnr_tt550_encoder_sensitivity->value(10); spnr_tt550_encoder_sensitivity->callback((Fl_Callback*)cb_spnr_tt550_encoder_sensitivity); spnr_tt550_encoder_sensitivity->align(Fl_Align(FL_ALIGN_LEFT)); spnr_tt550_encoder_sensitivity->value(progStatus.tt550_encoder_sensitivity); sel_tt550_encoder_step = new Fl_Choice( spnr_tt550_encoder_sensitivity->x() + spnr_tt550_encoder_sensitivity->w() + 100, by, 80, bh, _("Step size")); sel_tt550_encoder_step->down_box(FL_BORDER_BOX); sel_tt550_encoder_step->callback((Fl_Callback*)cb_sel_tt550_encoder_step); sel_tt550_encoder_step->add("1|10|100|1 K|10 K"); sel_tt550_encoder_step->value(progStatus.tt550_encoder_step); tt550_302A->end(); tt550_302B = new Fl_Group(xpos, ypos+tabh, W, tabb, _("302-B")); tt550_302B->hide(); sel_tt550_F1_func = new Fl_Choice(xpos+168, by, 111, bh, _("F1")); sel_tt550_F1_func->tooltip(_("Assign Func Key")); sel_tt550_F1_func->down_box(FL_BORDER_BOX); sel_tt550_F1_func->callback((Fl_Callback*)cb_sel_tt550_F1_func); sel_tt550_F1_func->add("None|Clear|CW++|CW--|Band++|Band--|Step++|Step--"); sel_tt550_F1_func->value(progStatus.tt550_F1_func); sel_tt550_F2_func = new Fl_Choice(xpos+319, by, 111, bh, _("F2")); sel_tt550_F2_func->tooltip(_("Assign Func Key")); sel_tt550_F2_func->down_box(FL_BORDER_BOX); sel_tt550_F2_func->callback((Fl_Callback*)cb_sel_tt550_F2_func); sel_tt550_F2_func->add("None|Clear|CW++|CW--|Band++|Band--|Step++|Step--"); sel_tt550_F2_func->value(progStatus.tt550_F2_func); sel_tt550_F3_func = new Fl_Choice(xpos+465, by, 111, bh, _("F3")); sel_tt550_F3_func->tooltip(_("Assign Func Key")); sel_tt550_F3_func->down_box(FL_BORDER_BOX); sel_tt550_F3_func->callback((Fl_Callback*)cb_sel_tt550_F3_func); sel_tt550_F3_func->add("None|Clear|CW++|CW--|Band++|Band--|Step++|Step--"); sel_tt550_F3_func->value(progStatus.tt550_F3_func); tt550_302B->end(); tt550_AT = new Fl_Group(xpos, ypos+tabh, W, tabb, _("AT")); tt550_AT_inline = new Fl_Light_Button( 15, by, 4*bh, bh, _("Inline")); tt550_AT_inline->tooltip(_("Enabled - autotune\nDisabled - bypass")); tt550_AT_inline->callback((Fl_Callback*)cb_AT_bypass); tt550_AT_Z = new Fl_Light_Button( RIGHT_OF(tt550_AT_inline) + 10, by, 4*bh, bh, _("Z hi")); tt550_AT_Z->tooltip(_("Hi / Lo Impedance network")); tt550_AT_Z->callback((Fl_Callback*)cb_AT_Z); tt550_AT_capUP = new Fl_Button( RIGHT_OF(tt550_AT_Z) + 10, by, 2*bh, bh, _("C >")); tt550_AT_capUP->tooltip(_("Increase C")); tt550_AT_capUP->callback((Fl_Callback*)cb_AT_capUP); tt550_AT_capDN = new Fl_Button( RIGHT_OF(tt550_AT_capUP) + 10, by, 2*bh, bh, _("C <")); tt550_AT_capDN->tooltip(_("Decrease C")); tt550_AT_capDN->callback((Fl_Callback*)cb_AT_capDN); tt550_AT_indUP = new Fl_Button( RIGHT_OF(tt550_AT_capDN) + 10, by, 2*bh, bh, _("L >")); tt550_AT_indUP->tooltip(_("Increase L")); tt550_AT_indUP->callback((Fl_Callback*)cb_AT_indUP); tt550_AT_indDN = new Fl_Button( RIGHT_OF(tt550_AT_indUP) + 10, by, 2*bh, bh, _("L <")); tt550_AT_indDN->tooltip(_("Decrease L")); tt550_AT_indDN->callback((Fl_Callback*)cb_AT_indDN); tt550_Nsamples = new Fl_Simple_Counter( RIGHT_OF(tt550_AT_indDN) + 10, by, 4*bh, bh, _("N")); tt550_Nsamples->tooltip(_("Fwd/Rev Pwr detect over # samples")); tt550_Nsamples->align(FL_ALIGN_RIGHT); tt550_Nsamples->step(1); tt550_Nsamples->minimum(1); tt550_Nsamples->maximum(FPLEN); tt550_Nsamples->value(progStatus.tt550_Nsamples); tt550_Nsamples->callback((Fl_Callback*)cb_tt550_Nsamples); tt550_AT->end(); tabs550->end(); grpOTHER->end(); grpMAIN->show(); grpSLIDERS->hide(); grpBUTTONS->hide(); grpOTHER->hide(); tmg->end(); return tmg; } Fl_Double_Window* touch_rig_window() { int mainW = TOUCH_MAINW; int mainH = TOUCH_MAINH; int menuH = 28; Fl_Double_Window* w = new Fl_Double_Window(mainW, mainH, _("Flrig")); w->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE)); hidden_tabs = new Fl_Group(0,0,small_mainW, small_mainH); hidden_tabs->hide(); hidden_tabs->end(); grp_menu = new Fl_Group(0,0,mainW,30); Fl_Menu_Bar *touch_menubar = new Fl_Menu_Bar(0, 0, mainW-64, menuH); touch_menubar->textsize(18); Fl_Menu_Item * mnu = getMenuItem(_("Tooltips"), touch_menu); if (mnu) { progStatus.tooltips ? mnu->set() : mnu->clear(); mnuTooltips = mnu; } mnu = getMenuItem(_("Voltmeter"), touch_menu); if (mnu) { progStatus.display_voltmeter ? mnu->set() : mnu->clear(); mnuVoltmeter = mnu; } touch_menubar->menu(touch_menu); Fl_Group *mnu_box = new Fl_Group(mainW-64, 0, 64, 28); mnu_box->box(FL_UP_BOX); tcpip_box = new Fl_Group(mainW-62, 0, 60, 28); tcpip_box->box(FL_FLAT_BOX); tcpip_menu_box = new Fl_Box(mainW - 62, 0, 18, 28); tcpip_menu_box->box(FL_DIAMOND_BOX); tcpip_menu_box->color(FL_GREEN); Fl_Box *tcpip_menu_label = new Fl_Box(mainW - 62 + 20, 0, 64 - 22, 28, _("tcpip")); tcpip_menu_label->box(FL_FLAT_BOX); tcpip_menu_label->align(FL_ALIGN_CENTER); tcpip_menu_label->tooltip(_("lit when connected to remote tcpip")); tcpip_box->end(); tcpip_box->hide(); mnu_box->end(); grp_menu->resizable(touch_menubar); grp_menu->end(); txt_encA = new Fl_Output( 0, 28, 90, 20, ""); txt_encA->box(FL_THIN_DOWN_BOX); txt_encA->align(20); txt_encA->hide(); set_menu_item("Aux RTS", progStatus.aux_rts); set_menu_item("Aux DTR", progStatus.aux_dtr); main_group = touch_main_group(0, menuH, mainW, mainH); main_group->hide(); grpInitializing = new Fl_Group(0, 0, mainW, mainH, ""); grpInitializing->box(FL_FLAT_BOX); grpInitializing->color(FL_LIGHT2); progress = new Fl_Progress( mainW / 4, mainH / 2, mainW / 2, 20, "Initializing"); progress->maximum(100); progress->minimum(0); progress->labelcolor(FL_RED); progress->labelsize(18); progress->align(Fl_Align(FL_ALIGN_TOP)); progress->selection_color(FL_GREEN); grpInitializing->show(); w->resizable(main_group); w->size_range(mainW, mainH, 0, mainH); w->end(); return w; } flrig-2.0.04/src/UI/rigpanel.cxx0000664000175000017500000011127514505022320013254 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include #include "gettext.h" #include "rigpanel.h" #include "images.h" #include "rig.h" #include "rigs.h" #include "status.h" #include "support.h" #include "K3_ui.h" #include "KX3_ui.h" #include "socket_io.h" #include "hspinner.h" #include "ui.h" #include "cwioUI.h" #include "cwio.h" #include "fsk.h" #include "fskioUI.h" Fl_Light_Button *btnPOWER = (Fl_Light_Button *)0; // controls for touch screen interface Hspinner *spnrPOWER = (Hspinner *)0; Hspinner *spnrVOLUME = (Hspinner *)0; Hspinner *spnrRFGAIN = (Hspinner *)0; Hspinner *spnrSQUELCH = (Hspinner *)0; Hspinner *spnrNR = (Hspinner *)0; Hspinner *spnrIFSHIFT = (Hspinner *)0; Hspinner *spnrINNER = (Hspinner *)0; Hspinner *spnrOUTER = (Hspinner *)0; Hspinner *spnrNOTCH = (Hspinner *)0; Hspinner *spnrMICGAIN = (Hspinner *)0; Fl_Group* grp_menu = (Fl_Group *)0; Fl_Menu_Bar *small_menu=(Fl_Menu_Bar *)0; Fl_Menu_Bar *wide_menu=(Fl_Menu_Bar *)0; Fl_Menu_Item *mnuExit = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuConfig = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuTooltips = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuVoltmeter = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuSchema = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuEmbedTabs = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuColorConfig = (Fl_Menu_Item *)0; Fl_Menu_Item *mnu_meter_filtering = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuConfigXcvr = (Fl_Menu_Item *)0; Fl_Menu_Item *save_me = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuHelp = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuOnLineHelp = (Fl_Menu_Item *)0; Fl_Menu_Item *mnuAbout = (Fl_Menu_Item *)0; Fl_Box *tcpip_menu_box = (Fl_Box *)0; Fl_Group *tcpip_box = (Fl_Group *)0; Fl_Box *labelMEMORY = (Fl_Box *)0; Fl_Output *txt_encA=(Fl_Output *)0; Fl_Group *sm_grp1 = (Fl_Group *)0; Fl_Group *grpMeters = (Fl_Group *)0; Fl_Box *scaleSmeter=(Fl_Box *)0; Fl_Light_Button *btnPreamp = (Fl_Light_Button *)0; Fl_Light_Button *btnNOISE = (Fl_Light_Button *)0; Fl_Light_Button *btnAutoNotch = (Fl_Light_Button *)0; Fl_Group *grp_row1b2 = (Fl_Group *)0; Fl_Button *btnAswapB = (Fl_Button *)0; Fl_Button *btn_K3_swapAB = (Fl_Button *)0; Fl_Button *btn_K3_A2B = (Fl_Button *)0; Fl_Button *btn_KX3_swapAB = (Fl_Button *)0; Fl_Button *btn_KX3_A2B = (Fl_Button *)0; Fl_Light_Button *btnSplit = (Fl_Light_Button *)0; Fl_Light_Button *btnPTT = (Fl_Light_Button *)0; Fl_Box *bx_row1_expander2=(Fl_Box *)0; Fl_Group *grp_row2 = (Fl_Group *)0; Fl_Group *grp_row2a = (Fl_Group *)0; Fl_Wheel_Value_Slider *sldrSQUELCH = (Fl_Wheel_Value_Slider *)0; Fl_Wheel_Value_Slider *sldrMICGAIN = (Fl_Wheel_Value_Slider *)0; Fl_Box *bx_sep2a=(Fl_Box *)0; Fl_Group *grp_row2b = (Fl_Group *)0; Fl_Light_Button *btnIFsh = (Fl_Light_Button *)0; Fl_Button *btn_KX3_IFsh = (Fl_Button *)0; Fl_Wheel_Value_Slider *sldrIFSHIFT = (Fl_Wheel_Value_Slider *)0; Fl_Light_Button *btnLOCK = (Fl_Light_Button *)0; Fl_Button *btnCLRPBT = (Fl_Light_Button *)0; Fl_Wheel_Value_Slider *sldrINNER = (Fl_Wheel_Value_Slider *)0; Fl_Wheel_Value_Slider *sldrOUTER = (Fl_Wheel_Value_Slider *)0; Fl_Light_Button *btnNR = (Fl_Light_Button *)0; Fl_Wheel_Value_Slider *sldrNR = (Fl_Wheel_Value_Slider *)0; Fl_Box *bx_sep2b=(Fl_Box *)0; Fl_Group *grp_row2c = (Fl_Group *)0; Fl_Light_Button *btnNotch = (Fl_Light_Button *)0; Fl_Wheel_Value_Slider *sldrNOTCH = (Fl_Wheel_Value_Slider *)0; Fl_Light_Button *btnAGC = (Fl_Light_Button *)0; Fl_Wheel_Value_Slider *sldrRFGAIN = (Fl_Wheel_Value_Slider *)0; Fl_Box *bx_sep2c=(Fl_Box *)0; Fl_Group *grp_row2d = (Fl_Group *)0; Fl_Wheel_Value_Slider *sldrPOWER = (Fl_Wheel_Value_Slider *)0; Fl_Light_Button *btnVol = (Fl_Light_Button *)0; Fl_Wheel_Value_Slider *sldrVOLUME = (Fl_Wheel_Value_Slider *)0; Fl_Group *grpTABS = (Fl_Group *)0; Fl_Group *hidden_tabs = (Fl_Group *)0; Fl_Group *tabs = (Fl_Group *)0; Fl_Tabs *tabsGeneric=(Fl_Tabs *)0; Fl_Group *tab_yaesu_bands = (Fl_Group *)0; Fl_Button *btn_yaesu_select_1 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_2 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_3 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_4 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_5 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_6 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_7 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_8 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_9 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_10 = (Fl_Button *)0; Fl_Button *btn_yaesu_select_11 = (Fl_Button *)0; Fl_ComboBox *op_yaesu_select60 = (Fl_ComboBox *)0; Fl_Group *tab_ft991_bands = (Fl_Group *)0; Fl_Button *btn_ft991_select_1 = (Fl_Button *)0; Fl_Button *btn_ft991_select_2 = (Fl_Button *)0; Fl_Button *btn_ft991_select_3 = (Fl_Button *)0; Fl_Button *btn_ft991_select_4 = (Fl_Button *)0; Fl_Button *btn_ft991_select_5 = (Fl_Button *)0; Fl_Button *btn_ft991_select_6 = (Fl_Button *)0; Fl_Button *btn_ft991_select_7 = (Fl_Button *)0; Fl_Button *btn_ft991_select_8 = (Fl_Button *)0; Fl_Button *btn_ft991_select_9 = (Fl_Button *)0; Fl_Button *btn_ft991_select_10 = (Fl_Button *)0; Fl_Button *btn_ft991_select_11 = (Fl_Button *)0; Fl_Button *btn_ft991_select_12 = (Fl_Button *)0; Fl_Button *btn_ft991_select_13 = (Fl_Button *)0; Fl_PL_tone *choice_ft991_tTONE = (Fl_PL_tone *)0; Fl_PL_tone *choice_ft991_rTONE = (Fl_PL_tone *)0; Fl_Group *tab_FT8n_bands = (Fl_Group *)0; Fl_Button *btn_FT8n_select_1 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_2 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_3 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_4 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_5 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_6 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_7 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_8 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_9 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_10 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_11 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_12 = (Fl_Button *)0; Fl_Button *btn_FT8n_select_13 = (Fl_Button *)0; Fl_Group *tab_FT8n_CTCSS = (Fl_Group *)0; Fl_PL_tone *choice_FT8n_tTONE = (Fl_PL_tone *)0; Fl_PL_tone *choice_FT8n_rTONE = (Fl_PL_tone *)0; Fl_Button *setTONES = (Fl_Button *)0; Fl_ComboBox *FMoffset = (Fl_ComboBox *)0; Fl_Button *setOFFSET = (Fl_Button *)0; cFreqControl *FMoff_freq = (cFreqControl *)0; Fl_Group *tab_icom_bands = (Fl_Group *)0; Fl_Button *btn_icom_select_1 = (Fl_Button *)0; Fl_Button *btn_icom_select_2 = (Fl_Button *)0; Fl_Button *btn_icom_select_3 = (Fl_Button *)0; Fl_Button *btn_icom_select_4 = (Fl_Button *)0; Fl_Button *btn_icom_select_5 = (Fl_Button *)0; Fl_Button *btn_icom_select_6 = (Fl_Button *)0; Fl_Button *btn_icom_select_7 = (Fl_Button *)0; Fl_Button *btn_icom_select_8 = (Fl_Button *)0; Fl_Button *btn_icom_select_9 = (Fl_Button *)0; Fl_Button *btn_icom_select_10 = (Fl_Button *)0; Fl_Button *btn_icom_select_11 = (Fl_Button *)0; Fl_Button *btn_icom_select_12 = (Fl_Button *)0; Fl_Button *btn_icom_select_13 = (Fl_Button *)0; Fl_PL_tone *choice_tTONE = (Fl_PL_tone *)0; Fl_PL_tone *choice_rTONE = (Fl_PL_tone *)0; Fl_Group *genericCW = (Fl_Group *)0; Fl_Light_Button *btnSpot = (Fl_Light_Button *)0; Hspinner *spnr_cw_spot_tone = (Hspinner *)0; Hspinner *spnr_cw_qsk = (Hspinner *)0; Hspinner *spnr_cw_weight = (Hspinner *)0; Hspinner *spnr_cw_wpm = (Hspinner *)0; Fl_Check_Button *btn_enable_keyer = (Fl_Check_Button *)0; Fl_Group *genericQSK = (Fl_Group *)0; Fl_Button *btnBreakIn = (Fl_Button *)0; Hspinner *spnr_cw_delay = (Hspinner *)0; Fl_Group *genericVOX = (Fl_Group *)0; Hspinner *spnr_vox_gain = (Hspinner *)0; Hspinner *spnr_anti_vox = (Hspinner *)0; Hspinner *spnr_vox_hang = (Hspinner *)0; Fl_Light_Button *btn_vox = (Fl_Light_Button *)0; Fl_Check_Button *btn_vox_on_dataport = (Fl_Check_Button *)0; Fl_Group *genericSpeech = (Fl_Group *)0; Fl_Light_Button *btnCompON = (Fl_Light_Button *)0; Hspinner *spnr_compression = (Hspinner *)0; Fl_Group *genericRx = (Fl_Group *)0; Fl_Wheel_Value_Slider *sldr_nb_level = (Fl_Wheel_Value_Slider *)0; //Fl_ComboBox *cbo_agc_level = (Fl_ComboBox *)0; Hspinner *spnr_bpf_center = (Hspinner *)0; Fl_Button *btnALC_IDD_SWR = (Fl_Button *)0; Fl_SigBar *sldrRcvSignal = (Fl_SigBar *)0; Fl_SigBar *sldrALC = (Fl_SigBar *)0; Fl_SigBar *sldrIDD = (Fl_SigBar *)0; Fl_SigBar *sldrSWR = (Fl_SigBar *)0; Fl_SigBar *sldrFwdPwr = (Fl_SigBar *)0; Fl_Button *scalePower = (Fl_Button *)0; Fl_SigBar *sldrVoltage = (Fl_SigBar *)0; Fl_Box *scaleVoltage = (Fl_Box *)0; Fl_Box *meter_fill_box=(Fl_Box *)0; cFreqControl *FreqDispA=(cFreqControl *)0; cFreqControl *FreqDispB=(cFreqControl *)0; Fl_Group *grp_row0a = (Fl_Group *)0; Fl_Light_Button *btnA = (Fl_Light_Button *)0; Fl_Light_Button *btnB = (Fl_Light_Button *)0; Fl_Button *btnTune = (Fl_Button *)0; Fl_Light_Button *btn_tune_on_off = (Fl_Light_Button *)0; Fl_Box *bx_row0_expander=(Fl_Box *)0; Fl_Button *btn_show_controls = (Fl_Button *)0; Fl_Group *grp_row1 = (Fl_Group *)0; Fl_Group *grp_row1a = (Fl_Group *)0; Fl_ComboBox *opBW = (Fl_ComboBox *)0; Fl_ComboBox *opDSP_lo = (Fl_ComboBox *)0; Fl_ComboBox *opCENTER = (Fl_ComboBox *)0; Fl_ComboBox *opBW_A = (Fl_ComboBox *)0; //(Fl_Counter *)0; Fl_ComboBox *opBW_B = (Fl_ComboBox *)0; //(Fl_Counter *)0; Fl_Counter *opFilterInner = (Fl_Counter *)0; Fl_Counter *opFilterOuter = (Fl_Counter *)0; Fl_Button *btnDSP = (Fl_Button *)0; Fl_ComboBox *opDSP_hi = (Fl_ComboBox *)0; Fl_Button *btnFILT= (Fl_Button*)0; Fl_Button *btnCENTER = (Fl_Button*)0; Fl_ComboBox *opMODE = (Fl_ComboBox *)0; Fl_Group *grp_row1b = (Fl_Group *)0; Fl_Group *grp_row1b1 = (Fl_Group *)0; Fl_Light_Button *btnAttenuator = (Fl_Light_Button *)0; Fl_ComboBox *cbo_attenuator = (Fl_ComboBox *)0; Fl_ComboBox *cbo_preamp = (Fl_ComboBox *)0; Fl_Check_Button *btn_use_bpf_center = (Fl_Check_Button *)0; Fl_Group *genericMisc = (Fl_Group *)0; Hspinner *spnr_vfo_adj = (Hspinner *)0; Hspinner *spnr_line_out = (Hspinner *)0; Fl_Light_Button *btnSpecial = (Fl_Light_Button *)0; Fl_Check_Button *btn_ext_tuner = (Fl_Check_Button *)0; Fl_Check_Button *btn_xcvr_auto_on = (Fl_Check_Button *)0; Fl_Check_Button *btn_xcvr_auto_off = (Fl_Check_Button *)0; Fl_Check_Button *btn_xcvr_synch_clock = (Fl_Check_Button *)0; Fl_Check_Button *btn_xcvr_synch_gmt = (Fl_Check_Button *)0; Fl_Button *btn_xcvr_synch_now = (Fl_Button *)0; Fl_Output *txt_xcvr_synch = (Fl_Output *)0; //Fl_Group *kx3_extras = (Fl_Group *)0; //Fl_Check_Button *kxpa_enabled = (Fl_Check_Button *)0; Fl_Group *genericUser_1 = (Fl_Group *)0; Fl_Button *btnUser1 = (Fl_Button*)0; Fl_Button *btnUser2 = (Fl_Button*)0; Fl_Button *btnUser3 = (Fl_Button*)0; Fl_Button *btnUser4 = (Fl_Button*)0; Fl_Button *btnUser5 = (Fl_Button*)0; Fl_Button *btnUser6 = (Fl_Button*)0; Fl_Button *btnUser7 = (Fl_Button*)0; Fl_Button *btnUser8 = (Fl_Button*)0; Fl_Group *genericUser_2 = (Fl_Group *)0; Fl_Button *btnUser9 = (Fl_Button*)0; Fl_Button *btnUser10 = (Fl_Button*)0; Fl_Button *btnUser11 = (Fl_Button*)0; Fl_Button *btnUser12 = (Fl_Button*)0; Fl_Button *btnUser13 = (Fl_Button*)0; Fl_Button *btnUser14 = (Fl_Button*)0; Fl_Button *btnUser15 = (Fl_Button*)0; Fl_Button *btnUser16 = (Fl_Button*)0; Fl_Group *genericUser_3 = (Fl_Group *)0; Fl_Button *btnUser17 = (Fl_Button*)0; Fl_Button *btnUser18 = (Fl_Button*)0; Fl_Button *btnUser19 = (Fl_Button*)0; Fl_Button *btnUser20 = (Fl_Button*)0; Fl_Button *btnUser21 = (Fl_Button*)0; Fl_Button *btnUser22 = (Fl_Button*)0; Fl_Button *btnUser23 = (Fl_Button*)0; Fl_Button *btnUser24 = (Fl_Button*)0; Fl_Group *genericRXB = (Fl_Group *)0; Hspinner *cntRIT = (Hspinner *)0; Hspinner *cntXIT = (Hspinner *)0; Hspinner *cntBFO = (Hspinner *)0; Fl_Group *genericAux = (Fl_Group *)0; Fl_Light_Button *btnAuxRTS = (Fl_Light_Button *)0; Fl_Group *tab7610 = (Fl_Group *)0; Fl_ComboBox *ic7610att = (Fl_ComboBox *)0; Fl_Light_Button *ic7610dual_watch = (Fl_Light_Button *)0; Fl_Light_Button *ic7610digi_sel_on_off = (Fl_Light_Button *)0; Fl_Wheel_Value_Slider *ic7610_digi_sel_val = (Fl_Wheel_Value_Slider *)0; Fl_Light_Button *btnAuxDTR = (Fl_Light_Button *)0; Fl_Light_Button *btnDataPort = (Fl_Light_Button *)0; Fl_Tabs *tabs550=(Fl_Tabs *)0; Fl_Group *tt550_CW = (Fl_Group *)0; Hspinner *spnr_tt550_cw_wpm = (Hspinner *)0; Hspinner *spnr_tt550_cw_weight = (Hspinner *)0; Hspinner *spnr_tt550_cw_qsk = (Hspinner *)0; Hspinner *spnr_tt550_cw_vol = (Hspinner *)0; Hspinner *spnr_tt550_cw_spot = (Hspinner *)0; Fl_Check_Button *btn_tt550_enable_keyer = (Fl_Check_Button *)0; Fl_Group *tt550_VOX = (Fl_Group *)0; Hspinner *spnr_tt550_vox_gain = (Hspinner *)0; Hspinner *spnr_tt550_anti_vox = (Hspinner *)0; Hspinner *spnr_tt550_vox_hang = (Hspinner *)0; Fl_Light_Button *btn_tt550_vox = (Fl_Light_Button *)0; Fl_Group *tt550_Speech = (Fl_Group *)0; Fl_Light_Button *btn_tt550_CompON = (Fl_Light_Button *)0; Hspinner *spnr_tt550_compression = (Hspinner *)0; Hspinner *spnr_tt550_mon_vol = (Hspinner *)0; Fl_Group *tt550_Audio = (Fl_Group *)0; Hspinner *spnr_tt550_line_out = (Hspinner *)0; Fl_Check_Button *btnAccInp = (Fl_Check_Button *)0; Fl_Group *tt550_Rx = (Fl_Group *)0; Fl_ComboBox *cbo_tt550_nb_level = (Fl_ComboBox *)0; Fl_ComboBox *cbo_tt550_agc_level = (Fl_ComboBox *)0; Hspinner *spnr_tt550_vfo_adj = (Hspinner *)0; Fl_Group *tt550_Tx = (Fl_Group *)0; Fl_Check_Button *btn_tt550_enable_xmtr = (Fl_Check_Button *)0; Fl_Check_Button *btn_tt550_enable_tloop = (Fl_Check_Button *)0; Fl_Check_Button *btn_tt550_tuner_bypass = (Fl_Check_Button *)0; Fl_ComboBox *op_tt550_XmtBW = (Fl_ComboBox *)0; Fl_Check_Button *btn_tt550_use_xmt_bw = (Fl_Check_Button *)0; Fl_Group *tt550_302A = (Fl_Group *)0; Hspinner *spnr_tt550_keypad_time_out = (Hspinner *)0; Hspinner *spnr_tt550_encoder_sensitivity = (Hspinner *)0; Fl_Choice *sel_tt550_encoder_step = (Fl_Choice *)0; Fl_Group *tt550_302B = (Fl_Group *)0; Fl_Choice *sel_tt550_F1_func = (Fl_Choice *)0; Fl_Choice *sel_tt550_F2_func = (Fl_Choice *)0; Fl_Choice *sel_tt550_F3_func = (Fl_Choice *)0; Fl_Group *tt550_AT = (Fl_Group *)0; Fl_Light_Button *tt550_AT_inline = (Fl_Light_Button *)0; Fl_Light_Button *tt550_AT_Z = (Fl_Light_Button *)0; Fl_Button *tt550_AT_capUP = (Fl_Button *)0; Fl_Button *tt550_AT_capDN = (Fl_Button *)0; Fl_Button *tt550_AT_indUP = (Fl_Button *)0; Fl_Button *tt550_AT_indDN = (Fl_Button *)0; Fl_Simple_Counter *tt550_Nsamples = (Fl_Simple_Counter *)0; Fl_Group *main_group = (Fl_Group *)0; Fl_Group *grpInitializing = (Fl_Group *)0; Fl_Progress *progress=(Fl_Progress *)0; Fl_Group *g_extras = (Fl_Group *)0; #define RIGHT_OF(widget) (widget->x() + widget->w()) #include "ui_bitmaps.cxx" static const char *mtr_scales[] = { "5 watt", "10 watt", "15 watt", "20 watt", "25 watt", "50 watt", "100 watt", "200 watt", "Auto scaled"}; void select_power_meter_scales() { if (!meter_scale_dialog) meter_scale_dialog = power_meter_scale_select(); meter_scale_dialog->show(); } static void cb_mnuExit(Fl_Menu_*, void*) { cbExit(); } static void cb_mnuTooltips(Fl_Menu_*, void*) { progStatus.tooltips = ! progStatus.tooltips; if (progStatus.tooltips) Fl_Tooltip::enable(); else Fl_Tooltip::disable(); } static void cb_mnuVoltmeter(Fl_Menu_*, void*) { progStatus.display_voltmeter = !progStatus.display_voltmeter; updateVmeter(NULL); } static void cb_mnuSchema(Fl_Menu_*, void*) { int state = progStatus.show_tabs; if (progStatus.embed_tabs && progStatus.show_tabs) show_controls(); if (!progStatus.embed_tabs && tabs_dialog->visible()) tabs_dialog->hide(); progStatus.schema = !progStatus.schema; adjust_control_positions(); if (state != progStatus.show_tabs) show_controls(); } static void cb_mnu_embed_tabs(Fl_Menu_*, void*) { if (tabs_dialog && !progStatus.embed_tabs && tabs_dialog->visible()) { tabs_dialog->hide(); show_controls(); progStatus.embed_tabs = true; show_controls(); } else if (tabs_dialog && !progStatus.embed_tabs && !tabs_dialog->visible()) { progStatus.embed_tabs = true; } else if (progStatus.embed_tabs && progStatus.show_tabs) { show_controls(); // close controls progStatus.embed_tabs = false; show_controls(); } else if (progStatus.embed_tabs && !progStatus.show_tabs) { progStatus.embed_tabs = false; } } static void cb_mnuColorConfig(Fl_Menu_*, void*) { setDisplayColors(); } static void cb_mnu_show_meters(Fl_Menu_ *, void *) { if (!meters_dialog) meters_dialog = win_meters(); meters_dialog->show(); } static void cb_mnu_meter_filtering(Fl_Menu_*, void*) { if (!meter_filters) meter_filters = MetersDialog(); meter_filters->show(); } static void cb_mnuConfigXcvr(Fl_Menu_*, void*) { configXcvr(); } static void cb_Memory(Fl_Menu_*, void*) { openMemoryDialog(); } static void cb_save_me(Fl_Menu_*, void*) { addFreq(); } static void cb_Events(Fl_Menu_*, void*) { cbEventLog(); } static void cb_Polling(Fl_Menu_*, void*) { open_poll_tab(); } static void cb_mnuTrace(Fl_Menu_*, void*) { open_trace_tab(); } static void cb_mnuCommands(Fl_Menu_ *, void *) { open_commands_tab(); } static void cb_Restore(Fl_Menu_*, void*) { open_restore_tab(); } static void cb_Send(Fl_Menu_*, void*) { open_send_command_tab(); } static void cb_mnuTCPIP(Fl_Menu_*, void*) { open_tcpip_tab(); } static void cb_mnuCMEDIA(Fl_Menu_*, void*) { open_cmedia_tab(); } static void cb_mnuTMATE2(Fl_Menu_*, void*) { open_tmate2_tab(); } static void cb_CWkeyer(Fl_Menu_*, void*) { if (cwio_keyer_dialog == 0) cwio_keyer_dialog = new_cwio_dialog(); for (int n = 0; n < 12; n++) { btn_msg[n]->label(progStatus.cwio_labels[n].c_str()); btn_msg[n]->redraw_label(); } cwio_keyer_dialog->show(); } static void cb_FSKkeyer(Fl_Menu_*, void*) { if (FSK_keyer_dialog == 0) FSK_keyer_dialog = fskio_window(); for (int n = 0; n < 12; n++) { FSK_btn_msg[n]->label(progStatus.FSK_labels[n].c_str()); FSK_btn_msg[n]->redraw_label(); } FSK_keyer_dialog->show(); } //static void cb_mnuXMLRPC(Fl_Menu_*, void*) { // open_xmlrpc_tab(); //} static void cb_mnuPTT(Fl_Menu_*, void*) { open_ptt_tab(); } static void cb_mnuGPIO(Fl_Menu_*, void*) { open_gpio_tab(); } static void cb_mnuOTHER(Fl_Menu_*, void *) { open_other_tab(); } static void cb_mnuSERVER(Fl_Menu_*, void*) { open_server_tab(); } static void cb_mnuCLIENT(Fl_Menu_*, void*) { open_client_tab(); } static void cb_mnuOnLineHelp(Fl_Menu_*, void*) { visit_URL((void *)("http://www.w1hkj.com/flrig-help/index.html")); } static void cb_mnuAbout(Fl_Menu_*, void*) { about(); } static void cb_btnALC_IDD_SWR(Fl_Button*, void*) { cbALC_IDD_SWR(); } static void cb_btnAGC(Fl_Button*, void*) { cbAGC(); } static void cb_scalePower(Fl_Button*, void*) { if (Fl::event_button() == FL_RIGHT_MOUSE) select_power_meter_scales(); } static void cb_mnu_power_meter_scale(Fl_Menu_ *, void *) { select_power_meter_scales(); } static void cb_btnA(Fl_Light_Button*, void*) { if (Fl::event_button() == FL_RIGHT_MOUSE) { if (selrig->inuse == onA) { addFreq(); btnA->value(1); btnB->value(0); } else { btnA->value(0); btnB->value(1); } } else { if (selrig->inuse == onB) { cb_selectA(); } btnA->value(1); btnB->value(0); if (progStatus.UIsize == touch_ui) { FreqDispB->hide(); FreqDispA->show(); } } } static void cb_btn_K3_swapAB(Fl_Button*, void*) { cb_K3_swapAB(); } static void cb_btn_KX3_swapAB(Fl_Button*, void*) { cb_KX3_swapAB(); } static void cb_btnB(Fl_Light_Button*, void*) { if (Fl::event_button() == FL_RIGHT_MOUSE) { if (selrig->inuse == onB) { addFreq(); btnB->value(1); btnA->value(0); } else { btnB->value(0); btnA->value(1); } } else { if (selrig->inuse == onA) { cb_selectB(); } btnB->value(1); btnA->value(0); if (progStatus.UIsize == touch_ui) { FreqDispA->hide(); FreqDispB->show(); } } } static void cb_btnTune(Fl_Button*, void*) { cbTune(); } static void cb_btn_tune_on_off(Fl_Light_Button *, void *) { cb_tune_on_off(); } static void cb_btn_show_controls(Fl_Button*, void*) { show_controls(); } static void cb_btnFILT(Fl_Button *, void *) { selectFILT(); } static void cb_btnCENTER(Fl_Button *, void *) { selectCENTER(); } static void cb_opCENTER(Fl_ComboBox*, void*) { progStatus.tci_center = opCENTER->index(); tci_adjust_widths(); if (selrig->inuse == onA) selrig->set_bwA(vfoA.iBW); else selrig->set_bwB(vfoB.iBW); } static void cb_opBW(Fl_ComboBox*, void*) { setBW(); } static void cb_btnDSP(Fl_Button*, void*) { selectDSP(); } static void cb_opDSP_lo(Fl_ComboBox*, void*) { setDSP(); } static void cb_opDSP_hi(Fl_ComboBox*, void*) { setDSP(); } static void cb_opMODE(Fl_ComboBox*, void*) { setMode(); } static void cb_btnAttenuator(Fl_Light_Button*, void*) { cbAttenuator(); } static void cb_btnPreamp(Fl_Light_Button*, void*) { cbPreamp(); } static void cb_btnNOISE(Fl_Light_Button*, void*) { cbNoise(); } static void cb_btnAutoNotch(Fl_Light_Button*, void*) { cbAN(); } static void cb_btnAswapB(Fl_Button*, void*) { cbAswapB(); } static void cb_btnSplit(Fl_Light_Button* o, void*) { cb_set_split(o->value()); } extern void doPTT(int); static void cb_btnPTT(Fl_Light_Button *b, void*) { doPTT(b->value()); } static void cb_sldrSQUELCH(Fl_Wheel_Value_Slider*, void*) { setSQUELCH(); } static void cb_sldrMICGAIN(Fl_Wheel_Value_Slider*, void*) { setMicGain(); } static void cb_btnIFsh(Fl_Light_Button*, void*) { cbIFsh(); } static void cb_sldrIFSHIFT(Fl_Wheel_Value_Slider*, void*) { setIFshift(); } static void cb_btnLOCK(Fl_Button*, void*) { setLOCK(); } static void cb_sldrINNER(Fl_Wheel_Value_Slider*, void*) { setINNER(); } static void cb_btnCLRPBT(Fl_Light_Button*, void*) { setCLRPBT(); } static void cb_sldrOUTER(Fl_Wheel_Value_Slider*, void*) { setOUTER(); } static void cb_btnNR(Fl_Light_Button*, void*) { cbNR(); } static void cb_sldrNR(Fl_Wheel_Value_Slider*, void*) { setNR(); } static void cb_btnNotch(Fl_Light_Button*, void*) { cbbtnNotch(); } static void cb_sldrNOTCH(Fl_Wheel_Value_Slider*, void*) { setNotch(); } static void cb_sldrRFGAIN(Fl_Wheel_Value_Slider*, void*) { if ( Fl::event_button() == FL_RIGHT_MOUSE ) progStatus.ft950_rg_reverse = !progStatus.ft950_rg_reverse; setRFGAIN(); } static void cb_btnPOWER(Fl_Light_Button *btn, void*) { if (btn->value()) sldrPOWER->activate(); else sldrPOWER->deactivate(); } static void cb_sldrPOWER(Fl_Wheel_Value_Slider*, void*) { setPower(); } static void cb_btnVol(Fl_Light_Button*, void*) { cbMute(); } static void cb_sldrVOLUME(Fl_Wheel_Value_Slider*, void*) { setVolume(); } static void cb_btn_band_select(Fl_Button *, void *d) { size_t band = reinterpret_cast(d); cbBandSelect( (int)band); } static void cb_btnSpot(Fl_Light_Button* o, void*) { progStatus.spot_onoff=o->value(); cb_cw_spot(); } static void cb_spnr_cw_spot_tone(Hspinner* o, void*) { progStatus.cw_spot_tone=(int)o->value(); cb_cw_spot_tone(); } static void cb_spnr_cw_qsk(Hspinner* o, void*) { progStatus.cw_qsk = o->value(); cb_cw_qsk(); } static void cb_spnr_cw_weight(Hspinner* o, void*) { progStatus.cw_weight = o->value(); cb_cw_weight(); } static void cb_spnr_cw_wpm(Hspinner* o, void*) { progStatus.cw_wpm = o->value(); cb_cw_wpm(); } static void cb_spnr_cw_delay(Hspinner* o, void*) { progStatus.cw_delay = o->value(); cb_cw_delay(); } static void cb_btn_enable_keyer(Fl_Check_Button* o, void*) { progStatus.enable_keyer=o->value(); cb_enable_keyer(); } static void cb_btnBreakIn(Fl_Check_Button* o, void*) { if (xcvr_name == rig_IC7300.name_) { progStatus.break_in++; if (progStatus.break_in == 3) progStatus.break_in = 0; } else { progStatus.break_in = ! progStatus.break_in; } cb_set_break_in(); } static void cb_spnr_vox_gain(Hspinner* o, void*) { progStatus.vox_gain=(int)o->value(); cb_vox_gain(); } static void cb_spnr_anti_vox(Hspinner* o, void*) { progStatus.vox_anti=(int)o->value(); cb_vox_anti(); } static void cb_spnr_vox_hang(Hspinner* o, void*) { progStatus.vox_hang = (int)o->value(); cb_vox_hang(); } static void cb_btn_vox(Fl_Light_Button* o, void*) { progStatus.vox_onoff=o->value(); cb_vox_onoff(); } static void cb_btn_vox_on_dataport(Fl_Check_Button* o, void*) { progStatus.vox_on_dataport=o->value(); cb_vox_on_dataport(); } static void cb_btnCompON(Fl_Light_Button* o, void*) { progStatus.compON=o->value(); cb_compression(); } static void cb_spnr_compression(Hspinner* o, void*) { progStatus.compression=(int)o->value(); cb_compression(); } static void cb_sldr_nb_level(Fl_Wheel_Value_Slider* o, void*) { progStatus.nb_level = o->value(); cb_nb_level(); } //static void cb_cbo_agc_level(Fl_ComboBox* o, void*) { // progStatus.agc_level = o->index(); // cb_agc_level(); //} static void cb_spnr_bpf_center(Hspinner* o, void*) { progStatus.bpf_center=o->value(); cb_bpf_center(); } static void cb_btn_use_bpf_center(Fl_Check_Button* o, void*) { progStatus.use_bpf_center = o->value(); cb_bpf_center(); } static void cb_spnr_vfo_adj(Hspinner* o, void*) { progStatus.vfo_adj=o->value(); cb_vfo_adj(); } static void cb_spnr_line_out(Hspinner* o, void*) { progStatus.line_out = o->value(); cb_line_out(); } static void cb_btnSpecial(Fl_Light_Button*, void*) { cb_special(); } static void cb_btn_ext_tuner(Fl_Check_Button* o, void*) { progStatus.external_tuner = o->value(); } static void cb_btn_xcvr_auto_on(Fl_Check_Button* o, void*) { progStatus.xcvr_auto_on = o->value(); } static void cb_btn_xcvr_auto_off(Fl_Check_Button* o, void*) { progStatus.xcvr_auto_off = o->value(); } static void cb_btn_xcvr_synch_clock( Fl_Check_Button* o, void*) { progStatus.sync_clock = o->value(); } static void cb_btn_xcvr_synch_gmt( Fl_Check_Button* o, void*) { progStatus.sync_gmt = o->value(); } static void cb_btn_xcvr_synch_now( Fl_Button *o, void *) { synchronize_now(); } //static void cb_kxpa_enabled(Fl_Check_Button* o, void *) { // progStatus.kxpa = o->value(); //} void exec_btnUser( int val, bool shift) { if (shift) { switch (val) { case 1: cb_send_command(progStatus.shftcmd1, cmdResponse); break; case 2: cb_send_command(progStatus.shftcmd2, cmdResponse); break; case 3: cb_send_command(progStatus.shftcmd3, cmdResponse); break; case 4: cb_send_command(progStatus.shftcmd4, cmdResponse); break; case 5: cb_send_command(progStatus.shftcmd5, cmdResponse); break; case 6: cb_send_command(progStatus.shftcmd6, cmdResponse); break; case 7: cb_send_command(progStatus.shftcmd7, cmdResponse); break; case 8: cb_send_command(progStatus.shftcmd8, cmdResponse); break; case 9: cb_send_command(progStatus.shftcmd9, cmdResponse); break; case 10: cb_send_command(progStatus.shftcmd10, cmdResponse); break; case 11: cb_send_command(progStatus.shftcmd11, cmdResponse); break; case 12: cb_send_command(progStatus.shftcmd12, cmdResponse); break; case 13: cb_send_command(progStatus.shftcmd13, cmdResponse); break; case 14: cb_send_command(progStatus.shftcmd14, cmdResponse); break; case 15: cb_send_command(progStatus.shftcmd15, cmdResponse); break; case 16: cb_send_command(progStatus.shftcmd16, cmdResponse); break; case 17: cb_send_command(progStatus.shftcmd17, cmdResponse); break; case 18: cb_send_command(progStatus.shftcmd18, cmdResponse); break; case 19: cb_send_command(progStatus.shftcmd19, cmdResponse); break; case 20: cb_send_command(progStatus.shftcmd20, cmdResponse); break; case 21: cb_send_command(progStatus.shftcmd21, cmdResponse); break; case 22: cb_send_command(progStatus.shftcmd22, cmdResponse); break; case 23: cb_send_command(progStatus.shftcmd23, cmdResponse); break; case 24: cb_send_command(progStatus.shftcmd24, cmdResponse); break; } } else { switch (val) { case 1: cb_send_command(progStatus.command1, cmdResponse); break; case 2: cb_send_command(progStatus.command2, cmdResponse); break; case 3: cb_send_command(progStatus.command3, cmdResponse); break; case 4: cb_send_command(progStatus.command4, cmdResponse); break; case 5: cb_send_command(progStatus.command5, cmdResponse); break; case 6: cb_send_command(progStatus.command6, cmdResponse); break; case 7: cb_send_command(progStatus.command7, cmdResponse); break; case 8: cb_send_command(progStatus.command8, cmdResponse); break; case 9: cb_send_command(progStatus.command9, cmdResponse); break; case 10: cb_send_command(progStatus.command10, cmdResponse); break; case 11: cb_send_command(progStatus.command11, cmdResponse); break; case 12: cb_send_command(progStatus.command12, cmdResponse); break; case 13: cb_send_command(progStatus.command13, cmdResponse); break; case 14: cb_send_command(progStatus.command14, cmdResponse); break; case 15: cb_send_command(progStatus.command15, cmdResponse); break; case 16: cb_send_command(progStatus.command16, cmdResponse); break; case 17: cb_send_command(progStatus.command17, cmdResponse); break; case 18: cb_send_command(progStatus.command18, cmdResponse); break; case 19: cb_send_command(progStatus.command19, cmdResponse); break; case 20: cb_send_command(progStatus.command20, cmdResponse); break; case 21: cb_send_command(progStatus.command21, cmdResponse); break; case 22: cb_send_command(progStatus.command22, cmdResponse); break; case 23: cb_send_command(progStatus.command23, cmdResponse); break; case 24: cb_send_command(progStatus.command24, cmdResponse); break; } } } static void cb_btnUser( Fl_Button * o, void *d) { size_t val = reinterpret_cast(d); bool shift = (((Fl::event_state() & FL_SHIFT) == FL_SHIFT) || (Fl::event_button() == FL_RIGHT_MOUSE)); exec_btnUser(val, shift); } static void cb_digi_sel_on_off(Fl_Light_Button *o, void *d) { progStatus.digi_sel_on_off = o->value(); digi_sel_on_off(); } static void cb_digi_sel_val(Fl_Wheel_Value_Slider *o, void *d) { progStatus.digi_sel_val = o->value(); digi_sel_val(); } static void cb_dual_watch(Fl_Light_Button *o, void *d) { progStatus.dual_watch = o->value(); dual_watch(); } static void cb_ic7610_att(Fl_ComboBox *o, void *d) { progStatus.index_ic7610att = o->index(); index_att(); } //static void cb_cbo_attenuator(Fl_ComboBox *o, void *d) { // progStatus.attenuator = o->index(); // guard_lock serial(&mutex_serial); // selrig->set_attenuator(progStatus.attenuator); //} static void cb_cbo_preamp(Fl_ComboBox *o, void *d) { progStatus.preamp = o->index(); guard_lock serial(&mutex_serial); selrig->set_preamp(progStatus.preamp); } static void cb_cntRIT(Hspinner*, void*) { cbRIT(); } static void cb_cntXIT(Hspinner*, void*) { cbXIT(); } static void cb_cntBFO(Hspinner*, void*) { cbBFO(); } static void cb_btnAuxRTS(Fl_Light_Button* o, void*) { progStatus.aux_rts = o->value(); cbAuxPort(); } static void cb_btnAuxDTR(Fl_Light_Button* o, void*) { progStatus.aux_dtr = o->value(); cbAuxPort(); } static void cb_btnDataPort(Fl_Light_Button* o, void*) { progStatus.data_port = o->value(); if (o->value()) btnDataPort->label("Data"); else btnDataPort->label("Mic"); btnDataPort->redraw_label(); selrig->set_data_port(); } static void cb_spnr_tt550_cw_wpm(Hspinner* o, void*) { progStatus.tt550_cw_wpm = (int)o->value(); cb_tt550_cw_wpm(); } static void cb_spnr_tt550_cw_weight(Hspinner* o, void*) { progStatus.tt550_cw_weight = o->value(); cb_tt550_cw_weight(); } static void cb_spnr_tt550_cw_qsk(Hspinner* o, void*) { progStatus.tt550_cw_qsk = (int)o->value(); cb_tt550_cw_qsk(); } static void cb_spnr_tt550_cw_vol(Hspinner* o, void*) { progStatus.tt550_cw_vol=(int)o->value(); cb_tt550_cw_vol(); } static void cb_spnr_tt550_cw_spot(Hspinner* o, void*) { progStatus.tt550_cw_spot=(int)o->value(); cb_tt550_cw_spot(); } static void cb_btn_tt550_enable_keyer(Fl_Check_Button* o, void*) { progStatus.tt550_enable_keyer=o->value(); cb_tt550_enable_keyer(); } static void cb_spnr_tt550_vox_gain(Hspinner* o, void*) { progStatus.tt550_vox_gain=(int)o->value(); cb_tt550_vox_gain(); } static void cb_spnr_tt550_anti_vox(Hspinner* o, void*) { progStatus.tt550_vox_anti=(int)o->value(); cb_tt550_vox_anti(); } static void cb_spnr_tt550_vox_hang(Hspinner* o, void*) { progStatus.tt550_vox_hang = (int)o->value(); cb_tt550_vox_hang(); } static void cb_btn_tt550_vox(Fl_Light_Button* o, void*) { progStatus.tt550_vox_onoff=o->value(); cb_tt550_vox_onoff(); } static void cb_btn_tt550_CompON(Fl_Light_Button* o, void*) { progStatus.tt550_compON=o->value(); cb_tt550_compression(); } static void cb_spnr_tt550_compression(Hspinner* o, void*) { progStatus.tt550_compression=(int)o->value(); cb_tt550_compression(); } static void cb_spnr_tt550_mon_vol(Hspinner* o, void*) { progStatus.tt550_mon_vol=(int)o->value(); cb_tt550_mon_vol(); } static void cb_spnr_tt550_line_out(Hspinner* o, void*) { progStatus.tt550_line_out = (int)o->value(); cb_tt550_line_out(); } static void cb_btnAccInp(Fl_Check_Button* o, void*) { progStatus.tt550_use_line_in=o->value(); cb_tt550_use_line_in(); } static void cb_cbo_tt550_nb_level(Fl_ComboBox* o, void*) { progStatus.tt550_nb_level = o->index(); cb_tt550_nb_level(); } static void cb_cbo_tt550_agc_level(Fl_ComboBox* o, void*) { progStatus.tt550_agc_level = o->index(); cb_tt550_agc_level(); } static void cb_spnr_tt550_vfo_adj(Hspinner* o, void*) { progStatus.vfo_adj=o->value(); cb_vfo_adj(); } static void cb_btn_tt550_enable_xmtr(Fl_Check_Button* o, void*) { progStatus.tt550_enable_xmtr=o->value(); cb_tt550_enable_xmtr(); } static void cb_btn_tt550_enable_tloop(Fl_Check_Button* o, void*) { progStatus.tt550_enable_tloop=o->value(); cb_tt550_enable_tloop(); } static void cb_btn_tt550_tuner_bypass(Fl_Check_Button* o, void*) { progStatus.tt550_tuner_bypass=o->value(); cb_tt550_tuner_bypass(); } static void cb_op_tt550_XmtBW(Fl_ComboBox* o, void*) { progStatus.tt550_xmt_bw = o->index(); cb_tt550_setXmtBW(); } static void cb_btn_tt550_use_xmt_bw(Fl_Check_Button* o, void*) { progStatus.tt550_use_xmt_bw = o->value(); cb_tt550_setXmtBW(); } static void cb_spnr_tt550_keypad_time_out(Hspinner* o, void*) { progStatus.tt550_keypad_timeout=(int)(o->value()*1000.0); } static void cb_spnr_tt550_encoder_sensitivity(Hspinner* o, void*) { progStatus.tt550_encoder_sensitivity = o->value(); } static void cb_sel_tt550_encoder_step(Fl_Choice* o, void*) { progStatus.tt550_encoder_step = o->value(); } static void cb_sel_tt550_F1_func(Fl_Choice* o, void*) { progStatus.tt550_F1_func = o->value(); } static void cb_sel_tt550_F2_func(Fl_Choice* o, void*) { progStatus.tt550_F2_func = o->value(); } static void cb_sel_tt550_F3_func(Fl_Choice* o, void*) { progStatus.tt550_F3_func = o->value(); } static void cb_AT_bypass(Fl_Light_Button *btn, void*) { if (!btn->value()) { progStatus.tt550_at11_inline = false; tt550_AT_inline->label("Bypassed"); tt550_AT_inline->redraw_label(); selrig->at11_bypass(); } else { progStatus.tt550_at11_inline = true; tt550_AT_inline->label("Inline"); tt550_AT_inline->redraw_label(); selrig->at11_autotune(); } } static void cb_AT_Z(Fl_Light_Button *btn, void*) { if (btn->value()) selrig->at11_hiZ(); else selrig->at11_loZ(); } static void cb_AT_capUP(Fl_Button*, void*) { selrig->at11_cap_up(); } static void cb_AT_capDN(Fl_Button*, void*) { selrig->at11_cap_dn(); } static void cb_AT_indUP(Fl_Button*, void*) { selrig->at11_ind_up(); } static void cb_AT_indDN(Fl_Button*, void*) { selrig->at11_ind_dn(); } static void cb_tt550_Nsamples(Fl_Simple_Counter *, void *) { progStatus.tt550_Nsamples = tt550_Nsamples->value(); } static void cb_tabsGeneric(Fl_Widget *, void *) { progStatus.visible_tab = (tabsGeneric->value())->label(); } Fl_Menu_Item *getMenuItem(const char *caption, Fl_Menu_Item* menu = 0) { if (menu == 0) { return (Fl_Menu_Item*)0; } int size = menu->size() - 1; Fl_Menu_Item *item = 0; const char* label; for (int i = 0; i < size; i++) { label = menu[i].text; if (label && !strcmp(label, caption)) { item = menu + i; break; } } return item; } int PL_tones[] = { 670, 693, 719, 744, 770, 797, 825, 854, 885, 915, 948, 974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273, 1318, 1365, 1413, 1462, 1514, 1567, 1598, 1622, 1655, 1679, 1713, 1738, 1773, 1799, 1835, 1862, 1899, 1928, 1966, 1995, 2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418, 2503, 2541 }; void cb_tones(Fl_Button *b, void *) { int tTONE = PL_tones[choice_FT8n_tTONE->value()]; int rTONE = PL_tones[choice_FT8n_rTONE->value()]; guard_lock serial(&mutex_serial); selrig->set_tones(tTONE, rTONE); } void cb_offset(Fl_Button *b, void*) { guard_lock serial(&mutex_serial); selrig->set_offset(FMoffset->index(), FMoff_freq->value()); } #include "ui_small.cxx" #include "ui_wide.cxx" #include "ui_touch.cxx" #include "ui_setup.cxx" #include "ui_memory.cxx" #include "xcvr_setup.cxx" #include "meters_setup.cxx" #include "power_meter_setup.cxx" flrig-2.0.04/src/UI/ui_setup.cxx0000664000175000017500000004245714505121263013323 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- Fl_Check_Button *btn_wide_ui = (Fl_Check_Button *)0; Fl_Check_Button *btn_narrow_ui = (Fl_Check_Button *)0; Fl_Check_Button *btn_touch_ui = (Fl_Check_Button *)0; Fl_Box *lblTest = (Fl_Box *)0; Fl_Button *prefFont = (Fl_Button *)0; Fl_Button *prefForeground = (Fl_Button *)0; Fl_Button *btnBacklight = (Fl_Button *)0; Fl_Group *grpMeterColor = (Fl_Group *)0; Fl_Box *scaleSmeterColor = (Fl_Box *)0; Fl_SigBar *sldrRcvSignalColor = (Fl_SigBar *)0; Fl_SigBar *sldrSWRcolor = (Fl_SigBar *)0; Fl_Box *scaleSWRcolor = (Fl_Box *)0; Fl_SigBar *sldrPWRcolor = (Fl_SigBar *)0; Fl_Box *scalePWRcolor = (Fl_Box *)0; Fl_SigBar *sldrVoltcolor = (Fl_SigBar *)0; Fl_Box *scaleVoltcolor = (Fl_Box *)0; Fl_Button *btMeterColor = (Fl_Button *)0; Fl_Button *btnSWRColor = (Fl_Button *)0; Fl_Button *btnPwrColor = (Fl_Button *)0; Fl_Button *btnPeakColor = (Fl_Button *)0; Fl_Button *btnVoltsColor = (Fl_Button *)0; Fl_Choice *mnuScheme = (Fl_Choice *)0; Fl_Button *pref_sys_foreground = (Fl_Button *)0; Fl_Button *pref_sys_background = (Fl_Button *)0; Fl_Button *prefsys_background2 = (Fl_Button *)0; Fl_Button *prefsys_defaults = (Fl_Button *)0; Fl_Wheel_Value_Slider *sldrColors = (Fl_Wheel_Value_Slider *)0; Fl_Button *pref_slider_background = (Fl_Button *)0; Fl_Button *pref_slider_select = (Fl_Button *)0; Fl_Button *prefslider_defaults = (Fl_Button *)0; Fl_Button *btnReset = (Fl_Button *)0; Fl_Button *btnCancel = (Fl_Button *)0; Fl_Return_Button *btnOkDisplayDialog = (Fl_Return_Button *)0; Fl_Light_Button *btn_lighted = (Fl_Light_Button *)0; Fl_Button *btn_lighted_default = (Fl_Button *)0; Fl_Check_Button *chk_hrd_button = (Fl_Check_Button *)0; Fl_Check_Button *chk_sliders_button = (Fl_Check_Button *)0; Fl_Button *btn_tab_color = (Fl_Button *)0; Fl_Button *btn_tab_defcolor = (Fl_Button *)0; static void cb_btn_ui(Fl_Check_Button* o, void*) { if (o == btn_wide_ui) { progStatus.UIsize = wide_ui; btn_narrow_ui->value(0); btn_touch_ui->value(0); } else if (o == btn_narrow_ui) { progStatus.UIsize = small_ui; btn_wide_ui->value(0); btn_touch_ui->value(0); } else if (o == btn_touch_ui) { progStatus.UIsize = touch_ui; btn_wide_ui->value(0); btn_narrow_ui->value(0); } progStatus.UIchanged = true; } static void cb_prefFont(Fl_Button*, void*) { cbPrefFont(); } static void cb_prefForeground(Fl_Button*, void*) { cbPrefForeground(); } static void cb_btnBacklight(Fl_Button*, void*) { cbBacklightColor(); } static void cb_btMeterColor(Fl_Button*, void*) { cbSMeterColor(); } static void cb_btnSWRColor(Fl_Button*, void*) { cbSWRMeterColor(); } static void cb_btnPwrColor(Fl_Button*, void*) { cbPwrMeterColor(); } static void cb_btnPeakColor(Fl_Button*, void*) { cbPeakMeterColor(); } static void cb_btnVoltColor(Fl_Button*, void*) { cbVoltMeterColor(); } static void cb_mnuScheme(Fl_Choice* o, void*) { progStatus.ui_scheme = o->text(); Fl::scheme(progStatus.ui_scheme.c_str()); } static void cb_pref_sys_foreground(Fl_Button*, void*) { cb_sys_foreground(); } static void cb_pref_sys_background(Fl_Button*, void*) { cb_sys_background(); } static void cb_prefsys_background2(Fl_Button*, void*) { cb_sys_background2(); } static void cb_prefsys_defaults(Fl_Button*, void*) { cb_sys_defaults(); } static void cb_pref_slider_background(Fl_Button*, void*) { cb_slider_background(); } static void cb_pref_slider_select(Fl_Button*, void*) { cb_slider_select(); } static void cb_prefslider_defaults(Fl_Button*, void*) { cb_slider_defaults(); } static void cb_btnReset(Fl_Button*, void*) { cb_reset_display_dialog(); } static void cb_btnCancel(Fl_Button*, void*) { cbCancelDisplayDialog(); } static void cb_btnOkDisplayDialog(Fl_Return_Button*, void*) { cbOkDisplayDialog(); } static void cb_btn_lighted(Fl_Light_Button*, void*) { cb_lighted_button(); } static void cb_btn_lighted_default(Fl_Button*, void*) { cb_lighted_default(); } static void cb_hrd_button(Fl_Check_Button*, void*) { cb_change_hrd_button(); } static void cb_sliders_button(Fl_Check_Button*, void*) { cb_change_sliders_button(); } static void cb_btn_tab_color(Fl_Button *, void*) { cb_tab_colors(); } static void cb_btn_tab_defcolor(Fl_Button *, void*) { cb_tab_defaults(); } Fl_Double_Window* DisplayDialog() { Fl_Double_Window* w = new Fl_Double_Window(424, 280, _("Flrig User Interface")); Fl_Group* su_grp1 = new Fl_Group(2, 2, 420, 40, _("Main Dialog Aspect Ratio (change requires restart)")); su_grp1->box(FL_ENGRAVED_FRAME); su_grp1->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE)); btn_narrow_ui = new Fl_Check_Button( su_grp1->w()/2 - 160, 20, 100, 18, _("Narrow UI")); btn_narrow_ui->callback((Fl_Callback*)cb_btn_ui); btn_narrow_ui->value(progStatus.UIsize == small_ui); btn_wide_ui = new Fl_Check_Button( btn_narrow_ui->x() + 110, 20, 100, 18, _("Wide UI")); btn_wide_ui->callback((Fl_Callback*)cb_btn_ui); btn_wide_ui->value(progStatus.UIsize == wide_ui); btn_touch_ui = new Fl_Check_Button( btn_wide_ui->x() + 110, 20, 100, 18, _("Touch UI")); btn_touch_ui->callback((Fl_Callback*)cb_btn_ui); btn_touch_ui->value(progStatus.UIsize == touch_ui); su_grp1->end(); Fl_Group* su_grp_hrd = new Fl_Group( su_grp1->x(), su_grp1->y() + su_grp1->h(), su_grp1->w(), 30); su_grp_hrd->box(FL_ENGRAVED_FRAME); chk_hrd_button = new Fl_Check_Button( 10, su_grp_hrd->y() + su_grp_hrd->h()/2 - 10, 50, 20, _("Freq top/bottom left click")); chk_hrd_button->value(progStatus.hrd_buttons); chk_hrd_button->callback((Fl_Callback*)cb_hrd_button); chk_hrd_button->tooltip(_("Off - left/right click paradigm")); chk_sliders_button = new Fl_Check_Button( su_grp_hrd->w() / 2, su_grp_hrd->y() + su_grp_hrd->h()/2 - 10, 50, 20, _("Xcvr follows slider drag")); chk_sliders_button->value(progStatus.hrd_buttons); chk_sliders_button->callback((Fl_Callback*)cb_sliders_button); chk_sliders_button->value(progStatus.sliders_button == FL_WHEN_CHANGED); chk_sliders_button->tooltip(_("ON send all slider changes to xcvr\nOFF wait for slider control release")); su_grp_hrd->end(); Fl_Group* su_grp2 = new Fl_Group( 2, su_grp_hrd->y() + su_grp_hrd->h(), 218, 70); su_grp2->box(FL_ENGRAVED_FRAME); Fl_Group* su_grp2a = new Fl_Group( 5, su_grp2->y() + 2, 210, 35); su_grp2a->box(FL_DOWN_BOX); lblTest = new Fl_Box( su_grp2a->x() + 2, su_grp2a->y() + 2, 206, 31, _("14070.000")); lblTest->box(FL_FLAT_BOX); lblTest->labelfont(progStatus.fontnbr); lblTest->labelsize(32); su_grp2a->end(); prefFont = new Fl_Button( 10, lblTest->y() + lblTest->h() + 4, 60, 22, _("Font")); prefFont->callback((Fl_Callback*)cb_prefFont); prefForeground = new Fl_Button( 78, prefFont->y(), 60, 22, _("Color")); prefForeground->callback((Fl_Callback*)cb_prefForeground); btnBacklight = new Fl_Button( 146, prefFont->y(), 60, 22, _("Back")); btnBacklight->callback((Fl_Callback*)cb_btnBacklight); su_grp2->end(); Fl_Group* su_grp3 = new Fl_Group( 0, su_grp2->y() + su_grp2->h(), 284, 135); grpMeterColor = new Fl_Group( 4, su_grp3->y() + 2, 210, 110); grpMeterColor->box(FL_DOWN_BOX); grpMeterColor->color(scaleSmeter->color()); scaleSmeterColor = new Fl_Box( grpMeterColor->x() + 2, grpMeterColor->y(), 205, 20); scaleSmeterColor->box(FL_FLAT_BOX); scaleSmeterColor->image(image_S60); scaleSmeterColor->color(scaleSmeter->color()); sldrRcvSignalColor = new Fl_SigBar( grpMeterColor->x() + 4, scaleSmeterColor->y() + 20, 200, 4); sldrRcvSignalColor->box(FL_FLAT_BOX); sldrRcvSignalColor->color(FL_BACKGROUND_COLOR); sldrRcvSignalColor->selection_color(FL_BACKGROUND_COLOR); sldrRcvSignalColor->labeltype(FL_NORMAL_LABEL); sldrRcvSignalColor->labelfont(0); sldrRcvSignalColor->labelsize(14); sldrRcvSignalColor->labelcolor(FL_FOREGROUND_COLOR); sldrRcvSignalColor->align(Fl_Align(FL_ALIGN_CENTER)); sldrRcvSignalColor->when(FL_WHEN_RELEASE); sldrRcvSignalColor->minimum(0); sldrRcvSignalColor->maximum(100); sldrRcvSignalColor->avg(1); sldrRcvSignalColor->value(25); scaleSWRcolor = new Fl_Box( grpMeterColor->x() + 2, sldrRcvSignalColor->y() + 6, 205, 20); scaleSWRcolor->box(FL_FLAT_BOX); scaleSWRcolor->image(image_SWR); scaleSWRcolor->color(scaleSmeter->color()); sldrSWRcolor = new Fl_SigBar( grpMeterColor->x() + 4, scaleSWRcolor->y() + 20, 200, 4); sldrSWRcolor->box(FL_FLAT_BOX); sldrSWRcolor->color(FL_BACKGROUND_COLOR); sldrSWRcolor->selection_color(FL_BACKGROUND_COLOR); sldrSWRcolor->labeltype(FL_NORMAL_LABEL); sldrSWRcolor->labelfont(0); sldrSWRcolor->labelsize(14); sldrSWRcolor->labelcolor(FL_FOREGROUND_COLOR); sldrSWRcolor->align(Fl_Align(FL_ALIGN_CENTER)); sldrSWRcolor->when(FL_WHEN_RELEASE); sldrSWRcolor->minimum(0); sldrSWRcolor->maximum(100); sldrSWRcolor->avg(1); sldrSWRcolor->value(30); sldrPWRcolor = new Fl_SigBar( grpMeterColor->x() + 4, sldrSWRcolor->y() + 6, 200, 4); sldrPWRcolor->box(FL_FLAT_BOX); sldrPWRcolor->color(FL_BACKGROUND_COLOR); sldrPWRcolor->selection_color(FL_BACKGROUND_COLOR); sldrPWRcolor->labeltype(FL_NORMAL_LABEL); sldrPWRcolor->labelfont(0); sldrPWRcolor->labelsize(14); sldrPWRcolor->labelcolor(FL_FOREGROUND_COLOR); sldrPWRcolor->align(Fl_Align(FL_ALIGN_CENTER)); sldrPWRcolor->when(FL_WHEN_RELEASE); sldrPWRcolor->minimum(0); sldrPWRcolor->maximum(100); sldrPWRcolor->avg(1); sldrPWRcolor->value(40); scalePWRcolor = new Fl_Box( grpMeterColor->x() + 2, sldrPWRcolor->y() + 6, 205, 20); scalePWRcolor->box(FL_FLAT_BOX); scalePWRcolor->image(image_P100); scalePWRcolor->color(scaleSmeter->color()); sldrVoltcolor = new Fl_SigBar( grpMeterColor->x() + 4, scalePWRcolor->y() + 20, 200, 4); sldrVoltcolor->box(FL_FLAT_BOX); sldrVoltcolor->color(FL_BACKGROUND_COLOR); sldrVoltcolor->selection_color(FL_BACKGROUND_COLOR); sldrVoltcolor->labeltype(FL_NORMAL_LABEL); sldrVoltcolor->labelfont(0); sldrVoltcolor->labelsize(14); sldrVoltcolor->labelcolor(FL_FOREGROUND_COLOR); sldrVoltcolor->align(Fl_Align(FL_ALIGN_CENTER)); sldrVoltcolor->when(FL_WHEN_RELEASE); sldrVoltcolor->minimum(0); sldrVoltcolor->maximum(100); sldrVoltcolor->avg(1); sldrVoltcolor->value(55); scaleVoltcolor = new Fl_Box( grpMeterColor->x() + 2, sldrVoltcolor->y() + 6, 205, 20); scaleVoltcolor->box(FL_FLAT_BOX); scaleVoltcolor->image(image_voltmeter); scaleVoltcolor->color(scaleSmeter->color()); grpMeterColor->end(); btMeterColor = new Fl_Button( grpMeterColor->x() + grpMeterColor->w() + 5, grpMeterColor->y(), 60, 22, _("Smeter")); btMeterColor->callback((Fl_Callback*)cb_btMeterColor); btnSWRColor = new Fl_Button( btMeterColor->x(), btMeterColor->y() + btMeterColor->h() + 4, 60, 22, _("SWR")); btnSWRColor->callback((Fl_Callback*)cb_btnSWRColor); btnPwrColor = new Fl_Button( btnSWRColor->x(), btnSWRColor->y() + btnSWRColor->h() + 4, 60, 22, _("Pwr")); btnPwrColor->callback((Fl_Callback*)cb_btnPwrColor); btnPeakColor = new Fl_Button( btnPwrColor->x(), btnPwrColor->y() + btnPwrColor->h() + 4, 60, 22, _("Peak")); btnPeakColor->callback((Fl_Callback*)cb_btnPeakColor); btnVoltsColor = new Fl_Button( btnPwrColor->x(), btnPeakColor->y() + btnPwrColor->h() + 4, 60, 22, _("Volts")); btnVoltsColor->callback((Fl_Callback*)cb_btnVoltColor); su_grp3->end(); Fl_Group* su_grp4 = new Fl_Group( su_grp2->x() + su_grp2->w() + 2, su_grp2->y(), 202, 70, _("System")); su_grp4->box(FL_ENGRAVED_FRAME); su_grp4->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE)); mnuScheme = new Fl_Choice( su_grp4->x() + 8, su_grp4->y() + 20, 80, 22, _("UI")); mnuScheme->tooltip(_("Change application look and feel")); mnuScheme->down_box(FL_BORDER_BOX); mnuScheme->callback((Fl_Callback*)cb_mnuScheme); mnuScheme->align(Fl_Align(FL_ALIGN_RIGHT)); mnuScheme->add("base"); mnuScheme->add("gtk+"); mnuScheme->add("plastic"); mnuScheme->add("gleam"); mnuScheme->value(mnuScheme->find_item(progStatus.ui_scheme.c_str())); pref_sys_foreground = new Fl_Button( mnuScheme->x(), mnuScheme->y() + mnuScheme->h() + 2, 60, 22, _("Fgnd")); pref_sys_foreground->tooltip(_("Label color")); pref_sys_foreground->callback((Fl_Callback*)cb_pref_sys_foreground); pref_sys_background = new Fl_Button( pref_sys_foreground->x() + pref_sys_foreground->w() + 2, pref_sys_foreground->y(), 60, 22, _("Bngd")); pref_sys_background->tooltip(_("Background - normal")); pref_sys_background->callback((Fl_Callback*)cb_pref_sys_background); prefsys_background2 = new Fl_Button( pref_sys_background->x() + pref_sys_background->w() + 2, pref_sys_background->y(), 60, 22, _("Bgnd2")); prefsys_background2->tooltip(_("Background - selected")); prefsys_background2->callback((Fl_Callback*)cb_prefsys_background2); prefsys_defaults = new Fl_Button( prefsys_background2->x(), mnuScheme->y(), 60, 22, _("Default")); prefsys_defaults->tooltip(_("Background - selected")); prefsys_defaults->callback((Fl_Callback*)cb_prefsys_defaults); su_grp4->end(); Fl_Group* su_grp5 = new Fl_Group( su_grp3->x() + su_grp3->w() + 2, su_grp3->y(), 134, 80); su_grp5->box(FL_ENGRAVED_FRAME); sldrColors = new Fl_Wheel_Value_Slider( su_grp5->x() + 4, su_grp5->y() + 4, 125, 20); sldrColors->tooltip(_("Adjust power level")); sldrColors->type(5); sldrColors->box(FL_THIN_DOWN_BOX); sldrColors->color(FL_BACKGROUND_COLOR); sldrColors->selection_color(FL_BACKGROUND_COLOR); sldrColors->labeltype(FL_NORMAL_LABEL); sldrColors->labelfont(0); sldrColors->labelsize(14); sldrColors->labelcolor(FL_FOREGROUND_COLOR); sldrColors->maximum(100); sldrColors->step(1); sldrColors->value(15); sldrColors->textsize(12); sldrColors->align(Fl_Align(FL_ALIGN_CENTER)); sldrColors->when(FL_WHEN_CHANGED); sldrColors->reverse(true); pref_slider_background = new Fl_Button( sldrColors->x(), sldrColors->y() + sldrColors->h() + 4, 60, 20, _("Bngd")); pref_slider_background->tooltip(_("Background - normal")); pref_slider_background->callback((Fl_Callback*)cb_pref_slider_background); pref_slider_select = new Fl_Button( pref_slider_background->x() + pref_slider_background->w() + 3, pref_slider_background->y(), 60, 20, _("Button")); pref_slider_select->tooltip(_("Background - normal")); pref_slider_select->callback((Fl_Callback*)cb_pref_slider_select); prefslider_defaults = new Fl_Button( pref_slider_background->x() + pref_slider_background->w()/2, pref_slider_select->y() + pref_slider_select->h() + 4, 60, 20, _("Default")); prefslider_defaults->tooltip(_("Background - selected")); prefslider_defaults->callback((Fl_Callback*)cb_prefslider_defaults); su_grp5->end(); btnReset = new Fl_Button( grpMeterColor->x() + 2, grpMeterColor->y() + grpMeterColor->h() + 3, 60, 20, _("Reset")); btnReset->tooltip(_("Restore all flrig defaults")); btnReset->callback((Fl_Callback*)cb_btnReset); btnCancel = new Fl_Button( btnReset->x() + btnReset->w() + 4, btnReset->y(), 60, 20, _("Cancel")); btnCancel->tooltip(_("Discard current changes")); btnCancel->callback((Fl_Callback*)cb_btnCancel); btnOkDisplayDialog = new Fl_Return_Button( btnCancel->x() + btnCancel->w() + 4, btnReset->y(), 60, 20, _("OK")); btnOkDisplayDialog->tooltip(_("Save Current Changes")); btnOkDisplayDialog->callback((Fl_Callback*)cb_btnOkDisplayDialog); Fl_Group* su_grp6 = new Fl_Group( su_grp5->x(), su_grp5->y() + su_grp5->h(), 134, 28); su_grp6->box(FL_ENGRAVED_FRAME); btn_lighted = new Fl_Light_Button( su_grp6->x() + 5, su_grp6->y() + 4, 60, 20, _("Lt Btn")); btn_lighted->callback((Fl_Callback*)cb_btn_lighted); btn_lighted_default = new Fl_Button( btn_lighted->x() + btn_lighted->w() + 2, btn_lighted->y(), 60, 20, _("Default")); btn_lighted_default->tooltip(_("Background - selected")); btn_lighted_default->callback((Fl_Callback*)cb_btn_lighted_default); su_grp6->end(); Fl_Group* su_grp7 = new Fl_Group( su_grp6->x(), su_grp6->y() + su_grp6->h(), su_grp6->w(), 28); su_grp7->box(FL_ENGRAVED_FRAME); btn_tab_color = new Fl_Button( su_grp7->x() + 5, su_grp7->y() + 4, 60, 20, _("Tab Clr")); btn_tab_color->color( fl_rgb_color(progStatus.tab_red, progStatus.tab_green, progStatus.tab_blue)); btn_tab_color->callback((Fl_Callback *)cb_btn_tab_color); btn_tab_defcolor = new Fl_Button( btn_tab_color->x() + btn_tab_color->w() + 5, btn_tab_color->y(), 60, 20, _("Def Clr")); btn_tab_defcolor->callback((Fl_Callback *)cb_btn_tab_defcolor); su_grp7->end(); w->end(); w->position( progStatus.ddX, progStatus.ddY ); return w; } flrig-2.0.04/src/UI/K3_ui.cxx0000664000175000017500000000562614504050407012435 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include #include "support.h" #include "debug.h" #include "gettext.h" #include "rig_io.h" #include "dialogs.h" #include "rigbase.h" #include "ptt.h" #include "rigs.h" #include "K3_ui.h" extern std::queue queA; extern std::queue queB; void read_K3_vfo() { unsigned long long freq; freq = selrig->get_vfoA(); if (freq != vfoA.freq) { vfoA.freq = freq; Fl::awake(setFreqDispA); vfo = &vfoA; } freq = selrig->get_vfoB(); if (freq != vfoB.freq) { vfoB.freq = freq; Fl::awake(setFreqDispB); } } void read_K3_mode() { int nu_mode; nu_mode = selrig->get_modeA(); if (nu_mode != vfoA.imode) { vfoA.imode = vfo->imode = nu_mode; selrig->set_bwA(vfo->iBW = selrig->adjust_bandwidth(nu_mode)); Fl::awake(setModeControl); Fl::awake(updateBandwidthControl); } nu_mode = selrig->get_modeB(); if (nu_mode != vfoB.imode) { vfoB.imode = nu_mode; } } //void read_K3_bw() //{ // int nu_BW; // nu_BW = selrig->get_bwA(); // if (nu_BW != vfoA.iBW) { // vfoA.iBW = vfo->iBW = nu_BW; // Fl::awake(setBWControl); // } // nu_BW = selrig->get_bwB(); // if (nu_BW != vfoB.iBW) { // vfoB.iBW = nu_BW; // } //} void K3_set_split(int val) { guard_lock serial_lock(&mutex_serial); selrig->set_split(val); } void K3_A2B() { guard_lock serial_lock(&mutex_serial); vfoB = vfoA; selrig->set_vfoB(vfoB.freq); selrig->set_bwB(vfoB.iBW); selrig->set_modeB(vfoB.imode); FreqDispB->value(vfoB.freq); } void cb_K3_swapAB() { guard_lock serial_lock(&mutex_serial); XCVR_STATE temp = vfoA; vfoA = vfoB; vfoB = temp; selrig->set_vfoB(vfoB.freq); selrig->set_bwB(vfoB.iBW); selrig->set_modeB(vfoB.imode); FreqDispB->value(vfoB.freq); selrig->set_vfoA(vfoA.freq); selrig->set_bwA(vfoA.iBW); selrig->set_modeA(vfoA.imode); opBW->index(vfoA.iBW); opMODE->index(vfoA.imode); FreqDispA->value(vfoA.freq); vfo = &vfoA; } flrig-2.0.04/src/UI/ui_bitmaps.cxx0000664000175000017500000002632714505017144013622 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include static unsigned char idata_S60[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,195,1,0,0,28, 14,0,0,14,7,0,0,28,14,0,0,0,113,0,0,28,7,0,0,0,64,36,2,0,0,34,17,0,0,145,8,0,0, 34,17,0,0,128,137,0,0,162,8,0,0,0,64,0,2,0,0,2,1,0,0,129,8,0,0,32,17,0,0,128, 137,0,32,130,8,0,0,0,64,0,2,0,0,2,1,0,0,129,8,0,64,32,17,0,0,66,137,0,32,130,8, 0,0,0,128,131,1,0,0,28,15,0,0,14,15,0,64,16,17,0,0,66,137,0,248,158,8,0,0,0,0, 4,2,0,0,32,17,0,0,16,8,0,240,9,17,0,128,47,137,0,32,162,8,0,0,0,0,4,2,0,0,32, 17,0,0,16,8,0,64,4,17,0,0,226,139,0,32,162,8,0,0,0,64,36,2,0,0,34,17,0,0,145,8, 0,64,2,17,0,0,2,137,0,0,162,8,0,0,0,128,195,1,0,0,28,14,0,0,14,7,0,0,62,14,0, 0,0,113,0,0,28,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, 16,0,0,0,128,0,0,0,64,0,0,0,128,0,0,0,0,4,0,0,0,4,4,0,0,0,16,0,0,0,128,0,0,0, 64,0,0,0,128,0,0,0,0,4,0,0,0,4,4,32,0,2,16,0,1,8,128,0,2,8,64,0,64,0,128,0,0,1, 0,4,0,8,0,4,4,32,0,2,16,0,1,8,128,0,2,8,64,0,64,0,128,0,0,1,0,4,0,8,0,4,4,32, 0,2,16,0,1,8,128,0,2,8,64,0,64,0,128,0,0,1,0,4,0,8,0,4,4,32,0,2,16,0,1,8,128, 0,2,8,64,0,64,0,128,0,0,1,0,4,0,8,0,4,252,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,7}; static Fl_Bitmap image_S60(idata_S60, 205, 18); static unsigned char idata_SWR[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,240,1,0,14,0,0, 0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,192,16,0,0,17,0,0,0,0,0,17,0,0,0,0,0, 0,0,0,0,0,0,0,0,136,0,128,16,0,0,16,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8, 0,128,240,0,0,16,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,112,162,130,0,1,0,8,0, 0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,128,162,133,0,1,0,4,0,0,0,0,0,16,0,0,0,0, 0,0,0,0,0,0,0,0,0,128,170,128,0,1,0,2,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0, 136,170,128,16,1,0,1,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,112,148,128,228,0,0, 31,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,192,123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,32,132,0,4,0,0,4,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,32,132,0, 4,0,0,4,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,192,123,0,4,0,0,4,0,0,4,0,0,0,0, 0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,36,73,146,36,73,146,4,65,16,4,65,16,4,0,0,0,0,0, 0,0,0,0,0,0,0,0,36,73,146,36,73,146,4,65,16,4,65,16,68,68,68,68,68,68,68,68, 68,68,68,68,68,4,36,73,146,36,73,146,4,65,16,4,65,16,68,68,68,68,68,68,68,68, 68,68,68,68,68,4,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,7}; static Fl_Bitmap image_SWR(idata_SWR, 205, 18); static unsigned char idata_P5[] = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static Fl_Bitmap image_P5(idata_P5, 205, 18); static unsigned char idata_P25[] = {252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,7,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, 68,68,68,68,68,68,68,68,68,4,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, 68,68,68,68,68,68,68,68,68,4,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0, 64,0,0,4,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,4,0,0,0,0,4, 0,0,0,0,4,0,0,0,0,4,0,0,0,0,4,0,0,0,0,4,4,0,0,0,0,4,0,0,0,0,4,0,0,0,0,4,0,0,0, 0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 31,0,0,0,128,113,0,0,0,0,249,0,0,0,192,113,0,0,0,0,0,240,0,0,0,0,1,0,0,0,192, 137,0,0,0,192,9,0,0,0,32,138,0,0,0,0,0,16,1,0,0,0,1,0,0,0,0,137,0,0,0,0,9,0,0,0, 0,138,0,0,0,0,0,16,1,0,0,0,15,0,0,0,0,137,0,0,0,0,121,0,0,0,0,138,0,0,0,0,0, 16,1,0,0,0,16,0,0,0,0,137,0,0,0,0,129,0,0,0,0,137,0,0,0,0,0,240,12,0,0,0,16,0, 0,0,0,137,0,0,0,0,129,0,0,0,128,136,0,0,0,0,0,16,18,0,0,0,16,0,0,0,0,137,0,0, 0,0,129,0,0,0,64,136,0,0,0,0,0,16,18,0,0,0,17,0,0,0,0,137,0,0,0,0,137,0,0,0, 32,136,0,0,0,0,0,16,12,0,0,0,14,0,0,0,0,113,0,0,0,0,113,0,0,0,224,115,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static Fl_Bitmap image_P25(idata_P25, 205, 18); static unsigned char idata_P50[] = {252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,7,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, 68,68,68,68,68,68,68,68,68,4,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, 68,68,68,68,68,68,68,68,68,4,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0, 64,0,0,4,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,4,0,64,0,0,4, 0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,4,0,0,0,0,4,0,0,0,0,4,0,0,0,0,4,0, 0,0,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,113,0,0,0,192,113,0,0,0,192,113,0,0,0,0,113,0,0,0,0,0,240,0,0,0,192,137,0,0, 0,32,138,0,0,0,32,138,0,0,0,128,137,0,0,0,0,0,16,1,0,0,0,137,0,0,0,0,138,0,0, 0,0,138,0,0,0,64,137,0,0,0,0,0,16,1,0,0,0,137,0,0,0,0,138,0,0,0,0,138,0,0,0, 64,137,0,0,0,0,0,16,1,0,0,0,137,0,0,0,0,137,0,0,0,128,137,0,0,0,32,137,0,0,0,0, 0,240,12,0,0,0,137,0,0,0,128,136,0,0,0,0,138,0,0,0,224,139,0,0,0,0,0,16,18,0, 0,0,137,0,0,0,64,136,0,0,0,0,138,0,0,0,0,137,0,0,0,0,0,16,18,0,0,0,137,0,0,0, 32,136,0,0,0,32,138,0,0,0,0,137,0,0,0,0,0,16,12,0,0,0,113,0,0,0,224,115,0,0,0, 192,113,0,0,0,0,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0}; static Fl_Bitmap image_P50(idata_P50, 205, 18); static unsigned char idata_P100[] = {252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,7,84,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, 85,85,85,85,85,85,85,85,85,5,84,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, 85,85,85,85,85,85,85,85,85,5,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4, 16,64,0,1,4,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,4,0, 64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,64,0,0,4,4,0,64,0,0,4,0,64,0,0,4,0, 64,0,0,4,0,64,0,0,4,0,64,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,192,113,0,0,0,0,113,0,0,0,192,113,0,0,0,192,113,0,0,0,0,0,240,0,0, 0,32,138,0,0,0,128,137,0,0,0,32,138,0,0,0,32,138,0,0,0,0,0,16,1,0,0,0,138,0,0, 0,128,137,0,0,0,32,136,0,0,0,32,138,0,0,0,0,0,16,1,0,0,0,138,0,0,0,64,137,0,0, 0,32,136,0,0,0,32,138,0,0,0,0,0,16,1,0,0,0,137,0,0,0,64,137,0,0,0,224,139,0,0, 0,192,137,0,0,0,0,0,240,12,0,0,128,136,0,0,0,32,137,0,0,0,32,138,0,0,0,32,138, 0,0,0,0,0,16,18,0,0,64,136,0,0,0,224,139,0,0,0,32,138,0,0,0,32,138,0,0,0,0,0, 16,18,0,0,32,136,0,0,0,0,137,0,0,0,32,138,0,0,0,32,138,0,0,0,0,0,16,12,0,0,224, 115,0,0,0,0,113,0,0,0,192,113,0,0,0,192,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0}; static Fl_Bitmap image_P100(idata_P100, 205, 18); static unsigned char idata_P200[] = {252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,7,84,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, 85,85,85,85,85,85,85,85,85,5,84,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, 85,85,85,85,85,85,85,85,85,5,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4, 16,64,0,1,4,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,16,64,0,1,4,4,0, 0,0,0,4,0,0,0,0,4,0,64,0,0,4,0,0,0,0,4,0,0,0,0,4,4,0,0,0,0,4,0,0,0,0,4,0,64,0, 0,4,0,0,0,0,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,113,0,0,0,192,113,0,0,0,32,142,3,0,0,32,142,3,0,0,0,0,240,0,0,0,128, 137,0,0,0,32,138,0,0,0,56,81,4,0,0,56,81,4,0,0,0,0,16,1,0,0,128,137,0,0,0,32, 138,0,0,0,32,80,4,0,0,32,65,4,0,0,0,0,16,1,0,0,64,137,0,0,0,32,138,0,0,0,32,80, 4,0,0,32,65,4,0,0,0,0,16,1,0,0,64,137,0,0,0,192,137,0,0,0,32,72,4,0,0,32,79,4, 0,0,0,0,240,12,0,0,32,137,0,0,0,32,138,0,0,0,32,68,4,0,0,32,81,4,0,0,0,0,16, 18,0,0,224,139,0,0,0,32,138,0,0,0,32,66,4,0,0,32,81,4,0,0,0,0,16,18,0,0,0,137, 0,0,0,32,138,0,0,0,32,65,4,0,0,32,81,4,0,0,0,0,16,12,0,0,0,113,0,0,0,192,113, 0,0,0,32,159,3,0,0,32,142,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0}; static Fl_Bitmap image_P200(idata_P200, 205, 18); flrig-2.0.04/src/UI/ui_memory.cxx0000664000175000017500000001577214505017144013475 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "font_browser.h" Fl_Button *btnAddFreq=(Fl_Button *)0; Fl_Button *btnPickFreq=(Fl_Button *)0; Fl_Button *btnDelFreq=(Fl_Button *)0; Fl_Button *btnClearList=(Fl_Button *)0; Fl_Browser2 *FreqSelect=(Fl_Browser2 *)0; Fl_Input *inAlphaTag=(Fl_Input *)0; static void cb_btnAddFreq(Fl_Button*, void*) { addFreq(); } static void cb_btnPickFreq(Fl_Button*, void*) { if (FreqSelect->value()) selectFreq(); } static void cb_btnDelFreq(Fl_Button*, void*) { delFreq(); } static void cb_btnClearList(Fl_Button*, void*) { clearList(); } static void cb_Close(Fl_Button*, void*) { cbCloseMemory(); } static void cb_FreqSelect(Fl_Browser* o, void*) { select_and_close(); } static void cb_inAlphaTag(Fl_Input*, void*) { editAlphaTag(); } static Font_Browser *fntSelectbrowser = 0; static Fl_Browser *header = 0; static int freq_sel_widths[] = {140, 15, 70, 15, 80, 15, 0}; extern void updateSelect(); void cbFreqSelectFontBrowser(Fl_Widget*, void*) { progStatus.memfontnbr = fntSelectbrowser->fontNumber(); progStatus.memfontsize = fntSelectbrowser->fontSize(); if (progStatus.memfontsize > 18) progStatus.memfontsize = 18; if (progStatus.memfontsize < 10) progStatus.memfontsize = 10; fntSelectbrowser->hide(); char hdrline[256]; header->clear(); snprintf(hdrline, sizeof(hdrline), "\ @F%d@S%d@B%d@cFrequency\t\ @F%d@S%d@B%d|\t\ @F%d@S%d@B%d@cBW\t\ @F%d@S%d@B%d|\t\ @F%d@S%d@B%d@cMode\t\ @F%d@S%d@B%d|\t\ @F%d@S%d@B%d@cComments", progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247 ); header->add(hdrline); header->redraw(); updateSelect(); } void cbFreqFontBrowser() { fntSelectbrowser = new Font_Browser; fntSelectbrowser->fontNumber(progStatus.memfontnbr); fntSelectbrowser->fontSize(progStatus.memfontsize); fntSelectbrowser->callback(cbFreqSelectFontBrowser); fntSelectbrowser->show(); } Fl_Double_Window* Memory_Dialog() { Fl_Double_Window* w = new Fl_Double_Window(600, 182, _("Flrig Memory")); Fl_Group* mm_grp1 = new Fl_Group(0, 0, 600, 155); mm_grp1->box(FL_FLAT_BOX); Fl_Group* mm_grp1a = new Fl_Group(0, 0, 64, 156); mm_grp1a->box(FL_FLAT_BOX); btnAddFreq = new Fl_Button(2, 1, 60, 22, _("Add @-1>")); btnAddFreq->tooltip(_("Add to list")); btnAddFreq->down_box(FL_DOWN_BOX); btnAddFreq->labelsize(14); btnAddFreq->callback((Fl_Callback*)cb_btnAddFreq); btnAddFreq->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); btnPickFreq = new Fl_Button(2, 25, 60, 22, _("Pick @-1<")); btnPickFreq->tooltip(_("Use selected data")); btnPickFreq->down_box(FL_DOWN_BOX); btnPickFreq->labelsize(14); btnPickFreq->callback((Fl_Callback*)cb_btnPickFreq); btnPickFreq->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); btnDelFreq = new Fl_Button(2, 49, 60, 22, _("Del @-11+")); btnDelFreq->tooltip(_("Delete from list")); btnDelFreq->down_box(FL_DOWN_BOX); btnDelFreq->labelsize(14); btnDelFreq->callback((Fl_Callback*)cb_btnDelFreq); btnDelFreq->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); btnClearList = new Fl_Button(2, 73, 60, 22, _("Clr @-2square")); btnClearList->tooltip(_("Clear list")); btnClearList->down_box(FL_DOWN_BOX); btnClearList->labelsize(14); btnClearList->callback((Fl_Callback*)cb_btnClearList); btnClearList->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); Fl_Button * btnFontSel = new Fl_Button(2, 97, 60, 22, _("Font")); btnFontSel->tooltip(_("Select Font/Size")); btnFontSel->down_box(FL_DOWN_BOX); btnFontSel->labelsize(14); btnFontSel->callback((Fl_Callback*)cbFreqFontBrowser); btnFontSel->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); Fl_Button* close = new Fl_Button(2, 121, 60, 22, _("Close")); close->tooltip(_("Close Memory dialog")); close->labelsize(14); close->callback((Fl_Callback*)cb_Close); close->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE)); Fl_Box *bx1a = new Fl_Box(0, 143, 66, 2, ""); bx1a->box(FL_NO_BOX); mm_grp1a->end(); mm_grp1a->resizable(bx1a); Fl_Group *mm_grp1b = new Fl_Group(66, 0, 534, 155); mm_grp1b->box(FL_FLAT_BOX); header = new Fl_Browser(66, 0, 532, 24, ""); header->column_widths(freq_sel_widths); header->color(247); char hdrline[256]; snprintf(hdrline, sizeof(hdrline), "\ @F%d@S%d@B%d@cFrequency\t\ @F%d@S%d@B%d|\t\ @F%d@S%d@B%d@cBW\t\ @F%d@S%d@B%d|\t\ @F%d@S%d@B%d@cMode\t\ @F%d@S%d@B%d|\t\ @F%d@S%d@B%d@cComments", progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247, progStatus.memfontnbr, progStatus.memfontsize, 247 ); header->add(hdrline); FreqSelect = new Fl_Browser2(66, 24, 532, 131); FreqSelect->tooltip( _("\ Left Click: high light\n\ Dbl Left Click: select\n\ Right click: select")); FreqSelect->type(2); FreqSelect->labelfont(4); FreqSelect->labelsize(14); FreqSelect->textfont(4); FreqSelect->textsize(14); FreqSelect->column_widths(freq_sel_widths); FreqSelect->callback((Fl_Callback*)cb_FreqSelect); // FreqSelect->has_scrollbar(Fl_Browser_::BOTH_ALWAYS); mm_grp1b->end(); mm_grp1b->resizable(FreqSelect); mm_grp1->end(); mm_grp1->resizable(mm_grp1b); Fl_Group* mm_grp2 = new Fl_Group(0, 155, 600, 26); inAlphaTag = new Fl_Input(66, 156, 532, 24, _("Tag:")); inAlphaTag->tooltip( _("Left click => in Tag field to edit\n[Enter] => when done to update")); inAlphaTag->callback((Fl_Callback*)cb_inAlphaTag); inAlphaTag->when(FL_WHEN_ENTER_KEY_ALWAYS); inAlphaTag->textfont(4); inAlphaTag->textsize(14); mm_grp2->end(); mm_grp2->resizable(inAlphaTag); w->end(); w->resizable(mm_grp1); w->size_range(w->w(), w->h(), 0, 0); w->resize( progStatus.memX, progStatus.memY, progStatus.memW, progStatus.memH); w->init_sizes(); return w; } flrig-2.0.04/src/UI/meters_dialog.cxx0000664000175000017500000001727714504050407014306 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include "rigpanel.h" #include "gettext.h" #include "support.h" #include "status.h" Fl_Box *mtr_SMETER = (Fl_Box *)0; Fl_Box *mtr_PWR = (Fl_Box *)0; Fl_Box *mtr_SWR = (Fl_Box *)0; Fl_Box *mtr_ALC = (Fl_Box *)0; Fl_Box *mtr_IDD = (Fl_Box *)0; Fl_Box *mtr_VOLTS = (Fl_Box *)0; Fl_SigBar *sigbar_SMETER = (Fl_SigBar *)0; Fl_SigBar *sigbar_PWR = (Fl_SigBar *)0; Fl_SigBar *sigbar_SWR = (Fl_SigBar *)0; Fl_SigBar *sigbar_ALC = (Fl_SigBar *)0; Fl_SigBar *sigbar_IDD = (Fl_SigBar *)0; Fl_SigBar *sigbar_VOLTS = (Fl_SigBar *)0; Fl_Double_Window* win_meters() { Fl_Double_Window* w = new Fl_Double_Window(210, 190, _("Meters")); Fl_Color bgclr = fl_rgb_color(progStatus.bg_red, progStatus.bg_green, progStatus.bg_blue); Fl_Color fgclr = fl_rgb_color(progStatus.fg_red, progStatus.fg_green, progStatus.fg_blue); w->color(bgclr); mtr_SMETER = new Fl_Box(2, 2, 206, 20); mtr_SMETER->box(FL_FLAT_BOX); mtr_SMETER->image(image_smeter); mtr_SMETER->tooltip(_("S units meter")); mtr_SMETER->color(bgclr); mtr_SMETER->labelcolor(fgclr); sigbar_SMETER = new Fl_SigBar(5, mtr_SMETER->y() + mtr_SMETER->h() + 2, 200, 6); sigbar_SMETER->box(FL_FLAT_BOX); sigbar_SMETER->color(FL_BACKGROUND_COLOR); sigbar_SMETER->selection_color(FL_BACKGROUND_COLOR); sigbar_SMETER->labeltype(FL_NORMAL_LABEL); sigbar_SMETER->labelfont(0); sigbar_SMETER->labelsize(12); sigbar_SMETER->labelcolor(FL_FOREGROUND_COLOR); sigbar_SMETER->align(Fl_Align(FL_ALIGN_CENTER)); sigbar_SMETER->when(FL_WHEN_CHANGED); sigbar_SMETER->hide(); sigbar_SMETER->minimum(0); sigbar_SMETER->maximum(100); sigbar_SMETER->color(fl_rgb_color (progStatus.smeterRed, progStatus.smeterGreen, progStatus.smeterBlue), bgclr); sigbar_SMETER->PeakColor(fl_rgb_color(progStatus.peakRed, progStatus.peakGreen, progStatus.peakBlue)); sigbar_SMETER->show(); sigbar_PWR = new Fl_SigBar(5, sigbar_SMETER->y() + sigbar_SMETER->h() + 2, 200, 6); sigbar_PWR->box(FL_FLAT_BOX); sigbar_PWR->color(FL_BACKGROUND_COLOR); sigbar_PWR->selection_color(FL_BACKGROUND_COLOR); sigbar_PWR->labeltype(FL_NORMAL_LABEL); sigbar_PWR->labelfont(0); sigbar_PWR->labelsize(12); sigbar_PWR->labelcolor(FL_FOREGROUND_COLOR); sigbar_PWR->align(Fl_Align(FL_ALIGN_CENTER)); sigbar_PWR->when(FL_WHEN_CHANGED); sigbar_PWR->hide(); sigbar_PWR->minimum(0); sigbar_PWR->maximum(100); sigbar_PWR->color(fl_rgb_color (progStatus.pwrRed, progStatus.pwrGreen, progStatus.pwrBlue), bgclr); sigbar_PWR->PeakColor(fl_rgb_color(progStatus.peakRed, progStatus.peakGreen, progStatus.peakBlue)); sigbar_PWR->show(); mtr_PWR = new Fl_Box(2, sigbar_PWR->y() + sigbar_PWR->h() + 2, 206, 20); mtr_PWR->box(FL_FLAT_BOX); mtr_PWR->image(image_p100); mtr_PWR->color(bgclr); mtr_PWR->labelcolor(fgclr); mtr_SWR = new Fl_Box(2, mtr_PWR->y() + mtr_PWR->h() + 2, 206, 20); mtr_SWR->box(FL_FLAT_BOX); mtr_SWR->image(image_swr); mtr_SWR->color(bgclr); mtr_SWR->labelcolor(fgclr); sigbar_SWR = new Fl_SigBar(5, mtr_SWR->y() + mtr_SWR->h() + 2, 200, 6); sigbar_SWR->box(FL_FLAT_BOX); sigbar_SWR->color(FL_BACKGROUND_COLOR); sigbar_SWR->selection_color(FL_BACKGROUND_COLOR); sigbar_SWR->labeltype(FL_NORMAL_LABEL); sigbar_SWR->labelfont(0); sigbar_SWR->labelsize(12); sigbar_SWR->labelcolor(FL_FOREGROUND_COLOR); sigbar_SWR->align(Fl_Align(FL_ALIGN_CENTER)); sigbar_SWR->when(FL_WHEN_CHANGED); sigbar_SWR->hide(); sigbar_SWR->minimum(0); sigbar_SWR->maximum(100); sigbar_SWR->color(fl_rgb_color (progStatus.swrRed, progStatus.swrGreen, progStatus.swrBlue), bgclr); sigbar_SWR->PeakColor(fl_rgb_color(progStatus.peakRed, progStatus.peakGreen, progStatus.peakBlue)); sigbar_SWR->show(); mtr_ALC = new Fl_Box(2, sigbar_SWR->y() + sigbar_SWR->h() + 2, 206, 20); mtr_ALC->box(FL_FLAT_BOX); if (selrig->name_ == rig_PowerSDR.name_) { mtr_ALC->image(image_alc40db); } else { mtr_ALC->image(image_alc); } mtr_ALC->color(bgclr); mtr_ALC->labelcolor(fgclr); sigbar_ALC = new Fl_SigBar(5, mtr_ALC->y() + mtr_ALC->h() + 2, 200, 6); sigbar_ALC->box(FL_FLAT_BOX); sigbar_ALC->color(FL_BACKGROUND_COLOR); sigbar_ALC->selection_color(FL_BACKGROUND_COLOR); sigbar_ALC->labeltype(FL_NORMAL_LABEL); sigbar_ALC->labelfont(0); sigbar_ALC->labelsize(12); sigbar_ALC->labelcolor(FL_FOREGROUND_COLOR); sigbar_ALC->align(Fl_Align(FL_ALIGN_CENTER)); sigbar_ALC->when(FL_WHEN_CHANGED); sigbar_ALC->hide(); sigbar_ALC->minimum(0); sigbar_ALC->maximum(100); sigbar_ALC->color(fl_rgb_color (progStatus.swrRed, progStatus.swrGreen, progStatus.swrBlue), bgclr); sigbar_ALC->PeakColor(fl_rgb_color(progStatus.peakRed, progStatus.peakGreen, progStatus.peakBlue)); sigbar_ALC->show(); mtr_IDD = new Fl_Box(2, sigbar_ALC->y() + sigbar_ALC->h() + 2, 206, 20); mtr_IDD->box(FL_FLAT_BOX); mtr_IDD->image(image_idd25); mtr_IDD->color(bgclr); mtr_IDD->labelcolor(fgclr); sigbar_IDD = new Fl_SigBar(5, mtr_IDD->y() + mtr_IDD->h() + 2, 200, 6); sigbar_IDD->box(FL_FLAT_BOX); sigbar_IDD->color(FL_BACKGROUND_COLOR); sigbar_IDD->selection_color(FL_BACKGROUND_COLOR); sigbar_IDD->labeltype(FL_NORMAL_LABEL); sigbar_IDD->labelfont(0); sigbar_IDD->labelsize(12); sigbar_IDD->labelcolor(FL_FOREGROUND_COLOR); sigbar_IDD->align(Fl_Align(FL_ALIGN_CENTER)); sigbar_IDD->when(FL_WHEN_CHANGED); sigbar_IDD->hide(); sigbar_IDD->minimum(0); sigbar_IDD->maximum(25); sigbar_IDD->color(fl_rgb_color (progStatus.swrRed, progStatus.swrGreen, progStatus.swrBlue), bgclr); sigbar_IDD->PeakColor(fl_rgb_color(progStatus.peakRed, progStatus.peakGreen, progStatus.peakBlue)); sigbar_IDD->show(); sigbar_VOLTS = new Fl_SigBar(5, sigbar_IDD->y() + sigbar_IDD->h() + 2, 200, 6); sigbar_VOLTS->box(FL_FLAT_BOX); sigbar_VOLTS->color(FL_BACKGROUND_COLOR); sigbar_VOLTS->selection_color(FL_BACKGROUND_COLOR); sigbar_VOLTS->labeltype(FL_NORMAL_LABEL); sigbar_VOLTS->labelfont(0); sigbar_VOLTS->labelsize(12); sigbar_VOLTS->labelcolor(FL_FOREGROUND_COLOR); sigbar_VOLTS->align(Fl_Align(FL_ALIGN_CENTER)); sigbar_VOLTS->when(FL_WHEN_CHANGED); sigbar_VOLTS->hide(); sigbar_VOLTS->minimum(6); sigbar_VOLTS->maximum(16); sigbar_VOLTS->color(fl_rgb_color (progStatus.voltRed, progStatus.voltGreen, progStatus.voltBlue), bgclr); sigbar_VOLTS->PeakColor(bgclr); sigbar_VOLTS->show(); mtr_VOLTS = new Fl_Box(2, sigbar_VOLTS->y() + sigbar_VOLTS->h() + 2, 206, 20); mtr_VOLTS->box(FL_FLAT_BOX); mtr_VOLTS->image(image_voltmeter); mtr_VOLTS->color(bgclr); mtr_VOLTS->labelcolor(fgclr); sigbar_SMETER->aging(progStatus.rx_peak); sigbar_SMETER->avg(progStatus.rx_avg); sigbar_PWR->aging(progStatus.pwr_peak); sigbar_PWR->avg(progStatus.pwr_avg); sigbar_SWR->aging(progStatus.pwr_peak); sigbar_SWR->avg(progStatus.pwr_avg); sigbar_ALC->aging(progStatus.pwr_peak); sigbar_ALC->avg(progStatus.pwr_avg); sigbar_IDD->aging(1); sigbar_IDD->avg(1); sigbar_VOLTS->aging(1); sigbar_VOLTS->avg(1); w->end(); return w; } flrig-2.0.04/src/log/0000775000175000017500000000000014511461606011257 500000000000000flrig-2.0.04/src/log/fsklog.cxx0000664000175000017500000004122514502041135013203 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2022 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #include #include #include #include #include #include #ifndef __WIN32__ #include #include #include #include #include #endif #include "dialogs.h" #include "rigs.h" #include "util.h" #include "debug.h" #include "serial.h" #include "support.h" #include "rigpanel.h" #include "rigbase.h" #include "font_browser.h" #include "ui.h" #include "status.h" #include "rig.h" #include "socket_io.h" #include "rigpanel.h" #include "gettext.h" #include "fskioUI.h" #include "fsklog.h" // ===================================================================== // fsklogbook support code // ===================================================================== bool fsklog_editing = false; int fsklog_edit_nbr = 0; bool fsklog_changed = false; bool fsklog_is_open = false; void fsklog_set_edit(bool on) { fsklog_editing = on; if (on) { btn_fsklog_edit_entry->label("Delete"); btn_fsklog_edit_entry->redraw_label(); btn_fsklog_clear_qso->label("Cancel"); btn_fsklog_clear_qso->redraw_label(); } else { btn_fsklog_edit_entry->label("Edit"); btn_fsklog_edit_entry->redraw_label(); btn_fsklog_clear_qso->label("Clear"); btn_fsklog_clear_qso->redraw_label(); } } bool fsklog_compare( int &dir, int fld, std::string &s1, std::string &s2) { size_t p1 = 0, p2 = 0; for (int n = 0; n < fld; n++) { p1 = s1.find('\t', p1 + 1); p2 = s2.find('\t', p2 + 1); } if (dir == 1) return (s2.substr(p2) < s1.substr(p1)); return (s2.substr(p2) > s1.substr(p1)); } bool fsklog_freq_compare( int &dir, int fld, std::string &s1, std::string &s2) { size_t p1 = 0, p2 = 0; for (int n = 0; n < fld; n++) { p1 = s1.find('\t', p1 + 1); p2 = s2.find('\t', p2 + 1); } float f1 = atof(s1.substr(p1).c_str()); float f2 = atof(s2.substr(p2).c_str()); if (dir == 1) return (f2 < f1); return (f2 > f1); } static int dtdir = 1; static int dtpos = 0; void fsklog_sort_by_datetime() { if (fsklog_editing) return; size_t nbr = brwsr_fsklog_entries->size(); if (nbr == 0) return; std::string entries[nbr]; for (size_t n = 0; n < nbr; n++) entries[n] = brwsr_fsklog_entries->text(n+1); std::string temp; if (nbr > 1) { for (size_t n = 0; n < nbr - 1; n++) { for (size_t j = n + 1; j < nbr; j++) { if (fsklog_compare (dtdir, dtpos, entries[n], entries[j])) { temp = entries[j]; entries[j] = entries[n]; entries[n] = temp; } } } } brwsr_fsklog_entries->clear(); for (size_t i = 0; i < nbr; i++) brwsr_fsklog_entries->add(entries[i].c_str()); brwsr_fsklog_entries->redraw(); if (dtdir == 1) dtdir = -1; else dtdir = 1; } static int freqdir = 1; static int freqpos = 2; void fsklog_sort_by_freq() { if (fsklog_editing) return; size_t nbr = brwsr_fsklog_entries->size(); if (nbr == 0) return; std::string entries[nbr]; for (size_t n = 0; n < nbr; n++) entries[n] = brwsr_fsklog_entries->text(n+1); std::string temp; if (nbr > 1) { for (size_t n = 0; n < nbr - 1; n++) { for (size_t j = n + 1; j < nbr; j++) { if (fsklog_freq_compare (freqdir, freqpos, entries[n], entries[j])) { temp = entries[j]; entries[j] = entries[n]; entries[n] = temp; } } } } brwsr_fsklog_entries->clear(); for (size_t i = 0; i < nbr; i++) brwsr_fsklog_entries->add(entries[i].c_str()); brwsr_fsklog_entries->redraw(); if (freqdir == 1) freqdir = -1; else freqdir = 1; } static int calldir = 1; static int callpos = 3; void fsklog_sort_by_call() { if (fsklog_editing) return; size_t nbr = brwsr_fsklog_entries->size(); if (nbr == 0) return; std::string entries[nbr]; for (size_t n = 0; n < nbr; n++) entries[n] = brwsr_fsklog_entries->text(n+1); std::string temp; if (nbr > 1) { for (size_t n = 0; n < nbr - 1; n++) { for (size_t j = n + 1; j < nbr; j++) { if (fsklog_compare (calldir, callpos, entries[n], entries[j])) { temp = entries[j]; entries[j] = entries[n]; entries[n] = temp; } } } } brwsr_fsklog_entries->clear(); for (size_t i = 0; i < nbr; i++) brwsr_fsklog_entries->add(entries[i].c_str()); brwsr_fsklog_entries->redraw(); if (calldir == 1) calldir = -1; else calldir = 1; } static int nbrdir = 1; static int nbrpos = 7; void fsklog_sort_by_nbr() { if (fsklog_editing) return; size_t nbr = brwsr_fsklog_entries->size(); if (nbr == 0) return; std::string entries[nbr]; for (size_t n = 0; n < nbr; n++) entries[n] = brwsr_fsklog_entries->text(n+1); std::string temp; if (nbr > 1) { for (size_t n = 0; n < nbr - 2; n++) { for (size_t j = n + 1; j < nbr - 1; j++) { if (fsklog_compare (nbrdir, nbrpos, entries[n], entries[j])) { temp = entries[j]; entries[j] = entries[n]; entries[n] = temp; } } } } brwsr_fsklog_entries->clear(); for (size_t i = 0; i < nbr; i++) brwsr_fsklog_entries->add(entries[i].c_str()); brwsr_fsklog_entries->redraw(); if (nbrdir == 1) nbrdir = -1; else nbrdir = 1; } void fsklog_clear_qso() { fsk_date->value(""); fsk_time->value(""); fsk_op_freq->value(""); fsk_op_call->value(""); fsk_op_name->value(""); fsk_rst_in->value(""); fsk_rst_out->value(""); fsk_xchg_in->value(""); if (fsklog_editing) fsklog_set_edit(false); } void fsklog_save_qso() { char line[256]; if (fsklog_editing) { snprintf(line, sizeof(line), "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%05d\t%s", fsk_date->value(), fsk_time->value(), fsk_op_freq->value(), fsk_op_call->value(), fsk_op_name->value(), fsk_rst_in->value(), fsk_rst_out->value(), (int)cntr_fsk_log_nbr->value(), fsk_xchg_in->value()); brwsr_fsklog_entries->insert(fsklog_edit_nbr, line); brwsr_fsklog_entries->remove(fsklog_edit_nbr + 1); brwsr_fsklog_entries->select(fsklog_edit_nbr); fsklog_set_edit(false); } else { snprintf(line, sizeof(line), "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%05d\t%s", fsk_date->value(), fsk_time->value(), fsk_op_freq->value(), fsk_op_call->value(), fsk_op_name->value(), fsk_rst_in->value(), fsk_rst_out->value(), (int)cntr_fsk_log_nbr->value(), fsk_xchg_in->value()); brwsr_fsklog_entries->add(line); } fsklog_changed = true; } void fsklog_delete_entry() { brwsr_fsklog_entries->remove(fsklog_edit_nbr); brwsr_fsklog_entries->select(fsklog_edit_nbr, false); brwsr_fsklog_entries->redraw(); fsklog_clear_qso(); fsklog_changed = true; } void fsklog_edit_entry() { if (fsklog_editing) { fsklog_delete_entry(); return; } fsklog_edit_nbr = brwsr_fsklog_entries->value(); if (!fsklog_edit_nbr) return; fsklog_clear_qso(); size_t ptr = 0; std::string entry = brwsr_fsklog_entries->text(fsklog_edit_nbr); ptr = entry.find('\t'); fsk_date->value(entry.substr(0, ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); fsk_time->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); fsk_op_freq->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); fsk_op_call->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); fsk_op_name->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); fsk_rst_in->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); fsk_rst_out->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); ptr = entry.find('\t'); cntr_fsk_log_nbr->value(atoi(entry.substr(0,ptr).c_str())); entry.erase(0, ptr+1); ptr = entry.find('\t'); fsk_xchg_in->value(entry.substr(0,ptr).c_str()); entry.erase(0, ptr+1); fsklog_set_edit(true); } void fsklog_view() { if (!fsklog_viewer) { fsklog_viewer = new_fsklogbook_dialog(); if (!progStatus.fsk_log_name.empty()) { txt_fsklog_file->value(progStatus.fsk_log_name.c_str()); fsklog_load(); } else fsklog_open(); } fsklog_viewer->show(); } void fsklog_save() { if (progStatus.fsk_log_name.empty()) return; std::ofstream oLog(progStatus.fsk_log_name.c_str()); if (!oLog) { fl_message ("Could not write to %s", progStatus.fsk_log_name.c_str()); return; } size_t n = brwsr_fsklog_entries->size(); std::string oline; for (size_t i = 1; i <= n; i++) { oline = brwsr_fsklog_entries->text(i); if (oline.empty()) continue; oLog << oline << std::endl; } oLog.close(); fsklog_changed = false; } void fsklog_load() { std::ifstream iLog(progStatus.fsk_log_name.c_str()); if (!iLog) return; brwsr_fsklog_entries->clear(); char line[256]; std::string sline; while (!iLog.eof()) { memset(line, 0, 256); iLog.getline(line, 256); sline = line; if (!sline.empty()) brwsr_fsklog_entries->add(sline.c_str()); } iLog.close(); brwsr_fsklog_entries->redraw(); fsklog_is_open = true; } void fsklog_save_as() { // Create and post the local native file chooser Fl_Native_File_Chooser fnfc; fnfc.title("Save As log file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM); fnfc.filter("CW Log\t*.txt"); // default directory to use fnfc.directory(RigHomeDir.c_str()); fnfc.preset_file(progStatus.fsk_log_name.c_str()); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: progStatus.fsk_log_name = fnfc.filename(); txt_fsklog_file->value(progStatus.fsk_log_name.c_str()); } fsklog_save(); } void fsklog_open() { if (fsklog_is_open && fsklog_changed) fsklog_save(); // Create and post the local native file chooser Fl_Native_File_Chooser fnfc; fnfc.title("Select log file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE); fnfc.filter("CW Log\t*.txt"); // default directory to use fnfc.directory(RigHomeDir.c_str()); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: progStatus.fsk_log_name = fnfc.filename(); txt_fsklog_file->value(progStatus.fsk_log_name.c_str()); txt_fsklog_file->redraw(); fsklog_load(); } } void fsklog_new() { if (fsklog_is_open && fsklog_changed) fsklog_save(); brwsr_fsklog_entries->clear(); brwsr_fsklog_entries->redraw(); progStatus.fsk_log_name.clear(); txt_fsklog_file->value(progStatus.fsk_log_name.c_str()); txt_fsklog_file->redraw(); Fl_Native_File_Chooser fnfc; fnfc.title("Create new log file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM); fnfc.filter("CW Log\t*.txt"); // default directory to use fnfc.directory(RigHomeDir.c_str()); fnfc.preset_file("fsklog.txt"); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: progStatus.fsk_log_name = fnfc.filename(); txt_fsklog_file->value(progStatus.fsk_log_name.c_str()); } } void fsklog_close() { if (fsklog_is_open && fsklog_changed) fsklog_save(); } void fsklog_export_adif() { // Create and post the local native file chooser Fl_Native_File_Chooser fnfc; fnfc.title("Export to ADIF file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM); fnfc.filter("ADIF Log\t*.{adi,adif}"); // default directory to use fnfc.directory(RigHomeDir.c_str()); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: break; } std::string export_fname = fnfc.filename(); std::ofstream oExport(export_fname.c_str()); if (!oExport) { fl_message ("Could not write to %s", export_fname.c_str()); return; } std::string logline, fsk_date, fsk_time, fsk_op_freq, fsk_op_call, fsk_op_name, fsk_rst_in, fsk_rst_out, fsk_log_nbr, qso_notes; size_t ptr = std::string::npos; size_t n = brwsr_fsklog_entries->size(); for (size_t i = 1; i <= n; i++) { logline = brwsr_fsklog_entries->text(i); if (logline.empty()) continue; ptr = logline.find('\t'); fsk_date = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); fsk_time = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); fsk_op_freq = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); fsk_op_call = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); fsk_op_name = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); fsk_rst_in = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); fsk_rst_out = logline.substr(0, ptr); logline.erase(0, ptr+1); ptr = logline.find('\t'); fsk_log_nbr = logline.substr(0, ptr); logline.erase(0, ptr+1); qso_notes = logline; oExport << "" << fsk_date << "" << fsk_time << "" << fsk_op_freq << "RTTY" << "" << fsk_op_call << "" << fsk_op_name << "" << fsk_rst_in << "" << fsk_rst_out << "" << fsk_log_nbr << "" << qso_notes << "" << std::endl; } oExport.close(); } std::string fsklog_adif_extract( std::string FIELD, std::string line) { size_t p1, p2; p1 = line.find(FIELD); if (p1 != std::string::npos) { p1 = line.find(">", p1); if (p1 != std::string::npos) { p1++; p2 = line.find("<", p1); if (p2 != std::string::npos) return line.substr(p1, p2 - p1); } } return ""; } void fsklog_import_adif() { std::string import_fname; Fl_Native_File_Chooser fnfc; fnfc.title("Import from ADIF file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE); fnfc.filter("ADIF Log\t*.{adi,adif}"); // default directory to use fnfc.directory(RigHomeDir.c_str()); // Show native chooser switch ( fnfc.show() ) { case -1: fl_message ("ERROR: %s", fnfc.errmsg()); return; // ERROR case 1: return; // CANCEL default: break; } import_fname = fnfc.filename(); std::ifstream iImport(import_fname.c_str()); if (!iImport) return; // current log size_t n = brwsr_fsklog_entries->size(); size_t p; std::string fulllog; std::string teststr; for (size_t i = 1; i <= n; i++) { fulllog.append(brwsr_fsklog_entries->text(i)).append("\n"); } char buff[512]; std::string line, ldate, ltime, lfreq, lcall, lname, lrst_in, lrst_out, lnbr, lnotes, lbrwsr; while (!iImport.eof()) { iImport.getline(buff, 512); line = buff; if (fsklog_adif_extract("MODE", line) == "RTTY") { ldate = fsklog_adif_extract("QSO_DATE", line); ltime = fsklog_adif_extract("TIME_ON", line).substr(0,4); lfreq = fsklog_adif_extract("FREQ", line); lcall = fsklog_adif_extract("CALL", line); lname = fsklog_adif_extract("NAME", line); lrst_in = fsklog_adif_extract("RST_RCVD", line); lrst_out = fsklog_adif_extract("RST_SENT", line); lnbr = fsklog_adif_extract("STX", line); lnotes = fsklog_adif_extract("NOTES", line); lbrwsr.assign(ldate).append("\t"); lbrwsr.append(ltime).append("\t"); lbrwsr.append(lfreq).append("\t"); lbrwsr.append(lcall).append("\t"); teststr = lbrwsr; lbrwsr.append(lname).append("\t"); lbrwsr.append(lrst_in).append("\t"); lbrwsr.append(lrst_out).append("\t"); lbrwsr.append(lnbr).append("\t"); lbrwsr.append(lnotes); p = lbrwsr.find("\n"); if (p != std::string::npos) lbrwsr.erase(p); if (fulllog.find(teststr) == std::string::npos && !ldate.empty() && !ltime.empty()) { fulllog.append(lbrwsr).append("\n"); brwsr_fsklog_entries->add(lbrwsr.c_str()); } } } fsklog_changed = true; iImport.close(); } flrig-2.0.04/src/log/cwlog.cxx0000664000175000017500000000000014475136651013034 00000000000000flrig-2.0.04/src/widgets/0000775000175000017500000000000014511461606012144 500000000000000flrig-2.0.04/src/widgets/hspinner.cxx0000664000175000017500000001106714475136651014453 00000000000000#include #include #include #include #include "hspinner.h" Hspinner::Hspinner(int X, int Y, int W, int H, const char *L, int W2) : Fl_Group(X, Y, W, H, L), input_(X + (W2 ? 2*W2 : 6*H/5), Y, (W2 ? W - 2*W2 : W - 6*H/5), H), down_button_(X, Y, (W2 ? W2 : 6*H/10), H), up_button_(X + (W2 ? W2 : 6*H/10), Y, (W2 ? W2 : 6*H/10), H) { end(); value_ = 1.0; minimum_ = 1.0; maximum_ = 100.0; step_ = 1.0; format_ = "%f"; sX = X; sY = Y; sW = W; sH = H; sW2 = (W2 ? W2 : H); align(FL_ALIGN_LEFT); input_.value("1"); input_.type(FL_INT_INPUT); input_.when(FL_WHEN_ENTER_KEY | FL_WHEN_RELEASE); input_.callback((Fl_Callback *)sb_cb, this); if (W2) { down_button_.labelsize( 3 * W2 / 4); up_button_.labelsize( 3 * W2 / 4); } else { down_button_.labelsize( 4*sH / 10); up_button_.labelsize( 4*sH / 10); } down_button_.label("@2>"); down_button_.callback((Fl_Callback *)sb_cb, this); down_button_.align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); up_button_.label("@8>"); up_button_.callback((Fl_Callback *)sb_cb, this); up_button_.align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE); } /// Resized the widget void Hspinner::resize(int X, int Y, int W, int H, int W2) { sX = X; sY = Y; sW = W; sH = H; sW2 = (W2 ? W2 : 6*H/10); Fl_Group::resize(X,Y,W,H); input_.resize(sX + 2*sW2, sY, sW - 2*sW2, sH); if (W2) { down_button_.labelsize(W2 / 2); up_button_.labelsize(W2 / 2); } else { down_button_.labelsize(sH / 2); up_button_.labelsize(sH / 2); } down_button_.resize(sX, sY, sW2, sH); up_button_.resize(sX + sW2, sY, sW2, sH); } /// Sets or returns the amount to change the value when the user clicks a button. /// Before setting step to a non-integer value, the spinner /// type() should be changed to floating point. void Hspinner::step(double s) { step_ = s; if (step_ != (int)step_) { input_.type(FL_FLOAT_INPUT); if (step_ > 1.0) format ("%.0f"); else if (step_ >= 0.1) format("%.1f"); else if (step_ >= 0.01) format("%.01f"); else if (step_ >= 0.001) format("%.001f"); else if (step_ >= 0.0001) format("%.0001f"); else format("%f"); } else { input_.type(FL_INT_INPUT); format("%.0f"); } update(); } /// Sets the numeric representation in the input field. /// Valid values are FL_INT_INPUT and FL_FLOAT_INPUT. /// Also changes the format() template. /// Setting a new spinner type via a superclass pointer will not work. /// note: type is not a virtual function. void Hspinner::type(unsigned char v) { if (v==FL_FLOAT_INPUT) { if (step_ > 1.0) format ("%.0f"); else if (step_ >= 0.1) format("%.1f"); else if (step_ >= 0.01) format("%.01f"); else if (step_ >= 0.001) format("%.001f"); else if (step_ >= 0.0001) format("%.0001f"); else format("%f"); } else { format("%.0f"); } input_.type(v); } int Hspinner::handle(int event) { switch (event) { case FL_KEYDOWN : case FL_SHORTCUT : if (Fl::event_key() == FL_Up) { up_button_.do_callback(); return 1; } else if (Fl::event_key() == FL_Down) { down_button_.do_callback(); return 1; } else return 0; case FL_FOCUS : if (input_.take_focus()) return 1; else return 0; } return Fl_Group::handle(event); } /// Get/Set label font size void Hspinner::labelsize(Fl_Fontsize sz) { Fl_Group::labelsize(sz); } Fl_Fontsize Hspinner::labelsize() { return Fl_Group::labelsize(); } void Hspinner::sb_cb(Fl_Widget *w, Hspinner *sb) { double v; // New value if (w == &(sb->input_)) { // Something changed in the input field... v = atof(sb->input_.value()); if (v < sb->minimum_) { sb->value_ = sb->minimum_; sb->update(); } else if (v > sb->maximum_) { sb->value_ = sb->maximum_; sb->update(); } else sb->value_ = v; } else if (w == &(sb->up_button_)) { // Up button pressed... v = sb->value_ + sb->step_; if (v > sb->maximum_) sb->value_ = sb->maximum_; else sb->value_ = v; sb->update(); } else if (w == &(sb->down_button_)) { // Down button pressed... v = sb->value_ - sb->step_; if (v < sb->minimum_) sb->value_ = sb->minimum_; else sb->value_ = v; sb->update(); } sb->do_callback(); } void Hspinner::update() { char s[255]; // Value string if (format_[0]=='%'&&format_[1]=='.'&&format_[2]=='*') { int c = 0; char temp[64], *sp = temp; sprintf(temp, "%.12f", step_); while (*sp) sp++; sp--; while (sp>temp && *sp=='0') sp--; while (sp>temp && (*sp>='0' && *sp<='9')) { sp--; c++; } sprintf(s, format_, c, value_); } else { sprintf(s, format_, value_); } input_.value(s); } double Hspinner::value() { return (value_); } void Hspinner::value(double v) { value_ = v; update(); } flrig-2.0.04/src/widgets/flbrowser2.cxx0000664000175000017500000000305514475136651014712 00000000000000// ===================================================================== // // flinput2.cxx // // Author: Stelios Buononos, M0GLD // Copyright: 2010 // // This file is part of flrig. // // This is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This software is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. It is // copyright under the GNU General Public License. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // ===================================================================== #include "config.h" #include #include #include #include #include #include #include #include #include "icons.h" #include "flbrowser2.h" #include "gettext.h" #include "util.h" #include Fl_Browser2::Fl_Browser2(int x, int y, int w, int h, const char* l) : Fl_Browser(x, y, w, h, l) { } int Fl_Browser2::handle(int event) { int key = Fl::event_key(); if (event == FL_KEYUP && ( key == FL_Enter || key == FL_Left || key == FL_Right || key == FL_Delete ) ) { do_callback(); return 1; } return Fl_Browser::handle(event); } flrig-2.0.04/src/widgets/flslider2.cxx0000664000175000017500000000445414475136651014515 00000000000000// ---------------------------------------------------------------------------- // flslider2.cxx // // Copyright (C) 2010 // Stelios Bounanos, M0GLD // // This file is part of fldigi. // // Fldigi is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // ---------------------------------------------------------------------------- #include #include "flslider2.h" #include "util.h" inline static int handle_scroll(Fl_Valuator* w, int event) { if (!(event == FL_MOUSEWHEEL && Fl::event_inside(w))) return 0; double d; if ((d = Fl::event_dy()) || (d = Fl::event_dx())) { if (Fl::event_state() & FL_SHIFT) d *= 10.0; if (!dynamic_cast(w) && !dynamic_cast(w) && !(w->type() & FL_HOR_SLIDER)) d = -d; w->value(w->clamp(w->increment(w->value(), static_cast(-d)))); w->do_callback(); } return 1; } int Fl_Slider2::handle(int event) { return handle_scroll(this, event) ? 1 : Fl_Slider::handle(event); } int Fl_Value_Slider2::handle(int event) { return handle_scroll(this, event) ? 1 : Fl_Value_Slider::handle(event); } int Fl_Counter2::handle(int event) { return handle_scroll(this, event) ? 1 : Fl_Counter::handle(event); } int Fl_Value_Input2::handle(int event) { return handle_scroll(this, event) ? 1 : Fl_Value_Input::handle(event); } inline static int handle_scroll(Fl_Spinner* w, int event) { if (!(event == FL_MOUSEWHEEL && Fl::event_inside(w))) return 0; double d; if ((d = Fl::event_dy()) || (d = Fl::event_dx())) { if (Fl::event_state() & FL_SHIFT) d *= 10.0; d = w->value() - d * w->step(); w->value(WCLAMP(d, w->minimum(), w->maximum())); w->do_callback(); } return 1; } int Fl_Spinner2::handle(int event) { return handle_scroll(this, event) ? 1 : Fl_Spinner::handle(event); } flrig-2.0.04/src/widgets/font_browser.cxx0000664000175000017500000002331714502041135015316 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2020 // David Freese, W1HKJ // // This file is part of flrig // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "font_browser.h" #include "flslider2.h" #include "gettext.h" #include "threads.h" #include "debug.h" void find_fonts(); Font_Browser* font_browser; int Font_Browser::instance = 0; int *Font_Browser::fixed = 0; int Font_Browser::numfonts = 0; Font_Browser::font_pair *Font_Browser::font_pairs = 0; static int font_compare(const void *p1, const void *p2) { std::string s1 = *((const Font_Browser::font_pair *)p1)->name; std::string s2 = *((const Font_Browser::font_pair *)p2)->name; return strcasecmp( s1.c_str(), s2.c_str() ); } // Font Color selected void Font_Browser::ColorSelect() { unsigned char r, g, b; Fl::get_color(fontcolor, r, g, b); if (fl_color_chooser(_("Font color"), r, g, b) == 0) return; fontcolor = fl_rgb_color(r, g, b); btn_Color->color(fontcolor); btn_Color->labelcolor( fl_contrast(FL_BLACK, fontcolor)); } void Font_Browser::fb_callback(Fl_Widget* w, void* arg) { Font_Browser* fb = reinterpret_cast(arg); if (w == fb->btn_fixed) { if (fb->btn_fixed->value()) fb->fontFilter(FIXED_WIDTH); else fb->fontFilter(ALL_TYPES); return; } if (w == fb->btn_Cancel) fb->hide(); else if (w == fb->btn_OK) { if (fb->callback_) (*fb->callback_)(fb, fb->data_); } else if (w == fb->btn_Color) fb->ColorSelect(); else if (w == fb->lst_Font) fb->FontNameSelect(); else { if (w == fb->lst_Size) fb->txt_Size->value(strtol(fb->lst_Size->text(fb->lst_Size->value()), NULL, 10)); fb->fontsize = static_cast(fb->txt_Size->value()); } fb->box_Example->SetFont(fb->fontnbr, fb->fontsize, fb->fontcolor); } // Font Name changed callback void Font_Browser::FontNameSelect() { int fn = lst_Font->value(); if (!fn) return; fontnbr = (Fl_Font)reinterpret_cast(lst_Font->data(fn)); // get sizes and fill browser; skip first element if it is zero lst_Size->clear(); int nsizes, *sizes; char buf[4]; nsizes = Fl::get_font_sizes(fontnbr, sizes); // for (int i = !*sizes; i < nsizes; i++) if ((size_t)snprintf(buf, sizeof(buf), "%d", sizes[i]) < sizeof(buf)) lst_Size->add(buf, reinterpret_cast(sizes[i])); // scalable font with no suggested sizes if (!lst_Size->size()) { for (int i = 1; i <= 48; i++) { snprintf(buf, sizeof(buf), "%d", i); lst_Size->add(buf, reinterpret_cast(i)); } } fontSize(fontsize); } Font_Browser::Font_Browser(int x, int y, int w, int h, const char *lbl ) : Fl_Window(x, y, w, h, lbl) { lst_Font = new Fl_Browser(5, 15, 280, 125, _("Font:")); lst_Font->align(FL_ALIGN_TOP_LEFT); lst_Font->type(FL_HOLD_BROWSER); lst_Font->callback(fb_callback, this); txt_Size = new Fl_Value_Input2(290, 15, 50, 22, _("Size:")); txt_Size->align(FL_ALIGN_TOP_LEFT); txt_Size->range(1.0, 48.0); txt_Size->step(1.0); txt_Size->callback(fb_callback, this); lst_Size = new Fl_Browser(290, 40, 50, 100); lst_Size->type(FL_HOLD_BROWSER); lst_Size->callback(fb_callback, this); btn_fixed = new Fl_Check_Button(345, 15, 18, 18, _("Fixed")); btn_fixed->callback(fb_callback, this); btn_fixed->value(0); btn_OK = new Fl_Return_Button(345, 40, 80, 25, _("&OK")); btn_OK->shortcut(0x8006f); btn_OK->callback(fb_callback, this); btn_Cancel = new Fl_Button(345, 70, 80, 25, _("Cancel")); btn_Cancel->labelsize(12); btn_Cancel->callback(fb_callback, this); btn_Color = new Fl_Button(345, 100, 80, 25, _("Color")); btn_Color->down_box(FL_BORDER_BOX); btn_Color->color(FL_FOREGROUND_COLOR); btn_Color->labelcolor( fl_contrast(FL_BLACK, FL_FOREGROUND_COLOR)); btn_Color->callback(fb_callback, this); box_Example = new Preview_Box(5, 145, 420, 75, _("\ abcdefghijklmnopqrstuvwxyz\n\ ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\ 0123456789" ) ); box_Example->box(FL_DOWN_BOX); box_Example->align(FL_ALIGN_WRAP|FL_ALIGN_CLIP|FL_ALIGN_CENTER|FL_ALIGN_INSIDE); resizable(box_Example); set_modal(); end(); // Initializations this->callback_ = 0; // Initialize Widgets callback this->data_ = 0; // And the data std::string fntname; bool ok = true; if (instance == 0) { ++instance; numfonts = Fl::set_fonts(0); // Nr of fonts available on the server font_pairs = new font_pair[numfonts]; fixed = new int[numfonts]; int j = 0; for (int i = 0; i < numfonts; i++) { fntname = Fl::get_font_name((Fl_Font)i); ok = true; for (size_t k = 0; k < fntname.length(); k++) { if (fntname[k] < ' ' || fntname[k] > 'z' || fntname[k] == '\\' || fntname[k] == '@') { // disallowed chars in browser widget ok = false; break; } } if (fntname.empty()) ok = false; if (ok) { font_pairs[j].name = new std::string; *(font_pairs[j].name) = fntname; font_pairs[j].nbr = i; j++; } } numfonts = j; qsort(&font_pairs[0], numfonts, sizeof(font_pair), font_compare); for (int i = 0; i < numfonts; i++) { lst_Font->add((*(font_pairs[i].name)).c_str(), reinterpret_cast(font_pairs[i].nbr)); fixed[i] = 0; } find_fonts(); } else { ++instance; for (int i = 0; i < numfonts; i++) { lst_Font->add((*(font_pairs[i].name)).c_str(), reinterpret_cast(font_pairs[i].nbr)); } } fontnbr = FL_HELVETICA;; fontsize = FL_NORMAL_SIZE; fontcolor = FL_FOREGROUND_COLOR; filter = ALL_TYPES; lst_Font->value(1); FontNameSelect(); xclass(PACKAGE_NAME); } Font_Browser::~Font_Browser() { --instance; if (instance == 0) { delete [] fixed; fixed = 0; delete [] font_pairs; font_pairs = 0; } } void Font_Browser::fontNumber(Fl_Font n) { fontnbr = n; lst_Font->value(1); int s = lst_Font->size(); for (int i = 1; i < s; i++ ) { if ((Fl_Font)reinterpret_cast(lst_Font->data(i)) == n) { lst_Font->value(i); FontNameSelect(); break; } } } void Font_Browser::fontSize(int s) { fontsize = s; int n = lst_Size->size(); for (int i = 1; i < n; i++) { if ((intptr_t)lst_Size->data(i) == fontsize) { lst_Size->value(i); break; } } txt_Size->value(s); } void Font_Browser::fontColor(Fl_Color c) { btn_Color->color(fontcolor = c); box_Example->SetFont(fontnbr, fontsize, fontcolor); box_Example->redraw(); } void Font_Browser::fontName(const char* n) { int s = lst_Font->size(); for (int i = 1; i < s; i++) { if (!strcmp(lst_Font->text(i), n)) { lst_Font->value(i); FontNameSelect(); } } } void Font_Browser::fontFilter(filter_t filter) { int s = lst_Font->size(); switch (filter) { case FIXED_WIDTH: for (int i = 0; i < s; i++) { if (fixed[i]) lst_Font->show(i + 1); else lst_Font->hide(i + 1); } btn_fixed->value(1); break; case VARIABLE_WIDTH: for (int i = 0; i < s; i++) { if (!fixed[i]) lst_Font->show(i + 1); else lst_Font->hide(i + 1); } btn_fixed->value(0); break; case ALL_TYPES: for (int i = 0; i < s; i++) lst_Font->show(i + 1); btn_fixed->value(0); break; } lst_Font->redraw(); lst_Font->topline(lst_Font->value()); } // separate thread used to evaluate fixed / proportional fonts // friend of Font_Browser // launched by Font_Browser instance 1 static pthread_t find_font_thread; //#define FBDEBUG 1 static int is_fixed; Fl_Font test_font; void font_test(void *) { fl_font(test_font, FL_NORMAL_SIZE); is_fixed = (fl_width(".") == fl_width("W")); } void *find_fixed_fonts(void *) { #ifdef FBDEBUG FILE *sys_fonts = fopen("fonts.txt", "w"); fprintf(sys_fonts, "Font #, Type, Name\n"); #endif for (int i = 0; i < Font_Browser::numfonts; i++) { test_font = Font_Browser::font_pairs[i].nbr; is_fixed = -1; Fl::awake(font_test); while (is_fixed == -1) { MilliSleep(1); } Font_Browser::fixed[i] = is_fixed; #ifdef FBDEBUG fprintf( sys_fonts, "%d, %c, %s\n", Font_Browser::font_pairs[i].nbr, Font_Browser::fixed[i] ? 'F' : 'P', (*(Font_Browser::font_pairs[i].name)).c_str()); #endif } #ifdef FBDEBUG fclose(sys_fonts); #endif return NULL; } void find_fonts() { if (pthread_create(&find_font_thread, NULL, find_fixed_fonts, NULL) < 0) { LOG_ERROR("%s", "pthread_create find_fixed_fonts failed"); } return; } bool Font_Browser::fixed_width(Fl_Font f) { fl_font(f, FL_NORMAL_SIZE); return fl_width(".") == fl_width("W"); } //---------------------------------------------------------------------- Preview_Box::Preview_Box(int x, int y, int w, int h, const char* l) : Fl_Widget(x, y, w, h, l) { fontName = 1; fontSize = FL_NORMAL_SIZE; box(FL_DOWN_BOX); color(FL_BACKGROUND2_COLOR); fontColor = FL_FOREGROUND_COLOR; } void Preview_Box::draw() { draw_box(); fl_font((Fl_Font)fontName, fontSize); fl_color(fontColor); fl_draw(label(), x()+3, y()+3, w()-6, h()-6, align()); } void Preview_Box::SetFont(int fontname, int fontsize, Fl_Color c) { fontName = fontname; fontSize = fontsize; fontColor = c; redraw(); } flrig-2.0.04/src/widgets/pl_tones.cxx0000664000175000017500000001217714475136651014453 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2018 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include "pl_tones.h" #define BOXWIDTH 50 #define BOXHEIGHT 20 #define BORDER 2 /** This widget creates a modal window for selecting a tone from a CTCSS map. */ static const char *szTONES[] = { "67.0", "69.3", "71.9", "74.4", "77.0", "79.7", "82.5", "85.4", "88.5", "91.5", "94.8", "97.4", "100.0", "103.5", "107.2", "110.9", "114.8", "118.8", "123.0", "127.3", "131.8", "136.5", "141.3", "146.2", "151.4", "156.7", "159.8", "162.2", "165.5", "167.9", "171.3", "173.8", "177.3", "179.9", "183.5", "186.2", "189.9", "192.8", "196.6", "199.5", "203.5", "206.5", "210.7", "218.1", "225.7", "229.1", "233.6", "241.8", "250.3", "254.1" }; TonePicker::TonePicker(int oldtone, Fl_Color clr1, Fl_Color clr2) : Fl_Window(BOXWIDTH*5 + 1 + 2*BORDER, BOXHEIGHT*10 + 1 + 2*BORDER), clr_bkgnd(clr1), clr_select(clr2) { clear_border(); set_modal(); initial = which = oldtone; } void TonePicker::drawbox(int c) { int X = (c % 5) * BOXWIDTH + BORDER; int Y = (c / 5) * BOXHEIGHT + BORDER; fl_draw_box(c == which ? FL_DOWN_BOX : FL_BORDER_BOX, X, Y, BOXWIDTH + 1, BOXHEIGHT + 1, c == which ? clr_select : clr_bkgnd); fl_color(c == which ? FL_WHITE : FL_FOREGROUND_COLOR); fl_draw(szTONES[c], X, Y, BOXWIDTH + 1, BOXHEIGHT + 1, (Fl_Align)(FL_ALIGN_CENTER | FL_ALIGN_INSIDE) ); } void TonePicker::draw() { if (damage() != FL_DAMAGE_CHILD) { fl_draw_box(FL_UP_BOX,0,0,w(),h(),color()); for (int c = 0; c < 50; c++) drawbox(c); } else { drawbox(previous); drawbox(which); } previous = which; } int TonePicker::handle(int e) { int c = which; switch (e) { case FL_PUSH: case FL_DRAG: { int X = (Fl::event_x_root() - x() - BORDER); if (X >= 0) X = X / BOXWIDTH; int Y = (Fl::event_y_root() - y() - BORDER); if (Y >= 0) Y = Y / BOXHEIGHT; if (X >= 0 && X < 5 && Y >= 0 && Y < 10) c = 5*Y + X; else c = initial; } break; case FL_RELEASE: done = 1; return 1; case FL_KEYBOARD: switch (Fl::event_key()) { case FL_Up: if (c > 5) c -= 5; break; case FL_Down: if (c < 45) c += 5; break; case FL_Left: if (c > 0) c--; break; case FL_Right: if (c < 50) c++; break; case FL_Escape: which = initial; done = 1; return 1; case FL_KP_Enter: case FL_Enter: done = 1; return 1; default: return 0; } break; default: return 0; } if (c != which) { which = c; damage(FL_DAMAGE_CHILD); int bx = (c % 5) * BOXWIDTH + BORDER; int by = (c / 5) * BOXHEIGHT + BORDER; int px = x(); int py = y(); int scr_x, scr_y, scr_w, scr_h; Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h); if (px < scr_x) px = scr_x; if (px + bx + BOXWIDTH + BORDER >= scr_x+scr_w) px = scr_x + scr_w - bx - BOXWIDTH-BORDER; if (py < scr_y) py = scr_y; if (py + by + BOXHEIGHT + BORDER >= scr_y+scr_h) py = scr_y + scr_h - by - BOXHEIGHT - BORDER; if (px + bx < BORDER) px = BORDER - bx; if (py + by < BORDER) py = BORDER - by; position(px,py); } return 1; } int TonePicker::run() { if (which > 50) { position( Fl::event_x_root() - w()/2, Fl::event_y_root() - y()/2); } else { position( Fl::event_x_root() - (initial % 5)*BOXWIDTH - BOXWIDTH/2 - BORDER, Fl::event_y_root() - (initial / 10)*BOXHEIGHT - BOXHEIGHT/2 - BORDER); } show(); Fl::grab(*this); done = 0; while (!done) Fl::wait(); Fl::grab(0); return which; } void btn_cb (Fl_Button *v, void *d) { Fl_PL_tone *p = (Fl_PL_tone *)(v->parent()); TonePicker m(p->val, p->clr_bkgnd, p->clr_select); int val = m.run(); p->val = val; p->valbox->label(szTONES[val]); p->valbox->redraw(); } Fl_PL_tone::Fl_PL_tone(int X, int Y, int W, int H, const char *label) : Fl_Group (X, Y, W, H, label) { valbox = new Fl_Box (FL_DOWN_BOX, X, Y, W-H, H, ""); valbox->align(FL_ALIGN_INSIDE | FL_ALIGN_LEFT); valbox->color(FL_BACKGROUND2_COLOR); btn = new Fl_Button (X + W - H + 1, Y, H - 1, H, "@2>"); btn->callback ((Fl_Callback *)btn_cb, 0); clr_bkgnd = FL_BACKGROUND_COLOR; clr_select = FL_SELECTION_COLOR; val = 0; } Fl_PL_tone::~Fl_PL_tone() { delete valbox; delete btn; } int Fl_PL_tone::value() { return val; } void Fl_PL_tone::value(int val_) { val = val_; valbox->label(szTONES[val]); } void Fl_PL_tone::background(Fl_Color clr) { clr_bkgnd = clr; } void Fl_PL_tone::color_select(Fl_Color clr) { clr_select = clr; } flrig-2.0.04/src/widgets/ValueSlider.cxx0000664000175000017500000000675014502041135015026 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- //====================================================================== // class wheel_slider - based on Fl_Slider // class wheel_value_slider - based on Fl_Value_Slider //====================================================================== #include #include #include "ValueSlider.h" /* events 0 FL_NO_EVENT - No event (or an event fltk does not understand) occurred (0). 1 FL_PUSH - A mouse button was pushed. 2 FL_RELEASE - A mouse button was released. 3 FL_ENTER - The mouse pointer entered a widget. 4 FL_LEAVE - The mouse pointer left a widget. 5 FL_DRAG - The mouse pointer was moved with a button pressed. 6 FL_FOCUS - A widget should receive keyboard focus. 7 FL_UNFOCUS - A widget loses keyboard focus. 8 FL_KEYBOARD - A key was pressed. 9 FL_CLOSE - A window was closed. 10 FL_MOVE - The mouse pointer was moved with no buttons pressed. 11 FL_SHORTCUT - The user pressed a shortcut key. 12 FL_DEACTIVATE - The widget has been deactivated. 13 FL_ACTIVATE - The widget has been activated. 14 FL_HIDE - The widget has been hidden. 15 FL_SHOW - The widget has been shown. 16 FL_PASTE - The widget should paste the contents of the clipboard. 17 FL_SELECTIONCLEAR - The widget should clear any selections made for the clipboard. 18 FL_MOUSEWHEEL - The horizontal or vertical mousewheel was turned. 19 FL_DND_ENTER - The mouse pointer entered a widget dragging data. 20 FL_DND_DRAG - The mouse pointer was moved dragging data. 21 FL_DND_LEAVE - The mouse pointer left a widget still dragging data. 22 FL_DND_RELEASE - Dragged data is about to be dropped. 23 FL_SCREEN_CONFIGURATION_CHANGED - The screen configuration (number, positions) was changed. 24 FL_FULLSCREEN - The fullscreen state of the window has changed. */ int Fl_Wheel_Slider::handle(int event) { if (event == FL_RELEASE) {// || event == FL_LEAVE) { do_callback(); return 1; } if (!Fl::event_inside(this)) return 0; if (event == FL_MOUSEWHEEL) { int d; if ( !((d = Fl::event_dy()) || (d = Fl::event_dx())) ) return Fl_Slider::handle(event); if (reverse_) d = -d; value(clamp(increment(value(), d))); do_callback(); return 1; } return Fl_Slider::handle(event); } int Fl_Wheel_Value_Slider::handle(int event) { if (event == FL_RELEASE) {// || event == FL_LEAVE) { do_callback(); return 1; } if (!Fl::event_inside(this)) return 0; if (event == FL_MOUSEWHEEL) { int d; if ( !((d = Fl::event_dy()) || (d = Fl::event_dx())) ) return Fl_Value_Slider::handle(event); if (reverse_) d = -d; value(clamp(increment(value(), d))); do_callback(); return 1; } return Fl_Value_Slider::handle(event); } flrig-2.0.04/src/widgets/combo.cxx0000664000175000017500000004100214502041135013673 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // // This is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This software is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include "config.h" #include "combo.h" void popbrwsr_cb (Fl_Widget *v, long d); Fl_PopBrowser::Fl_PopBrowser (int X, int Y, int W, int H, const char *label) : Fl_Double_Window (X, Y, W, H, label) { hRow = H; wRow = W; clear_border(); box(FL_BORDER_BOX); align(FL_ALIGN_INSIDE); popbrwsr = new Fl_Select_Browser(0,0,wRow,hRow, ""); popbrwsr->callback ( (Fl_Callback*)popbrwsr_cb); popbrwsr->align(FL_ALIGN_INSIDE); // DST Need to mark the Fl_Select_Browser as INVISIBLE at initialization by calling 'hide'. // The 'visible_r' test will initially indicate that this // widget is visible because both it and its parent window // i.e., the PopBrowser/Fl_Window, do not have their INVISIBLE flag // set, even though the Fl_Select_Browser has not been shown. // The CB handle function needs to respond to the FL_KEYUP // associated with the user pressing down-arrow over the // input box IF and ONLY IF the Fl_Select_Browser is not shown. popbrwsr->hide(); parentCB = 0; parentWindow = 0; end(); set_modal(); } Fl_PopBrowser::~Fl_PopBrowser () { delete popbrwsr; } int Fl_PopBrowser::handle(int event) { Fl_ComboBox *cbx = (Fl_ComboBox*)this->parent(); // Can't use 'event_inside(widget *)' because the PopBrowser is a // (sub)window and the event_x and event_y coordinates are translated // to the subwindow frame origin before this 'handle' function is called. if (!Fl::event_inside(0, 0, this->w(), this->h()) && event == FL_PUSH) { pophide(); return 1; } if (event == FL_KEYDOWN) { int kbd = Fl::event_key(); char key = Fl::event_text()[0]; if (kbd == FL_Down) { if (popbrwsr->value() < popbrwsr->size()) popbrwsr->select(popbrwsr->value() + 1); return 1; } if (kbd == FL_Up && popbrwsr->value() > 1) { popbrwsr->select(popbrwsr->value() - 1); return 1; } if (key == '\r' || kbd == FL_Enter) { // kbd test for OS X int n = popbrwsr->value() - 1; pophide(); cbx->index(n); cbx->do_callback(); return 1; } if (key == '\b' || kbd == FL_BackSpace) { // kbd test for OS X if (!keystrokes.empty()) keystrokes.erase(keystrokes.length() - 1, 1); return 1; } if (key == 0x1b || kbd == FL_Escape) { // kbd test for OS X pophide(); return 1; } if (key >= ' ' && key <= 0x7f) { keystrokes += key; for (int i = 0; i < cbx->listsize; i++) { if (strncasecmp(keystrokes.c_str(), cbx->datalist[i]->s, keystrokes.length()) == 0) { popbrwsr->select(i+1); popbrwsr->show(i+1); return 1; } } return 0; } } return Fl_Group::handle(event); } void Fl_PopBrowser::add(char *s, void *d) { popbrwsr->add(s,d); } void Fl_PopBrowser::clear() { popbrwsr->clear(); } void Fl_PopBrowser::sort() { return; } void Fl_PopBrowser::popshow (int x, int y) { int nRows = parentCB->numrows(); int fh = fl_height(); int height = nRows * fh + 4; if (popbrwsr->size() == 0) return; if (nRows > parentCB->lsize()) nRows = parentCB->lsize(); // Resize and reposition the popup to insure that it is within the bounds // of the uppermost parent widget. // Preferred position is just below and at the same x position as the // parent widget. Fl_Widget *gparent = parentCB; int hp = gparent->h(); while ((gparent = gparent->parent())) { hp = gparent->h(); parentWindow = gparent; } int nu = nRows, nl = nRows; int hu = nu * fh + 4, hl = nl * fh + 4; int yu = parentCB->y() - hu; int yl = y; while (nl > 1 && (yl + hl > hp)) { nl--; hl -= fh; } while (nu > 1 && yu < 0) { nu--; yu += fh; hu -= fh; } y = yl; height = hl - 4; if (nl < nu) { y = yu; height = hu; } wRow = parentCB->w(); popbrwsr->size (wRow, height); resize (x, y, wRow, height); popbrwsr->redraw(); // Locate first occurrence of input string value in the list // and ensure it's in view when browser pops up; starts list // at beginning if no match. // This search needs to respect the uniqueness and case sensitivity spec int i = parentCB->index(); if (i >= 0 && i < parentCB->listsize) { for (i = 0; i < parentCB->listsize; i++) { if (parentCB->type_ == COMBOBOX) { if ((parentCB->listtype & FL_COMBO_UNIQUE_NOCASE) == FL_COMBO_UNIQUE_NOCASE) { if (!strcasecmp(parentCB->val->value(), parentCB->datalist[i]->s)) break; } else { // case sensitive test if (!strcmp(parentCB->val->value(), parentCB->datalist[i]->s)) break; } } else { // LISTBOX case if ((parentCB->listtype & FL_COMBO_UNIQUE_NOCASE) == FL_COMBO_UNIQUE_NOCASE) { if (!strcasecmp(parentCB->valbox->label(), parentCB->datalist[i]->s)) break; } else { // case sensitive test if (!strcmp(parentCB->valbox->label(), parentCB->datalist[i]->s)) break; } } } if (i == parentCB->listsize) i = 0; } popbrwsr->select (i ? i + 1: 1); keystrokes.clear(); popbrwsr->show(); show(); for (const Fl_Widget* o = popbrwsr; o; o = o->parent()) ((Fl_Widget *)o)->set_visible(); if (parentWindow) { parentWindow->damage(FL_DAMAGE_ALL); parentWindow->redraw(); } // 'Grab' mouse events so that we can close the // Fl_Select_Browser if user clicks outside its window. Fl::grab(this); } void Fl_PopBrowser::pophide () { hide (); if (parentWindow) { parentWindow->damage(FL_DAMAGE_ALL); parentWindow->redraw(); } Fl::grab(0); Fl::focus(((Fl_ComboBox*)parent())->btn); } void Fl_PopBrowser::popbrwsr_cb_i (Fl_Widget *v, long d) { // update the return values Fl_Select_Browser *SB = (Fl_Select_Browser *)(v); Fl_PopBrowser *PB = (Fl_PopBrowser *)(SB->parent()); Fl_ComboBox *CB = (Fl_ComboBox *)(PB->parent()); int row = SB->value(); if (row == 0) return; SB->deselect(); CB->index(row - 1); PB->pophide(); CB->do_callback(); return; } void popbrwsr_cb (Fl_Widget *v, long d) { ((Fl_PopBrowser *)(v))->popbrwsr_cb_i (v, d); return; } void Fl_ComboBox::fl_popbrwsr(Fl_Widget *p) { int xpos = p->x(), ypos = p->h() + p->y(); // pass the calling widget to the popup browser so that the // correct callback function can be called when the user selects an item // from the browser list Brwsr->parentCB = (Fl_ComboBox *) p; Brwsr->clear_kbd(); Brwsr->popshow(xpos, ypos); return; } void btnComboBox_cb (Fl_Widget *v, void *d) { Fl_ComboBox *p = (Fl_ComboBox *)(v->parent()); p->fl_popbrwsr (p); return; } void val_callback(Fl_Widget *w, void *d) { Fl_Input *inp = (Fl_Input *)(w); Fl_ComboBox *cbx = (Fl_ComboBox *)(d); if (!inp->readonly()) { cbx->add(inp->value()); cbx->sort(); } } Fl_ComboBox::Fl_ComboBox (int X,int Y,int W,int H, const char *lbl, int wtype) : Fl_Group (X, Y, W, H, lbl) { width = W; height = H; type_ = wtype; valbox = new Fl_Box (FL_DOWN_BOX, X, Y, W-H, H, ""); valbox->align(FL_ALIGN_INSIDE | FL_ALIGN_LEFT); valbox->color(FL_BACKGROUND2_COLOR); val = new Fl_Input (X, Y, W-H, H, ""); val->align(FL_ALIGN_INSIDE | FL_ALIGN_LEFT); val->callback((Fl_Callback *)val_callback, this); val->when(FL_WHEN_RELEASE); val->value(""); if (type_ == LISTBOX) { valbox->show(); val->hide(); } else { val->show(); valbox->hide(); } btn = new Fl_Button (X + W - H + 1, Y, H - 1, H, "@2>"); btn->callback ((Fl_Callback *)btnComboBox_cb, 0); Brwsr = 0; datalist = new datambr *[FL_COMBO_LIST_INCR]; maxsize = FL_COMBO_LIST_INCR; for (int i = 0; i < FL_COMBO_LIST_INCR; i++) datalist[i] = 0; listsize = 0; listtype = FL_COMBO_UNIQUE_NOCASE; Brwsr = new Fl_PopBrowser(X, Y, W, H, ""); Brwsr->align(FL_ALIGN_INSIDE); idx = 0; sort_type = ALPHA_SORT; end(); numrows_ = 8; } Fl_ComboBox::~Fl_ComboBox() { delete Brwsr; for (int i = 0; i < listsize; i++) { if (datalist[i]) { if (datalist[i]->s) delete [] datalist[i]->s; delete datalist[i]; } } delete [] datalist; } int Fl_ComboBox::handle(int event) { if (Fl::event_inside(this)) { // The 'down arrow' can be used to pop up the browser if the browser // is not already visible. If the browser IS visible, IT will use // the 'down arrow' keypress to scroll its list. bool sb_visible_r = Brwsr->sb()->visible_r(); if (event == FL_KEYUP && !sb_visible_r) { int kbd = Fl::event_key(); if (kbd == FL_Down) { fl_popbrwsr (this); return 1; } } if (event == FL_MOUSEWHEEL) { if (listsize == 0) return 0; int d = Fl::event_dy(); if (d) { if (d > 0) idx ++; else idx--; if (idx < 0) idx = 0; if (idx >= listsize) idx = listsize - 1; if (type_ == LISTBOX) { valbox->label(datalist[idx]->s); valbox->redraw_label(); } else { val->value( datalist[idx]->s); val->redraw(); } Fl_Group::do_callback(); return 1; } } } return Fl_Group::handle(event); } void Fl_ComboBox::type (int t) { listtype = t; } void Fl_ComboBox::readonly(bool yes) { if (type_ == LISTBOX) return; val->readonly(yes); if (yes) val->selection_color(fl_rgb_color(173,216,230)); else val->selection_color(FL_SELECTION_COLOR); } // ComboBox value is contained in the val widget const char *Fl_ComboBox::value() { if (type_ == LISTBOX) return valbox->label(); else return val->value(); } void Fl_ComboBox::value( std::string s ) { while (s[0] == ' ') { s.erase(0,1); } if (s.empty()) { if (type_ == LISTBOX) { valbox->label(""); valbox->redraw_label(); } else { val->value(""); val->redraw(); } return; } int i; if ((listtype & FL_COMBO_UNIQUE_NOCASE) == FL_COMBO_UNIQUE_NOCASE) { for (i = 0; i < listsize; i++) { if (strcasecmp (s.c_str(), datalist[i]->s) == 0) break; } } else { for (i = 0; i < listsize; i++) { if (strcmp (s.c_str(), datalist[i]->s) == 0) break; } } if (i < listsize) { idx = i; if (type_ == LISTBOX) { valbox->label(datalist[idx]->s); valbox->redraw_label(); } else { val->value(datalist[idx]->s); val->redraw(); } } else { if (type_ == LISTBOX) { valbox->label(""); valbox->redraw_label(); } else if (type_ != LISTBOX && !val->readonly()) { insert(s.c_str(), 0); for (i = 0; i < listsize; i++) { if (strcmp (s.c_str(), datalist[i]->s) == 0) { idx = i; val->value(datalist[idx]->s); break; } val->redraw(); } } else { val->value(""); val->redraw(); } } } void Fl_ComboBox::put_value(const char *s) { value(s); } void Fl_ComboBox::index(int i) { if (i >= 0 && i < listsize) { idx = i; if (type_ == LISTBOX) { valbox->label(datalist[idx]->s); valbox->redraw_label(); } else { val->value( datalist[idx]->s); val->redraw(); } } } int Fl_ComboBox::index() { return idx; } void * Fl_ComboBox::data() { return datalist[idx]->d;//retdata; } void Fl_ComboBox::insert(const char *str, void *d) { datalist[listsize] = new datambr; datalist[listsize]->s = new char [strlen(str) + 1]; datalist[listsize]->s[0] = 0; strcpy (datalist[listsize]->s, str); datalist[listsize]->d = d; Brwsr->add(datalist[listsize]->s,d); listsize++; if (listsize == maxsize) { int nusize = maxsize + FL_COMBO_LIST_INCR; datambr **temparray = new datambr *[nusize]; for (int i = 0; i < listsize; i++) temparray[i] = datalist[i]; delete [] datalist; datalist = temparray; maxsize = nusize; } } // Add a single value, or a '|' delimited set of values, to // the datalist depending on the uniqueness and case comparision specification. void Fl_ComboBox::add( const char *s, void * d) { std::string str = s; std::string sinsert; size_t p = str.find("|"); bool found = false; bool last_one = false; // test for composite list if (p != std::string::npos) { while (true) { sinsert = str.substr(0, p); found = false; // test for in list if ((listtype == FL_COMBO_UNIQUE_NOCASE) || (listtype == FL_COMBO_UNIQUE)) { for (int i = 0; i < listsize; i++) { if ((listtype & FL_COMBO_UNIQUE_NOCASE) == FL_COMBO_UNIQUE_NOCASE) { if (strcasecmp (sinsert.c_str(), datalist[i]->s) == 0) { found = true; break; } } else // case sensitive test if (strcmp (sinsert.c_str(), datalist[i]->s) == 0) { found = true; break; } } } // not in list, so add this entry if (!found) insert(sinsert.c_str(), d); // if not the last item, erase entry in original string if (last_one) break; str.erase(0, p+1); // Look for another entry; note that there should // always be another entry past the last delimiter. if (str.find('|') == std::string::npos) { p = str.length(); last_one = true; } else p = str.find("|"); } } else { // Single entry case // Still need to test a single entry to avoid duplication in the list if ((listtype == FL_COMBO_UNIQUE_NOCASE) || (listtype == FL_COMBO_UNIQUE)) { for (int i = 0; i < listsize; i++) { if ((listtype & FL_COMBO_UNIQUE_NOCASE) == FL_COMBO_UNIQUE_NOCASE) { if (strcasecmp (str.c_str(), datalist[i]->s) == 0) { found = true; break; } } else if ((listtype & FL_COMBO_UNIQUE) == FL_COMBO_UNIQUE) { // case sensitive test if (strcmp (str.c_str(), datalist[i]->s) == 0) { found = true; break; } } } } // Single entry - not in list, so add this entry if (!found) insert(str.c_str(), d); } } void Fl_ComboBox::clear() { Brwsr->clear(); if (listsize == 0) return; for (int i = 0; i < listsize; i++) { delete [] datalist[i]->s; delete datalist[i]; } listsize = 0; } int SerialCompare( const void *x1, const void *x2 ) { datambr *X1, *X2; X1 = *(datambr **)(x1); X2 = *(datambr **)(x2); std::string str1 = X1->s, str2 = X2->s; if (str1.length() < str2.length()) return -1; if (str1.length() > str2.length()) return 1; if (str1 == str2) return 0; if (str1 < str2) return -1; return 1; } int AlphaCompare( const void *x1, const void *x2 ) { datambr *X1, *X2; X1 = *(datambr **)(x1); X2 = *(datambr **)(x2); std::string str1 = X1->s; std::string str2 = X2->s; size_t len = str1.length(); if (len > str2.length()) len = str2.length(); for (size_t p = 0; p < len; p++) { if (toupper(str1[p]) < toupper(str2[p])) return -1; if (toupper(str1[p]) > toupper(str2[p])) return 1; } // if (str1.length() < str2.length()) return -1; // if (str1.length() > str2.length()) return 1; return 0; } int UcaseCompare( const void *x1, const void *x2 ) { datambr *X1, *X2; X1 = *(datambr **)(x1); X2 = *(datambr **)(x2); std::string str1 = X1->s; std::string str2 = X2->s; size_t len = str1.length(); if (len > str2.length()) len = str2.length(); for (size_t p = 0; p < len; p++) { if (toupper(str1[p]) < toupper(str2[p])) return -1; if (toupper(str1[p]) > toupper(str2[p])) return 1; } if (str1.length() < str2.length()) return -1; if (str1.length() > str2.length()) return 1; return 0; } void Fl_ComboBox::sort() { Brwsr->clear (); qsort (&datalist[0], listsize, sizeof (datambr *), (sort_type == SERIAL_SORT ? SerialCompare : AlphaCompare)); for (int i = 0; i < listsize; i++) Brwsr->add (datalist[i]->s, datalist[i]->d); } void Fl_ComboBox::textfont (int fnt) { if (type_ == LISTBOX) valbox->labelfont (fnt); else val->textfont (fnt); } void Fl_ComboBox::textsize (uchar n) { if (type_ == LISTBOX) valbox->labelsize(n); else val->textsize (n); } void Fl_ComboBox::textcolor( Fl_Color c) { if (type_ == LISTBOX) valbox->labelcolor (c); else val->textcolor (c); } void Fl_ComboBox::color(Fl_Color c) { _color = c; if (type_ == LISTBOX) { valbox->color(c); valbox->redraw(); } else { val->color(c); val->redraw(); } if (Brwsr) Brwsr->color(c); } int Fl_ComboBox::find_index(const char *str) { if((listsize < 1) || !str) return -1; for (int i = 0; i < listsize; i++) { if(datalist[i]->s) if(strncmp(datalist[i]->s, str, FILENAME_MAX) == 0) return i; } return -1; } void Fl_ComboBox::position(int n) { if (type_ != LISTBOX) val->position(n, n); } flrig-2.0.04/src/widgets/Fl_SigBar.cxx0000664000175000017500000000752514475136651014421 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // // Please report all bugs and problems to: w1hkj@w1hkj.com // // Contents: // // Fl_SigBar::draw() - Draw the check button. // Fl_SigBar::Fl_SigBar() - Construct a Fl_SigBar widget. // // // Include necessary header files... // #include #include #include #include #include #include "Fl_SigBar.h" // // Fl_SigBar is a SigBar bar widget based off Fl_Widget that shows a // standard Signal Bar with a peak reading indicator ... // // // 'Fl_SigBar::draw()' - Draw the check button. // void Fl_SigBar::draw() { // Get the box borders... int bx = Fl::box_dx(box()); int by = Fl::box_dy(box()); int bw = Fl::box_dw(box()); int bh = Fl::box_dh(box()); // Size of SigBar bar... int SigBar; int PeakPos; // Draw the SigBar bar... // Draw the box and label... if (horiz == true) { int tx, tw; // Temporary X + width tx = x() + bx; tw = w() - bw; SigBar = (int)(tw * (value_ - minimum_) / (maximum_ - minimum_) + 0.5f); PeakPos = (int)(tw * (peakv_ - minimum_) / (maximum_ - minimum_) + 0.5f); if (SigBar > 0 ) { //|| PeakPos > 0) { fl_clip(x(), y(), SigBar + bx, h()); draw_box(box(), x(), y(), w(), h(), active_r() ? color() : fl_inactive(color())); fl_pop_clip(); fl_clip(tx + SigBar, y(), w() - SigBar, h()); draw_box(box(), x(), y(), w(), h(), active_r() ? color2() : fl_inactive(color2())); fl_pop_clip(); fl_clip(tx + PeakPos, y(), 2, h()); draw_box(box(), x(), y(), w(), h(), pkcolor); fl_pop_clip(); } else draw_box(box(), x(), y(), w(), h(), color2()); } else { int ty, th; // Temporary Y + height ty = y() + by; th = h() - bh; SigBar = (int)(th * (value_ - minimum_) / (maximum_ - minimum_) + 0.5f); PeakPos = (int)(th * (peakv_ - minimum_) / (maximum_ - minimum_) + 0.5f); if (SigBar > 0 ) { //|| PeakPos > 0) { fl_clip(x(), y(), w(), SigBar + by); draw_box(box(), x(), y(), w(), h(), FL_BLACK); fl_pop_clip(); fl_clip(x(), ty + SigBar, w(), h() - SigBar); draw_box(box(), x(), y(), w(), h(), color()); fl_pop_clip(); fl_clip(x(), ty + PeakPos, w(), 2); draw_box(box(), x(), y(), w(), h(), pkcolor); fl_pop_clip(); } else draw_box(box(), x(), y(), w(), h(), color2()); } } // // 'Fl_SigBar::Fl_SigBar()' - Construct a Fl_SigBar widget. // Fl_SigBar::Fl_SigBar(int X, int Y, int W, int H, const char* l) : Fl_Widget(X, Y, W, H, l) { align(FL_ALIGN_INSIDE); peakv_ = 0.0f; value_ = 0.0f; horiz = true; pkcolor = FL_RED; clear(); aging_ = avg_ = SIGBAR_ARRAY_SIZE / 2; } void Fl_SigBar::value( double v ) { peakv_ = v; value_ = 0; for (int i = 1; i < SIGBAR_ARRAY_SIZE; i++) { vals_[i-1] = vals_[i]; } vals_[SIGBAR_ARRAY_SIZE - 1] = v; for (int i = SIGBAR_ARRAY_SIZE - avg_; i < SIGBAR_ARRAY_SIZE; i++) value_ += vals_[i]; value_ /= avg_; for (int i = SIGBAR_ARRAY_SIZE - aging_; i < SIGBAR_ARRAY_SIZE; i++) if (peakv_ < vals_[i]) peakv_ = vals_[i]; }; // // End of "$Id: Fl_SigBar.cxx 4288 2005-04-16 00:13:17Z mike $". // flrig-2.0.04/src/widgets/flinput2.cxx0000664000175000017500000001263314502041135014347 00000000000000// ===================================================================== // // flinput2.cxx // // Author: Stelios Buononos, M0GLD // Copyright: 2010 // // This file is part of flrig. // // This is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This software is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. It is // copyright under the GNU General Public License. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // ===================================================================== #include "config.h" #define FLTK_VER (FLRIG_FLTK_API_MAJOR * 10000 + FLRIG_FLTK_API_MINOR * 100) #if FLTK_VER >= 10400 # define FLPOS insert_position #else # define FLPOS position #endif #include #include #include #include #include #include #include #include #include "icons.h" #include "flinput2.h" #include "gettext.h" #include "util.h" enum { OP_UNDO, OP_CUT, OP_COPY, OP_PASTE, OP_DELETE, OP_CLEAR, OP_SELECT_ALL }; static Fl_Menu_Item cmenu[] = { { icons::make_icon_label(_("Undo"), edit_undo_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL }, { icons::make_icon_label(_("Cut"), edit_cut_icon), 0, 0, 0, 0, _FL_MULTI_LABEL }, { icons::make_icon_label(_("Copy"), edit_copy_icon), 0, 0, 0, 0, _FL_MULTI_LABEL }, { icons::make_icon_label(_("Paste"), edit_paste_icon), 0, 0, 0, 0, _FL_MULTI_LABEL }, { icons::make_icon_label(_("Delete"), trash_icon), 0, 0, 0, 0, _FL_MULTI_LABEL }, { icons::make_icon_label(_("Clear"), edit_clear_icon), 0, 0, 0, FL_MENU_DIVIDER, _FL_MULTI_LABEL }, { icons::make_icon_label(_("Select All"), edit_select_all_icon), 0, 0, 0, 0, _FL_MULTI_LABEL }, { 0 } }; static bool cmenu_init = false; Fl_Input2::Fl_Input2(int x, int y, int w, int h, const char* l) : Fl_Input(x, y, w, h, l) { if (!cmenu_init) { for (size_t i = 0; i < sizeof(cmenu)/sizeof(*cmenu) - 1; i++) if (cmenu[i].labeltype() == _FL_MULTI_LABEL) icons::set_icon_label(&cmenu[i]); cmenu_init = true; } } int Fl_Input2::handle(int event) { switch (event) { case FL_KEYBOARD: { int b = Fl::event_key(); int p = FLPOS(); // stop the move-to-next-field madness, we have Tab for that! if (unlikely((b == FL_Left && p == 0) || (b == FL_Right && p == size()) || (b == FL_Up && line_start(p) == 0) || (b == FL_Down && line_end(p) == size()))) return 1; else if (unlikely(Fl::event_state() & (FL_ALT | FL_META))) { switch (b) { case 'c': { // capitalise if (readonly() || p == size()) return 1; while (p < size() && isspace(*(value() + p))) p++; if (p == size()) return 1; char c = toupper(*(value() + p)); replace(p, p + 1, &c, 1); FLPOS(word_end(p)); } return 1; case 'u': case 'l': { // upper/lower case if (readonly() || p == size()) return 1; while (p < size() && isspace(*(value() + p))) p++; int n = word_end(p) - p; if (n == 0) return 1; char* s = new char[n]; memcpy(s, value() + p, n); if (b == 'u') for (int i = 0; i < n; i++) s[i] = toupper(s[i]); else for (int i = 0; i < n; i++) s[i] = tolower(s[i]); replace(p, p + n, s, n); FLPOS(p + n); delete [] s; return 1; } default: break; } } if (b >= FL_F && b <= FL_F_Last) { do_callback(); return 1; } if ( (Fl::event_state() & FL_ALT) && ((b == 'p') || (b == 's') || (b == 'c') ) ) { do_callback(); return 1; } } return Fl_Input::handle(event); case FL_MOUSEWHEEL: { if (!((type() & (FL_MULTILINE_INPUT | FL_MULTILINE_OUTPUT)) && Fl::event_inside(this))) return Fl_Input::handle(event); int d; if (!((d = Fl::event_dy()) || (d = Fl::event_dx()))) return Fl_Input::handle(event); if (Fl::focus() != this) take_focus(); up_down_position(d + (d > 0 ? line_end(FLPOS()) : line_start(FLPOS()))); return 1; } case FL_PUSH: if (Fl::event_button() == FL_RIGHT_MOUSE) break; // fall through default: return Fl_Input::handle(event); } bool sel = FLPOS() != mark(), ro = readonly(); icons::set_active(&cmenu[OP_UNDO], !ro); icons::set_active(&cmenu[OP_CUT], !ro && sel); icons::set_active(&cmenu[OP_COPY], sel); icons::set_active(&cmenu[OP_PASTE], !ro); icons::set_active(&cmenu[OP_DELETE], !ro && sel); icons::set_active(&cmenu[OP_CLEAR], !ro && size()); icons::set_active(&cmenu[OP_SELECT_ALL], size()); take_focus(); window()->cursor(FL_CURSOR_DEFAULT); int t = Fl_Tooltip::enabled(); Fl_Tooltip::disable(); const Fl_Menu_Item* m = cmenu->popup(Fl::event_x(), Fl::event_y()); Fl_Tooltip::enable(t); if (!m) return 1; switch (m - cmenu) { case OP_UNDO: undo(); break; case OP_CUT: cut(); copy_cuts(); break; case OP_COPY: copy(1); break; case OP_PASTE: Fl::paste(*this, 1); break; case OP_DELETE: cut(); break; case OP_CLEAR: cut(0, size()); break; case OP_SELECT_ALL: FLPOS(0, size()); break; } return 1; } flrig-2.0.04/src/widgets/FreqControl.cxx0000664000175000017500000004751014502041135015044 00000000000000// ---------------------------------------------------------------------------- // Frequency Control Widget // // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) #include #include #include #include #include #if GCC_VERSION > 40201 # include #endif #include #include "FreqControl.h" #include "gettext.h" std::string old_input_buffer; // Hold contents of Fl_Float_Input widget prior to change in case of need to revert const char *cFreqControl::Label[10] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; static void blink_point(Fl_Widget* w) { w->label(*w->label() ? "" : "."); Fl::repeat_timeout(0.5, (Fl_Timeout_Handler)blink_point, w); } void cFreqControl::IncFreq (int nbr) { unsigned long long v = val; v += mult[nbr] * precision; if (v <= maxVal) { val = v; updatevalue(); numeric_entry_mode(false); do_callback(); } } void cFreqControl::DecFreq (int nbr) { unsigned long long requested_decrement = mult[nbr] * precision; if (requested_decrement > val) { // Handle case where user clicks low (decrement) on // high value blank digit leading to underflow return; } else { val -= requested_decrement; updatevalue(); numeric_entry_mode(false); do_callback(); } } void cbSelectDigit (Fl_Widget *btn, void * nbr) { Fl_Button *b = (Fl_Button *)btn; int Nbr = reinterpret_cast (nbr); cFreqControl *fc = (cFreqControl *)b->parent(); if (fc->hrd_buttons) { int yclick = Fl::event_y(); int fc_yc = fc->y() + fc->h()/2; if (yclick <= fc_yc) fc->IncFreq(Nbr); else fc->DecFreq(Nbr); } else { if (Fl::event_button1()) fc->IncFreq(Nbr); else if (Fl::event_button3()) fc->DecFreq(Nbr); } fc->redraw(); } void cFreqControl::set_ndigits(int nbr) { // If number of digits change, remove/delete prior constructs if any // and create desired number. if (nbr > MAX_DIGITS) nbr = MAX_DIGITS; if (nbr < MIN_DIGITS) nbr = MIN_DIGITS; if (nD && nbr != nD) { for (int n = 0; n < nD; n++) { this->remove(Digit[n]); delete Digit[n]; } } if (nbr != nD) { for (int n = 0; n < nbr; n++) { Digit[n] = new Fl_Repeat_Button(0, 0, 1, 1, " "); Digit[n]->box(Digit_box_type); Digit[n]->labelcolor(LBLCOLOR); Digit[n]->color(BGCOLOR, SELCOLOR); Digit[n]->align(FL_ALIGN_INSIDE); Digit[n]->callback(cbSelectDigit, reinterpret_cast(n)); this->add(Digit[n]); } } nD = nbr; // Usable space inside FreqControl box border X = this->x() + bdr_x; Y = this->y() + bdr_y; W = this->w() - 2 * bdr_x; H = this->h() - 2 * bdr_y; // While we allow user to select a font, we pay no attention // to the user's selection of font size; we size the font // to fill the available height in the Fl_Repeat_Button box, // constrained by the maximum width allowable per digit. fs = H; fl_font(font_number, fs); fw = fl_width("0"); // Assumes the '0' numeral is the widest fh = fl_height(); while ( fs && ((fh - fl_descent() >= H) || ((nD + 0.5) * fw >= W))) { if (--fs <= 1) break; fl_font(font_number, fs); fh = fl_height(); fw = fl_width("0"); } dw = fw; pw = dw / 2; // Number display will be right-justified in available space. // Working from right to left: // Right-of-decimal Repeat Buttons (digits) // Decimal box // Left-of-decimal Repeat Buttons (digits) // Fill box int xpos = X + W; for (int n = 0; n < dpoint; n++) { xpos -= dw; Digit[n]->resize (xpos, Y, dw, H); Digit[n]->labelfont(font_number); Digit[n]->labelsize(fs); } xpos -= pw; decbx->resize(xpos, Y, pw, H); decbx->labelfont(font_number); decbx->labelsize(fs); for (int n = dpoint; n < nD; n++) { xpos -= dw; Digit[n]->resize(xpos, Y, dw, H); Digit[n]->labelfont(font_number); Digit[n]->labelsize(fs); } hfill->resize(X, Y, xpos - X, H); redraw(); // Compute max freq value double fmaxval_hz, fmaxval_khz; minVal = 0; fmaxval_hz = (pow(10.0, nD) - 1) * precision; unsigned long long UMAX = maximum();//(unsigned long int)(pow(2.0, 32) - 1); if (fmaxval_hz > UMAX) fmaxval_hz = UMAX; maxVal = fmaxval_hz; fmaxval_khz = (fmaxval_hz / 1000); // For tooltip use; not used elsewhere const char* freq_steps[] = { "1", "10", "100", "1k", "10k", "100k", "1M", "10M", "100M", "1G", "10G", "100G"}; static char tt[1000]; snprintf(tt, sizeof(tt), "Set Frequency: (Max val: %.3f kHz)\n\ Mouse cursor over digit\n\ . Left/Right Click to incr/decr digit by one\n\ . Hold L/R Click for repeat (digit reverses colors)\n\ . Middle Mouse click: paste from clipboard\n\ . SHIFT Left Click to set focus - colors reverse - then:\n\ - R/L arrow +/- %s; w/SHIFT %s; w/CTRL %s\n\ - U/D arrow +/- %s; w/SHIFT %s; w/CTRL %s\n\ - Pg U/D +/- %s; w/SHIFT %s; w/CTRL %s\n\ - L/R mouse click (hold for rpt) in top/bot half of digit\n\ - Ctrl/Meta-v: paste from clipboard\n\ or \n\ - Enter frequency with number keys or Keypad\n\ (decimal point blinks once entry has started)\n\ . BSP/Ctrl-BSP erase last digit/all digits entered\n\ . ENTER to confirm and send to rig and release focus\n\ . ESC to abort and revert to previous value", fmaxval_khz, freq_steps[3-dpoint], freq_steps[4-dpoint], freq_steps[5-dpoint], freq_steps[6-dpoint], freq_steps[7-dpoint], freq_steps[8-dpoint], freq_steps[9-dpoint], freq_steps[10-dpoint], freq_steps[11-dpoint]); tooltip(tt); } cFreqControl::cFreqControl(int x, int y, int w, int h, const char *lbl): Fl_Group(x,y,w,h,"") { end(); // End automatic child widget addition to Group parent; // child widgets will be added explicitly as appropriate. font_number = FL_HELVETICA; // Font will be overridden with stored preference BGCOLOR = REVLBLCOLOR = fl_rgb_color ( 255, 253, 222); // Light yellow; LBLCOLOR = REVBGCOLOR = FL_BLACK; SELCOLOR = fl_rgb_color ( 100, 100, 100); // Light gray oldval = val = 0; // Hz precision = 1; // Hz; Resolution of Frequency Control display; internal resolution always 1 Hz dpoint = 3; // Number of digits to the right of decimal nD = 0; // Number of digits to display // FreqControl box type and box border thicknesses box(FL_DOWN_BOX); color(BGCOLOR); bdr_x = Fl::box_dx(box()); bdr_y = Fl::box_dy(box()); // Repeat Button, decimal, and fill boxes Digit_box_type = FL_FLAT_BOX; // "Box" for decimal point - Created once; position and size will change as necessary decbx = new Fl_Box(0, 0, 1, 1, "."); decbx->box(Digit_box_type); decbx->color(BGCOLOR); decbx->labelcolor(LBLCOLOR); decbx->align(FL_ALIGN_INSIDE); add(decbx); // "Box" to fill empty space to the left of most significant digit - Created once; position and size will change as necessary hfill = new Fl_Box(0, 0, 1, 1, ""); hfill->box(Digit_box_type); hfill->labelcolor(LBLCOLOR); hfill->color(BGCOLOR); add(hfill); mult[0] = 1; for (int n = 1; n < MAX_DIGITS; n++ ) mult[n] = 10 * mult[n-1]; // Create Repeat Buttons; size and position widgets set_ndigits(atoi(lbl)); cbFunc = NULL; // Hidden widget used for managing text input and paste actions finp = new Fl_Float_Input(0, 0, 24,24); finp->callback(freq_input_cb, this); finp->when(FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED); finp->hide(); // true - either mouse button upper half of digit to inc; lower half to dec // false - Left mouse button increments; right mouse button decrements hrd_buttons = true; colors_reversed = false; active = true; // Frequency Control will accept changes numeric_entry_active = false; // User is NOT in the process of entering numbers by keyboard } cFreqControl::~cFreqControl() { delete decbx; delete hfill; delete finp; if (nD > 0) { for (int i = 0; i < nD; i++) { delete Digit[i]; } } } void cFreqControl::updatevalue() { unsigned long long v = val / precision; int i; if (v > 0ULL) { for (i = 0; i < nD; i++) { Digit[i]->label((v == 0 && i > dpoint) ? "" : Label[v % 10]); v /= 10; } } else { for (i = 0; i < (dpoint + 1); i++) Digit[i]->label("0"); for (; i < nD; i++) Digit[i]->label(""); } redraw(); } void cFreqControl::font(Fl_Font fnt) { font_number = fnt; set_ndigits(nD); updatevalue(); } void cFreqControl::SetCOLORS( Fl_Color LBLcolor, Fl_Color BGcolor) { if (this->contains(Fl::focus())) return; // Protect against calls from highlight_vfo // that would restore colors while freq entry in progress LBLCOLOR = REVBGCOLOR = LBLcolor; BGCOLOR = REVLBLCOLOR = BGcolor; UpdateCOLORS(LBLCOLOR, BGCOLOR); } void cFreqControl::SetBGCOLOR (uchar r, uchar g, uchar b) { BGCOLOR = fl_rgb_color (r, g, b); REVLBLCOLOR = BGCOLOR; UpdateCOLORS(LBLCOLOR, BGCOLOR); } void cFreqControl::SetLBLCOLOR (uchar r, uchar g, uchar b) { LBLCOLOR = fl_rgb_color (r, g, b); REVBGCOLOR = LBLCOLOR; UpdateCOLORS(LBLCOLOR, BGCOLOR); } void cFreqControl::restore_colors() { colors_reversed = false; UpdateCOLORS(LBLCOLOR, BGCOLOR); } void cFreqControl::reverse_colors() { colors_reversed = true; UpdateCOLORS(REVLBLCOLOR, REVBGCOLOR); } void cFreqControl::UpdateCOLORS(Fl_Color lbl, Fl_Color bg) { for (int n = 0; n < nD; n++) { Digit[n]->labelcolor(lbl); Digit[n]->color(bg); } decbx->labelcolor(lbl); decbx->color(bg); decbx->redraw(); decbx->redraw_label(); hfill->labelcolor(lbl); hfill->color(bg); hfill->redraw(); hfill->redraw_label(); color(bg); redraw(); } void cFreqControl::value(unsigned long long lv) { if (numeric_entry_mode()) return; // Don't allow third party to assign a value while user is entering via keyboard. if (lv > maxVal) return; // Assume this is an erroneous entry and reject it. oldval = val = lv; numeric_entry_mode(false); updatevalue(); } unsigned long long cFreqControl::maximum(void) { return 9999999999ULL; // Extreme frequency limit intended for non-rig control microwave case } void cFreqControl::cancel_kb_entry(void) { val = oldval; numeric_entry_mode(false); updatevalue(); do_callback(); // If user changes freq at rig while user is in the middle of keyboard freq entry, // and user aborts freq entry, FC-displayed freq will revert to original value // and the callback is needed to return the rig to the original value. } int cFreqControl::handle(int event) { // std::cerr << this << ": " << time(NULL) << " :handle: with event: " << fl_eventnames[event] << ", Fl::focus(): " << Fl::focus() << std::endl; // Use for debugging event processing // if (Fl::focus()) { // std::cerr << this << " The focus widget label: " << (Fl::focus()->label() ? Fl::focus()->label() : "no label") << std::endl; // std::cerr << this << " The focus widget tooltip: " << (Fl::focus()->tooltip() ? Fl::focus()->tooltip() : "no tooltip") << std::endl; // } if (event == FL_LEAVE && !numeric_entry_mode() && this->contains(Fl::focus())) { // not in numeric entry and either the FC or one of its children has focus) Fl::focus((Fl_Widget*)Fl::first_window()); return 1; } if (!active) { if (event == FL_MOUSEWHEEL) { return 1; // Prevent MW action over us from propagating } else { return 0; } } switch (event) { case FL_FOCUS: if (!Fl::focus()) return 0; // Reject a FOCUS event when no other widget has focus; // fltk platform variation shim principally to address the // click-outside-application-and-return case. // Upon application start, fltk sends FL_FOCUS to each widget in creation order until one accepts it. // Accept focus only if event is inside FC (this is the event triggering the FOCUS offer, which // should be the button click in the FC). if (Fl::event_inside(this)) { reverse_colors(); return 1; // Accept focus } return 0; //NOTREACHED case FL_UNFOCUS: if (Fl::focus() != this && this->contains(Fl::focus())) { // Repeat button took focus so cancel numeric entry if (numeric_entry_mode()) cancel_kb_entry(); return 1; } else if (!this->contains(Fl::focus())) { // Some other widget took focus; cancel numeric entry and restore colors. if (numeric_entry_mode()) cancel_kb_entry(); if (colors_reversed) restore_colors(); return 1; } return 0; //NOTREACHED case FL_KEYBOARD: if (Fl::focus() != this) return 1; // Discard keyboard events when an RB has focus. switch (Fl::event_key()) { case FL_Right: if (numeric_entry_mode()) return 1; if (Fl::event_ctrl()) IncFreq(2); else if (Fl::event_shift()) IncFreq(1); else IncFreq(0); return 1; //NOTREACHED case FL_Left: if (numeric_entry_mode()) return 1; if (Fl::event_ctrl()) DecFreq(2); else if (Fl::event_shift()) DecFreq(1); else DecFreq(0); return 1; //NOTREACHED case FL_Up: if (numeric_entry_mode()) return 1; if (Fl::event_ctrl()) IncFreq(5); else if (Fl::event_shift()) IncFreq(4); else IncFreq(3); return 1; //NOTREACHED case FL_Down: if (numeric_entry_mode()) return 1; if (Fl::event_ctrl()) DecFreq(5); else if (Fl::event_shift()) DecFreq(4); else DecFreq(3); return 1; //NOTREACHED case FL_Page_Up: if (numeric_entry_mode()) return 1; if (Fl::event_ctrl()) IncFreq(8); else if (Fl::event_shift()) IncFreq(7); else IncFreq(6); return 1; //NOTREACHED case FL_Page_Down: if (numeric_entry_mode()) return 1; if (Fl::event_ctrl()) DecFreq(8); else if (Fl::event_shift()) DecFreq(7); else DecFreq(6); return 1; //NOTREACHED case FL_BackSpace: if (numeric_entry_mode()) { return finp->handle(event); } else return 0; //NOTREACHED case FL_Enter: case FL_KP_Enter: if (numeric_entry_mode()) { finp->do_callback(); numeric_entry_mode(false); } do_callback(); Fl::focus((Fl_Widget*)Fl::first_window()); return 1; //NOTREACHED case FL_Escape: if (numeric_entry_mode()) cancel_kb_entry(); do_callback(); Fl::focus((Fl_Widget*)Fl::first_window()); return 1; //NOTREACHED case 'v': if (Fl::event_command()) { // FL_CTRL or OSX FL_META if (numeric_entry_mode()) { // Ignore Ctrl/Meta-v while in numeric entry mode return 1; } else { old_input_buffer = finp->value(); // Protect against paste value > max allowed Fl::paste(*(this->finp), 1); // 1 = Paste from clipboard do_callback(); } Fl::focus((Fl_Widget*)Fl::first_window()); } return 1; //NOTREACHED default: // Keyboard entry processing // Accept numbers, decimal point, and 'e' or 'E' to indicate exponential notation only int ch = Fl::event_text()[0]; if ((ch < '0' || ch > '9') && ch != '.' && ch != 'e' && ch!= 'E') return 1; if (!numeric_entry_mode()) { // User has begun entering a frequency numeric_entry_mode(true); // Set blinking decimal point to signify user is in numeric frequency entry mode finp->static_value(""); // Clear Fl_Float_Input string contents oldval = val; // Preserve current FC-internal integer val in case restoral is needed } old_input_buffer = finp->value(); // Preserve current Fl_Float_Input string value in case restoral is needed // if user entry > max allowed; pre-checks don't cover all cases. // If an exponent has been indicated ('e' or 'E' entered), allow one digit of exponent const char *e; if ((e = strchr(finp->value(), 'e')) || (e = strchr(finp->value(), 'E'))) { if (strlen(e) == 1) { return finp->handle(event); // Allow entry of digit } else { return 1; } } // If decimal already entered, limit additional digits to those being displayed. const char *p = strchr(finp->value(), '.'); if (p) { if (strlen(p) <= (size_t) dpoint) { return finp->handle(event); } else { // Allow the entry of 'e' or 'E' following the max decimal digits if (strlen(p) == (size_t) dpoint + 1 && (ch == 'e' || ch == 'E')) { return finp->handle(event); } else { return 1; } } } // Ignore excess digits left of decimal size_t inp_len = strlen(finp->value()); if ((inp_len == (unsigned long) (nD - dpoint)) && (ch != '.')) return 1; // Otherwise, accept entry return finp->handle(event); }// End FL_KEYBOARD event processing //NOTREACHED case FL_MOUSEWHEEL: if (Fl::event_inside(this)) { // Reject fltk's attempts to give us events that don't belong to us if (numeric_entry_mode()) { // Ignore mousewheel in numeric entry mode return 1; } else { int d; if ( !((d = Fl::event_dy()) || (d = Fl::event_dx())) ) return 1; for (int i = 0; i < nD; i++) { if (Fl::event_inside(Digit[i])) { d > 0 ? DecFreq(i) : IncFreq(i); return 1; } } } } return 1; // Consume but ignore mousewheel action outside FreqControl or inside FreqControl but not over digit //NOTREACHED case FL_PUSH: { if (colors_reversed) // Ignore mouse click if colors reversed return 1; int ev = Fl::event_button(); if (ev == FL_MIDDLE_MOUSE) { Fl::paste(*(this->finp), 0); // Send FL_PASTE to the Fl_Float_Input widget; its parent // Fl_Input_::handle checks for valid floating point entry. // 0 = Paste from selection, not clipboard do_callback(); return 1; } else if (ev == FL_LEFT_MOUSE && Fl::event_shift()) { reverse_colors(); Fl::focus(this); return 1; } else { return Fl_Group::handle(event); // The appropriate Repeat Button will handle the event } //NOTREACHED } default: return Fl_Group::handle(event); } } // Hidden Fl_Float_Input widget's callback called on keyboard number entry and on PASTE and ENTER actions. // // Compute the integer Hz representation of the Fl_Float_Input widget string value // and update the values shown on the Repeat Button labels. void cFreqControl::freq_input_cb(Fl_Widget*, void* arg) { cFreqControl* fc = reinterpret_cast(arg); double finp_val = strtod(fc->finp->value(), NULL); finp_val *= 1000; // Frequency string is in kHz - convert here to Hz used internally by FreqControl finp_val += 0.5; unsigned long long lval = (unsigned long long) finp_val; if (lval <= fc->maxVal) { fc->val = lval; fc->updatevalue(); } else { // Need to revert entry because we overran our max value fc->finp->value(old_input_buffer.c_str()); } } void cFreqControl::numeric_entry_mode(bool flag) { if (flag) { numeric_entry_active = true; Fl::add_timeout(0.0, (Fl_Timeout_Handler)blink_point, decbx); } else { numeric_entry_active = false; Fl::remove_timeout((Fl_Timeout_Handler)blink_point, decbx); // Ensure we have a visible decimal point after completion of keyboard entry; // might otherwise be blank due to uncertain ending state of 'blink_point' function. decbx->label("."); decbx->redraw_label(); } } static void restore_color(void* w) { cFreqControl *fc = (cFreqControl *)w; fc->restore_colors(); } static void reverse_color(void* w) { cFreqControl *fc = (cFreqControl *)w; fc->reverse_colors(); } void cFreqControl::visual_beep() { if (this->colors_reversed) { restore_color(this); Fl::add_timeout(0.1, reverse_color, this); } else { reverse_colors(); Fl::add_timeout(0.1, restore_color, this); } } void cFreqControl::resize(int x, int y, int w, int h) { Fl_Group::resize(x,y,w,h); set_ndigits(nD); return; } flrig-2.0.04/src/rigs/0000775000175000017500000000000014511461606011442 500000000000000flrig-2.0.04/src/rigs/elad/0000775000175000017500000000000014511461606012347 500000000000000flrig-2.0.04/src/rigs/elad/FDMDUO.cxx0000664000175000017500000005436714502041135013777 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "elad/FDMDUO.h" #include "support.h" static const char FDMDUOname_[] = "FDM DUO"; enum { duoLSB, duoUSB, duoCW, duoFM, duoAM, duoCWR}; static std::vectorFDMDUOmodes_; static const char* vm[] = { "LSB", "USB", "CW", "FM", "AM", "CW-R"}; static const char FDMDUO_mode_chr[] = { '1', '2', '3', '4', '5', '7' }; static const char FDMDUO_mode_type[] = { 'L', 'U', 'L', 'U', 'U', 'U' }; static std::vectorFDMDUO_empty; static const char *ve[] = { "N/A" }; static std::vectorFDMDUO_SSBwidths; static const char *vssb[] = { "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "4000", "5000", "6000", "D-300", "D-600", "D-1000" }; static std::vectorFDMDUO_LSBvals; static const char *vlsb[] = { "RF100;", "RF101;", "RF102;", "RF103;", "RF104;", "RF105;", "RF106;", "RF107;", "RF108;", "RF109;", "RF110;", "RF111;", "RF112;", "RF113;", "RF114;", "RF115;", "RF116;", "RF117;", "RF118;", "RF119;", "RF120;", "RF121;", "RF122;" }; static const int duoLSBvals = 23; static std::vectorFDMDUO_USBvals; static const char *vusb[] = { "RF200;", "RF201;", "RF202;", "RF203;", "RF204;", "RF205;", "RF206;", "RF207;", "RF208;", "RF209;", "RF210;", "RF211;", "RF212;", "RF213;", "RF214;", "RF215;", "RF216;", "RF217;", "RF218;", "RF219;", "RF220;", "RF221;", "RF222;" }; static const int duoUSBvals = 23; static std::vectorFDMDUO_AMwidths; static const char *vamw[] = { "2500", "3000", "3500", "4000", "4500", "5000", "5500", "6000" }; static std::vectorFDMDUO_AMvals; static const char *vamv[] = { "RF500;", "RF501;", "RF502;", "RF503;", "RF504;", "RF505;", "RF506;", "RF507;" }; static const int duoAMvals = 8; static std::vectorFDMDUO_CWwidths; static const char *vcww[] = { "100.4", "100.3", "100.2", "100.1", "100", "300", "500", "1000", "1500", "2600"}; static std::vectorFDMDUO_CWvals; static const char *vcwv[] = { "RF307;", "RF308;", "RF309;", "RF310;", "RF311;", "RF312;", "RF313;", "RF314;", "RF315;", "RF316;" }; static std::vectorFDMDUO_CWRwidths; static const char *vcwrw[] = { "100.4", "100.3", "100.2", "100.1", "100", "300", "500", "1000", "1500", "2600"}; static std::vectorFDMDUO_CWRvals; static const char *vcwrv[] = { "RF707;", "RF708;", "RF709;", "RF710;", "RF711;", "RF712;", "RF713;", "RF714;", "RF715;", "RF716;" }; static const int duoCWvals = 10; static std::vectorFDMDUO_FMwidths; static const char *vfmw[] = { "Narrow", "Wide", "Data" }; static std::vectorFDMDUO_FMvals; static const char *vfmv[] = { "RF400;", "RF401;", "RF402;" }; static const int duoFMvals = 3; static int agcval = 1; static bool fm_mode = false; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, // 5 { (Fl_Widget *)sldrMICGAIN, 54, 145, 368 }, // 6 { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, // 7 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FDMDUO::initialize() { modes_ = FDMDUOmodes_; _mode_type = FDMDUO_mode_type; bandwidths_ = FDMDUO_empty; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrSQUELCH; rig_widgets[3].W = sldrMICGAIN; rig_widgets[4].W = sldrPOWER; } RIG_FDMDUO::RIG_FDMDUO() { // base class values name_ = FDMDUOname_; VECTOR(FDMDUOmodes_, vm); VECTOR(FDMDUO_empty, ve); VECTOR(FDMDUO_SSBwidths, vssb); VECTOR(FDMDUO_LSBvals, vlsb); VECTOR(FDMDUO_USBvals, vusb); VECTOR(FDMDUO_AMwidths, vamw); VECTOR(FDMDUO_AMvals, vamv); VECTOR(FDMDUO_CWwidths, vcww); VECTOR(FDMDUO_CWvals, vcwv); VECTOR(FDMDUO_CWRwidths, vcwrw); VECTOR(FDMDUO_CWRvals, vcwrv); VECTOR(FDMDUO_FMwidths, vfmw); VECTOR(FDMDUO_FMvals, vfmv); modes_ = FDMDUOmodes_; _mode_type = FDMDUO_mode_type; bandwidths_ = FDMDUO_empty; widgets = rig_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8A03; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; has_extras = true; has_noise_reduction = has_noise_reduction_control = has_auto_notch = has_noise_control = has_sql_control = has_split = true; has_split_AB = true; has_micgain_control = true; // has_agc_control = true; has_swr_control = true; has_alc_control = true; has_power_out = true; has_dsp_controls = true; has_smeter = true; has_attenuator_control = true; has_preamp_control = true; has_mode_control = true; has_bandwidth_control = true; has_volume_control = true; has_power_control = true; has_tune_control = true; has_ptt_control = true; precision = 1; ndigits = 8; _noise_reduction_level = 0; _nrval1 = 2; _nrval2 = 4; preamp_level = atten_level = 0; powerScale = 100; // displays 0 to 5 as 0 to 50 W } static int ret = 0; const char * RIG_FDMDUO::get_bwname_(int n, int md) { const char *name = "NIL"; try { switch (md) { case duoLSB: if (n < duoLSBvals) name = FDMDUO_SSBwidths.at(n).c_str(); break; case duoUSB: if (n < duoUSBvals) name = FDMDUO_SSBwidths.at(n).c_str(); break; case duoCW: if (n < duoCWvals) name = FDMDUO_CWwidths.at(n).c_str(); break; case duoCWR: if (n < duoCWvals) name = FDMDUO_CWwidths.at(n).c_str(); break; case duoAM: if (n < duoAMvals) name = FDMDUO_AMwidths.at(n).c_str(); break; case duoFM: if (n < duoFMvals) name = FDMDUO_FMwidths.at(n).c_str(); break; } } catch (const std::exception& e) { std::cout << e.what() << '\n'; } return name; } void RIG_FDMDUO::shutdown() { } // SM cmd 0 ... 100 (rig values 0 ... 22) int RIG_FDMDUO::get_smeter() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_smeter"); ret = wait_char(';', 8, 100, "get Smeter", ASC); gett(""); if (ret < 8) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return mtr; mtr = 100 * atoi(&replystr[p + 3]) / 22; return mtr; } int RIG_FDMDUO::get_power_out() { float mtr = 0; cmd = "FP;"; get_trace(1, "get_power_out"); ret = wait_char(';', 10, 100, "get power", ASC); gett(""); if (ret < 10) return mtr; size_t p = replystr.rfind("FP"); if (p != std::string::npos) { mtr = atoi(&replystr[p + 3]); // value is 0 to 6000; 0 to 6.0 } return mtr; } int RIG_FDMDUO::power_scale() { return powerScale; } int RIG_FDMDUO::get_swr() { cmd = "WR;"; get_trace(1, "get_swr"); ret = wait_char(';', 10, 100, "get SWR/ALC", ASC); gett(""); if (ret < 10) return 0; size_t p = replystr.rfind("WR"); double swr = 0.0; if (p != std::string::npos) swr = atoi(&replystr[p+4]) + atoi(&replystr[p+7]) / 100.0; swr -= 1.0; if (swr < 0) swr = 0; swr *= 25; if (swr > 100) swr = 100; return int(swr); } int RIG_FDMDUO::get_alc(void) { return 0; } int RIG_FDMDUO::set_widths(int val) { int bw = 0; switch (val) { case duoLSB: bandwidths_ = FDMDUO_SSBwidths; bw = 14; break; case duoUSB: bandwidths_ = FDMDUO_SSBwidths; bw = 14; break; case duoCW: bandwidths_ = FDMDUO_CWwidths; bw = 6; break; case duoCWR: bandwidths_ = FDMDUO_CWRwidths; bw = 6; break; case duoAM: bandwidths_ = FDMDUO_AMwidths; bw = 5; break; case duoFM: bandwidths_ = FDMDUO_FMwidths; bw = 1; break; } return bw; } std::vector& RIG_FDMDUO::bwtable(int m) { switch (m) { case duoLSB: return FDMDUO_SSBwidths; case duoUSB: return FDMDUO_SSBwidths; case duoCW: return FDMDUO_CWwidths; case duoCWR: return FDMDUO_CWRwidths; case duoAM: return FDMDUO_AMwidths; case duoFM: return FDMDUO_FMwidths; } return FDMDUO_SSBwidths; } void RIG_FDMDUO::set_modeA(int val) { A.imode = val; cmd = "MD"; cmd += FDMDUO_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); A.iBW = set_widths(val); } int RIG_FDMDUO::get_modeA() { cmd = "MD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 4, 100, "get modeA", ASC); gett(""); if (ret < 4) return A.imode; size_t p = replystr.rfind("MD"); if (p != std::string::npos && (p + 2 < replystr.length())) { int md = replystr[p+2]; md = md - '1'; if (md == 6) md = 5; A.imode = md; A.iBW = set_widths(A.imode); } if (A.imode == 3) fm_mode = true; else fm_mode = false; return A.imode; } void RIG_FDMDUO::set_modeB(int val) { if (val == 3) fm_mode = true; else fm_mode = false; B.imode = val; cmd = "MD"; cmd += FDMDUO_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode B", cmd, ""); B.iBW = set_widths(val); } int RIG_FDMDUO::get_modeB() { cmd = "MD;"; get_trace(1, "get_modeB"); ret = wait_char(';', 4, 100, "get modeB", ASC); gett(""); if (ret < 4) return B.imode; size_t p = replystr.rfind("MD"); if (p != std::string::npos && (p + 2 < replystr.length())) { int md = replystr[p+2]; md = md - '1'; if (md == 6) md = 5; B.imode = md; B.iBW = set_widths(B.imode); } if (B.imode == 3) fm_mode = true; else fm_mode = false; return B.imode; } int RIG_FDMDUO::get_modetype(int n) { return _mode_type[n]; } void RIG_FDMDUO::set_bwA(int val) { try { switch (A.imode) { case duoLSB: cmd.assign(FDMDUO_LSBvals.at(val)); break; case duoUSB: cmd.assign(FDMDUO_USBvals.at(val)); break; case duoCW: cmd.assign(FDMDUO_CWvals.at(val)); break; case duoFM: cmd.assign(FDMDUO_FMvals.at(val)); break; case duoAM: cmd.assign(FDMDUO_AMvals.at(val)); break; case duoCWR: cmd.assign(FDMDUO_CWRvals.at(val)); break; } set_trace(1, "set bwA"); sendCommand(cmd); showresp(WARN, ASC, "set bwA", cmd, ""); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_FDMDUO::get_bwA() { int i = 0; size_t p; if (A.imode == duoLSB) { cmd = "RF1;"; get_trace(1, "get bwA"); ret = wait_char(';', 6, 100, "get LSB bw", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); for (i = 0; i < duoLSBvals; i++) { if (FDMDUO_LSBvals[i] == replystr.substr(p)) { A.iBW = i; break; } } } } else if (A.imode == duoUSB) { cmd = "RF2;"; get_trace(1, "get bwA"); ret = wait_char(';', 6, 100, "get USB bw", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); for (i = 0; i < duoUSBvals; i++) { if (FDMDUO_USBvals[i] == replystr.substr(p)) { A.iBW = i; break; } } } } else if (A.imode == duoCW) { cmd = "RF3;"; get_trace(1, "get CW bw"); ret = wait_char(';', 6, 100, "get RF", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); if (p != std::string::npos) { for (i = 0; i < duoCWvals; i++) if (FDMDUO_CWvals[i] == replystr.substr(p)) break; A.iBW = i; } } } else if (A.imode == duoCWR) { cmd = "RF4;"; get_trace(1, "get CWR bw"); ret = wait_char(';', 6, 100, "get RF", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); if (p != std::string::npos) { for (i = 0; i < duoCWvals; i++) if (FDMDUO_CWRvals[i] == replystr.substr(p)) break; A.iBW = i; } } } else if (A.imode == duoAM) { cmd = "RF5;"; get_trace(1, "get AM bw"); ret = wait_char(';', 6, 100, "get RF", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); if (p != std::string::npos) { for (i = 0; i < duoAMvals; i++) if (FDMDUO_AMvals[i] == replystr.substr(p)) break; A.iBW = i; } } } else if (A.imode == duoFM) { cmd = "RF5;"; get_trace(1, "get FM bw"); ret = wait_char(';', 6, 100, "get RF", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); if (p != std::string::npos) { for (i = 0; i < duoFMvals; i++) if (FDMDUO_FMvals[i] == replystr.substr(p)) break; A.iBW = i; } } } return A.iBW; } void RIG_FDMDUO::set_bwB(int val) { try { switch (B.imode) { case duoLSB: cmd.assign(FDMDUO_LSBvals.at(val)); break; case duoUSB: cmd.assign(FDMDUO_USBvals.at(val)); break; case duoCW: cmd.assign(FDMDUO_CWvals.at(val)); break; case duoFM: cmd.assign(FDMDUO_FMvals.at(val)); break; case duoAM: cmd.assign(FDMDUO_AMvals.at(val)); break; case duoCWR: cmd.assign(FDMDUO_CWRvals.at(val)); break; } set_trace(1, "set bwB"); sendCommand(cmd); showresp(WARN, ASC, "set bwB", cmd, ""); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_FDMDUO::get_bwB() { int i = 0; size_t p; if (B.imode == duoLSB) { cmd = "RF1;"; get_trace(1, "get bwB"); ret = wait_char(';', 6, 100, "get LSB bw", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); for (i = 0; i < duoLSBvals; i++) { if (FDMDUO_LSBvals[i] == replystr.substr(p)) { B.iBW = i; break; } } } } else if (B.imode == duoUSB) { cmd = "RF2;"; get_trace(1, "get bwB"); ret = wait_char(';', 6, 100, "get USB bw", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); for (i = 0; i < duoUSBvals; i++) { if (FDMDUO_USBvals[i] == replystr.substr(p)) { B.iBW = i; break; } } } } else if (B.imode == duoCW) { cmd = "RF3;"; get_trace(1, "get CW bw"); ret = wait_char(';', 6, 100, "get RF", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); if (p != std::string::npos) { for (i = 0; i < duoCWvals; i++) if (FDMDUO_CWvals[i] == replystr.substr(p)) break; B.iBW = i; } } } else if (B.imode == duoCWR) { cmd = "RF4;"; get_trace(1, "get CWR bw"); ret = wait_char(';', 6, 100, "get RF", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); if (p != std::string::npos) { for (i = 0; i < duoCWvals; i++) if (FDMDUO_CWRvals[i] == replystr.substr(p)) break; B.iBW = i; } } } else if (B.imode == duoAM) { cmd = "RF5;"; get_trace(1, "get AM bw"); ret = wait_char(';', 6, 100, "get RF", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); if (p != std::string::npos) { for (i = 0; i < duoAMvals; i++) if (FDMDUO_AMvals[i] == replystr.substr(p)) break; B.iBW = i; } } } else if (B.imode == duoFM) { cmd = "RF5;"; get_trace(1, "get FM bw"); ret = wait_char(';', 6, 100, "get RF", ASC); gett(""); if (ret >= 6) { p = replystr.rfind("RF"); if (p != std::string::npos) { for (i = 0; i < duoFMvals; i++) if (FDMDUO_FMvals[i] == replystr.substr(p)) break; B.iBW = i; } } } return B.iBW; } int RIG_FDMDUO::adjust_bandwidth(int val) { int bw = 0; switch (val) { case duoLSB: bw = 14; break; case duoUSB: bw = 14; break; case duoCW: bw = 6; break; case duoCWR: bw = 6; break; case duoAM: bw = 5; break; case duoFM: bw = 1; break; } return bw; } int RIG_FDMDUO::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_FDMDUO::set_power_control(double val) { char szval[8]; snprintf(szval, sizeof(szval), "TQ%04d;", (int)(val * 1000)); cmd = szval; set_trace(1, "set power control "); sendCommand(cmd); sett(""); LOG_WARN("%s", cmd.c_str()); } double RIG_FDMDUO::get_power_control() { double val = progStatus.power_level; cmd = "TQ;"; get_trace(1, "get_power_control"); ret = wait_char(';', 7, 100, "get Power control", ASC); gett(""); if (ret < 7) return val; size_t p = replystr.rfind("TQ"); if (p == std::string::npos) return val; val = atoi(&replystr[p + 2]); return val / 1000.0; } void RIG_FDMDUO::set_attenuator(int val) { if (val) cmd = "RA01;"; else cmd = "RA00;"; LOG_WARN("%s", cmd.c_str()); set_trace(1, "set attenuator"); sendCommand(cmd); sett(""); atten_level = val; } int RIG_FDMDUO::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator"); ret = wait_char(';', 7, 100, "get attenuator", ASC); gett(""); if (ret < 7) return atten_level; size_t p = replystr.rfind("RA"); if (p != std::string::npos) atten_level = (replystr[p+3] == '1'); return atten_level; } void RIG_FDMDUO::set_preamp(int val) { if (val) cmd = "PA1;"; else cmd = "PA0;"; LOG_WARN("%s", cmd.c_str()); set_trace(1, "set preamp"); sendCommand(cmd); sett(""); preamp_level = val; } int RIG_FDMDUO::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp"); ret = wait_char(';', 5, 100, "get preamp", ASC); gett(""); if (ret < 5) return preamp_level; size_t p = replystr.rfind("PA"); if (p != std::string::npos) preamp_level = (replystr[p+2] == '1'); return preamp_level; } // Noise Reduction (TS2000.cxx) NR1 only works; no NR2 and don' no why void RIG_FDMDUO::set_noise_reduction(int val) { } int RIG_FDMDUO::get_noise_reduction() { return 0; } void RIG_FDMDUO::set_noise_reduction_val(int val) { } int RIG_FDMDUO::get_noise_reduction_val() { int nrval = 0; return nrval; } int RIG_FDMDUO::get_agc() { return 0; } int RIG_FDMDUO::incr_agc() { return 0; } const char * agcstrs[] = {"FM", "AGC", "FST", "SLO"}; const char * RIG_FDMDUO::agc_label() { return agcstrs[1]; } int RIG_FDMDUO::agc_val() { return agcval; } // Auto Notch, beat canceller (TS2000.cxx) BC1 only, not BC2 void RIG_FDMDUO::set_auto_notch(int v) { } int RIG_FDMDUO::get_auto_notch() { return 0; } // Noise Blanker (TS2000.cxx) void RIG_FDMDUO::set_noise(bool b) { } int RIG_FDMDUO::get_noise() { return 0; } // Tranceiver PTT on/off void RIG_FDMDUO::set_PTT_control(int val) { if (val) cmd = "TX1;"; else cmd = "RX;"; set_trace(1, "set PTT"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set PTT", cmd, ""); } int RIG_FDMDUO::get_PTT() { cmd = "IF;"; get_trace(1, "get_PTT"); ret = wait_char(';', 38, 100, "get VFO", ASC); gett(""); ptt_ = (replystr[28] == '1'); return ptt_; } void RIG_FDMDUO::selectA() { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); inuse = onA; } void RIG_FDMDUO::selectB() { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); inuse = onB; } void RIG_FDMDUO::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } bool RIG_FDMDUO::can_split() { return true; } int RIG_FDMDUO::get_split() { return 0; } unsigned long long RIG_FDMDUO::get_vfoA () { cmd = "FA;"; get_trace(1, "get_vfoA"); ret = wait_char(';', 14, 100, "get vfo A", ASC); gett(""); if (ret < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } return A.freq; } void RIG_FDMDUO::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_FDMDUO::get_vfoB () { cmd = "FB;"; get_trace(1, "get_vfoB"); ret = wait_char(';', 14, 100, "get vfo A", ASC); gett(""); if (ret < 14) return A.freq; size_t p = replystr.rfind("FB"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; B.freq = f; } return B.freq; } void RIG_FDMDUO::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } // Squelch (TS990.cxx) void RIG_FDMDUO::set_squelch(int val) { char szcmd[8]; snprintf(szcmd, sizeof(szcmd), "SQ0%03d;", val); cmd = szcmd; sendCommand(cmd); showresp(INFO, ASC, "set squelch", cmd, ""); } int RIG_FDMDUO::get_squelch() { int val = 0; cmd = "SQ0;"; if (wait_char(';', 7, 20, "get squelch", ASC) >= 7) { size_t p = replystr.rfind("SQ0"); if (p == std::string::npos) return val; sscanf(&replystr[3], "%d", &val); } return val; } void RIG_FDMDUO::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void RIG_FDMDUO::set_mic_gain(int val) { char szcmd[8]; snprintf(szcmd, sizeof(szcmd), "MG%03d;", val); cmd = szcmd; sendCommand(cmd); showresp(WARN, ASC, "set mic gain", cmd, ""); } int RIG_FDMDUO::get_mic_gain() { int val = progStatus.mic_gain; cmd = "MG;"; if (wait_char(';', 6, 100, "get mic gain", ASC) < 6) return val; size_t p = replystr.rfind("MG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); return val; } void RIG_FDMDUO::get_mic_min_max_step(int &min, int &max, int &step) { min = 26; max = 74; step = 1; } void RIG_FDMDUO::set_volume_control(int val) { char szval[20]; if (val > 15) { val = 5 * roundf(val / 5.0); } snprintf(szval, sizeof(szval), "VM%03d;", val); cmd = szval; set_trace(1, "set volume control"); sendCommand(cmd); sett(""); } int RIG_FDMDUO::get_volume_control() { int val = progStatus.volume; cmd = "VM;"; get_trace(1, "get volume control"); ret = wait_char(';', 6, 100, "get vol", ASC); gett(""); if (ret < 6) return val; size_t p = replystr.rfind("VM"); if (p == std::string::npos) return val; replystr[p + 5] = 0; val = atoi(&replystr[p + 2]); return val; } void RIG_FDMDUO::tune_rig() { cmd = "TX2;"; set_trace(1, "set TUNE"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set PTT", cmd, ""); } flrig-2.0.04/src/rigs/rigbase.cxx0000664000175000017500000004360114505023100013510 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "rigbase.h" #include "util.h" #include "debug.h" #include "rig_io.h" #include "support.h" #include "socket_io.h" #include "tod_clock.h" #include "serial.h" #include "rigs.h" #include "xmlrpc_rig.h" const char *szNORIG = "NONE"; std::vector vNOMODES; const char *NOMODES[] = {"LSB", "USB"}; std::vector vNOBWS; const char *NOBWS[] = {"3200"}; std::vector vDSPLO; const char *DSPLO[] = {"200"}; std::vector vDSPHI; const char *DSPHI[] = {"3400"}; const char *szdsptooltip = "dsp tooltip"; const char *szbtnlabel = " "; const int ibw_val = -1; static GUI basewidgets[] = { {NULL, 0, 0} }; std::vector &rigbase::modes_ = vNOMODES; std::vector &rigbase::bandwidths_ = vNOBWS; std::vector &rigbase::dsp_SL = vDSPLO; std::vector &rigbase::dsp_SH = vDSPHI; rigbase::rigbase() { IDstr = ""; name_ = szNORIG; modes_ = vNOMODES; bandwidths_ = vNOBWS; dsp_SL = vDSPLO; SL_tooltip = szdsptooltip; SL_label = szbtnlabel; dsp_SH = vDSPHI; SH_tooltip = szdsptooltip; SH_label = szbtnlabel; bw_vals_ = &ibw_val; io_class = SERIAL; widgets = basewidgets; stopbits = 2; serial_write_delay = 0; serial_post_write_delay = 0; serloop_timing = 200; // msec, 5x / second CIV = 0; defaultCIV = 0; USBaudio = false; has_xcvr_auto_on_off = serial_echo = has_vfo_adj = has_rit = has_xit = has_bfo = has_power_control = has_volume_control = has_mode_control = has_bandwidth_control = has_dsp_controls = has_micgain_control = has_mic_line_control = has_auto_notch = has_notch_control = has_noise_control = has_noise_reduction_control = has_noise_reduction = has_attenuator_control = has_preamp_control = has_ifshift_control = has_pbt_controls = has_FILTER = has_ptt_control = has_tune_control = has_swr_control = has_alc_control = has_idd_control = has_agc_control = has_rf_control = has_sql_control = has_data_port = restore_mbw = has_extras = has_nb_level = has_agc_level = has_cw_wpm = has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_break_in = has_cw_delay = has_cw_weight = has_cw_keyer = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_compression = has_compON = use_line_in = has_bpf_center = has_special = has_ext_tuner = has_smeter = has_power_out = has_line_out = // has_split = has_split_AB = has_band_selection = has_get_info = has_getvfoAorB = has_voltmeter = ICOMrig = ICOMmainsub = can_synch_clock = has_a2b = has_vfoAB = false; data_type = DT_BINARY; A.freq = 14070000ULL; A.imode = 1; A.iBW = 0; A.bw_val = 800; B.freq = 14070000ULL; B.imode = 1; B.iBW = 0; B.bw_val = 800; inuse = onA; precision = 1; ndigits = 10; can_change_alt_vfo = false; freqA = 14070000ULL; modeA = 1; bwA = 0; freqB = 14070000ULL; modeB = 1; bwB = 0; def_freq = 14070000ULL; def_mode = 1; def_bw = 0; bpf_center = 0; pbt = 0; ptt_ = tune_ = 0; rTONE = tTONE = 8; max_power = 100; active_mode = 0; // wbx if_shift_min = -1500; if_shift_max = 1500; if_shift_step = 10; if_shift_mid = 0; atten_level = 0; preamp_level = 0; } void rigbase::initialize() { VECTOR( vNOMODES, NOMODES ); VECTOR( vNOBWS, NOBWS ); VECTOR( vDSPLO, DSPLO ); VECTOR( vDSPHI, DSPHI ); modes_ = vNOMODES; bandwidths_ = vNOBWS; dsp_SL = vDSPLO; dsp_SH = vDSPHI; } std::string rigbase::to_bcd_be(unsigned long long val, int len) { unsigned char a; int numchars = len / 2; std::string bcd = ""; if (len & 1) numchars ++; for (int i = 0; i < numchars; i++) { a = 0; a |= val % 10; val /= 10; a |= (val % 10)<<4; val /= 10; bcd += a; } return bcd; } std::string rigbase::to_bcd(unsigned long long val, int len) { std::string bcd_be = to_bcd_be(val, len); std::string bcd = ""; int bcdlen = bcd_be.size(); for (int i = bcdlen - 1; i >= 0; i--) bcd += bcd_be[i]; return bcd; } unsigned long long rigbase::fm_bcd (std::string bcd, int len) { int i; unsigned long long f = 0; int numchars = len/2; if (len & 1) numchars ++; for (i = 0; i < numchars; i++) { f *=10; f += (bcd[i] >> 4) & 0x0F; f *= 10; f += bcd[i] & 0x0F; } return f; } unsigned long long rigbase::fm_bcd_be(std::string bcd, int len) { char temp; int numchars = len/2; if (len & 1) numchars++; for (int i = 0; i < numchars / 2; i++) { temp = bcd[i]; bcd[i] = bcd[numchars -1 - i]; bcd[numchars -1 - i] = temp; } return fm_bcd(bcd, len); } std::string rigbase::to_binary_be(unsigned long long val, int len) { static std::string bin = ""; for (int i = 0; i < len; i++) { bin += val & 0xFF; val >>= 8; } return bin; } std::string rigbase::to_binary(unsigned long long val, int len) { static std::string bin = ""; std::string bin_be = to_binary_be(val, len); int binlen = bin_be.size(); for (int i = binlen - 1; i >= 0; i--) bin += bin_be[i]; return bin; } unsigned long long rigbase::fm_binary(std::string binary, int len) { int i; unsigned long long f = 0; for (i = 0; i < len; i++) { f *= 256; f += (unsigned char)binary[i]; } return f; } unsigned long long rigbase::fm_binary_be(std::string binary_be, int len) { unsigned char temp; int numchars = len/2; if (len & 1) numchars++; for (int i = 0; i < numchars / 2; i++) { temp = binary_be[i]; binary_be[i] = binary_be[numchars -1 - i]; binary_be[numchars -1 - i] = temp; } return fm_binary(binary_be, len); } std::string rigbase::to_decimal_be(unsigned long long d, int len) { static std::string sdec_be; sdec_be.clear(); for (int i = 0; i < len; i++) { sdec_be += (char)((d % 10) + '0'); d /= 10; } return sdec_be; } std::string rigbase::to_decimal(unsigned long long d, int len) { static std::string sdec; sdec.clear(); std::string sdec_be = to_decimal_be(d, len); int bcdlen = sdec_be.size(); for (int i = bcdlen - 1; i >= 0; i--) sdec += sdec_be[i]; return sdec; } unsigned long long rigbase::fm_decimal(std::string decimal, int len) { unsigned long long d = 0; for (int i = 0; i < len; i++) { d *= 10; d += decimal[i] - '0'; } return d; } unsigned long long rigbase::fm_decimal_be(std::string decimal_be, int len) { unsigned char temp; int numchars = len/2; if (len & 1) numchars++; for (int i = 0; i < numchars / 2; i++) { temp = decimal_be[i]; decimal_be[i] = decimal_be[numchars -1 - i]; decimal_be[numchars -1 - i] = temp; } return fm_decimal(decimal_be, len); } //====================================================================== // translation 0..255 <==> 0..100 // for Icom controls //====================================================================== static int set100[] = { 0, 3, 6, 8, 11, 13, 16, 18, 21, 23, 26, 29, 31, 34, 36, 39, 41, 44, 46, 49, 51, 54, 57, 59, 62, 64, 67, 69, 72, 74, 77, 80, 82, 85, 87, 90, 92, 95, 97,100, 102,105,108,110,113,115,118,120,123,125, 128,131,133,136,138,141,143,146,148,151, 153,156,159,161,164,166,169,171,174,176, 179,182,184,187,189,192,194,197,199,202, 204,207,210,212,215,217,220,222,225,227, 230,233,235,238,240,243,245,248,250,253,255}; std::string rigbase::bcd255(int val) { return to_bcd(set100[(int)(val)], 3); } int rigbase::num100(std::string bcd) { int val = fm_bcd(bcd, 3); for (int n = 0; n < 101; n++) { if (set100[n] > val) return n - 1; if (set100[n] == val) return n; } return 0; } int rigbase::hexval(int hex) { int val = 0; val += 10 * ((hex >> 4) & 0x0F); val += hex & 0x0F; return val; } int rigbase::hex2val(std::string hexstr) { return 100 * hexval(hexstr[0]) + hexval(hexstr[1]); } //====================================================================== int rigbase::waitN(int n, int timeout, const char *sz, int pr) { guard_lock reply_lock(&mutex_replystr); int retnbr = 0; replystr.clear(); if (progStatus.xmlrpc_rig) { replystr = xml_cat_string(cmd); //std::cout << "replystr: " << replystr << std::endl; return replystr.length(); } if (progStatus.use_tcpip) { send_to_remote(cmd); MilliSleep(progStatus.tcpip_ping_delay); retnbr = read_from_remote(replystr); LOG_DEBUG ("%s: read %d bytes, %s", sz, retnbr, (pr == HEX ? str2hex(replystr.c_str(), replystr.length()): replystr.c_str())); return retnbr; } if(!RigSerial->IsOpen()) { LOG_DEBUG("TEST %s", sz); return 0; } RigSerial->FlushBuffer(); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); size_t tstart = zmsec(); size_t tout = tstart + progStatus.serial_timeout; // minimum of 100 msec std::string tempstr; int nret; do { tempstr.clear(); nret = RigSerial->ReadBuffer(tempstr, n - retnbr); if (nret) { for (int nc = 0; nc < nret; nc++) replystr += tempstr[nc]; retnbr += nret; tout = zmsec() + progStatus.serial_timeout; } if (retnbr >= n) break; MilliSleep(1); } while ( zmsec() < tout ); static char ctrace[1000]; memset(ctrace, 0, 1000); snprintf( ctrace, sizeof(ctrace), "%s: read %d bytes in %d msec, %s", sz, retnbr, (int)(zmsec() - tstart), (pr == HEX ? str2hex(replystr.c_str(), replystr.length()): replystr.c_str()) ); if (SERIALDEBUG) ser_trace(1, ctrace); return retnbr; } int rigbase::wait_char(int ch, int n, int timeout, const char *sz, int pr) { guard_lock reply_lock(&mutex_replystr); std::string wait_str = " "; wait_str[0] = ch; int retnbr = 0; if (progStatus.xmlrpc_rig) { replystr = xml_cat_string(cmd); //std::cout << "replystr: " << replystr << std::endl; return replystr.length(); } replystr.clear(); if (progStatus.use_tcpip) { send_to_remote(cmd); MilliSleep(progStatus.tcpip_ping_delay); retnbr = read_from_remote(replystr); LOG_DEBUG ("%s: read %d bytes, %s", sz, retnbr, replystr.c_str()); return (int)retnbr; } if(!RigSerial->IsOpen()) { LOG_DEBUG("TEST %s", sz); return 0; } RigSerial->FlushBuffer(); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); size_t tstart = zmsec(); size_t tout = tstart + progStatus.serial_timeout; std::string tempstr; int nret; int tries = 0; do { ++tries; tempstr.clear(); nret = RigSerial->ReadBuffer(tempstr, n - retnbr, wait_str); if (nret) { for (int nc = 0; nc < nret; nc++) replystr += tempstr[nc]; retnbr += nret; tout = zmsec() + progStatus.serial_timeout; } if (retnbr >= n) break; if (replystr.find(wait_str) != std::string::npos) break; MilliSleep(1); } while ( zmsec() < tout ); static char ctrace[1000]; memset(ctrace, 0, 1000); snprintf( ctrace, sizeof(ctrace), "%s: read %d bytes in %d msec, %d tries, %s", sz, retnbr, (int)(zmsec() - tstart), tries, (pr == HEX ? str2hex(replystr.c_str(), replystr.length()): replystr.c_str()) ); // if (SERIALDEBUG) ser_trace(1, ctrace); LOG_DEBUG ("%s", ctrace); return retnbr; } int rigbase::wait_crlf(std::string cmd, std::string sz, int nr, int timeout, int pr) { guard_lock reply_lock(&mutex_replystr); char crlf[3] = "\r\n"; int retnbr = 0; if (progStatus.xmlrpc_rig) { replystr = xml_cat_string(cmd); //std::cout << "replystr: " << replystr << std::endl; return replystr.length(); } replystr.clear(); if (progStatus.use_tcpip) { send_to_remote(cmd); MilliSleep(progStatus.tcpip_ping_delay); retnbr = read_from_remote(replystr); LOG_DEBUG ("%s: read %d bytes, %s", sz.c_str(), retnbr, replystr.c_str()); return retnbr; } if(!RigSerial->IsOpen()) { return 0; } RigSerial->FlushBuffer(); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); size_t tstart = zmsec(); size_t tout = zmsec() + timeout + progStatus.serial_timeout; std::string tempstr; int nret; do { tempstr.clear(); nret = RigSerial->ReadBuffer(tempstr, nr - retnbr, crlf); if (nret) { replystr.append(tempstr); retnbr += nret; tout = zmsec() + timeout + progStatus.serial_timeout; } if (replystr.find(crlf) != std::string::npos) break; if (retnbr >= nr) break; MilliSleep(1); } while ( zmsec() < tout ); static char ctrace[1000]; memset(ctrace, 0, 1000); std::string srx = replystr; if (srx[0] == '\n') srx.replace(0,1,""); size_t psrx = srx.find("\r\n"); if (psrx != std::string::npos) srx.replace(psrx, 2, ""); snprintf( ctrace, sizeof(ctrace), "%s: read %d bytes in %d msec, %s", sz.c_str(), retnbr, (int)(zmsec() - tstart), srx.c_str()); if (SERIALDEBUG) ser_trace(1, ctrace); LOG_DEBUG ("%s", ctrace); return retnbr; } int rigbase::wait_string(std::string sz, int nr, int timeout, int pr) { guard_lock reply_lock(&mutex_replystr); int retnbr = 0; if (progStatus.xmlrpc_rig) { replystr = xml_cat_string(cmd); //std::cout << "replystr: " << replystr << std::endl; return replystr.length(); } replystr.clear(); if (progStatus.use_tcpip) { send_to_remote(cmd); MilliSleep(progStatus.tcpip_ping_delay); retnbr = read_from_remote(replystr); LOG_DEBUG ("%s: read %d bytes, %s", sz.c_str(), retnbr, replystr.c_str()); return retnbr; } if(!RigSerial->IsOpen()) { LOG_DEBUG("TEST %s", sz.c_str()); return 0; } RigSerial->FlushBuffer(); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); size_t tstart = zmsec(); size_t tout = zmsec() + timeout + progStatus.serial_timeout; std::string tempstr; int nret; do { tempstr.clear(); nret = RigSerial->ReadBuffer(tempstr, nr - retnbr, sz); if (nret) { replystr.append(tempstr); retnbr += nret; tout = zmsec() + timeout + progStatus.serial_timeout; } if (replystr.find(sz) != std::string::npos) break; if (retnbr >= nr) break; MilliSleep(1); } while ( zmsec() < tout ); static char ctrace[1000]; memset(ctrace, 0, 1000); snprintf( ctrace, sizeof(ctrace), "%s: read %d bytes in %d msec, %s", sz.c_str(), retnbr, (int)(zmsec() - tstart), replystr.c_str()); if (SERIALDEBUG) ser_trace(1, ctrace); LOG_DEBUG ("%s", ctrace); return retnbr; } int rigbase::waitfor(int nr, int timeout, int pr) { guard_lock reply_lock(&mutex_replystr); int retnbr = 0; if (progStatus.xmlrpc_rig) { replystr = xml_cat_string(cmd); //std::cout << "replystr: " << replystr << std::endl; return replystr.length(); } replystr.clear(); if (progStatus.use_tcpip) { send_to_remote(cmd); MilliSleep(progStatus.tcpip_ping_delay); retnbr = read_from_remote(replystr); LOG_DEBUG ("read %d bytes, %s", retnbr, replystr.c_str()); return retnbr; } if(!RigSerial->IsOpen()) { return 0; } RigSerial->FlushBuffer(); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); size_t tstart = zmsec(); size_t tout = zmsec() + timeout + progStatus.serial_timeout; std::string tempstr; int nret; do { tempstr.clear(); nret = RigSerial->ReadBuffer(tempstr, nr - retnbr); if (nret) { replystr.append(tempstr); retnbr += nret; tout = zmsec() + timeout + progStatus.serial_timeout; } if (retnbr >= nr) break; MilliSleep(1); } while ( zmsec() < tout ); static char ctrace[1000]; memset(ctrace, 0, 1000); snprintf( ctrace, sizeof(ctrace), "read %d bytes in %d msec, %s", retnbr, (int)(zmsec() - tstart), replystr.c_str()); if (SERIALDEBUG) ser_trace(1, ctrace); LOG_DEBUG ("%s", ctrace); return retnbr; } // Yaesu transceiver - wait for response to identifier request // return boolean state of response // ID - for most // AI - for FTdx9000 // wait - wait nnn milliseconds before declaring transceiver DOA // default 200 msec // retry - number of retries, default bool rigbase::id_OK(std::string ID, int wait) { if (progStatus.xmlrpc_rig) { replystr = xml_cat_string(cmd); //std::cout << "replystr: " << replystr << std::endl; return replystr.length(); } guard_lock reply_lock(&mutex_replystr); std::string buff; int retn = 0; size_t tout = 0; for (int n = 0; n < progStatus.serial_retries; n++) { RigSerial->FlushBuffer(); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); replystr.clear(); tout = zmsec() + wait; do { MilliSleep(50); buff.clear(); retn = RigSerial->ReadBuffer(buff, 10, ID, ";"); if (retn) { replystr.append(buff); tout = zmsec() + wait; } if (replystr.rfind(ID)) { return true; } Fl::awake(); } while (zmsec() < tout); } replystr.clear(); return false; } void rigbase::sendOK(std::string cmd) { if (progStatus.xmlrpc_rig) { xml_cat_string(cmd); return; } if (IDstr.empty()) { sendCommand(cmd); return; } if (id_OK(IDstr, 100)) sendCommand(cmd); } void rigbase::set_split(bool val) { split = val; } int rigbase::get_split() { return split; } std::string rigbase::read_menu(int m1, int m2) { return ""; } char bcdval[100] = { '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x09', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x20', '\x21', '\x22', '\x23', '\x24', '\x25', '\x26', '\x27', '\x28', '\x29', '\x30', '\x31', '\x32', '\x33', '\x34', '\x35', '\x36', '\x37', '\x38', '\x39', '\x40', '\x41', '\x42', '\x43', '\x44', '\x45', '\x46', '\x47', '\x48', '\x49', '\x50', '\x51', '\x52', '\x53', '\x54', '\x55', '\x56', '\x57', '\x58', '\x59', '\x60', '\x61', '\x62', '\x63', '\x64', '\x65', '\x66', '\x67', '\x68', '\x69', '\x70', '\x71', '\x72', '\x73', '\x74', '\x75', '\x76', '\x77', '\x78', '\x79', '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', '\x88', '\x89', '\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97', '\x98', '\x99' }; flrig-2.0.04/src/rigs/xiegu/0000775000175000017500000000000014511461606012563 500000000000000flrig-2.0.04/src/rigs/xiegu/X6100.cxx0000664000175000017500000014503414502041135013743 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // Modified: January 2017 // Andy Stewart, KB1OIQ // Updated: June 2018 // Cliff Scott, AE5ZA // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include "xiegu/X6100.h" #include "status.h" #include "trace.h" #include "tod_clock.h" #include "support.h" //============================================================================= // X6100 struct catpair {int cat; float val;}; static unsigned char bcd[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99 }; const char X6100name_[] = "X6100"; // these are only defined in this file // undef'd at end of file #define NUM_FILTERS 3 #define NUM_MODES 13 static int mode_filterA[NUM_MODES] = {1,1,1,1,1,1,1,1,1,1,1,1}; static int mode_filterB[NUM_MODES] = {1,1,1,1,1,1,1,1,1,1,1,1}; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; 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 { LSB705, USB705, AM705, FM705, CW705, CWR705, RTTY705, RTTYR705, LSBD705, USBD705, AMD705, FMD705, DV705 }; static std::vectorX6100modes_; static const char *vX6100modes_[] = { "LSB", "USB", "AM", "FM", "CW", "CW-R", "RTTY", "RTTY-R", "LSB-D", "USB-D", "AM-D", "FM-D", "DV"}; char X6100_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'U', 'U', 'U' }; const char X6100_mode_nbr[] = { 0x00, 0x01, 0x02, 0x05, 0x03, 0x07, 0x04, 0x08, 0x00, 0x01, 0x02, 0x05, 0x17 }; static std::vectorX6100_ssb_bws; static const char *vX6100_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600" }; static int X6100_bw_vals_SSB[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40, WVALS_LIMIT}; static std::vectorX6100_rtty_bws; static const char *vX6100_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700" }; static int X6100_bw_vals_RTTY[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31, WVALS_LIMIT}; static std::vectorX6100_am_bws; static const char *vX6100_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "705", "7400", "705", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000" }; static int X6100_bw_vals_AM[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49 WVALS_LIMIT}; static std::vectorX6100_fm_bws; static const char *vX6100_fm_bws[] = { "FIXED" }; static int X6100_bw_vals_FM[] = { 1, WVALS_LIMIT}; static GUI X6100_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, //4 { (Fl_Widget *)btnNR, 214, 145, 50 }, //5 { (Fl_Widget *)sldrNR, 266, 145, 156 }, //6 { (Fl_Widget *)sldrMICGAIN, 54, 165, 156 }, //7 { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, //8 // { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 // { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 // { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 // { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 // { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 // { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 // { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 // { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_X6100::initialize() { VECTOR (X6100modes_, vX6100modes_); VECTOR (X6100_ssb_bws, vX6100_ssb_bws); VECTOR (X6100_rtty_bws, vX6100_rtty_bws); VECTOR (X6100_am_bws, vX6100_am_bws); VECTOR (X6100_fm_bws, vX6100_fm_bws); modes_ = X6100modes_; bandwidths_ = X6100_ssb_bws; bw_vals_ = X6100_bw_vals_SSB; _mode_type = X6100_mode_type; X6100_widgets[0].W = btnVol; X6100_widgets[1].W = sldrVOLUME; X6100_widgets[2].W = btnAGC; X6100_widgets[3].W = sldrRFGAIN; X6100_widgets[4].W = sldrSQUELCH; X6100_widgets[5].W = btnNR; X6100_widgets[6].W = sldrNR; // X6100_widgets[7].W = btnLOCK; // X6100_widgets[8].W = sldrINNER; // X6100_widgets[9].W = btnCLRPBT; // X6100_widgets[10].W = sldrOUTER; // X6100_widgets[11].W = btnNotch; // X6100_widgets[12].W = sldrNOTCH; // X6100_widgets[13].W = sldrMICGAIN; // X6100_widgets[14].W = sldrPOWER; X6100_widgets[7].W = sldrMICGAIN; X6100_widgets[8].W = sldrPOWER; btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_X6100::RIG_X6100() { defaultCIV = 0xA4; adjustCIV(defaultCIV); name_ = X6100name_; modes_ = X6100modes_; bandwidths_ = X6100_ssb_bws; bw_vals_ = X6100_bw_vals_SSB; _mode_type = X6100_mode_type; serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = X6100_widgets; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 9; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 9; B.iBW = 34; has_extras = true; has_cw_wpm = true; has_cw_spot_tone = true; // has_cw_qsk = true; // has_cw_break_in = true; has_vox_onoff = true; has_vox_gain = true; has_vox_anti = true; has_vox_hang = true; has_compON = true; has_compression = true; has_split = true; has_split_AB = true; has_micgain_control = true; has_bandwidth_control = true; has_smeter = true; // has_voltmeter = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_sql_control = true; has_agc_control = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_attenuator_control = true; has_preamp_control = true; has_noise_control = true; has_nb_level = true; has_noise_reduction = true; has_noise_reduction_control = true; // has_auto_notch = true; // has_notch_control = true; // has_pbt_controls = true; has_FILTER = true; has_rf_control = true; has_ptt_control = true; // has_tune_control = true; has_band_selection = true; // has_xcvr_auto_on_off = true; precision = 1; ndigits = 9; has_vfo_adj = true; can_change_alt_vfo = true; has_a2b = true; CW_sense = 0; // CW is LSB }; static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } void RIG_X6100::selectA() { cmd.assign(pre_to).append("\x07"); cmd += '\x00'; cmd.append(post); waitFB("select A"); isett("selectA"); inuse = onA; } void RIG_X6100::selectB() { cmd.assign(pre_to).append("\x07"); cmd += '\x01'; cmd.append(post); waitFB("select B"); isett("selectB"); inuse = onB; } //====================================================================== // X6100 unique commands //====================================================================== void RIG_X6100::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; cmd.append(post); waitFB("Exchange vfos"); get_modeA(); // get mode to update the filter A / B usage get_modeB(); } void RIG_X6100::set_xcvr_auto_on() { cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); RigSerial->failed(0); if (waitFOR(8, "get ID") == false) { cmd.clear(); int fes[] = { 2, 2, 2, 3, 7, 13, 25, 50, 75, 150, 150, 150 }; if (progStatus.serial_baudrate >= 0 && progStatus.serial_baudrate <= 11) { cmd.append( fes[progStatus.serial_baudrate], '\xFE'); } RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); cmd.assign(pre_to); cmd += '\x18'; cmd += '\x01'; set_trace(1, "power_on()"); cmd.append(post); RigSerial->failed(0); if (waitFB("Power ON")) { isett("power_on()"); cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); int i = 0; for (i = 0; i < 150; i++) { // 15 second total timeout if (waitFOR(8, "get ID", 100) == true) { RigSerial->failed(0); return; } update_progress(i / 2); Fl::awake(); } RigSerial->failed(0); return; } isett("power_on()"); RigSerial->failed(1); return; } } void RIG_X6100::set_xcvr_auto_off() { cmd.clear(); cmd.append(pre_to); cmd += '\x18'; cmd += '\x00'; cmd.append(post); waitFB("Power OFF", 200); } bool RIG_X6100::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); isett("check vfo"); return ok; } unsigned long long RIG_X6100::get_vfoA () { std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); if (inuse == onB) { cmd += '\x01'; resp += '\x01'; } else { cmd += '\x00'; resp += '\x00'; } cmd.append(post); if (waitFOR(12, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+6), 10); } } igett("get_vfoA"); return A.freq; } void RIG_X6100::set_vfoA (unsigned long long freq) { A.freq = freq; cmd.assign(pre_to).append("\x25"); if (inuse == onB) cmd += '\x01'; else cmd += '\x00'; cmd.append( to_bcd_be( freq, 10) ); cmd.append( post ); waitFB("set vfo A"); isett("set_vfoA"); } unsigned long long RIG_X6100::get_vfoB () { std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); if (inuse == onB) { cmd += '\x00'; resp += '\x00'; } else { cmd += '\x01'; resp += '\x01'; } cmd.append(post); if (waitFOR(12, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+6), 10); } } igett("get_vfoB"); return B.freq; } void RIG_X6100::set_vfoB (unsigned long long freq) { B.freq = freq; cmd.assign(pre_to).append("\x25"); if (inuse == onB) cmd += '\x00'; else cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); isett("set_vfoB"); } // expecting // 0 1 2 3 4 5 6 7 8 9 // FE FE E0 94 26 NN NN NN NN FD // | | | | // | | | |__filter setting, 01, 02, 03 // | | |_____data mode, 00 - off, 01 - on // | |________Mode 00 - LSB // | 01 - USB // | 02 - AM // | 03 - CW // | 04 - RTTY // | 05 - FM // | 07 - CW-R // | 08 - RTTY-R // | 17 - DV // |___________selected vfo, 00 - active, 01 - inactive int RIG_X6100::get_modeA() { int md = 0; size_t p; std::string resp; cmd.assign(pre_to).append("\x26"); resp.assign(pre_fm).append("\x26"); if (inuse == onB) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); if (waitFOR(10, "get mode A")) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeA; if (replystr[p+6] == -1) { md = A.imode = 0; } else { for (md = 0; md < DV705; md++) { if (replystr[p+6] == X6100_mode_nbr[md]) { A.imode = md; if (replystr[p+7] == 0x01 && A.imode < CW705) A.imode += 8; if (A.imode > DV705) A.imode = 1; break; } } A.filter = replystr[p+8]; if (A.filter > 0 && A.filter < 4) mode_filterA[A.imode] = A.filter; } } end_wait_modeA: get_trace(4, "get mode A[", X6100modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (A.imode == CW705 || A.imode == CWR705) { cmd.assign(pre_to).append("\x1A\x05"); cmd += '\x00'; cmd += '\x53'; cmd.append(post); resp.assign(pre_fm).append("\x1A\x05"); resp += '\x00'; resp += '\x53'; if (waitFOR(10, "get CW sideband")) { p = replystr.rfind(resp); CW_sense = replystr[p+8]; if (CW_sense) { X6100_mode_type[CW705] = 'U'; X6100_mode_type[CWR705] = 'L'; } else { X6100_mode_type[CW705] = 'L'; X6100_mode_type[CWR705] = 'U'; } } get_trace(2, "get CW sideband ", str2hex(replystr.c_str(), replystr.length())); } return A.imode; } // LSB USB AM CW RTTY FM CW-R RTTY-R LSB-D USB-D // 0 1 2 3 4 5 6 7 8 9 void RIG_X6100::set_modeA(int val) { A.imode = val; cmd.assign(pre_to); cmd += '\x26'; if (inuse == onB) cmd += '\x01'; // unselected vfo else cmd += '\x00'; // selected vfo cmd += X6100_mode_nbr[A.imode]; // operating mode if (A.imode >= LSBD705 && A.imode < DV705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += mode_filterA[A.imode]; // filter cmd.append( post ); waitFB("set mode A"); set_trace(4, "set mode A[", X6100modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); } int RIG_X6100::get_modeB() { int md = 0; size_t p; std::string resp; cmd.assign(pre_to).append("\x26"); resp.assign(pre_fm).append("\x26"); if (inuse == onB) cmd += '\x00'; // active vfo else cmd += '\x01'; // inactive vfo cmd.append(post); if (waitFOR(10, "get mode B")) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeB; if (replystr[p+6] == -1) { md = filA = 0; } else { for (md = 0; md < LSBD705; md++) { if (replystr[p+6] == X6100_mode_nbr[md]) { B.imode = md; if (replystr[p+7] == 0x01 && B.imode < CW705) B.imode += 8; if (B.imode > DV705) B.imode = 1; break; } } B.filter = replystr[p+8]; } } end_wait_modeB: get_trace(4, "get mode B[", X6100modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (B.filter > 0 && B.filter < 4) mode_filterB[B.imode] = B.filter; get_trace(4, "get mode A[", X6100modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (B.imode == CW705 || B.imode == CWR705) { cmd.assign(pre_to).append("\x1A\x05"); cmd += '\x00'; cmd += '\x53'; cmd.append(post); resp.assign(pre_fm).append("\x1A\x05"); resp += '\x00'; resp += '\x53'; if (waitFOR(10, "get CW sideband")) { p = replystr.rfind(resp); CW_sense = replystr[p+8]; if (CW_sense) { X6100_mode_type[CW705] = 'U'; X6100_mode_type[CWR705] = 'L'; } else { X6100_mode_type[CW705] = 'L'; X6100_mode_type[CWR705] = 'U'; } } get_trace(2, "get CW sideband ", str2hex(replystr.c_str(), replystr.length())); } return B.imode; } void RIG_X6100::set_modeB(int val) { B.imode = val; cmd.assign(pre_to); cmd += '\x26'; if (inuse == onB) cmd += '\x00'; // selected vfo else cmd += '\x01'; // unselected vfo cmd += X6100_mode_nbr[B.imode]; // operating mode if (B.imode >= LSBD705 && B.imode < DV705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += mode_filterB[B.imode]; // filter cmd.append( post ); waitFB("set mode B"); set_trace(4, "set mode B[", X6100modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); } int RIG_X6100::get_FILT(int mode) { if (inuse == onB) return mode_filterB[mode]; return mode_filterA[mode]; } void RIG_X6100::set_FILT(int filter) { if (filter < 1 || filter > 3) return; if (inuse == onB) { B.filter = filter; mode_filterB[B.imode] = filter; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; // selected vfo cmd += X6100_mode_nbr[B.imode]; // operating mode if (B.imode >= LSBD705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += filter; // filter cmd.append( post ); waitFB("set mode/filter B"); set_trace(4, "set mode/filter B[", X6100modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); } else { A.filter = filter; mode_filterA[A.imode] = filter; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; // selected vfo cmd += X6100_mode_nbr[A.imode]; // operating mode if (A.imode >= LSBD705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += filter; // filter cmd.append( post ); waitFB("set mode/filter A"); set_trace(4, "set mode/filter A[", X6100modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); } } const char *RIG_X6100::FILT(int val) { if (val < 1) val = 1; if (val > 3) val = 3; return(szfilter[val - 1]); } const char * RIG_X6100::nextFILT() { int val = A.filter; if (inuse == onB) val = B.filter; val++; if (val > 3) val = 1; set_FILT(val); return szfilter[val - 1]; } void RIG_X6100::set_FILTERS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterB[i]; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } } std::string RIG_X6100::get_FILTERS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } for (int i = 0; i < NUM_MODES; i++) s << mode_filterA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_filterB[i] << " "; return s.str(); } std::string RIG_X6100::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_X6100::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } bool RIG_X6100::can_split() { return true; } void RIG_X6100::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); isett("set_split"); } int RIG_X6100::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); if (waitFOR(7, "get split")) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } igett("get_split"); return split; } int RIG_X6100::get_bwA() { if (A.imode == 3 || A.imode == 11) return 0; // FM, FM-D int current_vfo = inuse; if (current_vfo == onB) selectA(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); int bwval = A.iBW; if (waitFOR(8, "get_bwA")) { std::string resp = pre_fm; resp.append("\x1A\x03"); size_t p = replystr.find(resp); if (p != std::string::npos) bwval = fm_bcd(replystr.substr(p+6), 2); } if (bwval != A.iBW) { A.iBW = bwval; mode_bwA[A.imode] = bwval; } if (current_vfo == onB) selectB(); igett("get_bwA"); return A.iBW; } void RIG_X6100::set_bwA(int val) { if (A.imode == 3 || A.imode == 11) return; // FM, FM-D A.iBW = val; int current_vfo = inuse; if (current_vfo == onB) selectA(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bwA"); mode_bwA[A.imode] = val; isett("set_bwA"); if (current_vfo == onB) selectB(); } int RIG_X6100::get_bwB() { if (B.imode == 3 || B.imode == 11) return 0; // FM, FM-D int current_vfo = inuse; if (current_vfo == onA) selectB(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); int bwval = B.iBW; if (waitFOR(8, "get_bwB")) { std::string resp = pre_fm; resp.append("\x1A\x03"); size_t p = replystr.find(resp); if (p != std::string::npos) bwval = fm_bcd(replystr.substr(p+6), 2); } if (bwval != B.iBW) { B.iBW = bwval; mode_bwB[B.imode] = bwval; } if (current_vfo == onA) selectA(); igett("get_bwB"); return B.iBW; } void RIG_X6100::set_bwB(int val) { if (B.imode == 3 || B.imode == 11) return; // FM, FM-D B.iBW = val; int current_vfo = inuse; if (current_vfo == onA) selectB(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); waitFB("set bwB"); mode_bwB[B.imode] = val; isett("set_bwB"); if (current_vfo == onA) selectA(); } // LSB USB AM FM CW CW-R RTTY RTTY-R LSB-D USB-D AM-D FM-D // 0 1 2 3 4 5 6 7 8 9 10 11 int RIG_X6100::adjust_bandwidth(int m) { int bw = 0; switch (m) { case 2: case 10: // AM, AM-D bandwidths_ = X6100_am_bws; bw_vals_ = X6100_bw_vals_AM; bw = 19; break; case 3: case 11: // FM, FM-D bandwidths_ = X6100_fm_bws; bw_vals_ = X6100_bw_vals_FM; bw = 0; break; case 6: case 7: // RTTY, RTTY-R bandwidths_ = X6100_rtty_bws; bw_vals_ = X6100_bw_vals_RTTY; bw = 12; break; case 4: case 5: // CW, CW -R bandwidths_ = X6100_ssb_bws; bw_vals_ = X6100_bw_vals_SSB; bw = 12; break; case 0: case 1: // LSB, USB case 8: case 9: // LSB-D, USB-D default: bandwidths_ = X6100_ssb_bws; bw_vals_ = X6100_bw_vals_SSB; bw = 34; } return bw; } std::vector& RIG_X6100::bwtable(int m) { switch (m) { case 2: case 10: // AM, AM-D return X6100_am_bws; break; case 3: case 11: // FM, FM-D return X6100_fm_bws; break; case 6: case 7: // RTTY, RTTY-R return X6100_rtty_bws; break; case 4: case 5: // CW, CW -R case 0: case 1: // LSB, USB case 8: case 9: // LSB-D, USB-D default: return X6100_ssb_bws; } return X6100_ssb_bws; } int RIG_X6100::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } int RIG_X6100::get_mic_gain() { int val = 0; std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { igett("get mic gain"); size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return val; } void RIG_X6100::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set mic gain"); isett("set mic gain"); } void RIG_X6100::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } static int comp_level[] = {11,34,58,81,104,128,151,174,197,221,244}; void RIG_X6100::set_compression(int on, int val) { cmd = pre_to; cmd.append("\x16\x44"); if (on) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); waitFB("set Comp ON/OFF"); if (val < 0) return; if (val > 10) return; cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(comp_level[val], 3)); cmd.append( post ); waitFB("set comp"); isett("set comp"); } void RIG_X6100::get_compression(int &on, int &val) { std::string resp; cmd.assign(pre_to).append("\x16\x44").append(post); resp.assign(pre_fm).append("\x16\x44"); if (waitFOR(8, "get comp on/off")) { size_t p = replystr.find(resp); if (p != std::string::npos) on = (replystr[p+6] == 0x01); } cmd.assign(pre_to).append("\x14\x0E").append(post); resp.assign(pre_fm).append("\x14\x0E"); if (waitFOR(9, "get comp level")) { igett("get comp level"); size_t p = replystr.find(resp); int level = 0; if (p != std::string::npos) { level = fm_bcd(replystr.substr(p+6), 3); for (val = 0; val < 11; val++) if (level <= comp_level[val]) break; } } } void RIG_X6100::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; cmd.append( post ); waitFB("set vox OFF"); } isett("set vox on/off"); } // Xcvr values range 0...255 step 1 void RIG_X6100::get_vox_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_X6100::set_vox_gain() { int vox_gain = round((progStatus.vox_gain * 255 / 100 + 0.5)); minmax(0, 255, vox_gain); cmd.assign(pre_to).append("\x14\x16"); cmd.append(to_bcd(vox_gain, 3)); cmd.append( post ); waitFB("SET vox gain"); isett("set vox gain"); } // Xcvr values range 0...255 step 1 void RIG_X6100::get_vox_anti_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_X6100::set_vox_anti() { int vox_anti = round((progStatus.vox_anti * 255 / 100 + 0.5)); minmax(0, 255, vox_anti); cmd.assign(pre_to).append("\x14\x17"); cmd.append(to_bcd(vox_anti, 3)); cmd.append( post ); waitFB("SET anti-vox"); isett("set anti vox"); } // VOX hang 0.0 - 2.0, step 0.1 // Xcvr values 0..20 step 1 void RIG_X6100::get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 20; step = 1; } void RIG_X6100::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05\x01\x91"); cmd.append(to_bcd(progStatus.vox_hang, 2)); cmd.append( post ); waitFB("SET vox hang"); isett("set vox hang"); } //---------------------------------------------------------------------- // CW controls void RIG_X6100::get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void RIG_X6100::set_cw_wpm() { int iwpm = round((progStatus.cw_wpm - 6) * 255 / 42 + 0.5); minmax(0, 255, iwpm); cmd.assign(pre_to).append("\x14\x0C"); cmd.append(to_bcd(iwpm, 3)); cmd.append( post ); waitFB("SET cw wpm"); isett("set_cw_wpm"); } void RIG_X6100::set_break_in() { // 16 47 00 break-in off // 16 47 01 break-in semi // 16 47 02 break-in full cmd.assign(pre_to).append("\x16\x47"); switch (progStatus.break_in) { case 2: cmd += '\x02'; break_in_label("FULL"); break; case 1: cmd += '\x01'; break_in_label("SEMI"); break; case 0: default: cmd += '\x00'; break_in_label("BK-IN"); } cmd.append(post); waitFB("SET break-in"); isett("set break in"); } int RIG_X6100::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")) { igett("get break in"); size_t p = replystr.rfind(resp); if (p != std::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_X6100::get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void RIG_X6100::set_cw_qsk() { int qsk = round ((progStatus.cw_qsk - 2.0) * 255.0 / 11.0 + 0.5); minmax(0, 255, qsk); cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(qsk, 3)); cmd.append(post); waitFB("Set cw qsk delay"); isett("set cw qsk delay"); } void RIG_X6100::get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void RIG_X6100::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0 + 0.5); minmax(0, 255, n); cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); isett("set cw spot tone"); } void RIG_X6100::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x24'; cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); isett("set cw sidetone vol"); } // Tranceiver PTT on/off void RIG_X6100::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); isett("set PTT"); ptt_ = val; } int RIG_X6100::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { igett("get PTT"); size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } static catpair vol_pairs[] = { { 0, 0}, { 4, 1}, { 9, 2}, { 13, 3}, { 18, 4}, { 23, 5}, { 27, 6}, { 32, 7}, { 37, 8}, { 41, 9}, { 46, 10}, { 51, 11}, { 55, 12}, { 60, 13}, { 64, 14}, { 69, 15}, { 74, 16}, { 78, 17}, { 83, 18}, { 88, 19}, { 92, 20}, { 97, 21}, {102, 22}, {106, 23}, {111, 24}, {115, 25}, {120, 26}, {125, 27}, {129, 28}, {134, 29}, {139, 30}, {143, 31}, {148, 32}, {153, 33}, {157, 34}, {162, 35}, {166, 36}, {171, 37}, {176, 38}, {180, 39}, {185, 40}, {190, 41}, {194, 42}, {199, 43}, {204, 44}, {208, 45}, {213, 46}, {217, 47}, {222, 48}, {227, 49}, {231, 50}, {236, 51}, {241, 52}, {245, 53}, {250, 54}, {255, 55} }; // Volume control val 0 ... 100 void RIG_X6100::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); int cat = 0; if (val) ++val; if (val > 255) val = 255; for (size_t n = 0; n < sizeof(vol_pairs) / sizeof(catpair); n++) if (vol_pairs[n].val >= val) { cat = vol_pairs[n].cat; break; } cmd += bcd[cat / 100]; cmd += bcd[cat % 100]; cmd.append( post ); waitFB("set vol"); isett("set volume_control()"); } int RIG_X6100::get_volume_control() { int val = 0; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; if (waitFOR(9, "get vol")) { igett("get volume control"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(vol_pairs) / sizeof(catpair) - 1; i++) if (mtr >= vol_pairs[i].cat && mtr < vol_pairs[i+1].cat) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; val = (int)ceil(vol_pairs[i].val + (vol_pairs[i+1].val - vol_pairs[i].val)*(mtr - vol_pairs[i].cat)/(vol_pairs[i+1].cat - vol_pairs[i].cat)); if (val > 55) val = 55; } } return val; } void RIG_X6100::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 55; step = 1; } void RIG_X6100::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((unsigned long long int)((val + 1) * 25), 4)); cmd.append( post ); isett("set_power_control()"); waitFB("set power"); } double RIG_X6100::get_power_control() { int val = progStatus.power_level; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = fm_bcd(replystr.substr(p+6), 3); } igett("get_power_control()"); if (val <= 25) return 1.0; if (val <= 51) return 2.0; if (val <= 76) return 3.0; if (val <= 102) return 4.0; if (val <= 127) return 5.0; if (val <= 153) return 6.0; if (val <= 178) return 7.0; if (val <= 204) return 8.0; if (val <= 229) return 9.0; return 10.0; } void RIG_X6100::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; max = 10.0; step = 1.0; } int RIG_X6100::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr * 1.2); if (mtr > 100) mtr = 100; } } return mtr; } double RIG_X6100::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; int ret = waitFOR(9, "get voltmeter"); igett( "get_voltmeter()"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 16.0 * mtr / 241.0; return val; } } return -1; } int RIG_X6100::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= 0; int ret = waitFOR(9, "get power out"); igett("get power out"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); if (mtr > 0) ++mtr; } } return mtr; } struct swrpair {int mtr; float swr;}; // Table entries below correspond to SWR readings of 1.1, 1.5, 2.0, 2.5, 3.0 and infinity. // Values are also tweaked to fit the display of the SWR meter. static catpair swr_pairs[] = { {0, 0.0}, {48, 10.5}, {80, 23.0}, {103, 35.0}, {120, 48.0}, {255, 100.0 } }; int RIG_X6100::get_swr(void) { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get swr")) { igett("get swr"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(swr_pairs) / sizeof(catpair) - 1; i++) if (mtr >= swr_pairs[i].cat && mtr < swr_pairs[i+1].cat) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(swr_pairs[i].val + (swr_pairs[i+1].val - swr_pairs[i].val)*(mtr - swr_pairs[i].cat)/(swr_pairs[i+1].cat - swr_pairs[i].cat)); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_X6100::get_alc(void) { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { igett("get alc"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /1.2); if (mtr > 100) mtr = 100; } } return mtr; } void RIG_X6100::set_rf_gain(int val) { cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set RF"); isett("set rf gain"); } int RIG_X6100::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get RF")) { igett("get rf gain"); size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return val; } void RIG_X6100::get_rf_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } int RIG_X6100::next_preamp() { if (atten_level == 1) return preamp_level; switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_X6100::set_preamp(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; preamp_level = val; cmd += (unsigned char)preamp_level; cmd.append( post ); waitFB( (preamp_level == 0) ? "set Preamp OFF" : (preamp_level == 1) ? "set Preamp Level 1" : "set Preamp Level 2"); isett("set preamp on/off"); } int RIG_X6100::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get Preamp Level")) { igett("get preamp level"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { preamp_level = replystr[p+6]; } } return preamp_level; } void RIG_X6100::set_attenuator(int val) { if (val) { atten_level = 1; } else { atten_level = 0; } cmd = pre_to; cmd += '\x11'; cmd += atten_level ? '\x20' : '\x00'; cmd.append( post ); waitFB("set att"); isett("set attenuator"); } int RIG_X6100::next_attenuator() { if (atten_level) return 0; return 1; } int RIG_X6100::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; if (waitFOR(7, "get ATT")) { igett("get attenuator"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == 0x20) { atten_level = 1; return 1; } else { atten_level = 0; return 0; } } } return 0; } const char *RIG_X6100::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_X6100::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } void RIG_X6100::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); isett("set noise"); } int RIG_X6100::get_noise() { int val = progStatus.noise; std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { igett("get noise"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+6]; } } return val; } void RIG_X6100::set_nb_level(int val) { cmd = pre_to; cmd.append("\x14\x12"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set NB level"); isett("set nb level"); } int RIG_X6100::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x14\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NB level")) { igett("get nb level"); size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_X6100::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); isett("set NR"); } int RIG_X6100::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { igett("get NR"); size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise_reduction; } /* I:12:06:50: get NR ans in 0 ms, OK cmd FE FE 7A E0 16 40 FD ans FE FE 7A E0 16 40 FD FE FE E0 7A 16 40 01 FD 0 1 2 3 4 5 6 7 I:12:06:50: get NRval ans in 0 ms, OK cmd FE FE 7A E0 14 06 FD ans FE FE 7A E0 14 06 FD FE FE E0 7A 14 06 00 24 FD 0 1 2 3 4 5 6 7 8 */ void RIG_X6100::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val *= 16; val += 8; cmd.append(to_bcd(val, 3)); cmd.append(post); waitFB("set NRval"); isett("set NR val"); } int RIG_X6100::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { igett("get NR val"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val -= 8; val /= 16; } } return val; } void RIG_X6100::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set Sqlch"); isett("set squelch"); } int RIG_X6100::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get squelch")) { igett("get squelch"); size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_X6100::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += (unsigned char)val; cmd.append( post ); waitFB("set AN"); isett("set auto notch on/off"); } int RIG_X6100::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get AN")) { igett("get autonotch"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } void RIG_X6100::set_notch(bool on, int freq) { int hexval; switch (vfo->imode) { default: case USB705: case USBD705: case RTTYR705: case DV705: hexval = freq - 1500; break; case LSB705: case LSBD705: case RTTY705: hexval = 1500 - freq; break; case CW705: if (CW_sense) hexval = freq - progStatus.cw_spot_tone; else hexval = progStatus.cw_spot_tone - freq; break; case CWR705: if (CW_sense) hexval = progStatus.cw_spot_tone - freq; else 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(hexval,3)); cmd.append(post); waitFB("set notch val"); set_trace(2, "set_notch_val() ", str2hex(cmd.c_str(), cmd.length())); } bool RIG_X6100::get_notch(int &val) { bool on = false; val = 1500; std::string cstr = "\x16\x48"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get notch")) { igett("get_notch()"); size_t p = replystr.rfind(resp); if (p != std::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")) { igett("get notch val"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = (int)ceil(fm_bcd(replystr.substr(p+6),3)); val -= 128; val *= 20; switch (vfo->imode) { default: case USB705: case USBD705: case RTTYR705: case DV705: val = 1500 + val; break; case LSB: case LSBD705: case RTTY705: val = 1500 - val; break; case CW705: if (CW_sense) val = progStatus.cw_spot_tone + val; else val = progStatus.cw_spot_tone - val; break; case CWR705: if (CW_sense) val = progStatus.cw_spot_tone - val; else val = progStatus.cw_spot_tone + val; break; } } get_trace(2, "get_notch_val() ", str2hex(replystr.c_str(), replystr.length())); } } return on; } void RIG_X6100::get_notch_min_max_step(int &min, int &max, int &step) { switch (vfo->imode) { default: case USB705: case USBD705: case RTTYR705: case LSB705: case LSBD705: case RTTY705: case DV705: min = 0; max = 3000; step = 20; break; case CW705: case CWR705: min = progStatus.cw_spot_tone - 500; max = progStatus.cw_spot_tone + 500; step = 20; break; } } static int agcval = 3; int RIG_X6100::get_agc() { cmd = pre_to; cmd.append("\x16\x12"); cmd.append(post); if (waitFOR(8, "get AGC")) { igett("get agc"); size_t p = replystr.find(pre_fm); if (p != std::string::npos) agcval = replystr[p+6]; // 1 == off, 2 = FAST, 3 = MED, 4 = SLOW } return agcval; } int RIG_X6100::incr_agc() { agcval++; if (agcval == 4) agcval = 1; cmd = pre_to; cmd.append("\x16\x12"); cmd += agcval; cmd.append(post); waitFB("set AGC"); isett("set agc"); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "MED", "SLO"}; const char *RIG_X6100::agc_label() { return agcstrs[agcval]; } int RIG_X6100::agc_val() { return (agcval); } void RIG_X6100::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); isett("set IF on/off"); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); isett("set IF val"); } bool RIG_X6100::get_if_shift(int &val) { val = sh_; return sh_on_; } void RIG_X6100::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_X6100::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); isett("set_pbt_inner()"); } void RIG_X6100::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); isett("set_pbt_outer()"); } int RIG_X6100::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } igett("get_pbt_inner"); return val; } int RIG_X6100::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } igett("get_pbt_outer"); return val; } void RIG_X6100::setVfoAdj(double v) { vfo_ = v; cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x89'; cmd.append(bcd255(int(v))); cmd.append(post); waitFB("SET vfo adjust"); } double RIG_X6100::getVfoAdj() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x89'; cmd.append(post); if (waitFOR(11, "get vfo adj")) { igett("get vfo adj"); size_t p = replystr.find(pre_fm); if (p != std::string::npos) { vfo_ = num100(replystr.substr(p+8)); } } return vfo_; } /* Received from transceiver: Rx 56 bytes 00 | FE FE E0 A4 04 | 1A 01 band stack register command 06 | 03 register # 3 07 | 01 left side of display 08 | 00 00 05 07 00 frequency 13 | 00 mode 14 | 02 filter # 15 | 00 data mode == 0x01 16 | 00 duplex tone 17 | 00 digital squelch 18 | 00 08 85 repeater tone freq 21 | 00 08 85 tone squelch freq 25 | 00 00 23 dtcs code 27 | 00 digital squelch code 28 | 00 50 00 duplex offset freq 31 | 43 51 43 51 43 51 20 20 destination call 8 chars 39 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 register description 16 chars 55 | FD */ // test std::string void RIG_X6100::get_band_selection(int v) { int v2 = v; switch (v) { case 11: v2 = 13; break; case 12: v2 = 14; break; default: break; } cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v2, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(56, "get band stack")) { igett("get band stack"); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { int bandfreq = fm_bcd_be(replystr.substr(p + 8, 5), 10); // int bandmode = fm_bcd(replystr.substr(p + 13, 1) ,2); int mode = 0; for (int md = LSB705; md <= DV705; md++) { if (replystr[p + 13] == X6100_mode_nbr[md]) { mode = md; if (replystr[p+15] == 0x01 && mode < CW705) mode += 8; break; } } if (mode > DV705) mode = USB705; int bandfilter = replystr[p+14]; int tone = fm_bcd(replystr.substr(p + 18, 3), 6); tTONE = 0; for (size_t n = 0; n < sizeof(PL_tones) / sizeof(*PL_tones); n++) { if (tone == PL_tones[n]) { tTONE = n; break; } } tone = fm_bcd(replystr.substr(p + 21, 3), 6); rTONE = 0; for (size_t n = 0; n < sizeof(PL_tones) / sizeof(*PL_tones); n++) { if (tone == PL_tones[n]) { rTONE = n; break; } } if (inuse == onB) { set_vfoB(bandfreq); set_modeB(mode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(mode); set_FILT(bandfilter); } } return; } } void RIG_X6100::set_band_selection(int v) { switch (v) { case 11: v = 13; break; case 12: v = 14; break; default: break; } unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? B.filter : A.filter); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd += '\x1A'; cmd += '\x01'; cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); // freq cmd += X6100_mode_nbr[mode]; // mode cmd += fil; // filter # if (mode >= LSBD705 && mode < DV705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += '\x00'; cmd += '\x00'; // duplex tone, digital squelch cmd.append(to_bcd(PL_tones[tTONE], 6)); // transmit tone cmd.append(to_bcd(PL_tones[rTONE], 6)); // receive tone cmd += '\x00'; cmd += '\x00'; cmd += '\x23'; // dtcs tone cmd += '\x00'; //digital squelch code cmd += '\x00'; cmd += '\x60'; cmd += '\x00'; // duplex offset cmd.append(" "); cmd.append(" "); cmd.append(post); waitFB("set_band_selection"); isett("set_band_selection"); } flrig-2.0.04/src/rigs/xiegu/Xiegu-G90.cxx0000664000175000017500000006006214502041135014640 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // Mark Gregory, G4LCH // Morgan Jones // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "xiegu/Xiegu-G90.h" #include #include #include "gettext.h" #include "support.h" //============================================================================= // IC-_g90 /* */ const char Xiegu_G90name_[] = "Xiegu-G90"; // these are only defined in this file // undef'd at end of file #define NUM_MODES 5 //static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1}; //static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1}; enum { LSB_g90, USB_g90, AM_g90, CW_g90, CWR_g90 }; static std::vectorXiegu_G90modes_; static const char *vXiegu_G90modes_[] = { "LSB", "USB", "AM", "CW", "CW-R"}; static char Xiegu_G90_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'L' }; static const char Xiegu_G90_mode_nbr[] = { 0x00, // Select the LSB mode 0x01, // Select the USB mode 0x02, // Select the AM mode 0x03, // Select the CW mode 0x07, // Select the CW-R mode }; static std::vectorXiegu_G90_ssb_bws; static const char *vXiegu_G90_ssb_bws[] = { "N/A" }; static int Xiegu_G90_vals_ssb_bws[] = { 1, WVALS_LIMIT }; struct bpair {Fl_Widget *widget; std::string lbl;}; static bpair bpcomp; static void btn_label(void *p) { bpair *bp = (bpair *)p; Fl_Button *b = (Fl_Button *)bp->widget; const char *lbl = bp->lbl.c_str(); if (!bp) return; if (!b) return; if (!lbl) return; b->label(lbl); b->redraw(); } static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } static GUI Xiegu_G90_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, //3 { (Fl_Widget *)sldrPOWER, 266, 145, 156 }, //4 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_Xiegu_G90::initialize() { VECTOR (Xiegu_G90modes_, vXiegu_G90modes_); VECTOR (Xiegu_G90_ssb_bws, vXiegu_G90_ssb_bws); modes_ = Xiegu_G90modes_; bandwidths_ = Xiegu_G90_ssb_bws; bw_vals_ = Xiegu_G90_vals_ssb_bws; _mode_type = Xiegu_G90_mode_type; Xiegu_G90_widgets[0].W = btnVol; Xiegu_G90_widgets[1].W = sldrVOLUME; Xiegu_G90_widgets[2].W = btnAGC; Xiegu_G90_widgets[3].W = sldrSQUELCH; Xiegu_G90_widgets[4].W = sldrPOWER; btn_icom_select_10->deactivate(); btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->copy_label(_("GEN")); btn_icom_select_13->tooltip(_("General RX")); choice_rTONE->deactivate(); choice_tTONE->deactivate(); } RIG_Xiegu_G90::RIG_Xiegu_G90() { defaultCIV = 0x88; name_ = Xiegu_G90name_; modes_ = Xiegu_G90modes_; bandwidths_ = Xiegu_G90_ssb_bws; bw_vals_ = Xiegu_G90_vals_ssb_bws; _mode_type = Xiegu_G90_mode_type; adjustCIV(defaultCIV); serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = false; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = Xiegu_G90_widgets; precision = 1; ndigits = 9; A.filter = B.filter = 1; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 1; def_bw = A.iBW = 0; B.freq = 7070000ULL; B.imode = 1; B.iBW = 0; //true has_smeter = has_power_out = has_swr_control = has_split = has_split_AB = has_mode_control = has_bandwidth_control = has_power_control = has_volume_control = has_sql_control = has_noise_control = has_attenuator_control = has_preamp_control = has_ptt_control = has_agc_control = has_extras = has_cw_wpm = has_cw_vol = has_cw_spot_tone = has_band_selection = has_compON = has_tune_control = has_nb_level = true; // false CW_sense = can_change_alt_vfo = has_alc_control = has_micgain_control = has_ifshift_control = has_pbt_controls = has_rf_control = has_noise_reduction = has_noise_reduction_control = has_auto_notch = has_notch_control = has_cw_qsk = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_compression = has_vfo_adj = restore_mbw = has_xcvr_auto_on_off = false; }; //====================================================================== // Xiegu_G90 unique commands //====================================================================== bool RIG_Xiegu_G90::check () { bool ok = false; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "check()"); ok = waitFOR(11, "check vfo"); igett(""); return ok; } void RIG_Xiegu_G90::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); set_trace(1, "selectA()"); waitFB("select A"); isett(""); inuse = onA; } void RIG_Xiegu_G90::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); set_trace(1, "selectB()"); waitFB("select B"); isett(""); inuse = onB; } unsigned long long RIG_Xiegu_G90::get_vfoA () { if (inuse == onB) return A.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "get_vfoA()"); if (waitFOR(11, "get vfo A")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_Xiegu_G90::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "set vfoA"); waitFB("set vfo A"); isett(""); } unsigned long long RIG_Xiegu_G90::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "get vfoB"); if (waitFOR(11, "get vfo B")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return B.freq; } void RIG_Xiegu_G90::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "set vfoB"); waitFB("set vfo B"); isett(""); } bool RIG_Xiegu_G90::can_split() { return true; } void RIG_Xiegu_G90::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); set_trace(1, "set split"); waitFB(val ? "set split ON" : "set split OFF"); isett(""); } int RIG_Xiegu_G90::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); get_trace(1, "get split"); if (waitFOR(7, "get split")) { igett(""); std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } return split; } // Tranceiver PTT on/off void RIG_Xiegu_G90::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); set_trace(1, "set PTT"); waitFB("set ptt"); isett(""); ptt_ = val; } int RIG_Xiegu_G90::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); get_trace(1,"get_PTT()"); if (waitFOR(8, "get PTT")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } void RIG_Xiegu_G90::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += Xiegu_G90_mode_nbr[val]; cmd += A.filter; cmd.append( post ); set_trace(1, "set mode A"); waitFB("set mode A"); isett(""); } int RIG_Xiegu_G90::get_modeA() { int md = 0; size_t p = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; get_trace(1, "get modeA"); if (waitFOR(8, "get mode A")) { igett(""); p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { md = filA = 0; } else { for (md = 0; md < NUM_MODES; md++) if (replystr[p+5] == Xiegu_G90_mode_nbr[md]) break; A.filter = replystr[p+6]; if (md == NUM_MODES) { checkresponse(); return A.imode; } } } } else { checkresponse(); return A.imode; } A.imode = md; return A.imode; } void RIG_Xiegu_G90::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += Xiegu_G90_mode_nbr[val]; cmd += B.filter; cmd.append( post ); set_trace(1, "set mode B"); waitFB("set mode B"); isett(""); } int RIG_Xiegu_G90::get_modeB() { int md = 0; size_t p = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; get_trace(1, "get modeB"); if (waitFOR(8, "get mode B")) { igett(""); p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { md = filB = 0; } else { for (md = 0; md < NUM_MODES; md++) if (replystr[p+5] == Xiegu_G90_mode_nbr[md]) break; if (md > 6) md -= 2; B.filter = replystr[p+6]; if (md == NUM_MODES) { checkresponse(); return A.imode; } } } } else { checkresponse(); return B.imode; } return B.imode; } void RIG_Xiegu_G90::set_attenuator(int val) { if (val) { atten_level = 1; } else { atten_level = 0; } cmd = pre_to; cmd += '\x11'; cmd += atten_level ? '\x01' : '\x00'; cmd.append( post ); set_trace(1, "set_attenuator()"); waitFB("set att"); isett(""); } int RIG_Xiegu_G90::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; get_trace(1, "get ATT"); if (waitFOR(7, "get ATT")) { igett(""); size_t p = replystr.rfind(resp); if (replystr[p+5] == 0x00) { atten_level = 0; } else { atten_level = 1; } } return atten_level; } void RIG_Xiegu_G90::set_preamp(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; if (val) { cmd += '\x01'; } else { cmd += '\x00'; } cmd.append( post ); set_trace(1, "set preamp"); waitFB( (val == 0) ? "set Preamp OFF" : "set Preamp ON"); isett(""); } int RIG_Xiegu_G90::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get preamp"); if (waitFOR(8, "get Preamp Level")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) preamp_level = replystr[p+6]; } return preamp_level; } const char *RIG_Xiegu_G90::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "ON"; break; } return "PRE"; } const char *RIG_Xiegu_G90::ATT_label() { if (atten_level) return "ON"; return "ATT"; } static int compon = 0; static int compval = 0; void RIG_Xiegu_G90::get_compression(int &on, int &val) { on = compon; val = compval; } void RIG_Xiegu_G90::set_compression(int on, int val) { compon = on; if (on) { cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); set_trace(1, "set comp ON"); waitFB("set Comp ON"); isett(""); bpcomp.lbl = "COMP on"; } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); set_trace(1, "set comp OFF"); waitFB("set Comp OFF"); isett(""); bpcomp.lbl = "COMP off"; } bpcomp.widget = btnCompON; Fl::awake(btn_label, &bpcomp); } // CW controls void RIG_Xiegu_G90::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); // values 0-255 = 5 to 50 WPM cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (50 - 5)), 3)); cmd.append( post ); set_trace(1, "set CW WPM"); waitFB("SET cw wpm"); isett(""); } static char hexchr(int val) { static char c; c = ((val / 10) << 4) + (val % 10); return c; } struct meterpair {int mtr; float val;}; static meterpair pwrtbl[] = { { 0, 1 }, { 13, 2 }, { 26, 3 }, { 40, 4 }, { 53, 5 }, { 67, 6 }, { 80, 7 }, { 93, 8 }, { 107, 9 }, { 121, 10 }, { 134, 11 }, { 147, 12 }, { 161, 13 }, { 174, 14 }, { 187, 15 }, { 201, 16 }, { 214, 17 }, { 228, 18 }, { 241, 19 }, { 255, 20 } }; void RIG_Xiegu_G90::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); int p = 0; for (int n = 0; n < 20; n++){ if (val <= pwrtbl[n].val) { p = pwrtbl[n].mtr; break; } } cmd += hexchr (p / 100); cmd += hexchr (p % 100); cmd.append( post ); set_trace(1, "set_power_control"); waitFB("set power"); isett(""); } double RIG_Xiegu_G90::get_power_control() { int val = pwrtbl[int(progStatus.power_level) - 1].mtr; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); get_trace(1, "get power control"); if (waitFOR(9, "get power")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p + 7] == '\xFD') { val = hexval(replystr[p + 6]); } else { val = 100 * hexval(replystr[p + 6]) + hexval(replystr[p + 7]); } } } int pwr = 0; for (int n = 0; n < 20; n++) { if (val <= pwrtbl[n].mtr) { pwr = pwrtbl[n].val; break; } } return pwr; } void RIG_Xiegu_G90::get_pc_min_max_step(double &min, double &max, double &step) { min = 1; max = 20; step = 1; } // Get Power-Meter (0000=0%, 0143=50%, 213=100%), 100% = 20 W int RIG_Xiegu_G90::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; get_trace(1, "get power out"); if (waitFOR(9, "get power out")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) { // Power is 10 * output in watts, as BCD if (replystr[p + 7] == '\xFD') { mtr = hexval(replystr[p + 6]); } else { mtr = 100 * hexval(replystr[p + 7]) + hexval(replystr[p + 6]); } if (mtr < 0) mtr = 0; if (mtr > 213) mtr = 213; } } return round(mtr * 20.0 / 213.0); } int RIG_Xiegu_G90::power_scale() { return 1; } // Volume control val 0 ... 100 void RIG_Xiegu_G90::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); val *= 255; val /= 100; cmd += hexchr(val / 100); cmd += hexchr(val % 100); cmd.append( post ); set_trace(1, "set_volume_control"); waitFB("set vol"); isett(""); } int RIG_Xiegu_G90::get_volume_control() { int val = progStatus.volume; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get volume control"); if (waitFOR(9, "get vol")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p + 7] == '\xFD') { val = hexval(replystr[p + 6]); } else { val = 100 * hexval(replystr[p + 6]) + hexval(replystr[p + 7]); } } val *= 100; val /= 255; } return val; } void RIG_Xiegu_G90::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set_squelch"); waitFB("set Sqlch"); isett(""); } /* OFF FE FE 88 E0 14 03 FD FE FE E0 88 14 03 00 FD S1 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 28 FD S2 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 56 FD S3 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 85 FD S4 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 01 13 FD S5 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 01 41 FD S6 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 01 70 FD S7 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 01 98 FD S8 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 02 26 FD S9 FE FE 88 E0 14 03 FD FE FE E0 88 14 03 02 55 FD */ int RIG_Xiegu_G90::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get squelch"); if (waitFOR(9, "get squelch")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p + 7] == '\xFD') { val = hexval(replystr[p + 6]); } else { val = 100 * hexval(replystr[p + 6]) + hexval(replystr[p + 7]); } } val *= 100; val /= 255; } return val; } void RIG_Xiegu_G90::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } static meterpair smtrtbl[] = { { 0, 0 }, // s0 -128dbm { 10, 5 }, // s1 -121dbm { 22, 11 }, // s2 -115dbm { 35, 16 }, // s3 -109dbm { 56, 21 }, // s4 -102dbm { 71, 26 }, // s5 -95dbm { 89, 31 }, // s6 -88dbm { 109, 37 }, // s7 -80dbm { 132, 43 }, // s8 -71dbm { 147, 50 }, // s9 -65dbm { 168, 58 }, // s9+10 -57dbm { 173, 66 }, // s9+20 -55dbm { 183, 74 }, // s9+30 -51dbm { 193, 82 }, // s9+40 -47dbm { 201, 90 }, // s9+50 -45dbm { 209, 100 } // s9+60 -42dbm }; // Get S-Meter (0000=S0, 0120=S9, 0241=S9+60) int RIG_Xiegu_G90::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= 0; get_trace(1, "get smeter"); if (waitFOR(8, "get smeter")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p + 7] == '\xFD') { mtr = hexval(replystr[p + 6]); } else { mtr = 100 * hexval(replystr[p + 6]) + hexval(replystr[p + 7]); } if (mtr < 0) mtr = 0; if (mtr > 241) mtr = 241; size_t i = 0; for (i = 0; i < sizeof(smtrtbl) / sizeof(meterpair) - 1; i++) if (mtr >= smtrtbl[i].mtr && mtr < smtrtbl[i+1].mtr) break; mtr = (int)ceil(smtrtbl[i].val + (smtrtbl[i+1].val - smtrtbl[i].val)*(mtr - smtrtbl[i].mtr)/(smtrtbl[i+1].mtr - smtrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } static meterpair swrtbl[] = { {0, 0}, {48, 12}, {80, 25}, {120, 50}, {255, 100} }; //Get SWR-Meter (0000=SWR1.0, 0048=SWR1.5, 0080=SWR2.0, 0120=SWR3.0) int RIG_Xiegu_G90::get_swr() { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; get_trace(1, "get swr"); if (waitFOR(9, "get SWR")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p + 7] == '\xFD') { mtr = hexval(replystr[p + 6]); } else { mtr = 100 * hexval(replystr[p + 6]) + hexval(replystr[p + 7]); } size_t i = 0; for (i = 0; i < sizeof(swrtbl) / sizeof(meterpair) - 1; i++) if (mtr >= swrtbl[i].mtr && mtr < swrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(swrtbl[i].val + (swrtbl[i+1].val - swrtbl[i].val)*(mtr - swrtbl[i].mtr)/(swrtbl[i+1].mtr - swrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } void RIG_Xiegu_G90::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); set_trace(1, "set_noise"); waitFB("set noise"); isett(""); } int RIG_Xiegu_G90::get_noise() { std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get noise"); if (waitFOR(8, "get noise")) { igett(""); size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise; } void RIG_Xiegu_G90::get_band_selection(int v) { int bandfreq, bandmode; switch (v) { default: case 1: bandfreq = progStatus.f160; bandmode = progStatus.m160; break; case 2: bandfreq = progStatus.f80; bandmode = progStatus.m80; break; case 3: bandfreq = progStatus.f40; bandmode = progStatus.m40; break; case 4: bandfreq = progStatus.f30; bandmode = progStatus.m30; break; case 5: bandfreq = progStatus.f20; bandmode = progStatus.m20; break; case 6: bandfreq = progStatus.f17; bandmode = progStatus.m17; break; case 7: bandfreq = progStatus.f15; bandmode = progStatus.m15; break; case 8: bandfreq = progStatus.f12; bandmode = progStatus.m12; break; case 9: bandfreq = progStatus.f10; bandmode = progStatus.m10; break; case 10: bandfreq = progStatus.f6; bandmode = progStatus.m6; break; case 13: bandfreq = progStatus.fgen; bandmode = progStatus.mgen; break; } if (bandmode < 0) bandmode = 0; if (bandmode > 4) bandmode = 0; if (inuse == onB) { set_vfoB((unsigned long long)bandfreq); set_modeB(bandmode); } else { set_vfoA((unsigned long long)bandfreq); set_modeA(bandmode); } set_trace(1, "get band selection"); } void RIG_Xiegu_G90::set_band_selection(int v) { // Carrier freq needs to be unsigned long long because of potential // microwave band use; however, the established HF amateur bands fit // within an int and the fltk Fl_Preferences class doesn't support // unsigned or long long so we store as int and use a mask to avoid compiler complaint. switch (v) { default: case 1: progStatus.f160 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m160 = vfo->imode; break; case 2: progStatus.f80 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m80 = vfo->imode; break; case 3: progStatus.f40 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m40 = vfo->imode; break; case 4: progStatus.f30 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m30 = vfo->imode; break; case 5: progStatus.f20 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m20 = vfo->imode; break; case 6: progStatus.f17 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m17 = vfo->imode; break; case 7: progStatus.f15 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m15 = vfo->imode; break; case 8: progStatus.f12 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m12 = vfo->imode; break; case 9: progStatus.f10 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m10 = vfo->imode; break; case 10: progStatus.f6 = (int)vfo->freq & 0x7FFFFFFF; progStatus.m6 = vfo->imode; break; case 13: progStatus.fgen = (int)vfo->freq & 0x7FFFFFFF; progStatus.mgen = vfo->imode; break; } set_trace(1, "set_band_selection()"); } static int agcval = 0; int RIG_Xiegu_G90::get_agc() { cmd = pre_to; cmd.append("\x16\x12"); cmd.append(post); get_trace(1, "get agc"); if (waitFOR(8, "get AGC")) { igett(""); size_t p = replystr.find(pre_fm); if (p == std::string::npos) return agcval; return (agcval = replystr[p + 6]); // 1 = off, 2 = FAST, 3 = SLOW 4 = AUTO } return agcval; } int RIG_Xiegu_G90::incr_agc() { agcval++; if (agcval == 4) agcval = 0; cmd = pre_to; cmd.append("\x16\x12"); cmd += agcval; cmd.append(post); set_trace(1, "incr agc"); waitFB("set AGC"); isett(""); return agcval; } static const char *agcstrs[] = {"AGC-O", "AGC-F", "AGC-M","AGC-S"}; const char *RIG_Xiegu_G90::agc_label() { return agcstrs[agcval]; } int RIG_Xiegu_G90::agc_val() { return (agcval); } void RIG_Xiegu_G90::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0 + 0.5); minmax(0, 255, n); cmd.append(to_bcd(n, 3)); cmd.append( post ); set_trace(1, "set cw spot tone"); waitFB("SET cw spot tone"); seth(); } void RIG_Xiegu_G90::tune_rig(int how) { cmd = pre_to; cmd.append("\x1c\x01"); switch (how) { default: case 0: cmd += '\x00'; // off break; case 1: cmd += '\x01'; // ON break; case 2: cmd += '\x02'; // start tuning break; } cmd.append( post ); waitFB("tune rig"); ICtrace("tune rig", replystr); } int RIG_Xiegu_G90::get_tune() { std::string resp; std::string cstr = "\x1C\x01"; cmd.assign(pre_to).append(cstr).append(post); resp.assign(pre_fm).append(cstr); int val = tune_; if (waitFOR(8, "get TUNE")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = replystr[p + 6]; } return (tune_ = val); } flrig-2.0.04/src/rigs/xiegu/Xiegu-5105.cxx0000664000175000017500000003347314502041135014701 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "xiegu/Xiegu-5105.h" #include "trace.h" //============================================================================= // Xiegu 5105 // const char XI5105name_[] = "Xiegu-5105"; static std::vectorXI5105modes_; static const char *vXI5105modes_[] = { "LSB", "USB", "AM", "CW"}; //"RTTY", "CW-R", "RTTY-R"}; static const char XI5105_mode_type[] = { 'L', 'U', 'U', 'L'}; //, 'L', 'U', 'U'}; static std::vectorXI5105_widths; static const char *vXI5105_widths[] = { "Wide", "Med", "Narr"}; static int XI5105_bw_vals[] = {1,2,3,WVALS_LIMIT}; /* static GUI XI5105_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnNR, 214, 105, 50 }, { (Fl_Widget *)sldrNR, 266, 105, 156 }, { (Fl_Widget *)sldrMICGAIN,266, 125, 156 }, { (Fl_Widget *)sldrPOWER, 266, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; */ RIG_XI5105::RIG_XI5105() { name_ = XI5105name_; modes_ = XI5105modes_; _mode_type = XI5105_mode_type; bandwidths_ = XI5105_widths; bw_vals_ = XI5105_bw_vals; // widgets = XI5105_widgets; serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; filter_nbr = 1; has_ptt_control = has_smeter = // has_power_control = // has_volume_control = has_mode_control = has_bandwidth_control = // has_micgain_control = // has_attenuator_control = // has_preamp_control = // has_noise_control = // has_noise_reduction = // has_noise_reduction_control = // has_auto_notch = // has_rf_control = // has_split = // has_compON = // has_extras = // has_vox_onoff = true; defaultCIV = 0x70; adjustCIV(defaultCIV); precision = 1; ndigits = 9; }; //============================================================================= void RIG_XI5105::initialize() { VECTOR (XI5105modes_, vXI5105modes_); VECTOR (XI5105_widths, vXI5105_widths); modes_ = XI5105modes_; _mode_type = XI5105_mode_type; bandwidths_ = XI5105_widths; bw_vals_ = XI5105_bw_vals; /* XI5105_widgets[0].W = btnVol; XI5105_widgets[1].W = sldrVOLUME; XI5105_widgets[2].W = sldrRFGAIN; XI5105_widgets[3].W = btnNR; XI5105_widgets[4].W = sldrNR; XI5105_widgets[5].W = sldrMICGAIN; XI5105_widgets[6].W = sldrPOWER; */ } //int RIG_XI5105::adjust_bandwidth(int m) //{ // return 0; //} void RIG_XI5105::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); waitFB("sel A"); inuse = onA; set_trace(2, "selectA()", str2hex(cmd.c_str(), cmd.length())); } void RIG_XI5105::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); waitFB("sel B"); inuse = onB; set_trace(2, "selectB()", str2hex(cmd.c_str(), cmd.length())); } bool RIG_XI5105::check () { // send a series of select A commands to allow xcvr to recognize baud rate cmd = pre_to; cmd += '\x07'; cmd += '\x00'; for (int n = 0; n < 5; n++) { cmd.append(post); MilliSleep(50); } set_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return true; } unsigned long long RIG_XI5105::get_vfoA () { if (inuse == onB) return A.freq; cmd = pre_to; cmd += '\x03'; cmd.append( post ); std::string resp = pre_fm; resp += '\x03'; if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) A.freq = fm_bcd_be(replystr.substr(p+5), 10); } return A.freq; } void RIG_XI5105::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); set_trace(2, "set_vfoA()", str2hex(cmd.c_str(), cmd.length())); } unsigned long long RIG_XI5105::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) B.freq = fm_bcd_be(replystr.substr(p+5), 10); } return B.freq; } void RIG_XI5105::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); set_trace(2, "set_vfoB()", str2hex(cmd.c_str(), cmd.length())); } // Tranceiver PTT on/off void RIG_XI5105::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; set_trace(2, "set_PTT()", str2hex(cmd.c_str(), cmd.length())); } /* // Volume control val 0 ... 100 void RIG_XI5105::set_volume_control(int val) { int ICvol = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); } int RIG_XI5105::get_volume_control() { cmd = pre_to; cmd.append("\x14\x01"); cmd.append( post ); std::string resp = pre_fm; resp.append("\x14\x01"); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if ( p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) * 100 / 255); } return 0; } void RIG_XI5105::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } */ int RIG_XI5105::get_smeter() { cmd = pre_to; cmd.append("\x15\x02"); cmd.append( post ); std::string resp = pre_fm; resp.append("\x15\x02"); int mtr = 0; if (waitFOR(9, "get smeter")) { get_trace(2, "get_smeter()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = replystr[p+6] * 100 + replystr[p+7]; mtr = (int)ceil(mtr /2.55); if (mtr < 0) mtr = 0; if (mtr > 100) mtr = 100; return mtr; } } return -1; } /* void RIG_XI5105::set_attenuator(int val) { cmd = pre_to; cmd += '\x11'; cmd += val ? '\x20' : '\x00'; cmd.append( post ); waitFB("set att"); } void RIG_XI5105::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); } int RIG_XI5105::get_noise() { cmd = pre_to; cmd.append("\x16\x22"); cmd.append(post); std::string resp = pre_fm; resp.append("\x16\x22"); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } void RIG_XI5105::set_nb_level(int val) { } int RIG_XI5105::get_nb_level() { return 0; } void RIG_XI5105::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set nr"); } int RIG_XI5105::get_noise_reduction() { cmd = pre_to; cmd.append("\x16\x40"); cmd.append(post); std::string resp = pre_fm; resp.append("\x16\x40"); if (waitFOR(8, "get nr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } void RIG_XI5105::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val = val * 16 + 8; cmd.append(to_bcd(val, 3)); cmd.append(post); waitFB("set NRval"); } int RIG_XI5105::get_noise_reduction_val() { int val = 0; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = fm_bcd(replystr.substr(p+6), 3); val = (val - 8) / 16; } return val; } void RIG_XI5105::set_preamp(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char)val; cmd.append( post ); waitFB("set pre"); } int RIG_XI5105::get_preamp() { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd.append( post ); std::string resp = pre_fm; resp += '\x16'; resp += '\x02'; if (waitFOR(8, "get pre")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { preamp_label("Pre", true); return 1; } else { preamp_label("Pre", false); return 0; } } } return 0; } void RIG_XI5105::set_rf_gain(int val) { int ICrfg = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(ICrfg, 3)); cmd.append( post ); waitFB("set rf gain"); } int RIG_XI5105::get_rf_gain() { cmd = pre_to; cmd.append("\x14\x02").append(post); std::string resp = pre_fm; cmd.append("\x14\x02"); if (waitFOR(9, "get rfg")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) * 100 / 255); } return 0; } void RIG_XI5105::set_squelch(int val) { int ICsql = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(ICsql, 3)); cmd.append( post ); waitFB("set sql"); } void RIG_XI5105::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((int)(val * 255 / 100), 3)); cmd.append( post ); waitFB("set power"); } double RIG_XI5105::get_power_control() { std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } return progStatus.power_level; } void RIG_XI5105::set_mic_gain(int val) { val = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); } int RIG_XI5105::get_mic_gain() { std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_XI5105::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } */ void RIG_XI5105::set_modeA(int val) { modeA = val; cmd = pre_to; cmd += '\x06'; cmd += val > 4 ? val + 2 : val; cmd += filter_nbr; cmd.append( post ); waitFB("set mode A"); } int RIG_XI5105::get_modeA() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get modeA")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { modeA = replystr[p+5]; if (modeA > 6) modeA -= 2; filter_nbr = replystr[p+6]; } } return modeA; } void RIG_XI5105::set_modeB(int val) { modeB = val; cmd = pre_to; cmd += '\x06'; cmd += val > 4 ? val + 2 : val; cmd += filter_nbr; cmd.append( post ); waitFB("set mode A"); } int RIG_XI5105::get_modeB() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get modeB")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { modeB = replystr[p+5]; if (modeB > 6) modeB -= 2; filter_nbr = replystr[p+6]; } } return modeB; } int RIG_XI5105::get_modetype(int n) { return _mode_type[n]; } void RIG_XI5105::set_bwA(int val) { filter_nbr = val + 1; set_modeA(modeA); } int RIG_XI5105::get_bwA() { return filter_nbr - 1; } void RIG_XI5105::set_bwB(int val) { filter_nbr = val + 1; set_modeB(modeB); } int RIG_XI5105::get_bwB() { return filter_nbr - 1; } /* void RIG_XI5105::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += (unsigned char)val; cmd.append( post ); waitFB("set AN"); } int RIG_XI5105::get_auto_notch() { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd.append( post ); std::string resp = pre_fm; resp += '\x16'; resp += '\x41'; if (waitFOR(8, "get AN")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[6] == 0x01) { auto_notch_label("AN", true); return 1; } else { auto_notch_label("AN", false); return 0; } } } return 0; } void RIG_XI5105::set_compression(int on, int val) { if (on) { cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set compON"); } else { cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set compOFF"); } } void RIG_XI5105::set_vox_onoff() { if (progStatus.vox_onoff) { cmd = pre_to; cmd.append("\x16\x46"); cmd += '\x01'; cmd.append(post); waitFB("set voxON"); } else { cmd = pre_to; cmd.append("\x16\x46"); cmd += '\x00'; cmd.append(post); waitFB("set voxOFF"); } } void RIG_XI5105::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); } int RIG_XI5105::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); if (waitFOR(7, "get split")) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } return split; } */ flrig-2.0.04/src/rigs/lab599/0000775000175000017500000000000014511461606012447 500000000000000flrig-2.0.04/src/rigs/lab599/TX500.cxx0000664000175000017500000002662414502041135013674 00000000000000// --------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // --------------------------------------------------------------------- /* ===================================================================== TX500 CAT controls reverse engineering: 1. frequency 2. mode; set: FSK==>DIG, FSK-R==>DIG; get DIG always returns USB as mode 3. PTT 4. attenuator 5. preamp 6. identification; returns ID019; 7. power on/off status; PS; returns PS0; but transceiver is ON 8. SM0; always returns SM00002; Factory response to request for list of supported CAT commands: ID; identifier, response 019; AI; auto information; default OFF RX; receiver function status; NO RESPONSE IF; information std::string; type response: IF0000703437000000+000000000020000000; FA; get/set frequency vfo A; FA00007034370; FB; get/set frequency vfo B; FB00014070000; FR; RX vfo: FR0; vfoA, FR1; vfoB FT; TX vfo: FT0; vfoA, FT1; vfoB FN; UNKNOWN COMMAND MD; mode: MD6 sets DIG, but xcvr responds with USB PA; PA01; preamp OFF, PA11; preamp ON RA; RA0000; attenuator OFF, RA0100; attenuator ON IF; response 0.........1.........2.........3....... 01234567890123456789012345678901234567 | | | | IF0000703501000000+000000000030000000; |_________||___||_____|||||||||||||______ active VFO frequency 11 digits ||___||_____|||||||||||||______ always zero ||_____|||||||||||||______ +/- RIT/XIT frequency ||||||||||||______ RIT on/off |||||||||||______ XIT on/off ||||||||||______ memory channel ||||||||______ 0 RX, 1 TX |||||||______ mode, related to MD command ||||||______ related to FR/FT commands |||||______ scan status ||||______ simplex/split |||______ CTSS on/off, always zero |||______ CTSS frequency, always zero |______ always zero IF0000703437000000+000000000010000000; LSB IF0000703437000000+000000000020000000; USB IF0000703501000000+000000000030000000; CW IF0000703437000000+000000000040000000; FM IF0000703437000000+000000000050000000; AM IF0000703437000000+000000000020000000; FSK (DIG) IF0000703373000000+000000000070000000; CW-R IF0000703437000000+000000000020000000; FSK-R (DIG) ======================================================================*/ #include "lab599/TX500.h" #include "support.h" static const char TX500name_[] = "TX500"; static std::vectorTX500modes_; static const char *vTX500modes_[] = { "LSB", "USB", "CW", "FM", "AM", "DIG", "CW-R"}; static const char TX500_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7' }; static const char TX500_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'U', 'L' }; static std::vectorTX500_empty; static const char *vTX500_empty[] = { "N/A" }; //---------------------------------------------------------------------- static GUI rig_widgets[]= { // { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 // { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 // { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 2 // { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 3 // { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 4 // { (Fl_Widget *)btnNotch, 214, 125, 50 }, // 5 // { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, // 6 // { (Fl_Widget *)sldrSQUELCH, 266, 145, 156 }, // 7 // { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, // 8 // { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, // 9 { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_TX500::RIG_TX500() { // base class values name_ = TX500name_; modes_ = TX500modes_; bandwidths_ = TX500_empty; widgets = rig_widgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8803; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; has_power_out = // has_swr_control = // has_alc_control = // has_split = // has_split_AB = // has_dsp_controls = // has_rf_control = // has_notch_control = // has_auto_notch = // has_ifshift_control = has_smeter = // has_noise_reduction = // has_noise_reduction_control = // has_noise_control = // has_micgain_control = // has_volume_control = // has_power_control = // has_tune_control = has_attenuator_control = has_preamp_control = has_mode_control = // has_bandwidth_control = // has_sql_control = has_ptt_control = // has_extras = true; precision = 1; ndigits = 9; atten_level = 0; preamp_level = 0; // _noise_reduction_level = 0; // _nrval1 = 2; // _nrval2 = 4; } void RIG_TX500::initialize() { VECTOR (TX500modes_, vTX500modes_); VECTOR (TX500_empty, vTX500_empty); modes_ = TX500modes_; bandwidths_ = TX500_empty; } static int ret = 0; void RIG_TX500::set_attenuator(int val) { atten_level = val; if (val) cmd = "RA01;"; else cmd = "RA00;"; sendCommand(cmd); showresp(WARN, ASC, "set ATT", cmd, ""); sett("attenuator"); } int RIG_TX500::get_attenuator() { cmd = "RA;"; ret = wait_char(';', 7, 100, "get ATT", ASC); gett("get_attenuator"); if (ret >= 7) { size_t p = replystr.rfind("RA"); if (p != std::string::npos && (p+3 < replystr.length())) { if (replystr[p+2] == '0' && replystr[p+3] == '0') atten_level = 0; else atten_level = 1; } } return atten_level; } void RIG_TX500::set_preamp(int val) { preamp_level = val; if (val) cmd = "PA1;"; else cmd = "PA0;"; sendCommand(cmd); showresp(WARN, ASC, "set PRE", cmd, ""); sett("preamp"); } int RIG_TX500::get_preamp() { cmd = "PA;"; ret = wait_char(';', 5, 100, "get PRE", ASC); gett("get_preamp"); if (ret >= 5) { size_t p = replystr.rfind("PA"); if (p != std::string::npos && (p+2 < replystr.length())) { if (replystr[p+2] == '1') preamp_level = 1; else preamp_level = 0; } } return preamp_level; } void RIG_TX500::set_modeA(int val) { if (val >= (int)(sizeof(TX500_mode_chr)/sizeof(*TX500_mode_chr))) return; _currmode = A.imode = val; cmd = "MD"; cmd += TX500_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); sett("modeA"); } int RIG_TX500::get_modeA() { cmd = "MD;"; ret = wait_char(';', 4, 100, "get mode A", ASC); gett("get_modeA"); if (ret == 4) { size_t p = replystr.rfind("MD"); if (p != std::string::npos) { int md = replystr[p+2]; md = md - '1'; if (md == 8) md = 7; A.imode = md; } } _currmode = A.imode; return A.imode; } void RIG_TX500::set_modeB(int val) { if (val >= (int)(sizeof(TX500_mode_chr)/sizeof(*TX500_mode_chr))) return; _currmode = B.imode = val; cmd = "MD"; cmd += TX500_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode B", cmd, ""); sett("modeB"); } int RIG_TX500::get_modeB() { cmd = "MD;"; ret = wait_char(';', 4, 100, "get mode B", ASC); gett("get_modeB"); if (ret == 4) { size_t p = replystr.rfind("MD"); if (p != std::string::npos) { int md = replystr[p+2]; md = md - '1'; if (md == 8) md = 7; B.imode = md; } } _currmode = B.imode; return B.imode; } //====================== vfo controls bool RIG_TX500::check() { MilliSleep(200); // needed for restart. TX500 has mechanical relays cmd = "ID;"; if (wait_char(';', 6, 500, "get ID", ASC) < 6) { trace(1, "check ID FAILED"); return false; } gett("check ID"); cmd = "FA;"; if (wait_char(';', 14, 500, "get vfo A", ASC) < 14) { trace(1, "check FA FAILED"); return false; } gett("check vfoA"); return true; } void RIG_TX500::selectA() { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); inuse = onA; } void RIG_TX500::selectB() { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); inuse = onB; } unsigned long long RIG_TX500::get_vfoA () { cmd = "FA;"; if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; gett("get_vfoA"); size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { sscanf(replystr.c_str(), "FA%lld", &A.freq); } return A.freq; } void RIG_TX500::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sett("set_vfoA"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TX500::get_vfoB () { cmd = "FB;"; if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) return B.freq; gett("get_vfoB"); size_t p = replystr.rfind("FB"); if (p != std::string::npos && (p + 12 < replystr.length())) { sscanf(replystr.c_str(), "FB%lld", &B.freq); } return B.freq; } void RIG_TX500::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sett("set_vfoB"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set vfo B", cmd, ""); } void RIG_TX500::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } int RIG_TX500::get_split() { cmd = "IF;"; get_trace(1, "get split INFO"); ret = wait_char(';', 38, 100, "get split INFO", ASC); gett(""); if (ret >= 38) { return (split = (replystr[32] == '1')); } return 0; } int RIG_TX500::get_modetype(int n) { if (n >= (int)(sizeof(TX500_mode_type)/sizeof(*TX500_mode_type))) return 0; return TX500_mode_type[n]; } int RIG_TX500::get_smeter() { int smtr = 0; cmd = "SM0;"; ret = wait_char(';', 8, 100, "get smeter", ASC); gett("get_smeter"); if (ret == 8) { size_t p = replystr.rfind("SM"); if (p != std::string::npos) { smtr = atol(&replystr[p + 4]); smtr = (smtr * 100) / 30; } } return smtr; } void RIG_TX500::set_PTT_control(int val) { ptt_ = val; if (val) cmd = "TX;"; else cmd = "RX;"; sendCommand(cmd); showresp(WARN, ASC, "PTT", cmd, ""); } //IF0000702800000000+000000000130000000; //IF0000702800000000+000000000030000000; //01234567890123456789012345678 int RIG_TX500::get_PTT() { cmd = "IF;"; ret = wait_char(';', 38, 100, "get PTT", ASC); gett("get PTT"); if (ret >= 38) { ptt_ = replystr[28] == '1'; } return ptt_; } flrig-2.0.04/src/rigs/kenwood/0000775000175000017500000000000014511461606013110 500000000000000flrig-2.0.04/src/rigs/kenwood/TS790.cxx0000664000175000017500000002254414502041135014340 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS790.h" #include "support.h" static const char TS790name_[] = "TS-790"; static std::vectorTS790modes_; static const char *vTS790modes_[] = { "LSB", "USB", "CW", "FM", "CWN"}; static const char TS790_mode_chr[] = { '1', '2', '3', '4', '7' }; static const char TS790_mode_type[] = { 'L', 'U', 'L', 'U', 'L' }; //static std::vectorTS790_widths = { //"NONE", "FM-W", "FM-N", "AM", "SSB", "CW", "CWN"}; //static int TS790_bw_vals[] = { 1,2,3,4,5,6,7, WVALS_LIMIT}; RIG_TS790::RIG_TS790() { // base class values name_ = TS790name_; modes_ = TS790modes_; _mode_type = TS790_mode_type; bandwidths_ = vNOBWS; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeB = modeA = def_mode = 1; bwB = bwA = def_bw = 1; freqB = freqA = def_freq = 146900000ULL; can_change_alt_vfo = true; has_bandwidth_control = has_swr_control = has_noise_control = has_micgain_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_notch_control = has_ifshift_control = false; has_smeter = has_mode_control = has_ptt_control = true; precision = 10; ndigits = 10; } void RIG_TS790::initialize() { VECTOR (TS790modes_, vTS790modes_); modes_ = TS790modes_; _mode_type = TS790_mode_type; bandwidths_ = vNOBWS; } bool RIG_TS790::check () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "check", ASC); if (ret < 14) return false; return true; } unsigned long long RIG_TS790::get_vfoA () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "get vfo A", ASC); if (ret < 14) return freqA; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_TS790::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS790::get_vfoB () { cmd = "FB;"; int ret = wait_char(';', 14, 100, "get vfo B", ASC); if (ret < 14) return freqB; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_TS790::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } // SM cmd 0 ... 100 (rig values 0 ... 15) int RIG_TS790::get_smeter() { cmd = "SM;"; int ret = wait_char(';', 7, 100, "get smeter", ASC); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 2; n < 6; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 100) / 15; return mtr; } void RIG_TS790::set_modeA(int val) { showresp(WARN, ASC, "set mode A", "", ""); modeA = val; cmd = "MD"; cmd += TS790_mode_chr[val]; cmd += ';'; sendCommand(cmd); } int RIG_TS790::get_modeA() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get modeA", ASC); int ret = check_ifstr(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeA; int resp = replystr[p+29]; // 1, 2, 3, 4, 7 for (int i = 0; i < 5; i++) if (resp == TS790_mode_chr[i]) { modeA = i; break; } return modeA; } void RIG_TS790::set_modeB(int val) { showresp(WARN, ASC, "set mode B", "", ""); modeB = val; cmd = "MD"; cmd += TS790_mode_chr[val]; cmd += ';'; sendCommand(cmd); } int RIG_TS790::get_modeB() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get mode B", ASC); int ret = check_ifstr(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeA; int resp = replystr[p+29]; // 1, 2, 3, 4, 7 for (int i = 0; i < 5; i++) if (resp == TS790_mode_chr[i]) { modeB = i; break; } return modeB; } int RIG_TS790::get_modetype(int n) { return _mode_type[n]; } void RIG_TS790::selectA() { showresp(WARN, ASC, "select A", "", ""); cmd = "FN0;"; sendCommand(cmd); inuse = onA; } void RIG_TS790::selectB() { showresp(WARN, ASC, "select B", "", ""); cmd = "FN1;"; sendCommand(cmd); inuse = onB; } // Tranceiver PTT on/off void RIG_TS790::set_PTT_control(int val) { showresp(WARN, ASC, "PTT", val ? "on" : "off", ""); if (val) cmd = "TX;"; else cmd = "RX;"; sendCommand(cmd); } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaAAAAABBBBBcXXeefghjklmmC; 0 1 2 3 12345678901234567890123456789012345678 where: aaaaaaaaaaa => decimal value of vfo frequency AAAAA => step frequency BBBBB => RIT frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number c => offset X => unused characters ======================================================================== */ int RIG_TS790::get_PTT() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get PTT", ASC); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } bool RIG_TS790::can_split() { return true; } void RIG_TS790::set_split(bool val) { if (val) { cmd = "SP1;"; sendCommand(cmd); } else { cmd = "SP0;"; sendCommand(cmd); } } int RIG_TS790::get_split() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get split", ASC); int ret = check_ifstr(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split; split = (replystr[p+32] == 1); return split; } /* static std::string bw_str = "FL001001;"; void RIG_TS790::set_bwA(int val) { get_bwA(); showresp(WARN, ASC, "set bw A", "", ""); bwA = val; cmd = bw_str.substr(0, 5); cmd.append(TS790_filters[val]).append(";"); sendCommand(cmd); } int RIG_TS790::get_bwA() { cmd = "FL;"; int ret = wait_char(';', 9, 100, "get bwA", ASC); if (ret < 9) return bwA; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwA; replystr[p + 8] = 0; int bw = 0; while (TS790_filters[bw]) { if (strcmp(&replystr[p + 5], TS790_filters[bw]) == 0) return bwA = bw; bw++; } return bwA; } void RIG_TS790::set_bwB(int val) { get_bwB(); showresp(WARN, ASC, "set bw B", "", ""); bwB = val; cmd = bw_str.substr(0, 5); cmd.append(TS790_filters[val]).append(";"); sendCommand(cmd); } int RIG_TS790::get_bwB() { cmd = "FL;"; int ret = wait_char(';', 9, 100, "get bwB", ASC); if (ret < 9) return bwB; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwB; replystr[p + 8] = 0; int bw = 0; while (TS790_filters[bw]) { if (strcmp(&replystr[p + 5], TS790_filters[bw]) == 0) return bwB = bw; bw++; } return bwB; } // "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R" // '1', '2', '3', '4', '5', '6', '7', '9' // 0 1 2 3 4 5 6 7 int RIG_TS790::def_bandwidth(int val) { if (val == 0 || val == 1) // LSB USB return 4; else if (val == 2 || val == 6) // CW return 5; else if (val == 3) // FM return 1; else if (val == 4) // AM return 3; else if (val == 5 || val == 7) // FSK return 2; return 0; // TUNE } // RM cmd 0 ... 100 (rig values 0 ... 30) int RIG_TS790::get_swr() { cmd = "RM;"; int ret = wait_char(';', 8, 100, "get swr", ASC); if (ret < 8) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 3; n < 7; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 50) / 30; return mtr; } int RIG_TS790::get_alc() { cmd = "RM3;"; // select measurement '3' ALC sendCommand(cmd); cmd = "RM;"; int ret = wait_char(';', 8, 100, "get alc", ASC); if (ret < 8) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 3; n < 7; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 50) / 30; return mtr; } */ flrig-2.0.04/src/rigs/kenwood/TS850.cxx0000664000175000017500000002351414502041135014333 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS850.h" #include "support.h" static const char TS850name_[] = "TS-850"; static std::vectorTS850modes_; static const char *vTS850modes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R"}; static const char TS850_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char TS850_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U' }; static std::vectorTS850_widths; static const char *vTS850_widths[] = { "NONE", "FM-W", "FM-N", "AM", "SSB", "CW", "CW-N"}; static int TS850_bw_vals[] = { 1,2,3,4,5,6,7, WVALS_LIMIT}; static std::vectorTS850_filters; static const char *vTS850_filters[] = { "000", "002", "003", "005", "007", "009", "010"}; RIG_TS850::RIG_TS850() { // base class values name_ = TS850name_; modes_ = TS850modes_; _mode_type = TS850_mode_type; bandwidths_ = TS850_widths; bw_vals_ = TS850_bw_vals; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeB = modeA = def_mode = 1; bwB = bwA = def_bw = 1; freqB = freqA = def_freq = 14070000ULL; can_change_alt_vfo = true; has_noise_control = has_micgain_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_notch_control = has_ifshift_control = has_swr_control = false; has_smeter = has_swr_control = has_mode_control = has_bandwidth_control = has_ptt_control = true; precision = 10; ndigits = 7; } void RIG_TS850::initialize() { VECTOR (TS850modes_, vTS850modes_); VECTOR (TS850_widths, vTS850_widths); VECTOR (TS850_filters, vTS850_filters); modes_ = TS850modes_; _mode_type = TS850_mode_type; bandwidths_ = TS850_widths; bw_vals_ = TS850_bw_vals; cmd = "AI0;"; // auto information OFF sendCommand(cmd); MilliSleep(100); cmd = "RM1;"; // select measurement '1' SWR sendCommand(cmd); } bool RIG_TS850::check () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "check", ASC); if (ret < 14) return false; return true; } unsigned long long RIG_TS850::get_vfoA () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "get vfo A", ASC); if (ret < 14) return freqA; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_TS850::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS850::get_vfoB () { cmd = "FB;"; int ret = wait_char(';', 14, 100, "get vfo B", ASC); if (ret < 14) return freqB; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_TS850::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } // SM cmd 0 ... 100 (rig values 0 ... 30) int RIG_TS850::get_smeter() { cmd = "SM;"; int ret = wait_char(';', 7, 100, "get smeter", ASC); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 2; n < 6; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 100) / 30; return mtr; } // RM cmd 0 ... 100 (rig values 0 ... 30) int RIG_TS850::get_swr() { cmd = "RM;"; int ret = wait_char(';', 8, 100, "get swr", ASC); if (ret < 8) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 3; n < 7; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 50) / 30; return mtr; } /* int RIG_TS850::get_alc() { cmd = "RM3;"; // select measurement '3' ALC sendCommand(cmd); cmd = "RM;"; int ret = wait_char(';', 8, 100, "get alc", ASC); if (ret < 8) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 3; n < 7; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 50) / 30; return mtr; } */ void RIG_TS850::set_modeA(int val) { showresp(WARN, ASC, "set mode A", "", ""); modeA = val; cmd = "MD"; cmd += TS850_mode_chr[val]; cmd += ';'; sendCommand(cmd); } int RIG_TS850::get_modeA() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get modeA", ASC); int ret = check_ifstr(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeA; modeA = replystr[p+29] - '1'; // 0 - 8 if (modeA == 8) modeA = 7; return modeA; } void RIG_TS850::set_modeB(int val) { showresp(WARN, ASC, "set mode B", "", ""); modeB = val; cmd = "MD"; cmd += TS850_mode_chr[val]; cmd += ';'; sendCommand(cmd); } int RIG_TS850::get_modeB() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get mode B", ASC); int ret = check_ifstr(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeA; modeB = replystr[p+29] - '1'; // 0 - 8 if (modeB == 8) modeB = 7; return modeB; } int RIG_TS850::get_modetype(int n) { return _mode_type[n]; } static std::string bw_str = "FL001001;"; void RIG_TS850::set_bwA(int val) { get_bwA(); showresp(WARN, ASC, "set bw A", "", ""); bwA = val; cmd = bw_str.substr(0, 5); cmd.append(TS850_filters[val]).append(";"); sendCommand(cmd); } int RIG_TS850::get_bwA() { cmd = "FL;"; int ret = wait_char(';', 9, 100, "get bwA", ASC); if (ret < 9) return bwA; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwA; replystr[p + 8] = 0; size_t bw = 0; for (bw = 0; bw < TS850_filters.size(); bw++) if (TS850_filters[bw] == replystr.substr(p + 5)) return bwA = bw; return bwA; } void RIG_TS850::set_bwB(int val) { get_bwB(); showresp(WARN, ASC, "set bw B", "", ""); bwB = val; cmd = bw_str.substr(0, 5); cmd.append(TS850_filters[val]).append(";"); sendCommand(cmd); } int RIG_TS850::get_bwB() { cmd = "FL;"; int ret = wait_char(';', 9, 100, "get bwB", ASC); if (ret < 9) return bwB; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwB; replystr[p + 8] = 0; size_t bw = 0; for (bw = 0; bw < TS850_filters.size(); bw++) if (TS850_filters[bw] == replystr.substr(p + 5)) return bwB = bw; return bwB; } // "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R" // '1', '2', '3', '4', '5', '6', '7', '9' // 0 1 2 3 4 5 6 7 int RIG_TS850::def_bandwidth(int val) { if (val == 0 || val == 1) // LSB USB return 4; else if (val == 2 || val == 6) // CW return 5; else if (val == 3) // FM return 1; else if (val == 4) // AM return 3; else if (val == 5 || val == 7) // FSK return 2; return 0; // TUNE } void RIG_TS850::selectA() { showresp(WARN, ASC, "select A", "", ""); cmd = "FR0;"; sendCommand(cmd); cmd = "FT0;"; sendCommand(cmd); inuse = onA; } void RIG_TS850::selectB() { showresp(WARN, ASC, "select B", "", ""); cmd = "FR1;"; sendCommand(cmd); cmd = "FT1;"; sendCommand(cmd); inuse = onB; } bool RIG_TS850::can_split() { return true; } void RIG_TS850::set_split(bool val) { if (val) { cmd = "FR0;"; sendCommand(cmd); cmd = "FT1;"; sendCommand(cmd); } else { cmd = "FR0;"; sendCommand(cmd); cmd = "FT0;"; sendCommand(cmd); } } int RIG_TS850::get_split() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get split", ASC); // if (ret < 38) return split; check_ifstr(); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split; split = replystr[p+32] ? true : false; return split; } // Tranceiver PTT on/off void RIG_TS850::set_PTT_control(int val) { showresp(WARN, ASC, "PTT", val ? "on" : "off", ""); if (val) cmd = "TX;"; else cmd = "RX;"; sendCommand(cmd); } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters ======================================================================== */ int RIG_TS850::get_PTT() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get VFO", ASC); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } flrig-2.0.04/src/rigs/kenwood/TS480SAT.cxx0000664000175000017500000007364214502041135014711 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS480SAT.h" #include "support.h" static const char TS480SATname_[] = "TS-480SAT"; static std::vectorTS480SATmodes_; static const char *vTS480SATmodes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R"}; static const char TS480SAT_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char TS480SAT_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U' }; static std::vectorTS480SAT_empty; static const char *vTS480SAT_empty[] = { "N/A" }; static int TS480SAT_bw_vals[] = {1, WVALS_LIMIT}; // SL command is lo cut when menu 045 OFF static std::vectorTS480SAT_SL; static const char *vTS480SAT_SL[] = { "0", "50", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000" }; static const char *TS480SAT_SL_tooltip = "lo cut"; static const char *TS480SAT_btn_SL_label = "L"; // SH command is hi cut when menu 045 OFF static std::vectorTS480SAT_SH; static const char *vTS480SAT_SH[] = { "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3400", "4000", "5000" }; static int TS480SAT_HI_bw_vals[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,WVALS_LIMIT}; static const char *TS480SAT_SH_tooltip = "hi cut"; static const char *TS480SAT_btn_SH_label = "H"; // SL command is width when menu 045 ON static std::vectorTS480SAT_dataW; static const char *vTS480SAT_dataW[] = { "50", "100", "250", "500", "1000", "1500", "2400" }; static int TS480SAT_data_bw_vals[] = {1,2,3,4,5,6,7, WVALS_LIMIT}; static const char *TS480SAT_dataW_tooltip = "width"; static const char *TS480SAT_dataW_label = "W"; // SH command is center when menu 045 ON static std::vectorTS480SAT_dataC; static const char *vTS480SAT_dataC[] = { "1000", "1500", "2210" }; static const char *TS480SAT_dataC_tooltip = "center"; static const char *TS480SAT_dataC_label = "C"; static std::vectorTS480SAT_AM_SL; static const char *vTS480SAT_AM_SL[] = { "10", "100", "200", "500"}; static std::vectorTS480SAT_AM_SH; static const char *vTS480SAT_AM_SH[] = { "2500", "3000", "4000", "5000"}; //static int TS480SAT_AM_bw_vals[] = {1,2,3,4,WVALS_LIMIT}; static std::vectorTS480SAT_CWwidths; static const char *vTS480SAT_CWwidths[] = { "50", "80", "100", "150", "200", "300", "400", "500", "600", "1000", "2000"}; static int TS480SAT_CW_bw_vals[] = {1,2,3,4,5,6,7,8,9,10,11,WVALS_LIMIT}; static std::vectorTS480SAT_CWbw; static const char *vTS480SAT_CWbw[] = { "FW0050;", "FW0080;", "FW0100;", "FW0150;", "FW0200;", "FW0300;", "FW0400;", "FW0500;", "FW0600;", "FW1000;", "FW2000;" }; static std::vectorTS480SAT_FSKwidths; static const char *vTS480SAT_FSKwidths[] = { "250", "500", "1000", "1500"}; static int TS480SAT_FSK_bw_vals[] = { 1,2,3,4,WVALS_LIMIT}; static std::vectorTS480SAT_FSKbw; static const char *vTS480SAT_FSKbw[] = { "FW0250;", "FW0500;", "FW1000;", "FW1500;" }; static int agcval = 1; static bool fm_mode = false; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 2 { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 3 { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 4 { (Fl_Widget *)btnDataPort, 214, 125, 50 }, // 5 { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, // 6 { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, // 7 { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, // 8 { (Fl_Widget *)NULL, 0, 0, 0 } }; static std::string menu012 = "EX01200004"; void RIG_TS480SAT::initialize() { VECTOR (TS480SATmodes_, vTS480SATmodes_); VECTOR (TS480SAT_empty, vTS480SAT_empty); VECTOR (TS480SAT_SL, vTS480SAT_SL); VECTOR (TS480SAT_SH, vTS480SAT_SH); VECTOR (TS480SAT_dataW, vTS480SAT_dataW); VECTOR (TS480SAT_dataC, vTS480SAT_dataC); VECTOR (TS480SAT_AM_SL, vTS480SAT_AM_SL); VECTOR (TS480SAT_AM_SH, vTS480SAT_AM_SH); VECTOR (TS480SAT_CWwidths, vTS480SAT_CWwidths); VECTOR (TS480SAT_CWbw, vTS480SAT_CWbw); VECTOR (TS480SAT_FSKwidths, vTS480SAT_FSKwidths); VECTOR (TS480SAT_FSKbw, vTS480SAT_FSKbw); modes_ = TS480SATmodes_; _mode_type = TS480SAT_mode_type; bandwidths_ = TS480SAT_empty; bw_vals_ = TS480SAT_bw_vals; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnDataPort; rig_widgets[6].W = sldrSQUELCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; check_menu_45(); menu012.clear(); cmd = "EX0120000;"; // read menu 012 state //might return something like EX01200004; gett("read menu 12"); if (wait_char(';', 11, 100, "read ex 012", ASC) == 11) menu012 = replystr; cmd = "EX01200000;"; sendCommand(cmd); sett("set menu 12"); }; RIG_TS480SAT::RIG_TS480SAT() { // base class values name_ = TS480SATname_; modes_ = TS480SATmodes_; _mode_type = TS480SAT_mode_type; bandwidths_ = TS480SAT_empty; bw_vals_ = TS480SAT_bw_vals; dsp_SL = TS480SAT_SL; SL_tooltip = TS480SAT_SL_tooltip; SL_label = TS480SAT_btn_SL_label; dsp_SH = TS480SAT_SH; SH_tooltip = TS480SAT_SH_tooltip; SH_label = TS480SAT_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8A03; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; has_extras = true; has_noise_reduction = has_noise_reduction_control = has_auto_notch = has_noise_control = has_sql_control = has_split = true; has_split_AB = true; has_data_port = true; has_micgain_control = true; has_ifshift_control = true; has_rf_control = true; has_agc_control = true; has_swr_control = true; has_alc_control = true; has_power_out = true; has_dsp_controls = true; has_smeter = true; has_attenuator_control = true; has_preamp_control = true; has_mode_control = true; has_bandwidth_control = true; has_volume_control = true; has_power_control = true; has_tune_control = true; has_ptt_control = true; precision = 1; ndigits = 8; _noise_reduction_level = 0; _nrval1 = 2; _nrval2 = 4; preamp_level = atten_level = 0; } const char * RIG_TS480SAT::get_bwname_(int n, int md) { static char bwname[20]; if (n > 256) { int hi = (n >> 8) & 0x7F; int lo = n & 0xFF; snprintf(bwname, sizeof(bwname), "%s/%s", (md == 0 || md == 1 || md == 3) ? dsp_SL[lo].c_str() : TS480SAT_AM_SL[lo].c_str(), (md == 0 || md == 1 || md == 3) ? dsp_SH[hi].c_str() : TS480SAT_AM_SH[hi].c_str() ); } else { snprintf(bwname, sizeof(bwname), "%s", (md == 2 || md == 6) ? TS480SAT_CWwidths[n].c_str() : TS480SAT_FSKwidths[n].c_str()); } return bwname; } void RIG_TS480SAT::check_menu_45() { // read current switch 45 setting menu_45 = false; cmd = "EX0450000;"; if (wait_char(';', 11, 100, "Check menu item 45", ASC) >= 11) { size_t p = replystr.rfind("EX045"); if (p != std::string::npos) menu_45 = (replystr[p+9] == '1'); } if (menu_45) { dsp_SL = TS480SAT_dataW; SL_tooltip = TS480SAT_dataW_tooltip; SL_label = TS480SAT_dataW_label; dsp_SH = TS480SAT_dataC; SH_tooltip = TS480SAT_dataC_tooltip; SH_label = TS480SAT_dataC_label; B.iBW = A.iBW = 0x8106; } else { dsp_SL = TS480SAT_SL; SL_tooltip = TS480SAT_SL_tooltip; SL_label = TS480SAT_btn_SL_label; dsp_SH = TS480SAT_SH; SH_tooltip = TS480SAT_SH_tooltip; SH_label = TS480SAT_btn_SH_label; B.iBW = A.iBW = 0x8A03; } gett("check menu 45"); } void RIG_TS480SAT::shutdown() { // restore state of xcvr beeps if (menu012.empty()) return; cmd = menu012; sendCommand(cmd); sett("shutdown, restore menu 12"); } // SM cmd 0 ... 100 (rig values 0 ... 15) int RIG_TS480SAT::get_smeter() { int mtr = 0; cmd = "SM0;"; if (wait_char(';', 8, 100, "get Smeter", ASC) < 8) return 0; size_t p = replystr.rfind("SM"); if (p != std::string::npos) mtr = 5 * atoi(&replystr[p + 3]); gett("get smeter"); return mtr; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { {0, 0.0}, {2, 5.0}, {4, 10.0}, {7, 25.0}, {11, 50.0}, {16, 100.0}, {20, 200.0} }; int RIG_TS480SAT::get_power_out() { int mtr = 0; cmd = "SM0;"; if (wait_char(';', 8, 100, "get power", ASC) < 8) return mtr; size_t p = replystr.rfind("SM"); if (p != std::string::npos) { mtr = atoi(&replystr[p + 3]); size_t i = 0; // outside of the if/else for scope reasons if (mtr < 0) mtr = 0; else if (mtr > 20) mtr = 20; else while(mtr > pwrtbl[i].mtr) i++; mtr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (mtr > 200) mtr = 200; } gett("power out"); return mtr; } // RM cmd 0 ... 100 (rig values 0 ... 8) // User report of RM; command using Send Cmd tab // RM10000;RM20000;RM30000; // RM1nnnn; => SWR // RM2nnnn; => COMP // RM3nnnn; => ALC int RIG_TS480SAT::get_swr() { int mtr = 0; cmd = "RM;"; if (wait_char(';', 8, 100, "get SWR/ALC", ASC) < 8) return (int)mtr; size_t p = replystr.rfind("RM1"); if (p != std::string::npos) mtr = 66 * atoi(&replystr[p+3]) / 10; p = replystr.rfind("RM3"); if (p != std::string::npos) alc = 66 * atoi(&replystr[p+3]) / 10; else alc = 0; swralc_polled = true; gett("swr"); return mtr; } int RIG_TS480SAT::get_alc(void) { if (!swralc_polled) get_swr(); swralc_polled = false; return alc; } int RIG_TS480SAT::set_widths(int val) { int bw; if (val == 0 || val == 1 || val == 3) { if (menu_45) { bw = 0x8106; // 1500 Hz 2400 wide dsp_SL = TS480SAT_dataW; SL_tooltip = TS480SAT_dataW_tooltip; SL_label = TS480SAT_dataW_label; dsp_SH = TS480SAT_dataC; SH_tooltip = TS480SAT_dataC_tooltip; SH_label = TS480SAT_dataC_label; bandwidths_ = TS480SAT_dataW; bw_vals_ = TS480SAT_data_bw_vals; } else { bw = 0x8A03; // 200 ... 3000 Hz dsp_SL = TS480SAT_SL; SL_tooltip = TS480SAT_SL_tooltip; SL_label = TS480SAT_btn_SL_label; dsp_SH = TS480SAT_SH; SH_tooltip = TS480SAT_SH_tooltip; SH_label = TS480SAT_btn_SH_label; bandwidths_ = TS480SAT_SH; bw_vals_ = TS480SAT_HI_bw_vals; } } else if (val == 2 || val == 6) { bandwidths_ = TS480SAT_CWwidths; bw_vals_ = TS480SAT_CW_bw_vals; dsp_SL = TS480SAT_empty; dsp_SH = TS480SAT_empty; bw = 7; } else if (val == 5 || val == 7) { bandwidths_ = TS480SAT_FSKwidths; bw_vals_ = TS480SAT_FSK_bw_vals; dsp_SL = TS480SAT_empty; dsp_SH = TS480SAT_empty; bw = 1; } else { // val == 4 ==> AM bandwidths_ = TS480SAT_empty; bw_vals_ = TS480SAT_bw_vals; dsp_SL = TS480SAT_AM_SL; dsp_SH = TS480SAT_AM_SH; bw = 0x8201; } return bw; } std::vector& RIG_TS480SAT::bwtable(int m) { if (m == 0 || m == 1 || m == 3) return TS480SAT_empty; else if (m == 2 || m == 6) return TS480SAT_CWwidths; else if (m == 5 || m == 7) return TS480SAT_FSKwidths; //else AM m == 4 return TS480SAT_empty; } std::vector& RIG_TS480SAT::lotable(int m) { if (m == 0 || m == 1 || m == 3) return TS480SAT_SL; else if (m == 2 || m == 6) return vNOBWS; else if (m == 5 || m == 7) return vNOBWS; return TS480SAT_AM_SL; } std::vector &RIG_TS480SAT::hitable(int m) { if (m == 0 || m == 1 || m == 3) return TS480SAT_SH; else if (m == 2 || m == 6) return vNOBWS; else if (m == 5 || m == 7) return vNOBWS; return TS480SAT_AM_SH; } void RIG_TS480SAT::set_modeA(int val) { if (val == 3) fm_mode = true; else fm_mode = false; A.imode = val; cmd = "MD"; cmd += TS480SAT_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); A.iBW = set_widths(val); sett("set mode A"); } int RIG_TS480SAT::get_modeA() { cmd = "MD;"; if (wait_char(';', 4, 100, "get modeA", ASC) < 4) return A.imode; size_t p = replystr.rfind("MD"); if (p != std::string::npos && (p + 2 < replystr.length())) { int md = replystr[p+2]; md = md - '1'; if (md == 8) md = 7; A.imode = md; A.iBW = set_widths(A.imode); } if (A.imode == 3) fm_mode = true; else fm_mode = false; gett("mode A"); return A.imode; } void RIG_TS480SAT::set_modeB(int val) { if (val == 3) fm_mode = true; else fm_mode = false; B.imode = val; cmd = "MD"; cmd += TS480SAT_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode B", cmd, ""); B.iBW = set_widths(val); sett("mode B"); } int RIG_TS480SAT::get_modeB() { cmd = "MD;"; if (wait_char(';', 4, 100, "get modeB", ASC) < 4) return B.imode; size_t p = replystr.rfind("MD"); if (p != std::string::npos && (p + 2 < replystr.length())) { int md = replystr[p+2]; md = md - '1'; if (md == 8) md = 7; B.imode = md; B.iBW = set_widths(B.imode); } if (B.imode == 3) fm_mode = true; else fm_mode = false; gett("mode B"); return B.imode; } int RIG_TS480SAT::get_modetype(int n) { return _mode_type[n]; } void RIG_TS480SAT::set_bwA(int val) { if (A.imode == 0 || A.imode == 1 || A.imode == 3 || A.imode == 4) { if (val < 256) return; A.iBW = val; cmd = "SL"; cmd.append(to_decimal(A.iBW & 0xFF, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, SL_tooltip, cmd, ""); cmd = "SH"; cmd.append(to_decimal(((A.iBW >> 8) & 0x7F), 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, SH_tooltip, cmd, ""); sett("bw A"); } if (val > 256) return; else if (A.imode == 2 || A.imode == 6) { A.iBW = val; cmd = TS480SAT_CWbw[A.iBW]; sendCommand(cmd); showresp(WARN, ASC, "set CW bw", cmd, ""); sett("bw A"); }else if (A.imode == 5 || A.imode == 7) { A.iBW = val; cmd = TS480SAT_FSKbw[A.iBW]; sendCommand(cmd); showresp(WARN, ASC, "set FSK bw", cmd, ""); sett("bw A"); } } int RIG_TS480SAT::get_bwA() { int i = 0; size_t p; bool menu45 = menu_45; check_menu_45(); if (menu45 != menu_45) Fl::awake(updateBandwidthControl); if (A.imode == 0 || A.imode == 1 || A.imode == 3 || A.imode == 4) { int lo = A.iBW & 0xFF, hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; if (wait_char(';', 5, 100, "get SL", ASC) == 5) { p = replystr.rfind("SL"); if (p != std::string::npos) lo = fm_decimal(replystr.substr(p+2), 2); } cmd = "SH;"; if (wait_char(';', 5, 100, "get SH", ASC) == 5) { p = replystr.rfind("SH"); if (p != std::string::npos) hi = fm_decimal(replystr.substr(p+2), 2); A.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } else if (A.imode == 2 || A.imode == 6) { cmd = "FW;"; if (wait_char(';', 7, 100, "get FW", ASC) == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 11; i++) if (replystr.find(TS480SAT_CWbw[i]) == p) break; if (i == 11) i = 10; A.iBW = i; } } } else if (A.imode == 5 || A.imode == 7) { cmd = "FW;"; if (wait_char(';', 7, 100, "get FW", ASC) == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS480SAT_FSKbw[i]) == p) break; if (i == 4) i = 3; A.iBW = i; } } } gett("get bw A"); return A.iBW; } void RIG_TS480SAT::set_bwB(int val) { if (B.imode == 0 || B.imode == 1 || B.imode == 3 || B.imode == 4) { if (val < 256) return; B.iBW = val; cmd = "SL"; cmd.append(to_decimal(B.iBW & 0xFF, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, SL_tooltip, cmd, ""); cmd = "SH"; cmd.append(to_decimal(((B.iBW >> 8) & 0x7F), 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, SH_tooltip, cmd, ""); sett("bw B"); } if (val > 256) return; else if (B.imode == 2 || B.imode == 6) { // CW B.iBW = val; cmd = TS480SAT_CWbw[B.iBW]; sendCommand(cmd); showresp(WARN, ASC, "set CW bw", cmd, ""); sett("bw B"); }else if (B.imode == 5 || B.imode == 7) { B.iBW = val; cmd = TS480SAT_FSKbw[B.iBW]; sendCommand(cmd); showresp(WARN, ASC, "set FSK bw", cmd, ""); sett("bw B"); } } int RIG_TS480SAT::get_bwB() { int i = 0; size_t p; bool menu45 = menu_45; check_menu_45(); if (menu45 != menu_45) Fl::awake(updateBandwidthControl); if (B.imode == 0 || B.imode == 1 || B.imode == 3 || B.imode == 4) { int lo = B.iBW & 0xFF, hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; if (wait_char(';', 5, 100, "get SL", ASC) == 5) { p = replystr.rfind("SL"); if (p != std::string::npos) lo = fm_decimal(replystr.substr(p+2), 2); } cmd = "SH;"; if (wait_char(';', 5, 100, "get SH", ASC) == 5) { p = replystr.rfind("SH"); if (p != std::string::npos) hi = fm_decimal(replystr.substr(p+2), 2); B.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } else if (B.imode == 2 || B.imode == 6) { cmd = "FW;"; if (wait_char(';', 7, 100, "get FW", ASC) == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 11; i++) if (replystr.find(TS480SAT_CWbw[i]) == p) break; if (i == 11) i = 10; B.iBW = i; } } } else if (B.imode == 5 || B.imode == 7) { cmd = "FW;"; if (wait_char(';', 7, 100, "get FW", ASC) == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS480SAT_FSKbw[i]) == p) break; if (i == 4) i = 3; B.iBW = i; } } } gett("bw B"); return B.iBW; } int RIG_TS480SAT::adjust_bandwidth(int val) { int bw = 0; if (val == 0 || val == 1 || val == 3) bw = 0x8A03; else if (val == 4) bw = 0x8201; else if (val == 2 || val == 6) bw = 7; else if (val == 5 || val == 7) bw = 1; return bw; } int RIG_TS480SAT::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_TS480SAT::set_power_control(double val) { cmd = "PC"; char szval[4]; if (modeA == 4 && val > 25) val = 25; // AM mode limitation snprintf(szval, sizeof(szval), "%03d", (int)val); cmd += szval; cmd += ';'; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); sett("power control"); } double RIG_TS480SAT::get_power_control() { int val = progStatus.power_level; cmd = "PC;"; if (wait_char(';', 6, 100, "get Power control", ASC) < 6) return val; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return val; val = atoi(&replystr[p + 2]); gett("power control"); return val; } void RIG_TS480SAT::set_attenuator(int val) { if (val) cmd = "RA01;"; else cmd = "RA00;"; LOG_WARN("%s", cmd.c_str()); set_trace(1, "set attenuator"); sendCommand(cmd); sett(""); atten_level = val; } int RIG_TS480SAT::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator"); int ret = wait_char(';', 7, 100, "get attenuator", ASC); gett(""); if (ret < 7) return atten_level; size_t p = replystr.rfind("RA"); if (p != std::string::npos) atten_level = (replystr[p+3] == '1'); return atten_level; } void RIG_TS480SAT::set_preamp(int val) { if (val) cmd = "PA1;"; else cmd = "PA0;"; LOG_WARN("%s", cmd.c_str()); set_trace(1, "set preamp"); sendCommand(cmd); sett(""); preamp_level = val; } int RIG_TS480SAT::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp"); int ret = wait_char(';', 5, 100, "get preamp", ASC); gett(""); if (ret < 5) return preamp_level; size_t p = replystr.rfind("PA"); if (p != std::string::npos) preamp_level = (replystr[p+2] == '1'); return preamp_level; } const char *RIG_TS480SAT::PRE_label() { if (preamp_level == 1) return "Pre 1"; return "PRE"; } const char *RIG_TS480SAT::ATT_label() { if (atten_level == 1) return "ON"; return "ATT"; } void RIG_TS480SAT::set_if_shift(int val) { cmd = "IS+"; if (val < 0) cmd[2] = '-'; cmd.append(to_decimal(abs(val),4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set IF shift", cmd, ""); sett("if shift"); } bool RIG_TS480SAT::get_if_shift(int &val) { cmd = "IS;"; if (wait_char(';', 8, 100, "get IF shift", ASC) == 8) { size_t p = replystr.rfind("IS"); gett("if shift"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 4); if (replystr[p+2] == '-') val *= -1; return (val != 0); } } val = progStatus.shift_val; return progStatus.shift; } void RIG_TS480SAT::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1100; if_shift_max = max = 1100; if_shift_step = step = 10; if_shift_mid = 0; } // Noise Reduction (TS2000.cxx) NR1 only works; no NR2 and don' no why void RIG_TS480SAT::set_noise_reduction(int val) { if (val == -1) { return; } _noise_reduction_level = val; if (_noise_reduction_level == 0) { nr_label("NR", false); } else if (_noise_reduction_level == 1) { nr_label("NR1", true); } else if (_noise_reduction_level == 2) { nr_label("NR2", true); } cmd.assign("NR"); cmd += '0' + _noise_reduction_level; cmd += ';'; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); sett("noise reduction"); } int RIG_TS480SAT::get_noise_reduction() { cmd = rsp = "NR"; cmd.append(";"); if (wait_char(';', 4, 100, "GET noise reduction", ASC) == 4) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return _noise_reduction_level; _noise_reduction_level = replystr[p+2] - '0'; } if (_noise_reduction_level == 1) { nr_label("NR1", true); } else if (_noise_reduction_level == 2) { nr_label("NR2", true); } else { nr_label("NR", false); } gett("noise reduction"); return _noise_reduction_level; } void RIG_TS480SAT::set_noise_reduction_val(int val) { if (_noise_reduction_level == 0) return; if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; cmd.assign("RL").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); sett("nr value"); } int RIG_TS480SAT::get_noise_reduction_val() { int nrval = 0; if (_noise_reduction_level == 0) return 0; int val = progStatus.noise_reduction_val; cmd = rsp = "RL"; cmd.append(";"); if (wait_char(';', 5, 100, "GET noise reduction val", ASC) == 5) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) { nrval = (_noise_reduction_level == 1 ? _nrval1 : _nrval2); return nrval; } val = atoi(&replystr[p+2]); } if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; gett("nr value"); return val; } int RIG_TS480SAT::get_agc() { cmd = "GT;"; wait_char(';', 6, 100, "GET agc val", ASC); size_t p = replystr.rfind("GT"); gett("agc"); if (p == std::string::npos) return agcval; if (replystr[4] == ' ') return 0; agcval = replystr[4] - '0' + 1; // '0' == off, '1' = fast, '2' = slow return agcval; } int RIG_TS480SAT::incr_agc() { if (fm_mode) return 0; agcval++; if (agcval == 4) agcval = 1; cmd.assign("GT00"); cmd += (agcval + '0' - 1); cmd += ";"; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); sett("increment agc"); return agcval; } static const char *agcstrs[] = {"FM", "AGC", "FST", "SLO"}; const char *RIG_TS480SAT::agc_label() { if (fm_mode) return agcstrs[0]; return agcstrs[agcval]; } int RIG_TS480SAT::agc_val() { if (fm_mode) return 0; return agcval; } // Auto Notch, beat canceller (TS2000.cxx) BC1 only, not BC2 void RIG_TS480SAT::set_auto_notch(int v) { cmd = v ? "BC1;" : "BC0;"; sendCommand(cmd); showresp(WARN, ASC, "set auto notch", cmd, ""); sett("auto notch"); } int RIG_TS480SAT::get_auto_notch() { cmd = "BC;"; if (wait_char(';', 4, 100, "get auto notch", ASC) == 4) { int anotch = 0; size_t p = replystr.rfind("BC"); gett("auto notch"); if (p != std::string::npos) { anotch = (replystr[p+2] == '1'); return anotch; } } return 0; } // Noise Blanker (TS2000.cxx) void RIG_TS480SAT::set_noise(bool b) { if (b) cmd = "NB1;"; else cmd = "NB0;"; sendCommand(cmd); showresp(WARN, ASC, "set NB", cmd, ""); sett("noise"); } int RIG_TS480SAT::get_noise() { cmd = "NB;"; if (wait_char(';', 4, 100, "get Noise Blanker", ASC) == 4) { size_t p = replystr.rfind("NB"); gett("noise"); if (p == std::string::npos) return 0; if (replystr[p+2] == '0') return 0; } return 1; } // Tranceiver PTT on/off void RIG_TS480SAT::set_PTT_control(int val) { if (val) { if (progStatus.data_port) cmd = "TX1;"; // DTS transmission using ANI input else cmd = "TX0;"; // mic input } else cmd = "RX;"; sendCommand(cmd); showresp(WARN, ASC, "set PTT", cmd, ""); sett("ptt"); } int RIG_TS480SAT::get_PTT() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get VFO", ASC); // gett("ptt"); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } void RIG_TS480SAT::set_rf_gain(int val) { cmd = "RG"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set rf gain", cmd, ""); sett("rf gain"); } int RIG_TS480SAT::get_rf_gain() { int val = progStatus.rfgain; cmd = "RG;"; if (wait_char(';', 6, 100, "get rf gain", ASC) < 6) return val; size_t p = replystr.rfind("RG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); gett("rf gain"); return val; } void RIG_TS480SAT::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TS480SAT::selectA() { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); inuse = onA; } void RIG_TS480SAT::selectB() { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); inuse = onB; } void RIG_TS480SAT::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } bool RIG_TS480SAT::can_split() { return true; } int RIG_TS480SAT::get_split() { size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "FT"; cmd.append(";"); if (wait_char(';', 4, 100, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "FR"; cmd.append(";"); if (wait_char(';', 4, 100, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; } // split test if (tx == '0' && rx == '0') split = 0; else if (tx == '1' && rx == '0') split = 1; else if (tx == '0' && rx == '1') split = 2; else if (tx == '1' && rx == '1') split = 3; return split; } unsigned long long RIG_TS480SAT::get_vfoA () { cmd = "FA;"; if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } return A.freq; } void RIG_TS480SAT::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS480SAT::get_vfoB () { cmd = "FB;"; if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) return B.freq; size_t p = replystr.rfind("FB"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; B.freq = f; } return B.freq; } void RIG_TS480SAT::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } // Squelch (TS990.cxx) void RIG_TS480SAT::set_squelch(int val) { cmd = "SQ0"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set squelch", cmd, ""); } int RIG_TS480SAT::get_squelch() { int val = 0; cmd = "SQ0;"; if (wait_char(';', 7, 20, "get squelch", ASC) >= 7) { size_t p = replystr.rfind("SQ0"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); } return val; } void RIG_TS480SAT::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } void RIG_TS480SAT::set_mic_gain(int val) { cmd = "MG"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic gain", cmd, ""); } int RIG_TS480SAT::get_mic_gain() { int val = progStatus.mic_gain; cmd = "MG;"; if (wait_char(';', 6, 100, "get mic gain", ASC) < 6) return val; size_t p = replystr.rfind("MG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); return val; } void RIG_TS480SAT::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TS480SAT::set_volume_control(int val) { cmd = "AG"; char szval[20]; snprintf(szval, sizeof(szval), "%04d", val * 255 / 100); cmd += szval; cmd += ';'; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); } int RIG_TS480SAT::get_volume_control() { int val = progStatus.volume; cmd = "AG0;"; if (wait_char(';', 7, 100, "get vol", ASC) < 7) return val; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); val = val * 100 / 255; return val; } void RIG_TS480SAT::tune_rig() { cmd = "AC111;"; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); } flrig-2.0.04/src/rigs/kenwood/TS940S.cxx0000664000175000017500000002040414502041135014451 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS940S.h" const char TS940Sname_[] = "TS940S"; static std::vectorTS940Smodes_; static const char *vTS940Smodes_[] = {"LSB", "USB", "CW", "FM", "AM", "FSK"}; static const char TS940S_mode_type[] = {'L', 'U', 'U', 'U', 'U', 'L' }; static const char TS940S_mode_chr[] = {'1', '2', '3', '4', '5', '6', }; RIG_TS940S::RIG_TS940S() { // base class values name_ = TS940Sname_; modes_ = TS940Smodes_; bandwidths_ = vNOBWS; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 2; has_mode_control = has_tune_control = has_split = has_split_AB = has_ptt_control = true; has_attenuator_control = has_preamp_control = has_power_control = has_volume_control = has_bandwidth_control = has_micgain_control = has_notch_control = has_ifshift_control = has_swr_control = false; precision = 10; ndigits = 7; } void RIG_TS940S::initialize() { VECTOR (TS940Smodes_, vTS940Smodes_); modes_ = TS940Smodes_; bandwidths_ = vNOBWS; } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # IF00014070000 -00300 000200; where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters Test output from Minicom to IF; command IF00014070000 -00300 000200; 0001000 is vfoA in LSB 0002000 is vfoA in USB 0003000 CW 0004000 FM 0005000 AM 0007000 CWN (dont have narrow filter however) 0002100 VFOB in USB 0002001 VFOA in USB SPILT 0012000 PTT on in USB ======================================================================== */ bool RIG_TS940S::check () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "check", ASC); get_trace(2, "check()", replystr.c_str()); if (ret < 14) return false; return true; } int RIG_TS940S::getvfoAorB() { int vfovalue =0; // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get vfo a or b", ASC); // get_trace(2, "getvfoAorB()", replystr.c_str()); int ret = check_ifstr(); if (ret < 38) return vfovalue; vfovalue = replystr[ret - 38 + 30] - '0'; showresp(WARN, ASC, "get vfo A or B", cmd, ""); return vfovalue; } unsigned long long RIG_TS940S::get_vfoA () { cmd = "FA;"; if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; get_trace(2, "get_vfoA()", replystr.c_str()); size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } return A.freq; } void RIG_TS940S::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); set_trace(2, "set_vfoA()", replystr.c_str()); } unsigned long long RIG_TS940S::get_vfoB () { cmd = "FB;"; if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) return B.freq; get_trace(2, "get_vfoB()", replystr.c_str()); size_t p = replystr.rfind("FB"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; B.freq = f; } return B.freq; } void RIG_TS940S::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); set_trace(2, "set_vfoB()", replystr.c_str()); } int RIG_TS940S::get_modetype(int n) { return TS940S_mode_type[n]; } void RIG_TS940S::set_modeA(int val) { A.imode = val; cmd = "MD"; cmd += TS940S_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); set_trace(2, "set_mode()", replystr.c_str()); } int RIG_TS940S::get_modeA() { modeA = 0; // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get mode", ASC); // get_trace(2, "get_mode()", replystr.c_str()); int ret = check_ifstr(); if (ret < 38) return modeA; int md = replystr[ret - 38 + 29] - '1'; if (md < 0) md = 0; if (md > 5) md = 5; modeA = md; showresp(WARN, ASC, "get mode", cmd, ""); return modeA; } int RIG_TS940S::get_modeB() { return get_modeA(); } void RIG_TS940S::set_modeB(int val) { set_modeA(val); } // Tranceiver PTT on/off void RIG_TS940S::set_PTT_control(int val) { if (val) { sendCommand("TX;"); showresp(WARN, ASC, "TX on", cmd, ""); set_trace(2, "set_PTT(on)", replystr.c_str()); } else { sendCommand("RX;"); showresp(WARN, ASC, "RX on", cmd, ""); set_trace(2, "set_PTT(off)", replystr.c_str()); } ptt_ = val; } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters ======================================================================== */ int RIG_TS940S::get_PTT() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get VFO", ASC); int ret = check_ifstr(); // get_trace(2, "get_PTT()", replystr.c_str()); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); showresp(WARN, ASC, "get ptt", cmd, ""); return ptt_; } void RIG_TS940S::tune_rig() { cmd = "AT1;"; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); showresp(WARN, ASC, "rig tune set", cmd, ""); set_trace(2, "tune_rig()", replystr.c_str()); } int RIG_TS940S::get_split() { int splitvalue =0; // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get split", ASC); int ret = check_ifstr(); get_trace(2, "get_split()", replystr.c_str()); if (ret < 38) return splitvalue; splitvalue = replystr[ret - 38 + 32] - '0'; showresp(WARN, ASC, "get split", cmd, ""); return splitvalue; } void RIG_TS940S::set_split(bool val) { if (val) { cmd = "SP1;"; sendCommand(cmd); showresp(WARN, ASC, "split on", cmd, ""); set_trace(2, "set_split(on)", replystr.c_str()); } else { cmd = "SP0;"; sendCommand(cmd); showresp(WARN, ASC, "split off", cmd, ""); set_trace(2, "set_split(off)", replystr.c_str()); } } bool RIG_TS940S::can_split() { return true; } void RIG_TS940S::selectA() { set_split(0); cmd="FN0;"; sendCommand(cmd); showresp(WARN, ASC, "select VFO A", cmd, ""); set_trace(2, "selectA()", replystr.c_str()); inuse = onA; } void RIG_TS940S::selectB() { set_split(0); cmd="FN1;"; sendCommand(cmd); showresp(WARN, ASC, "select VFO B", cmd, ""); set_trace(2, "selectB()", replystr.c_str()); inuse = onB; } flrig-2.0.04/src/rigs/kenwood/TS480HX.cxx0000664000175000017500000007417014502041135014576 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS480HX.h" #include "support.h" static const char TS480HXname_[] = "TS-480HX"; static std::vectorTS480HXmodes_; static const char *vTS480HXmodes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R"}; static const char TS480HX_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char TS480HX_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U' }; static std::vectorTS480HX_empty; static const char *vTS480HX_empty[] = { "N/A" }; static int TS480HX_bw_vals[] = {1, WVALS_LIMIT}; // SL command is lo cut when menu 045 OFF static std::vectorTS480HX_SL; static const char *vTS480HX_SL[] = { "0", "50", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000" }; static const char *TS480HX_SL_tooltip = "lo cut"; static const char *TS480HX_btn_SL_label = "L"; // SH command is hi cut when menu 045 OFF static std::vectorTS480HX_SH; static const char *vTS480HX_SH[] = { "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3400", "4000", "5000" }; static int TS480HX_HI_bw_vals[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,WVALS_LIMIT}; static const char *TS480HX_SH_tooltip = "hi cut"; static const char *TS480HX_btn_SH_label = "H"; // SL command is width when menu 045 ON static std::vectorTS480HX_dataW; static const char *vTS480HX_dataW[] = { "50", "100", "250", "500", "1000", "1500", "2400" }; static int TS480HX_data_bw_vals[] = {1,2,3,4,5,6,7, WVALS_LIMIT}; static const char *TS480HX_dataW_tooltip = "width"; static const char *TS480HX_dataW_label = "W"; // SH command is center when menu 045 ON static std::vectorTS480HX_dataC; static const char *vTS480HX_dataC[] = { "1000", "1500", "2210" }; static const char *TS480HX_dataC_tooltip = "center"; static const char *TS480HX_dataC_label = "C"; static std::vectorTS480HX_AM_SL; static const char *vTS480HX_AM_SL[] = { "10", "100", "200", "500"}; static std::vectorTS480HX_AM_SH; static const char *vTS480HX_AM_SH[] = { "2500", "3000", "4000", "5000"}; //static int TS480HX_AM_bw_vals[] = {1,2,3,4,WVALS_LIMIT}; static std::vectorTS480HX_CWwidths; static const char *vTS480HX_CWwidths[] = { "50", "80", "100", "150", "200", "300", "400", "500", "600", "1000", "2000"}; static int TS480HX_CW_bw_vals[] = {1,2,3,4,5,6,7,8,9,10,11,WVALS_LIMIT}; static std::vectorTS480HX_CWbw; static const char *vTS480HX_CWbw[] = { "FW0050;", "FW0080;", "FW0100;", "FW0150;", "FW0200;", "FW0300;", "FW0400;", "FW0500;", "FW0600;", "FW1000;", "FW2000;" }; static std::vectorTS480HX_FSKwidths; static const char *vTS480HX_FSKwidths[] = { "250", "500", "1000", "1500"}; static int TS480HX_FSK_bw_vals[] = { 1,2,3,4,WVALS_LIMIT}; static std::vectorTS480HX_FSKbw; static const char *vTS480HX_FSKbw[] = { "FW0250;", "FW0500;", "FW1000;", "FW1500;" }; static int agcval = 1; static bool fm_mode = false; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 2 { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 3 { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 4 { (Fl_Widget *)btnDataPort, 214, 125, 50 }, // 5 { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, // 6 { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, // 7 { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, // 8 { (Fl_Widget *)NULL, 0, 0, 0 } }; static std::string menu012 = "EX01200004"; void RIG_TS480HX::initialize() { VECTOR (TS480HXmodes_, vTS480HXmodes_); VECTOR (TS480HX_empty, vTS480HX_empty); VECTOR (TS480HX_SL, vTS480HX_SL); VECTOR (TS480HX_SH, vTS480HX_SH); VECTOR (TS480HX_dataW, vTS480HX_dataW); VECTOR (TS480HX_dataC, vTS480HX_dataC); VECTOR (TS480HX_AM_SL, vTS480HX_AM_SL); VECTOR (TS480HX_AM_SH, vTS480HX_AM_SH); VECTOR (TS480HX_CWwidths, vTS480HX_CWwidths); VECTOR (TS480HX_CWbw, vTS480HX_CWbw); VECTOR (TS480HX_FSKwidths, vTS480HX_FSKwidths); VECTOR (TS480HX_FSKbw, vTS480HX_FSKbw); modes_ = TS480HXmodes_; _mode_type = TS480HX_mode_type; bandwidths_ = TS480HX_empty; bw_vals_ = TS480HX_bw_vals; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnDataPort; rig_widgets[6].W = sldrSQUELCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; check_menu_45(); menu012.clear(); cmd = "EX0120000;"; // read menu 012 state //might return something like EX01200004; if (wait_char(';', 11, 100, "read ex 012", ASC) == 11) menu012 = replystr; cmd = "EX01200000;"; sendCommand(cmd); } RIG_TS480HX::RIG_TS480HX() { // base class values name_ = TS480HXname_; modes_ = TS480HXmodes_; _mode_type = TS480HX_mode_type; bandwidths_ = TS480HX_empty; bw_vals_ = TS480HX_bw_vals; dsp_SL = TS480HX_SL; SL_tooltip = TS480HX_SL_tooltip; SL_label = TS480HX_btn_SL_label; dsp_SH = TS480HX_SH; SH_tooltip = TS480HX_SH_tooltip; SH_label = TS480HX_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8A03; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; has_extras = true; has_noise_reduction = has_noise_reduction_control = has_auto_notch = has_noise_control = has_sql_control = has_split = true; has_split_AB = true; has_data_port = true; has_micgain_control = true; has_ifshift_control = true; has_rf_control = true; has_agc_control = true; has_swr_control = true; has_alc_control = true; has_power_out = true; has_dsp_controls = true; has_smeter = true; has_attenuator_control = true; has_preamp_control = true; has_mode_control = true; has_bandwidth_control = true; has_volume_control = true; has_power_control = true; has_tune_control = true; has_ptt_control = true; precision = 1; ndigits = 8; _noise_reduction_level = 0; _nrval1 = 2; _nrval2 = 4; preamp_level = atten_level = 0; } static int ret = 0; const char * RIG_TS480HX::get_bwname_(int n, int md) { static char bwname[20]; if (n > 256) { int hi = (n >> 8) & 0x7F; int lo = n & 0xFF; snprintf(bwname, sizeof(bwname), "%s/%s", (md == 0 || md == 1 || md == 3) ? dsp_SL[lo].c_str() : TS480HX_AM_SL[lo].c_str(), (md == 0 || md == 1 || md == 3) ? dsp_SH[hi].c_str() : TS480HX_AM_SH[hi].c_str() ); } else { snprintf(bwname, sizeof(bwname), "%s", (md == 2 || md == 6) ? TS480HX_CWwidths[n].c_str() : TS480HX_FSKwidths[n].c_str()); } return bwname; } void RIG_TS480HX::check_menu_45() { // read current switch 45 setting menu_45 = false; cmd = "EX0450000;"; if (wait_char(';', 11, 100, "Check menu item 45", ASC) >= 11) { size_t p = replystr.rfind("EX045"); if (p != std::string::npos) menu_45 = (replystr[p+9] == '1'); } if (menu_45) { dsp_SL = TS480HX_dataW; SL_tooltip = TS480HX_dataW_tooltip; SL_label = TS480HX_dataW_label; dsp_SH = TS480HX_dataC; SH_tooltip = TS480HX_dataC_tooltip; SH_label = TS480HX_dataC_label; B.iBW = A.iBW = 0x8106; } else { dsp_SL = TS480HX_SL; SL_tooltip = TS480HX_SL_tooltip; SL_label = TS480HX_btn_SL_label; dsp_SH = TS480HX_SH; SH_tooltip = TS480HX_SH_tooltip; SH_label = TS480HX_btn_SH_label; B.iBW = A.iBW = 0x8A03; } } void RIG_TS480HX::shutdown() { // restore state of xcvr beeps if (menu012.empty()) return; cmd = menu012; sendCommand(cmd); } // SM cmd 0 ... 100 (rig values 0 ... 15) int RIG_TS480HX::get_smeter() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_smeter"); ret = wait_char(';', 8, 100, "get Smeter", ASC); gett(""); if (ret < 8) return 0; size_t p = replystr.rfind("SM"); if (p != std::string::npos) mtr = 5 * atoi(&replystr[p + 3]); return mtr; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { {0, 0.0}, {2, 5.0}, {4, 10.0}, {7, 25.0}, {11, 50.0}, {16, 100.0}, {20, 200.0} }; int RIG_TS480HX::get_power_out() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_power_out"); ret = wait_char(';', 8, 100, "get power", ASC); gett(""); if (ret < 8) return mtr; size_t p = replystr.rfind("SM"); if (p != std::string::npos) { mtr = atoi(&replystr[p + 3]); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 20) mtr = 20; mtr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (mtr > 200) mtr = 200; } return mtr; } // RM cmd 0 ... 100 (rig values 0 ... 8) // User report of RM; command using Send Cmd tab // RM10000;RM20000;RM30000; // RM1nnnn; => SWR // RM2nnnn; => COMP // RM3nnnn; => ALC int RIG_TS480HX::get_swr() { int mtr = 0; cmd = "RM;"; get_trace(1, "get_swr"); ret = wait_char(';', 8, 100, "get SWR/ALC", ASC); gett(""); if (ret < 8) return (int)mtr; size_t p = replystr.rfind("RM1"); if (p != std::string::npos) mtr = 66 * atoi(&replystr[p + 3]) / 10; p = replystr.rfind("RM3"); if (p != std::string::npos) alc = 66 * atoi(&replystr[p+3]) / 10; else alc = 0; swralc_polled = true; return mtr; } int RIG_TS480HX::get_alc(void) { if (!swralc_polled) get_swr(); swralc_polled = false; return alc; } int RIG_TS480HX::set_widths(int val) { int bw; if (val == 0 || val == 1 || val == 3) { if (menu_45) { bw = 0x8106; // 1500 Hz 2400 wide dsp_SL = TS480HX_dataW; SL_tooltip = TS480HX_dataW_tooltip; SL_label = TS480HX_dataW_label; dsp_SH = TS480HX_dataC; SH_tooltip = TS480HX_dataC_tooltip; SH_label = TS480HX_dataC_label; bandwidths_ = TS480HX_dataW; bw_vals_ = TS480HX_data_bw_vals; } else { bw = 0x8A03; // 200 ... 3000 Hz dsp_SL = TS480HX_SL; SL_tooltip = TS480HX_SL_tooltip; SL_label = TS480HX_btn_SL_label; dsp_SH = TS480HX_SH; SH_tooltip = TS480HX_SH_tooltip; SH_label = TS480HX_btn_SH_label; bandwidths_ = TS480HX_SH; bw_vals_ = TS480HX_HI_bw_vals; } } else if (val == 2 || val == 6) { bandwidths_ = TS480HX_CWwidths; bw_vals_ = TS480HX_CW_bw_vals; dsp_SL = TS480HX_empty; dsp_SH = TS480HX_empty; bw = 7; } else if (val == 5 || val == 7) { bandwidths_ = TS480HX_FSKwidths; bw_vals_ = TS480HX_FSK_bw_vals; dsp_SL = TS480HX_empty; dsp_SH = TS480HX_empty; bw = 1; } else { // val == 4 ==> AM bandwidths_ = TS480HX_empty; bw_vals_ = TS480HX_bw_vals; dsp_SL = TS480HX_AM_SL; dsp_SH = TS480HX_AM_SH; bw = 0x8201; } return bw; } std::vector& RIG_TS480HX::bwtable(int m) { if (m == 0 || m == 1 || m == 3) return TS480HX_empty; else if (m == 2 || m == 6) return TS480HX_CWwidths; else if (m == 5 || m == 7) return TS480HX_FSKwidths; //else AM m == 4 return TS480HX_empty; } std::vector& RIG_TS480HX::lotable(int m) { if (m == 0 || m == 1 || m == 3) return TS480HX_SL; else if (m == 2 || m == 6) return vNOBWS; else if (m == 5 || m == 7) return vNOBWS; return TS480HX_AM_SL; } std::vector& RIG_TS480HX::hitable(int m) { if (m == 0 || m == 1 || m == 3) return TS480HX_SH; else if (m == 2 || m == 6) return vNOBWS; else if (m == 5 || m == 7) return vNOBWS; return TS480HX_AM_SH; } void RIG_TS480HX::set_modeA(int val) { if (val == 3) fm_mode = true; else fm_mode = false; A.imode = val; cmd = "MD"; cmd += TS480HX_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); A.iBW = set_widths(val); } int RIG_TS480HX::get_modeA() { cmd = "MD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 4, 100, "get modeA", ASC); gett(""); if (ret < 4) return A.imode; size_t p = replystr.rfind("MD"); if (p != std::string::npos && (p + 2 < replystr.length())) { int md = replystr[p+2]; md = md - '1'; if (md == 8) md = 7; A.imode = md; A.iBW = set_widths(A.imode); } if (A.imode == 3) fm_mode = true; else fm_mode = false; return A.imode; } void RIG_TS480HX::set_modeB(int val) { if (val == 3) fm_mode = true; else fm_mode = false; B.imode = val; cmd = "MD"; cmd += TS480HX_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode B", cmd, ""); B.iBW = set_widths(val); } int RIG_TS480HX::get_modeB() { cmd = "MD;"; get_trace(1, "get_modeB"); ret = wait_char(';', 4, 100, "get modeB", ASC); gett(""); if (ret < 4) return B.imode; size_t p = replystr.rfind("MD"); if (p != std::string::npos && (p + 2 < replystr.length())) { int md = replystr[p+2]; md = md - '1'; if (md == 8) md = 7; B.imode = md; B.iBW = set_widths(B.imode); } if (B.imode == 3) fm_mode = true; else fm_mode = false; return B.imode; } int RIG_TS480HX::get_modetype(int n) { return _mode_type[n]; } void RIG_TS480HX::set_bwA(int val) { if (A.imode == 0 || A.imode == 1 || A.imode == 3 || A.imode == 4) { if (val < 256) return; A.iBW = val; cmd = "SL"; cmd.append(to_decimal(A.iBW & 0xFF, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, SL_tooltip, cmd, ""); cmd = "SH"; cmd.append(to_decimal(((A.iBW >> 8) & 0x7F), 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, SH_tooltip, cmd, ""); } if (val > 256) return; else if (A.imode == 2 || A.imode == 6) { A.iBW = val; cmd = TS480HX_CWbw[A.iBW]; sendCommand(cmd); showresp(WARN, ASC, "set CW bw", cmd, ""); }else if (A.imode == 5 || A.imode == 7) { A.iBW = val; cmd = TS480HX_FSKbw[A.iBW]; sendCommand(cmd); showresp(WARN, ASC, "set FSK bw", cmd, ""); } } int RIG_TS480HX::get_bwA() { int i = 0; size_t p; bool menu45 = menu_45; check_menu_45(); if (menu45 != menu_45) Fl::awake(updateBandwidthControl); if (A.imode == 0 || A.imode == 1 || A.imode == 3 || A.imode == 4) { int lo = A.iBW & 0xFF, hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_bwA, SL"); ret = wait_char(';', 5, 100, "get SL", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p != std::string::npos) lo = fm_decimal(replystr.substr(p+2), 2); } cmd = "SH;"; if (wait_char(';', 5, 100, "get SH", ASC) == 5) { p = replystr.rfind("SH"); if (p != std::string::npos) hi = fm_decimal(replystr.substr(p+2), 2); A.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } else if (A.imode == 2 || A.imode == 6) { cmd = "FW;"; get_trace(1, "get_bwA, FW"); ret = wait_char(';', 7, 100, "get FW", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 11; i++) if (replystr.find(TS480HX_CWbw[i]) == p) break; if (i == 11) i = 10; A.iBW = i; } } } else if (A.imode == 5 || A.imode == 7) { cmd = "FW;"; get_trace(1, "get_bwA, FW"); ret = wait_char(';', 7, 100, "get FW", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS480HX_FSKbw[i]) == p) break; if (i == 4) i = 3; A.iBW = i; } } } return A.iBW; } void RIG_TS480HX::set_bwB(int val) { if (B.imode == 0 || B.imode == 1 || B.imode == 3 || B.imode == 4) { if (val < 256) return; B.iBW = val; cmd = "SL"; cmd.append(to_decimal(B.iBW & 0xFF, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, SL_tooltip, cmd, ""); cmd = "SH"; cmd.append(to_decimal(((B.iBW >> 8) & 0x7F), 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, SH_tooltip, cmd, ""); } if (val > 256) return; else if (B.imode == 2 || B.imode == 6) { // CW B.iBW = val; cmd = TS480HX_CWbw[B.iBW]; sendCommand(cmd); showresp(WARN, ASC, "set CW bw", cmd, ""); }else if (B.imode == 5 || B.imode == 7) { B.iBW = val; cmd = TS480HX_FSKbw[B.iBW]; sendCommand(cmd); showresp(WARN, ASC, "set FSK bw", cmd, ""); } } int RIG_TS480HX::get_bwB() { int i = 0; size_t p; bool menu45 = menu_45; check_menu_45(); if (menu45 != menu_45) Fl::awake(updateBandwidthControl); if (B.imode == 0 || B.imode == 1 || B.imode == 3 || B.imode == 4) { int lo = B.iBW & 0xFF, hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get SL"); ret = wait_char(';', 5, 100, "get SL", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p != std::string::npos) lo = fm_decimal(replystr.substr(p+2), 2); } cmd = "SH;"; get_trace(1, "get SH"); ret = wait_char(';', 5, 100, "get SH", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p != std::string::npos) hi = fm_decimal(replystr.substr(p+2), 2); B.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } else if (B.imode == 2 || B.imode == 6) { cmd = "FW;"; get_trace(1, "get FW"); ret = wait_char(';', 7, 100, "get FW", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 11; i++) if (replystr.find(TS480HX_CWbw[i]) == p) break; if (i == 11) i = 10; B.iBW = i; } } } else if (B.imode == 5 || B.imode == 7) { cmd = "FW;"; get_trace(1, "get FW"); ret = wait_char(';', 7, 100, "get FW", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS480HX_FSKbw[i]) == p) break; if (i == 4) i = 3; B.iBW = i; } } } return B.iBW; } int RIG_TS480HX::adjust_bandwidth(int val) { int bw = 0; if (val == 0 || val == 1 || val == 3) bw = 0x8A03; else if (val == 4) bw = 0x8201; else if (val == 2 || val == 6) bw = 7; else if (val == 5 || val == 7) bw = 1; return bw; } int RIG_TS480HX::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_TS480HX::set_power_control(double val) { cmd = "PC"; char szval[4]; if (modeA == 4 && val > 50) val = 50; // AM mode limitation snprintf(szval, sizeof(szval), "%03d", (int)val); cmd += szval; cmd += ';'; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); } double RIG_TS480HX::get_power_control() { int val = progStatus.power_level; cmd = "PC;"; get_trace(1, "get_power_control"); ret = wait_char(';', 6, 100, "get Power control", ASC); gett(""); if (ret < 6) return val; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return val; val = atoi(&replystr[p + 2]); return val; } void RIG_TS480HX::set_attenuator(int val) { if (val) cmd = "RA01;"; else cmd = "RA00;"; LOG_WARN("%s", cmd.c_str()); set_trace(1, "set attenuator"); sendCommand(cmd); sett(""); atten_level = val; } int RIG_TS480HX::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator"); ret = wait_char(';', 7, 100, "get attenuator", ASC); gett(""); if (ret < 7) return atten_level; size_t p = replystr.rfind("RA"); if (p != std::string::npos) atten_level = (replystr[p+3] == '1'); return atten_level; } void RIG_TS480HX::set_preamp(int val) { if (val) cmd = "PA1;"; else cmd = "PA0;"; LOG_WARN("%s", cmd.c_str()); set_trace(1, "set preamp"); sendCommand(cmd); sett(""); preamp_level = val; } int RIG_TS480HX::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp"); ret = wait_char(';', 5, 100, "get preamp", ASC); gett(""); if (ret < 5) return preamp_level; size_t p = replystr.rfind("PA"); if (p != std::string::npos) preamp_level = (replystr[p+2] == '1'); return preamp_level; } const char *RIG_TS480HX::PRE_label() { if (preamp_level == 1) return "Pre 1"; return "PRE"; } const char *RIG_TS480HX::ATT_label() { if (atten_level == 1) return "ON"; return "ATT"; } void RIG_TS480HX::set_if_shift(int val) { cmd = "IS+"; if (val < 0) cmd[2] = '-'; cmd.append(to_decimal(abs(val),4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set IF shift", cmd, ""); } bool RIG_TS480HX::get_if_shift(int &val) { cmd = "IS;"; get_trace(1, "get_if_shift"); ret = wait_char(';', 8, 100, "get IF shift", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("IS"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 4); if (replystr[p+2] == '-') val *= -1; return (val != 0); } } val = progStatus.shift_val; return progStatus.shift; } void RIG_TS480HX::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1100; if_shift_max = max = 1100; if_shift_step = step = 10; if_shift_mid = 0; } // Noise Reduction (TS2000.cxx) NR1 only works; no NR2 and don' no why void RIG_TS480HX::set_noise_reduction(int val) { if (val == -1) { return; } _noise_reduction_level = val; if (_noise_reduction_level == 0) { nr_label("NR", false); } else if (_noise_reduction_level == 1) { nr_label("NR1", true); } else if (_noise_reduction_level == 2) { nr_label("NR2", true); } cmd.assign("NR"); cmd += '0' + _noise_reduction_level; cmd += ';'; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); } int RIG_TS480HX::get_noise_reduction() { cmd = rsp = "NR"; cmd.append(";"); get_trace(1, "get_noise_reduction"); ret = wait_char(';', 4, 100, "GET noise reduction", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return _noise_reduction_level; _noise_reduction_level = replystr[p+2] - '0'; } if (_noise_reduction_level == 1) { nr_label("NR1", true); } else if (_noise_reduction_level == 2) { nr_label("NR2", true); } else { nr_label("NR", false); } return _noise_reduction_level; } void RIG_TS480HX::set_noise_reduction_val(int val) { if (_noise_reduction_level == 0) return; if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; cmd.assign("RL").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); } int RIG_TS480HX::get_noise_reduction_val() { int nrval = 0; if (_noise_reduction_level == 0) return 0; int val = progStatus.noise_reduction_val; cmd = rsp = "RL"; cmd.append(";"); get_trace(1, "get_noise_reduction_val"); ret = wait_char(';', 5, 100, "GET noise reduction val", ASC); gett(""); if (ret == 5) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) { nrval = (_noise_reduction_level == 1 ? _nrval1 : _nrval2); return nrval; } val = atoi(&replystr[p+2]); } if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; return val; } int RIG_TS480HX::get_agc() { cmd = "GT;"; get_trace(1, "get_agc"); ret = wait_char(';', 6, 100, "GET agc val", ASC); gett(""); size_t p = replystr.rfind("GT"); if (p == std::string::npos) return agcval; if (replystr[4] == ' ') return 0; agcval = replystr[4] - '0' + 1; // '0' == off, '1' = fast, '2' = slow return agcval; } int RIG_TS480HX::incr_agc() { if (fm_mode) return 0; agcval++; if (agcval == 4) agcval = 1; cmd.assign("GT00"); cmd += (agcval + '0' - 1); cmd += ";"; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); return agcval; } static const char *agcstrs[] = {"FM", "AGC", "FST", "SLO"}; const char *RIG_TS480HX::agc_label() { if (fm_mode) return agcstrs[0]; return agcstrs[agcval]; } int RIG_TS480HX::agc_val() { if (fm_mode) return 0; return agcval; } // Auto Notch, beat canceller (TS2000.cxx) BC1 only, not BC2 void RIG_TS480HX::set_auto_notch(int v) { cmd = v ? "BC1;" : "BC0;"; sendCommand(cmd); showresp(WARN, ASC, "set auto notch", cmd, ""); } int RIG_TS480HX::get_auto_notch() { cmd = "BC;"; get_trace(1, "get_auto_notch"); ret = wait_char(';', 4, 100, "get auto notch", ASC); gett(""); if (ret == 4) { int anotch = 0; size_t p = replystr.rfind("BC"); if (p != std::string::npos) { anotch = (replystr[p+2] == '1'); return anotch; } } return 0; } // Noise Blanker (TS2000.cxx) void RIG_TS480HX::set_noise(bool b) { if (b) cmd = "NB1;"; else cmd = "NB0;"; sendCommand(cmd); showresp(WARN, ASC, "set NB", cmd, ""); } int RIG_TS480HX::get_noise() { cmd = "NB;"; get_trace(1, "get_noise"); ret = wait_char(';', 4, 100, "get Noise Blanker", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("NB"); if (p == std::string::npos) return 0; if (replystr[p+2] == '0') return 0; } return 1; } // Tranceiver PTT on/off void RIG_TS480HX::set_PTT_control(int val) { if (val) { if (progStatus.data_port) cmd = "TX1;"; // DTS transmission using ANI input else cmd = "TX0;"; // mic input } else cmd = "RX;"; sendCommand(cmd); showresp(WARN, ASC, "set PTT", cmd, ""); } int RIG_TS480HX::get_PTT() { // cmd = "IF;"; // get_trace(1, "get_PTT"); // ret = wait_char(';', 38, 100, "get VFO", ASC); // gett(""); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } void RIG_TS480HX::set_rf_gain(int val) { cmd = "RG"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set rf gain", cmd, ""); } int RIG_TS480HX::get_rf_gain() { int val = progStatus.rfgain; cmd = "RG;"; get_trace(1, "get_rf_gain"); ret = wait_char(';', 6, 100, "get rf gain", ASC); gett(""); if (ret < 6) return val; size_t p = replystr.rfind("RG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); return val; } void RIG_TS480HX::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TS480HX::selectA() { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); inuse = onA; } void RIG_TS480HX::selectB() { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); inuse = onB; } void RIG_TS480HX::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } bool RIG_TS480HX::can_split() { return true; } int RIG_TS480HX::get_split() { size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "FT"; cmd.append(";"); if (wait_char(';', 4, 100, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "FR"; cmd.append(";"); if (wait_char(';', 4, 100, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; } if (tx == '0' && rx == '0') split = 0; else if (tx == '1' && rx == '0') split = 1; else if (tx == '0' && rx == '1') split = 2; else if (tx == '1' && rx == '1') split = 3; return split; } unsigned long long RIG_TS480HX::get_vfoA () { cmd = "FA;"; if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } return A.freq; } void RIG_TS480HX::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS480HX::get_vfoB () { cmd = "FB;"; if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) return B.freq; size_t p = replystr.rfind("FB"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; B.freq = f; } return B.freq; } void RIG_TS480HX::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } // Squelch (TS990.cxx) void RIG_TS480HX::set_squelch(int val) { cmd = "SQ0"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set squelch", cmd, ""); } int RIG_TS480HX::get_squelch() { int val = 0; cmd = "SQ0;"; if (wait_char(';', 7, 20, "get squelch", ASC) >= 7) { size_t p = replystr.rfind("SQ0"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); } return val; } void RIG_TS480HX::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } void RIG_TS480HX::set_mic_gain(int val) { cmd = "MG"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic gain", cmd, ""); } int RIG_TS480HX::get_mic_gain() { int val = progStatus.mic_gain; cmd = "MG;"; if (wait_char(';', 6, 100, "get mic gain", ASC) < 6) return val; size_t p = replystr.rfind("MG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); return val; } void RIG_TS480HX::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TS480HX::set_volume_control(int val) { cmd = "AG"; char szval[20]; snprintf(szval, sizeof(szval), "%04d", val * 255 / 100); cmd += szval; cmd += ';'; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); } int RIG_TS480HX::get_volume_control() { int val = progStatus.volume; cmd = "AG0;"; if (wait_char(';', 7, 100, "get vol", ASC) < 7) return val; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); val = val * 100 / 255; return val; } void RIG_TS480HX::tune_rig() { cmd = "AC111;"; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); } flrig-2.0.04/src/rigs/kenwood/TS870S.cxx0000664000175000017500000013510214502041135014455 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // // Changes for the TS-870S March 2012, Dave Baxter, G0WBX // // Todo: // Look at:- (Example) // Squelch control:- (Kenwood.cxx Done, with help from HKJ G0WBX) // Autonotch control:- (SSB Only on the 870S) (TS-2000 WIP G0WBX) // Noise Reduction control:- (IC-7700) // Extra controls for speach compressor etc:- (IC-9100 (and others)) // Misc controls auto rig on/off with flrig startup/quit:- (FT-450/950) (PS0; PS1;) // Check Autotune action, and any 'busy' status. #include "config.h" #include "kenwood/TS870S.h" #include "support.h" static const char TS870Sname_[] = "TS-870S"; // mode array Index Values :- 0 1 2 3 4 5 6 7 static std::vectorTS870Smodes_; static const char *vTS870Smodes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R"}; static const char TS870S_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U' }; //---------------------------------------------------------------------- static std::vectorTS870S_empty; static const char *vTS870S_empty[] = { "N/A" }; //---------------------------------------------------------------------- // FWnnnn; command structure // Allowable data(units of 10 Hz): // FM: 500, 600, 800, 1000, 1200, 1400 (bandwidth) // AM: 0, 10, 20, 50 (high pass freq) // Sets or reads IF shift. // For SSB and AM, sets or reads the low-pass filter cut-off frequency. // // IS(p1)(p2)(p2)(p2)(p2); // If P2 is positive or zero, P1 can be “+” or “ ”. // Allowable data (in units of Hz): // SSB: 1400, 1600, 1800, 2000, 2200, // 2400, 2600, 2800, 3000, 3400, 4600, 6000 // AM:2500, 3000, 4000, 5000, 6000, 7000, // CW:400~1000 (50 Hz steps) //---------------------------------------------------------------------- // CW: 5, 10, 20, 40, 60, 100 (bandwidth) static int DEF_CW_BW = 4; static std::vectorTS870S_CWwidths; static const char *vTS870S_CWwidths[] = { // Available CW bandwidths "50", "100", "200", "400", "600", "1000"}; static std::vectorTS870S_CWbw; static const char *vTS870S_CWbw[] = { // Corresponding commands. "FW0005;", "FW0010;", "FW0020;", "FW0040;", "FW0060;", "FW0100;"}; //---------------------------------------------------------------------- // FSK: 25, 50, 100, 150 (bandwidth) static int DEF_FSK_BW = 2; static std::vectorTS870S_FSKwidths; static const char *vTS870S_FSKwidths[] = { // Available FSK bandwidths "250", "500", "1000", "1500"}; static std::vectorTS870S_FSKbw; static const char *vTS870S_FSKbw[] = { // Corresponding commands. "FW0025;", "FW0050;", "FW0100;", "FW0150;" }; //---------------------------------------------------------------------- // SSB: 0, 5, 10, 20, 30, 40, 50, 60, 80, 100 (high pass freq) static int DEF_SL_SH = 0x8704; static std::vectorTS870S_SSB_SL; static const char *vTS870S_SSB_SL[] = { // MD1; and MD2; "0", "50", "100", "200", "300", // Available settings (Hz) "400", "500", "600", "800", "1000" }; static std::vectorTS870S_CAT_ssb_SL; static const char *vTS870S_CAT_ssb_SL[] = { // Corresponding commands. "FW0000;", "FW0005;", "FW0010;", "FW0020;", "FW0030;", "FW0040;", "FW0050;", "FW0060;", "FW0080;", "FW0100;" }; static const char *TS870S_SSB_SL_tooltip = "lo cut"; static const char *TS870S_SSB_btn_SL_label = "L"; static std::vectorTS870S_SSB_SH; static const char *vTS870S_SSB_SH[] = { // MD1; and MD2; "1400", "1600", "1800", "2000", "2200", "2400", // Available settings (Hz) "2600", "2800", "3000", "3400", "4600", "6000" }; static std::vectorTS870S_CAT_ssb_SH; static const char *vTS870S_CAT_ssb_SH[] = { // Corresponding commands. "IS 1400;", "IS 1600;", "IS 1800;", "IS 2000;", "IS 2200;", "IS 2400;", "IS 2600;", "IS 2800;", "IS 3000;", "IS 3400;", "IS 4600;", "IS 6000;" }; static const char *TS870S_SSB_SH_tooltip = "hi cut"; static const char *TS870S_SSB_btn_SH_label = "H"; //---------------------------------------------------------------------- static int DEF_AM_SL_SH = 0x8401; static std::vectorTS870S_AM_SL; static const char *vTS870S_AM_SL[] = { // Available values... "0", "100", "200", "500" }; static std::vectorTS870S_CAT_am_SL; static const char *vTS870S_CAT_am_SL[] = { // ... Corresponding commands. "FW0000;", "FW0010;", "FW0020;", "FW0050;"}; static const char *TS870S_AM_SL_tooltip = "lo cut"; static const char *TS870S_AM_btn_SL_label = "L"; static std::vectorTS870S_AM_SH; static const char *vTS870S_AM_SH[] = { "2500", "3000", "4000", "5000", "6000", "7000" }; static std::vectorTS870S_CAT_am_SH; static const char *vTS870S_CAT_am_SH[] = { "IS 2500;", "IS 3000;", "IS 4000;", "IS 5000;", "IS 6000;", "IS 7000;"}; static const char *TS870S_AM_SH_tooltip = "hi cut"; static const char *TS870S_AM_btn_SH_label = "H"; //---------------------------------------------------------------------- static int DEF_FM_BW = 4; static std::vectorTS870S_FMwidths; static const char *vTS870S_FMwidths[] = { // Available FM bandwidths "5000", "6000", "8000", "10000", "12000", "14000"}; static std::vectorTS870S_FMbw; static const char *vTS870S_FMbw[] = { // Corresponding commands. "FW0500;", "FW0600;", "FW0800;", "FW1000;", "FW1200;", "FW1400;" }; //---------------------------------------------------------------------- //---------------------------------------------------------------------- static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 125, 156 }, { (Fl_Widget *)sldrPOWER, 54, 145, 368 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; //---------------------------------------------------------------------- void RIG_TS870S::initialize() { VECTOR (TS870Smodes_, vTS870Smodes_); VECTOR (TS870S_empty, vTS870S_empty); VECTOR (TS870S_CWwidths, vTS870S_CWwidths); VECTOR (TS870S_CWbw, vTS870S_CWbw); VECTOR (TS870S_FSKwidths, vTS870S_FSKwidths); VECTOR (TS870S_FSKbw, vTS870S_FSKbw); VECTOR (TS870S_SSB_SL, vTS870S_SSB_SL); VECTOR (TS870S_CAT_ssb_SL, vTS870S_CAT_ssb_SL); VECTOR (TS870S_SSB_SH, vTS870S_SSB_SH); VECTOR (TS870S_CAT_ssb_SH, vTS870S_CAT_ssb_SH); VECTOR (TS870S_AM_SL, vTS870S_AM_SL); VECTOR (TS870S_CAT_am_SL, vTS870S_CAT_am_SL); VECTOR (TS870S_AM_SH, vTS870S_AM_SH); VECTOR (TS870S_CAT_am_SH, vTS870S_CAT_am_SH); VECTOR (TS870S_FMwidths, vTS870S_FMwidths); VECTOR (TS870S_FMbw, vTS870S_FMbw); modes_ = TS870Smodes_; bandwidths_ = TS870S_SSB_SH; dsp_SL = TS870S_SSB_SL; dsp_SH = TS870S_SSB_SH; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = btnIFsh; rig_widgets[3].W = sldrIFSHIFT; rig_widgets[4].W = sldrMICGAIN; rig_widgets[5].W = sldrPOWER; selectA(); // cmd = "PS1;" sendCommand(cmd); // Power On. /* A delay is neded after the above, B4 the rig is ready for other commands. It may also be needed to repeat the above, if after a wait, the rig is still unresponsive. (Expecially, if the 12V supply was off too, since the last usage.) Plus, there may be other com port checks to do as well! wbx3 */ // cmd = "AC 00;"; sendCommand(cmd); // ATU Off. cmd = "EX0270000;"; sendCommand(cmd); // TX Enable. wbx2 // get_preamp(); // There is no preamp! get_attenuator(); } //---------------------------------------------------------------------- // add code here for shutting down the transceiver ... void RIG_TS870S::shutdown() // Both of these are tested and working. // Use either or both as desired. wbx3 { // cmd = "EX0270001;"; sendCommand(cmd); // TX Disable. wbx2 // cmd = "PS0;"; sendCommand(cmd); // Power OFF. (ALWAYS works first time!) } //---------------------------------------------------------------------- RIG_TS870S::RIG_TS870S() { name_ = TS870Sname_; modes_ = TS870Smodes_; bandwidths_ = TS870S_SSB_SH; dsp_SL = TS870S_SSB_SL; SL_tooltip = TS870S_SSB_SL_tooltip; SL_label = TS870S_SSB_btn_SL_label; dsp_SH = TS870S_SSB_SH; SH_tooltip = TS870S_SSB_SH_tooltip; SH_label = TS870S_SSB_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; // ditto (* used for hardware handshake * As per Kenwood instrucitons.) serial_dtrptt = false; // ditto (MUST use hard wired PTT for Accessory TX input & MIC blanking.) // Defaults. B.imode = A.imode = USB; B.iBW = A.iBW = DEF_SL_SH; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; nb_level = 2; has_micgain_control = has_notch_control = has_swr_control = false; has_mode_control = has_bandwidth_control = has_dsp_controls = has_smeter = has_power_out = has_split = has_split_AB = has_rf_control = has_noise_control = has_micgain_control = has_volume_control = has_ifshift_control = has_ptt_control = has_attenuator_control = has_sql_control = // wbx3 has_auto_notch = // wbx3 has_power_control = true; has_tune_control = false; // disabled for now has_preamp_control = false; precision = 10; ndigits = 7; } //---------------------------------------------------------------------- const char * RIG_TS870S::get_bwname_(int n, int md) { // md is an index value, NOT a "mode" designator itself. // n also is an index value, used to reference the name in the array. // This uses "ternary" methods, in the form of... // (boolean test) ? (do if true) : (do if false); // http://www.teach-me-c.com/blog/c-ternary-operator try { static char bwname[20]; if (n > 256) { // hi/lo cutt off bw setting mode. int hi = (n >> 8) & 0x7F; // hi byte (not MSB) int lo = n & 0xFF; // lo byte snprintf(bwname, sizeof(bwname), "%s/%s", (md == 0 || md == 1) ? TS870S_SSB_SL.at(lo).c_str() : // SSB lo (md == 4) ? TS870S_AM_SL.at(lo).c_str() : "N/A", // AM lo (md == 0 || md == 1) ? TS870S_SSB_SH.at(hi).c_str() : // SSB hi (md == 4) ? TS870S_AM_SH.at(hi).c_str() : "N/A" ); // AM hi } else { // plain vanilla single bandwidth mode. snprintf(bwname, sizeof(bwname), "%s", (md == 2 || md == 6) ? TS870S_CWwidths.at(n).c_str() : // CW or CW-R (md == 5 || md == 7) ? TS870S_FSKwidths.at(n).c_str(): // FSK or FSK-R (md == 3 ) ? TS870S_FMwidths.at(n).c_str() : "N/A" ); // FM } return bwname; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } return "ERR"; } //---------------------------------------------------------------------- void RIG_TS870S::selectA() { if (get_auto_notch() != 0 ) { // check to as to ... set_auto_notch(0); // prevent confusion when changing VFO's wbx3 auto_notch_label("AN", false); get_auto_notch(); // seems to update Flrig's internal status flags. } cmd = "FR0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx/Tx A", cmd, ""); // vfo = 0; inuse = onA; } //---------------------------------------------------------------------- void RIG_TS870S::selectB() { if (get_auto_notch() != 0 ) { // check to as to ... set_auto_notch(0); // prevent confusion when changing VFO's wbx3 auto_notch_label("AN", false); get_auto_notch(); // seems to update Flrig's internal status flags. } cmd = "FR1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx/Tx B", cmd, ""); // vfo = 1; inuse = onB; } //---------------------------------------------------------------------- bool RIG_TS870S::check () { return get_TS870Sid(); } unsigned long long RIG_TS870S::get_vfoA () { cmd = "FA;"; get_trace(1, "get_vfoA()"); int ret = wait_char(';', 14, 100, "get vfoA", ASC); gett(""); if (ret < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return A.freq; unsigned long long f = 0ULL; unsigned long long mul = 1ULL; for (size_t n = 12; n > 1; n--) { f += (replystr[p + n] - '0') * mul; mul *= 10; } A.freq = f; return A.freq; } //---------------------------------------------------------------------- void RIG_TS870S::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } //---------------------------------------------------------------------- unsigned long long RIG_TS870S::get_vfoB () { cmd = "FB;"; get_trace(1, "get_vfoB()"); int ret = wait_char(';', 14, 100, "get vfoB", ASC); gett(""); if (ret < 14) return B.freq; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return B.freq; unsigned long long f = 0ULL; unsigned long long mul = 1ULL; for (size_t n = 12; n > 1; n--) { f += (replystr[p + n] - '0') * mul; mul *= 10; } B.freq = f; return B.freq; } //---------------------------------------------------------------------- void RIG_TS870S::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } //---------------------------------------------------------------------- int RIG_TS870S::get_smeter() { cmd = "SM;"; get_trace(1, "get_smeter()"); int ret = wait_char(';', 7, 100, "get smeter", ASC); gett(""); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return -1; replystr[p + 6] = 0; int mtr = atoi(&replystr[p + 2]); mtr = (mtr * 100) / 30; //wbx return mtr; } //---------------------------------------------------------------------- int RIG_TS870S::get_power_out() { // Shares same command as the 'S' meter reading. int mtr = 0; cmd = "SM;"; get_trace(1, "get_power_out()"); int ret = wait_char(';', 7, 100, "get output power", ASC); gett(""); if (ret < 7) return mtr; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return mtr; replystr[p + 6] = 0; mtr = atoi(&replystr[p + 2]); mtr = (mtr * 100) / 30; //wbx if (mtr > 100) mtr = 100; // but with a power limit! return mtr; // The power meter scale is not the same as Flrig's default. // a change is needed, one day. wbx2 // Note that the power meter scale is an image and would have to be // redrawn and then set specifically for the xcvr in support.cxx } //---------------------------------------------------------------------- // Transceiver power level void RIG_TS870S::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); // 010 .. 100 } //---------------------------------------------------------------------- double RIG_TS870S::get_power_control() { cmd = "PC;"; get_trace(1, "get_power_control()"); gett(""); int ret = wait_char(';', 6, 100, "get pwr ctrl", ASC); if (ret < 6) return 0; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return 0; int mtr = 0; replystr[p + 5] = 0; mtr = atoi(&replystr[p + 2]); return mtr; } //---------------------------------------------------------------------- // Volume control return (rig sends back 0 .. 255) int RIG_TS870S::get_volume_control() { cmd = "AG;"; // reply data is 'AGnnn;' nnn = 000 .. 255 wbx get_trace(1, "get_volume_control()"); int ret = wait_char(';', 6, 100, "get vol ctrl", ASC); gett(""); if (ret < 6) return 0; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; // change the ';' into a 'null' int val = atoi(&replystr[p + 2]); return (int)(val / 2.55); // we only want 0 .. 100 } //---------------------------------------------------------------------- void RIG_TS870S::set_volume_control(int val) { // 0 .. 100 int ivol = (int)(val * 2.55); // 0 .. 255 cmd = "AG000;"; for (int i = 4; i > 1; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); } //---------------------------------------------------------------------- // Tranceiver PTT on/off /* * NOTE! If you use these CAT commands TX and RX, then when in Transmit * the TS-870S *ONLY* takes audio from the front panel Mic socket. * If you need to use the audio going in the rear Acc socket, you MUST * use a hard wired PTT to the Acc socket. THEN it will take audio from * there, and blank the mic. * To do that, in the Config/Xcvr Select menu, use one of the Hardware PTT options. * Just so it has been said... wbx * * BUMMER - HKJ */ void RIG_TS870S::set_PTT_control(int val) { if (val) cmd = "TX;"; else cmd = "RX;"; sendCommand(cmd); } //---------------------------------------------------------------------- // Play with the autotuner // disabled for now wbx void RIG_TS870S::tune_rig() { // cmd = "AC111;"; // sendCommand(cmd); // this might take a while! } //---------------------------------------------------------------------- // the TS-870 actually has 4 attenuator settings. // RA00; = Off, RA01; = 6dB, RA02; = 12dB, RA03; = 18dB wbx // It would be nice to have right-click to cycle the other way. wbx3 int RIG_TS870S::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_TS870S::set_attenuator(int val) { atten_level = val; if (atten_level == 1) { // If attenuator level = 0 (off) cmd = "RA01;"; // this is the command... } else if (atten_level == 2) { cmd = "RA02;"; } else if (atten_level == 3) { cmd = "RA03;"; } else if (atten_level == 0) { cmd = "RA00;"; } sendCommand(cmd); showresp(WARN, ASC, "set Att", cmd, ""); } //---------------------------------------------------------------------- // Modified to read and show the actual radio setting, in the button. int RIG_TS870S::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator()"); int ret = wait_char(';', 5, 100, "get att", ASC); gett(""); if (ret < 5) return att_on; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return att_on; if (replystr[p + 2] == '0' && replystr[p + 3] == '0') { att_on = 0; // Attenuator is OFF atten_level = 0; // remember it... } else if (replystr[p + 2] == '0' && replystr[p + 3] == '1') { att_on = 1; // Attenuator is ON, 6dB atten_level = 1; // remember the level } else if (replystr[p + 2] == '0' && replystr[p + 3] == '2') { att_on = 1; // .. still ON, 12dB atten_level = 2; // remember this level } else if (replystr[p + 2] == '0' && replystr[p + 3] == '3') { att_on = 1; // .. still ON 18dB atten_level = 3; // remember... } return att_on; // let the rest of the world know. } const char *RIG_TS870S::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } //---------------------------------------------------------------------- bool RIG_TS870S::get_TS870Sid() { cmd = "ID;"; get_trace(1, "get_ID"); int ret = wait_char(';', 6, 100, "get ID", ASC); gett(""); if ( (ret < 6) || (replystr.rfind("ID015;") == std::string::npos) ) return false; return true; } //====================================================================== // mode commands //====================================================================== void RIG_TS870S::set_modeA(int val) { active_mode = A.imode = val; // only for NonSSB modes, and if auto-notch is on, then turn it off! wbx3 if (active_mode >= 2 && get_auto_notch() != 0) { set_auto_notch(0); auto_notch_label("AN", false); get_auto_notch(); // seems to update Flrig's internal status flags. } switch (val) { default: case 0: cmd = "MD1;"; break; case 1: cmd = "MD2;"; break; case 2: cmd = "MD3;"; break; case 3: cmd = "MD4;"; break; case 4: cmd = "MD5;"; break; case 5: cmd = "MD6;"; break; case 6: cmd = "MD7;"; break; case 7: cmd = "MD9;"; break; } sendCommand(cmd); set_trace(2, "set_modeA ", cmd.c_str()); showresp(WARN, ASC, "set mode A", cmd, ""); A.iBW = set_widths(val); } //---------------------------------------------------------------------- int RIG_TS870S::get_modeA() { int md = A.imode; cmd = "MD;"; get_trace(1, "get_modeA()"); int ret = wait_char(';', 4, 100, "get mode A", ASC); gett(""); if (ret < 4) return A.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return A.imode; switch (replystr[p + 2]) { case '1' : md = tsLSB; break; case '2' : md = tsUSB; break; case '3' : md = tsCW; break; case '4' : md = tsFM; break; case '5' : md = tsAM; break; case '6' : md = tsFSK; break; case '7' : md = tsCWR; break; case '9' : md = tsFSKR; break; default : md = A.imode; } if (md != A.imode) { active_mode = A.imode = md; A.iBW = set_widths(md); } return A.imode; } //---------------------------------------------------------------------- void RIG_TS870S::set_modeB(int val) { active_mode = B.imode = val; // only for NonSSB modes, and if auto-notch is on, then turn it off! wbx3 if (active_mode >= 2 && get_auto_notch() != 0) { set_auto_notch(0); auto_notch_label("AN", false); get_auto_notch(); // seems to update Flrig's internal status flags. } switch (val) { case 0: cmd = "MD1;"; break; case 1: cmd = "MD2;"; break; case 2: cmd = "MD3;"; break; case 3: cmd = "MD4;"; break; case 4: cmd = "MD5;"; break; case 5: cmd = "MD6;"; break; case 6: cmd = "MD7;"; break; case 7: cmd = "MD9;"; break; } sendCommand(cmd); set_trace(2, "set_modeB ", cmd.c_str()); showresp(WARN, ASC, "set mode B", cmd, ""); B.iBW = set_widths(val); } //---------------------------------------------------------------------- int RIG_TS870S::get_modeB() { int md = B.imode; cmd = "MD;"; int ret = wait_char(';', 4, 100, "get mode B", ASC); gett(""); if (ret < 4) return B.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return B.imode; switch (replystr[p + 2]) { case '1' : md = tsLSB; break; case '2' : md = tsUSB; break; case '3' : md = tsCW; break; case '4' : md = tsFM; break; case '5' : md = tsAM; break; case '6' : md = tsFSK; break; case '7' : md = tsCWR; break; case '9' : md = tsFSKR; break; default : md = B.imode; } if (md != B.imode) { active_mode = B.imode = md; B.iBW = set_widths(md); } return B.imode; } //====================================================================== // Bandpass filter commands //====================================================================== // Comes here when user changes mode, among other things.. int RIG_TS870S::set_widths(int val) // val is from the mode list index, as selected by the user. { int bw = 0; switch (val) { default: case tsLSB: case tsUSB: { // SSB modes bandwidths_ = TS870S_SSB_SH; dsp_SL = TS870S_SSB_SL; dsp_SH = TS870S_SSB_SH; SL_tooltip = TS870S_SSB_SL_tooltip; SL_label = TS870S_SSB_btn_SL_label; SH_tooltip = TS870S_SSB_SH_tooltip; SH_label = TS870S_SSB_btn_SH_label; bw = DEF_SL_SH; // 300 ... 2800 Hz break; } case tsCW: case tsCWR: { // CW modes bandwidths_ = TS870S_CWwidths; dsp_SL = TS870S_empty; dsp_SH = TS870S_empty; bw = 3; // 400Hz break; } case tsFSK: case tsFSKR: { // FSK modes bandwidths_ = TS870S_FSKwidths; dsp_SL = TS870S_empty; dsp_SH = TS870S_empty; bw = 1; // 500Hz break; } case tsAM: { // val == 5 ==> AM mode bandwidths_ = TS870S_empty; dsp_SL = TS870S_AM_SL; dsp_SH = TS870S_AM_SH; SL_tooltip = TS870S_AM_SL_tooltip; SL_label = TS870S_AM_btn_SL_label; SH_tooltip = TS870S_AM_SH_tooltip; SH_label = TS870S_AM_btn_SH_label; bw = 0x8401; // 100Hz .. 6000Hz break; } case tsFM: { // FM mode bandwidths_ = TS870S_FMwidths; // load the dropdown with our list dsp_SL = TS870S_empty; dsp_SH = TS870S_empty; bw = 4; // 10000Hz break; } } return bw; } //---------------------------------------------------------------------- std::vector& RIG_TS870S::bwtable(int m) { if (m == tsLSB || m == tsUSB || m == tsAM) // these modes have lo and hi settings. BUT MUST RETURN A VALID pointer // NOT EMPTY! return TS870S_SSB_SH; else if (m == tsCW || m == tsCWR) return TS870S_CWwidths; else if (m == tsFSK || m == tsFSKR) return TS870S_FSKwidths; else if (m == tsFM) return TS870S_FMwidths; else return TS870S_SSB_SH; } std::vector& RIG_TS870S::lotable(int m) { if (m == tsLSB || m == tsUSB) return TS870S_SSB_SL; // these modes have lo and hi settings. if (m == tsAM) return TS870S_AM_SL; return vNOBWS;//TS870S_empty; } std::vector& RIG_TS870S::hitable(int m) { if (m == tsLSB || m == tsUSB) return TS870S_SSB_SH; // these modes have lo and hi settings. if (m == tsAM) return TS870S_AM_SH; return TS870S_SSB_SH; } //---------------------------------------------------------------------- int RIG_TS870S::adjust_bandwidth(int val) { if (val == tsLSB || val == tsUSB ) return DEF_SL_SH; // 2800Hz .. 300Hz else if (val == tsCW || val == tsCWR) return DEF_CW_BW; // 400Hz else if (val == tsFSK || val == tsFSKR) return DEF_FSK_BW; // 500Hz else if (val == tsFM) return DEF_FM_BW; // 10000Hz // else if (val == tsAM) return DEF_AM_SL_SH; // 6000Hz .. 100Hz } //---------------------------------------------------------------------- int RIG_TS870S::def_bandwidth(int val) { return adjust_bandwidth(val); } //---------------------------------------------------------------------- void RIG_TS870S::set_bwA(int val) { switch (A.imode) { case tsLSB: case tsUSB: { if (val < 256) break; int lo = val & 0x7F; int hi = (val >> 8) & 0x7F; if (lo > 9 || hi > 11) break; A.iBW = val; try { cmd = TS870S_CAT_ssb_SL.at(lo); sendCommand(cmd); set_trace(2, "set lower ", cmd.c_str()); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS870S_CAT_ssb_SH.at(hi); sendCommand(cmd); set_trace(2, "set upper ", cmd.c_str()); showresp(WARN, ASC, "set upper", cmd, ""); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsAM: { if (val < 256) break; int lo = val & 0x7F; int hi = (val >> 8) & 0x7F; if (lo > 3 || hi > 5) break; A.iBW = val; try { cmd = TS870S_CAT_am_SL.at(lo); sendCommand(cmd); set_trace(2, "set lower ", cmd.c_str()); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS870S_CAT_am_SH.at(hi); sendCommand(cmd); set_trace(2, "set upper ", cmd.c_str()); showresp(WARN, ASC, "set upper", cmd, ""); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsCW: case tsCWR: { if (val > 256) { break; } try { A.iBW = val; cmd = TS870S_CWbw[A.iBW]; sendCommand(cmd); set_trace(2, "set CW bw ", cmd.c_str()); showresp(WARN, ASC, "set CW bw", cmd, ""); } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsFSK: case tsFSKR: { if (val > 256) break; A.iBW = val; try { cmd = TS870S_FSKbw.at(A.iBW); sendCommand(cmd); set_trace(2, "set FSK bw ", cmd.c_str()); showresp(WARN, ASC, "set FSK bw", cmd, ""); } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsFM: { A.iBW = val; try { cmd = TS870S_FMbw.at(A.iBW); sendCommand(cmd); set_trace(2, "set FM bw ", cmd.c_str()); showresp(WARN, ASC, "set FM bw", cmd, ""); } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } } } //---------------------------------------------------------------------- void RIG_TS870S::set_bwB(int val) { switch (B.imode) { case tsLSB: case tsUSB: { if (val < 256) break; int lo = val & 0x7F; int hi = (val >> 8) & 0x7F; if (lo > 9 || hi > 11) break; B.iBW = val; try { cmd = TS870S_CAT_ssb_SL.at(lo); sendCommand(cmd); set_trace(2, "set lower ", cmd.c_str()); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS870S_CAT_ssb_SH.at(hi); sendCommand(cmd); set_trace(2, "set upper ", cmd.c_str()); showresp(WARN, ASC, "set upper", cmd, ""); } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsAM: { if (val < 256) break; int lo = val & 0x7F; int hi = (val >> 8) & 0x7F; if (lo > 3 || hi > 5) break; B.iBW = val; try { cmd = TS870S_CAT_am_SL.at(lo); sendCommand(cmd); set_trace(2, "set lower ", cmd.c_str()); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS870S_CAT_am_SH.at(hi); sendCommand(cmd); set_trace(2, "set upper ", cmd.c_str()); showresp(WARN, ASC, "set upper", cmd, ""); } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsCW: case tsCWR: { if (val > 256) break; B.iBW = val; try { cmd = TS870S_CWbw.at(B.iBW); sendCommand(cmd); set_trace(2, "set CW bw ", cmd.c_str()); showresp(WARN, ASC, "set CW bw", cmd, ""); } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsFSK: case tsFSKR: { if (val > 256) break; B.iBW = val; try { cmd = TS870S_FSKbw.at(B.iBW); sendCommand(cmd); set_trace(2, "set FSK bw ", cmd.c_str()); showresp(WARN, ASC, "set FSK bw", cmd, ""); } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsFM: { A.iBW = val; try { cmd = TS870S_FMbw.at(A.iBW); sendCommand(cmd); set_trace(2, "set FM bw ", cmd.c_str()); showresp(WARN, ASC, "set FM bw", cmd, ""); } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } } } //---------------------------------------------------------------------- int RIG_TS870S::get_bwA() { size_t i = 0; int ret; size_t p; switch (A.imode) { case tsFM: { // A.iBW = 1; // default value cmd = "FW;"; // 'width' query get_trace(1, "get_bwA()"); ret = wait_char(';', 7, 100, "get CW width", ASC); gett(""); if (ret < 7) return A.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return A.iBW; try { for (i = 0; i < TS870S_FMbw.size(); i++) if (replystr.find(TS870S_FMbw.at(i)) == p) { A.iBW = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsCW: case tsCWR: { // A.iBW = 1; // default cmd = "FW;"; // 'width' query get_trace(1, "get_bwA()"); ret = wait_char(';', 7, 100, "get CW width", ASC); gett(""); if (ret < 7) return A.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return A.iBW; try { for (i = 0; i < TS870S_CWbw.size(); i++) if (replystr.find(TS870S_CWbw.at(i)) == p) { A.iBW = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsFSK: case tsFSKR: { // A.iBW = 1; // default cmd = "FW;"; get_trace(1, "get_bwA()"); ret = wait_char(';', 7, 100, "get FSK width", ASC); gett(""); if (ret < 7) return A.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return A.iBW; try { for (i = 0; i < TS870S_FSKbw.size(); i++) if (replystr.find(TS870S_FSKbw.at(i)) == p) { A.iBW = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsAM: { // A.iBW = DEF_AM_SL_SH; int lo = A.iBW & 0x7F, hi = (A.iBW >> 8) & 0x7F; // High byte is hi cut index (not MSB though.) Low byte is lo cuttoff index. cmd = "FW;"; // Read Low cuttoff. Returns a two digit code as 'FLxxxx;' in 10Hz increments. get_trace(1, "get_lower"); ret = wait_char(';', 7, 100, "get lower", ASC); gett(""); if (ret < 7) return A.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return A.iBW; try { for (i = 0; i < TS870S_CAT_am_SL.size(); i++) if (replystr.find(TS870S_CAT_am_SL.at(i)) == p) { lo = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } cmd = "IS;"; get_trace(1, "get_upper"); ret = wait_char(';', 8, 100, "get upper", ASC); gett(""); if (ret < 8) return A.iBW; p = replystr.rfind("IS "); if (p == std::string::npos) return A.iBW; try { for (i = 0; i < TS870S_CAT_am_SH.size(); i++) if (replystr.find(TS870S_CAT_am_SH.at(i)) == p) { hi = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } A.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; break; } case tsLSB: case tsUSB: { // A.iBW = DEF_SL_SH; int lo = A.iBW & 0x7F, hi = (A.iBW >> 8) & 0x7F; // Same trick as above... cmd = "FW;"; // Read Low cuttoff. Returns a two digit code as 'FLxxxx;' in 10Hz increments. get_trace(1, "get lower"); ret = wait_char(';', 7, 100, "get lower", ASC); gett(""); if (ret < 7) return A.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return A.iBW; try { for (i = 0; i < TS870S_CAT_ssb_SL.size(); i++) if (replystr.find(TS870S_CAT_ssb_SL.at(i)) == p) { lo = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } cmd = "IS;"; get_trace(1, "get upper"); ret = wait_char(';', 8, 100, "get upper", ASC); gett(""); if (ret < 8) return A.iBW; p = replystr.rfind("IS "); if (p == std::string::npos) return A.iBW; try { for (i = 0; i < TS870S_CAT_ssb_SH.size(); i++) if (replystr.find(TS870S_CAT_ssb_SH.at(i)) == p) { hi = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } A.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; break; } } // switch return A.iBW; } //---------------------------------------------------------------------- int RIG_TS870S::get_bwB() { size_t i = 0; int ret; size_t p; switch (A.imode) { case tsFM: { // B.iBW = 1; // default value cmd = "FW;"; // 'width' query get_trace(1, "get_bwA()"); ret = wait_char(';', 7, 100, "get CW width", ASC); gett(""); if (ret < 7) return B.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return B.iBW; try { for (i = 0; i < TS870S_FMbw.size(); i++) if (replystr.find(TS870S_FMbw.at(i)) == p) { B.iBW = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsCW: case tsCWR: { // B.iBW = 1; // default cmd = "FW;"; // 'width' query get_trace(1, "get_bwA()"); ret = wait_char(';', 7, 100, "get CW width", ASC); gett(""); if (ret < 7) return B.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return B.iBW; try { for (i = 0; i < TS870S_CWbw.size(); i++) if (replystr.find(TS870S_CWbw.at(i)) == p) { B.iBW = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsFSK: case tsFSKR: { // B.iBW = 1; // default cmd = "FW;"; get_trace(1, "get_bwA()"); ret = wait_char(';', 7, 100, "get FSK width", ASC); gett(""); if (ret < 7) return B.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return B.iBW; try { for (i = 0; i < TS870S_FSKbw.size(); i++) if (replystr.find(TS870S_FSKbw.at(i)) == p) { B.iBW = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } break; } case tsAM: { // B.iBW = DEF_AM_SL_SH; int lo = B.iBW & 0x7F, hi = (B.iBW >> 8) & 0x7F; // High byte is hi cut index (not MSB though.) Low byte is lo cuttoff index. cmd = "FW;"; // Read Low cuttoff. Returns a two digit code as 'FLxxxx;' in 10Hz increments. get_trace(1, "get_lower"); ret = wait_char(';', 7, 100, "get lower", ASC); gett(""); if (ret < 7) return B.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return B.iBW; try { for (i = 0; i < TS870S_CAT_am_SL.size(); i++) if (replystr.find(TS870S_CAT_am_SL.at(i)) == p) { lo = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } cmd = "IS;"; get_trace(1, "get_upper"); ret = wait_char(';', 8, 100, "get upper", ASC); gett(""); if (ret < 8) return B.iBW; p = replystr.rfind("IS "); if (p == std::string::npos) return B.iBW; try { for (i = 0; i < TS870S_CAT_am_SH.size(); i++) if (replystr.find(TS870S_CAT_am_SH.at(i)) == p) { hi = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } B.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; break; } case tsLSB: case tsUSB: { // B.iBW = DEF_SL_SH; int lo = B.iBW & 0x7F, hi = (B.iBW >> 8) & 0x7F; // Same trick as above... cmd = "FW;"; // Read Low cuttoff. Returns a two digit code as 'FLxxxx;' in 10Hz increments. get_trace(1, "get lower"); ret = wait_char(';', 7, 100, "get lower", ASC); gett(""); if (ret < 7) return B.iBW; p = replystr.rfind("FW"); if (p == std::string::npos) return B.iBW; try { for (i = 0; i < TS870S_CAT_ssb_SL.size(); i++) if (replystr.find(TS870S_CAT_ssb_SL.at(i)) == p) { lo = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } cmd = "IS;"; get_trace(1, "get upper"); ret = wait_char(';', 8, 100, "get upper", ASC); gett(""); if (ret < 8) return B.iBW; p = replystr.rfind("IS "); if (p == std::string::npos) return B.iBW; try { for (i = 0; i < TS870S_CAT_ssb_SH.size(); i++) if (replystr.find(TS870S_CAT_ssb_SH.at(i)) == p) { hi = i; break; // Found returned data, in std::string array. } } catch (std::exception& e) { LOG_ERROR("%s", e.what()); } B.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; break; } } // switch return B.iBW; } //---------------------------------------------------------------------- int RIG_TS870S::get_modetype(int n) { return TS870S_mode_type[n]; } //---------------------------------------------------------------------- // val 0 .. 255 void RIG_TS870S::set_mic_gain(int val) { int imic = (int)(val * 2.55); // 0 .. 255 cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += imic % 10; imic /= 10; } sendCommand(cmd); } //---------------------------------------------------------------------- int RIG_TS870S::get_mic_gain() { int val = 0; int ret; cmd = "MG;"; get_trace(1,"get_mic_gain()"); ret = wait_char(';', 6, 100, "get mic ctrl", ASC); gett(""); if (ret < 6) return val; size_t p = replystr.rfind("MG"); if (p == std::string::npos) return val; replystr[p + 5] = 0; val = atoi(&replystr[p + 2]); return (int)(val / 2.55); // we only want 0 .. 100 } //---------------------------------------------------------------------- void RIG_TS870S::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } //---------------------------------------------------------------------- void RIG_TS870S::set_noise(bool val) { if (val) cmd = "NB1;"; else cmd = "NB0;"; sendCommand(cmd); showresp(WARN, ASC, "set NB", cmd, ""); } int RIG_TS870S::get_noise() { int ret; cmd = "NB;"; get_trace(1,"get_noise()"); ret = wait_char(';', 4, 100, "get NB", ASC); gett(""); if (ret < 4) return 0; size_t p = replystr.rfind("NB"); if (p == std::string::npos) return 0; return (replystr[p + 2] == '1'); // true if 1 } //====================================================================== // IF shift command only available if the transceiver is in the CW mode // step size is 50 Hz //====================================================================== // See also, the code in support.cxx // setMode and setModeControl, calling 'checkTS870S' // void RIG_TS870S::set_if_shift(int val) { if (active_mode == tsCW || active_mode == tsCWR) { // cw modes progStatus.shift_val = val; cmd = "IS "; cmd.append(to_decimal(abs(val),4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set IF shift", cmd, ""); } } //---------------------------------------------------------------------- bool RIG_TS870S::get_if_shift(int &val) { int ret; val = progStatus.shift_val; if (active_mode == tsCW || active_mode == tsCWR) { // cw modes cmd = "IS;"; get_trace(1, "get_if_shift"); ret = wait_char(';', 8, 100, "get IF shift", ASC); if (ret < 8) return false; size_t p = replystr.rfind("IS"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 4); return true; } } return false; } //---------------------------------------------------------------------- void RIG_TS870S::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = 400; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 800; } //---------------------------------------------------------------------- // Dave, G0WBX, does this work? // I do not see a BP in the 870 command table // void RIG_TS870S::set_notch(bool on, int val) { // No it doesnt, the 870 only has an auto-notch. /* cmd = "BP00000;"; if (on == false) { sendCommand(cmd); notch_on = false; return; } if (!notch_on) { cmd[6] = '1'; // notch ON sendCommand(cmd); cmd[6] = '0'; notch_on = true; } cmd[3] = '1'; // manual NOTCH position // set notch value offset by 200, ie: 001 -> 400 val = (-val / 9) + 200; if (val < 1) val = 1; if (val > 400) val = 400; for (int i = 3; i > 0; i--) { cmd[3 + i] += val % 10; val /=10; } sendCommand(cmd); */ } //---------------------------------------------------------------------- //tbd bool RIG_TS870S::get_notch(int &val) { return false; // bool ison = false; // cmd = "BP;"; // int ret = sendCommand(cmd); // return ison; } //---------------------------------------------------------------------- void RIG_TS870S::get_notch_min_max_step(int &min, int &max, int &step) { min = -1143; max = +1143; step = 9; } //---------------------------------------------------------------------- // Auto Notch On/Off & Query G0WBX (copied with mods from the TS2000 code) //---------------------------------------------------------------------- void RIG_TS870S::set_auto_notch(int v) { if (active_mode == tsLSB || active_mode == tsUSB) { // only for SSB modes. cmd = v ? "NT1;" : "NT0;"; } else cmd = "NT0;"; sendCommand(cmd); showresp(WARN, ASC, "set auto notch", cmd, ""); sett("auto notch"); } int RIG_TS870S::get_auto_notch() { int anotch = 0; cmd = "NT;"; get_trace(1, "get_auto_notch"); int ret = wait_char(';', 4, 100, "get auto notch", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("NT"); if (p != std::string::npos) { anotch = (replystr[p+2] == '1'); } } return anotch; } // revert to use KENWOOD generic get set for split operation /* //---------------------------------------------------------------------- // revision is similar to TS950S code //---------------------------------------------------------------------- void RIG_TS870S::set_split(bool val) { // find out which VFO (or if Memory) is in use for RX. cmd = "FR;"; sendCommand(cmd); showresp(WARN, ASC, "RX-VFO?", cmd, ""); if (wait_char(';', 4, 100, "get VFO for split", ASC) < 4) return; size_t p = replystr.rfind("FR"); // if bad data, change nothing. if (p == std::string::npos) return; // '0' = VFO-A, '1' = VFO-B, '2' = Memory. switch (replystr[p+2]) { case '0' : inuse = onA; break; case '1' : inuse = onB; break; case '2' : default : return; // do nothing the xcvr is in memory mode } split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } Fl::awake(highlight_vfo, (void *)0); } //---------------------------------------------------------------------- // This works for the 950S ... you can can revert to use your // IF byte 32 test if this does not work on the 870S //---------------------------------------------------------------------- int RIG_TS870S::get_split() { size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "FT"; cmd.append(";"); if (wait_char(';', 4, 100, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "FR"; cmd.append(";"); if (wait_char(';', 4, 100, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; // split test if (tx != rx) split = 1; // change submitted by G8KBV } return split; } */ //---------------------------------------------------------------------- // Squelch commands (G0WBX) With lots of assistance from W1HKJ! //---------------------------------------------------------------------- void RIG_TS870S::set_squelch(int val) { int isql = (int)(val * 2.55); // 0 .. 255 cmd = "SQ000;"; for (int i = 4; i > 1; i--) { cmd[i] += isql % 10; isql /= 10; } sendCommand(cmd); } int RIG_TS870S::get_squelch() { cmd = "SQ;"; // reply data is 'SQnnn;' nnn = 000 .. 255 wbx get_trace(1, "get_squelch_control()"); int ret = wait_char(';', 6, 100, "get sql ctrl", ASC); gett(""); if (ret < 6) return 0; size_t p = replystr.rfind("SQ"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; // change the ';' into a 'null' int val = atoi(&replystr[p + 2]); return (int)(val / 2.55); // we only want 0 .. 100 } //---------------------------------------------------------------------- flrig-2.0.04/src/rigs/kenwood/TS990.cxx0000664000175000017500000024664414502041135014353 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- /* * Copyright (c) 2014 Andy Burnett, G0HIX */ #include "config.h" #include "kenwood/TS990.h" #include "support.h" #include "debug.h" #include #include #define TS990_WAIT 50 static const char TS990name_[] = "TS-990"; static std::vectorTS990modes_; static const char *vTS990modes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "PSK", "CW-R", "FSK-R", "PSK-R", "LSB-D1", "USB-D1", "FM-D1", "AM-D1", "LSB-D2", "USB-D2", "FM-D2", "AM-D2", "LSB-D3", "USB-D3", "FM-D3", "AM-D3"}; static const char TS990_mode_chr[] = { '1', '2', '3', '4', '5', '6', 'A', '7', '9', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N' }; static const char TS990_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'U', 'U', 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'L', 'U', 'U', 'U', 'L', 'U', 'U', 'U' }; //============================================================================== static std::vectorTS990_empty; static const char *vTS990_empty[] = { "N/A" }; //============================================================================== // SSB - Width / Shift filters // // BW indicates 0x8000 & (shift << 8) & width // Maximum assignable BW value 0x910C // Default BW value 0x9005 //============================================================================== static std::vectorTS990_filt_width; static const char *vTS990_filt_width[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500", "2000", "2200", "2400", "2600", "2800", "3000" }; static int TS990_WIDTH_bw_vals[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,WVALS_LIMIT}; static std::vectorTS990_CAT_filt_width; static const char *vTS990_CAT_filt_width[] = { "00;", "01;", "02;", "03;", "04;", "05;", "06;", "07;", "08;", "09;", "10;", "11;", "12;", "13;", "14;", "15;", "16;", "17;" }; static const char *TS990_filt_width_tooltip = "width"; static const char *TS990_filt_width_label = "W"; static std::vectorTS990_filt_shift; static const char *vTS990_filt_shift[] = { "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2210" }; static std::vectorTS990_CAT_filt_shift; static const char *vTS990_CAT_filt_shift[] = { "00;", "01;", "02;", "03;", "04;", "05;", "06;", "07;", "08;", "09;", "10;", "11;", "12;" }; static const char *TS990_filt_shift_tooltip = "shift"; static const char *TS990_filt_shift_label = "S"; #define DEFAULT_SH_WI 0x8510 // SHIFT 1500, WIDTH 2800 #define DEFAULT_SH_WI_D1 0x850B // SHIFT 1500, WIDTH 3000 #define DEFAULT_SH_WI_D2 0x850A // SHIFT 1500, WIDTH 1000 #define DEFAULT_SH_WI_D3 0x8508 // SHIFT 1500, WIDTH 500 //============================================================================== // SSB, FM, Other SL/SH cut filters // // BW indicates 0x8000 & (SH << 8) & SL //============================================================================== static std::vectorTS990_filt_SH; static const char *vTS990_filt_SH[] = { "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3400", "4000", "5000" }; static int TS990_HI_bw_vals[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,WVALS_LIMIT}; static std::vectorTS990_CAT_filt_SH; static const char *vTS990_CAT_filt_SH[] = { "00;", "01;", "02;", "03;", "04;", "05;", "06;", "07;", "08;", "09;", "10;", "11;", "12;", "13;" }; static const char *TS990_filt_SH_tooltip = "hi cut"; static const char *TS990_filt_SH_label = "H"; static std::vectorTS990_filt_SL; static const char *vTS990_filt_SL[] = { "0", "50", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000" }; static std::vectorTS990_CAT_filt_SL; static const char *vTS990_CAT_filt_SL[] = { "00;", "01;", "02;", "03;", "04;", "05;", "06;", "07;", "08;", "09;", "10;", "11;" }; static const char *TS990_filt_SL_tooltip = "lo cut"; static const char *TS990_filt_SL_label = "L"; #define DEFAULT_HI_LO 0x8A03 // LO 200, HI 3000 #define DEFAULT_FM 0x8C05 // LO 400, HI 4000 #define DEFAULT_FM_D1 0x8903 // LO 200, HI 2800 #define DEFAULT_FM_D2 0x8707 // LO 600, HI 2400 #define DEFAULT_FM_D3 0x850B // LO 1000, HI 2000 //============================================================================== // CW filters // // BW indicates 0x8000 & (width << 8) & shift // Maximum assignable BW value 0x8D20 // Default BW value 0x8810 --> no shift, bandwidth = 500 Hz //============================================================================== static std::vectorTS990_CW_width; static const char *vTS990_CW_width[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500", "2000", "2500" }; static int TS990_CW_bw_vals[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,WVALS_LIMIT}; static std::vectorTS990_CAT_CW_width; static const char *vTS990_CAT_CW_width[] = { "00;", "01;", "02;", "03;", "04;", "05;", "06;", "07;", "08;", "09;", "10;", "11;", "12;", "13;" }; static const char *TS990_CW_W_tooltip = "width"; static const char *TS990_CW_W_btn_label = "W"; static std::vectorTS990_CW_shift; static const char *vTS990_CW_shift[] = { "-800", "-750", "-700", "-650", "-600", "-550", "-500", "-450", "-400", "-350", "-300", "-250", "-200", "-150", "-100", "-50", "0", "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "550", "600", "650", "700", "750", "800" }; static std::vectorTS990_CAT_CW_shift; static const char *vTS990_CAT_CW_shift[] = { "00;", "01;", "02;", "03;", "04;", "05;", "06;", "07;", "08;", "09;", "10;", "11;", "12;", "13;", "14;", "15;", "16;", "17;", "18;", "19;", "20;", "21;", "22;", "23;", "24;", "25;", "26;", "27;", "28;", "29;", "30;", "31;", "32;" }; static const char *TS990_CW_S_tooltip = "shift"; static const char *TS990_CW_S_btn_label = "S"; #define DEFAULT_CW 0x9008 // SHIFT 0, WIDTH 500 //============================================================================== static std::vectorTS990_AM_SL; static const char *vTS990_AM_SL[] = { "0", "100", "200", "300" }; static std::vectorTS990_CAT_AM_SL; static const char *vTS990_CAT_AM_SL[] = { "00;", "01;", "02;", "03;"}; static const char *TS990_AM_SL_tooltip = "lo cut"; static const char *TS990_AM_btn_SL_label = "L"; static std::vectorTS990_AM_SH; static const char *vTS990_AM_SH[] = { "2500", "3000", "4000", "5000" }; static int TS990_AM_HI_bw_vals[] = { 1,2,3,4,WVALS_LIMIT}; static std::vectorTS990_CAT_AM_SH; static const char *vTS990_CAT_AM_SH[] = { "00;", "01;", "02;", "03;"}; static const char *TS990_AM_SH_tooltip = "hi cut"; static const char *TS990_AM_btn_SH_label = "H"; #define DEFAULT_AM 0x8102 // LO 100, HI 4000 #define DEFAULT_AM_D1 0x8202 // LO 200, HI 4000 #define DEFAULT_AM_D2 0x8201 // LO 200, HI 3000 #define DEFAULT_AM_D3 0x8200 // LO 200, HI 2500 //============================================================================== static std::vectorTS990_FSK_filt; static const char *vTS990_FSK_filt[] = { "250", "300", "400", "500", "1000", "1500"}; static int TS990_FSK_bw_vals[] = {1,2,3,4,5,6,WVALS_LIMIT}; static std::vectorTS990_CAT_FSK_filt; static const char *vTS990_CAT_FSK_filt[] = { "00;", "01;", "02;", "03;", "04;", "05;" }; #define DEFAULT_FSK 0x03 // WIDTH 300 //============================================================================== static std::vectorTS990_PSK_filt; static const char *vTS990_PSK_filt[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500"}; static int TS990_PSK_bw_vals[] = {1,2,3,4,5,6,7,8,9,10,11,12,WVALS_LIMIT}; static std::vectorTS990_CAT_PSK_filt; static const char *vTS990_CAT_PSK_filt[] = { "00;", "01;", "02;", "03;", "04;", "05;", "06;", "07;", "08;", "09;", "10;", "11;" }; #define DEFAULT_PSK 0x06 // WIDTH 300 //============================================================================== static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; static std::string menu_0001; void RIG_TS990::initialize() { VECTOR (TS990modes_, vTS990modes_); VECTOR (TS990_empty, vTS990_empty); VECTOR (TS990_filt_width, vTS990_filt_width); VECTOR (TS990_CAT_filt_width, vTS990_CAT_filt_width); VECTOR (TS990_filt_shift, vTS990_filt_shift); VECTOR (TS990_CAT_filt_shift, vTS990_CAT_filt_shift); VECTOR (TS990_filt_SH, vTS990_filt_SH); VECTOR (TS990_CAT_filt_SH, vTS990_CAT_filt_SH); VECTOR (TS990_filt_SL, vTS990_filt_SL); VECTOR (TS990_CAT_filt_SL, vTS990_CAT_filt_SL); VECTOR (TS990_CW_width, vTS990_CW_width); VECTOR (TS990_CAT_CW_width, vTS990_CAT_CW_width); VECTOR (TS990_CW_shift, vTS990_CW_shift); VECTOR (TS990_CAT_CW_shift, vTS990_CAT_CW_shift); VECTOR (TS990_AM_SL, vTS990_AM_SL); VECTOR (TS990_CAT_AM_SL, vTS990_CAT_AM_SL); VECTOR (TS990_AM_SH, vTS990_AM_SH); VECTOR (TS990_CAT_AM_SH, vTS990_CAT_AM_SH); VECTOR (TS990_FSK_filt, vTS990_FSK_filt); VECTOR (TS990_CAT_FSK_filt, vTS990_CAT_FSK_filt); VECTOR (TS990_PSK_filt, vTS990_PSK_filt); VECTOR (TS990_CAT_PSK_filt, vTS990_CAT_PSK_filt); modes_ = TS990modes_; bw_vals_ = TS990_HI_bw_vals; dsp_SL = TS990_filt_SL; dsp_SH = TS990_filt_SH; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnNR; rig_widgets[4].W = sldrNR; rig_widgets[5].W = btnIFsh; rig_widgets[6].W = sldrIFSHIFT; rig_widgets[7].W = btnNotch; rig_widgets[8].W = sldrNOTCH; rig_widgets[9].W = sldrMICGAIN; rig_widgets[10].W = sldrPOWER; cmd = "AC000;"; sendCommand(cmd); cmd = "EX00100;"; if (wait_char(';', 11, 100, "read ex 00100", ASC) == 11) menu_0001 = replystr; cmd = "EX00100 00"; // turn off beeps sendCommand(cmd); read_menu_0607(); read_menu_0608(); set_menu_0607(false); // SSB uses lower/upper cutoff frequencies set_menu_0608(true); // SSB data uses shift/width frequencies A_default_SH_WI = DEFAULT_SH_WI; A_default_SH_WI_D1 = DEFAULT_SH_WI_D1; A_default_SH_WI_D2 = DEFAULT_SH_WI_D2; A_default_SH_WI_D3 = DEFAULT_SH_WI_D3; A_default_HI_LO = DEFAULT_HI_LO; A_default_FM = DEFAULT_FM; A_default_FM_D1 = DEFAULT_FM_D1; A_default_FM_D2 = DEFAULT_FM_D2; A_default_FM_D3 = DEFAULT_FM_D3; A_default_CW = DEFAULT_CW; A_default_AM = DEFAULT_AM; A_default_AM_D1 = DEFAULT_AM_D1; A_default_AM_D2 = DEFAULT_AM_D2; A_default_AM_D3 = DEFAULT_AM_D3; A_default_FSK = DEFAULT_FSK; A_default_PSK = DEFAULT_PSK; B_default_SH_WI = DEFAULT_SH_WI; B_default_SH_WI_D1 = DEFAULT_SH_WI_D1; B_default_SH_WI_D2 = DEFAULT_SH_WI_D2; B_default_SH_WI_D3 = DEFAULT_SH_WI_D3; B_default_HI_LO = DEFAULT_HI_LO; B_default_FM = DEFAULT_FM; B_default_FM_D1 = DEFAULT_FM_D1; B_default_FM_D2 = DEFAULT_FM_D2; B_default_FM_D3 = DEFAULT_FM_D3; B_default_CW = DEFAULT_CW; B_default_AM = DEFAULT_AM; B_default_AM_D1 = DEFAULT_AM_D1; B_default_AM_D2 = DEFAULT_AM_D2; B_default_AM_D3 = DEFAULT_AM_D3; B_default_FSK = DEFAULT_FSK; B_default_PSK = DEFAULT_PSK; selectA(); } void RIG_TS990::shutdown() { set_menu_0607(save_menu_0607); set_menu_0608(save_menu_0608); cmd = menu_0001; // restore beep level sendCommand(cmd); } //============================================================================== RIG_TS990::RIG_TS990() { name_ = TS990name_; modes_ = TS990modes_; B.freq = A.freq = 14107500ULL; A.imode = USB; A.iBW = A_default_HI_LO; B.imode = USB; B.iBW = B_default_HI_LO; bandwidths_ = TS990_filt_SH; bw_vals_ = TS990_HI_bw_vals; dsp_SL = TS990_filt_SL; SL_tooltip = TS990_filt_SL_tooltip; SL_label = TS990_filt_SL_label; dsp_SH = TS990_filt_SH; SH_tooltip = TS990_filt_SH_label; SH_label = TS990_filt_SH_label; widgets = rig_widgets; serial_baudrate = BR115200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; can_change_alt_vfo = true; nb_level = 1; has_auto_notch = has_notch_control = has_sql_control = has_noise_reduction = has_noise_reduction_control = has_dsp_controls = has_smeter = has_voltmeter = has_idd_control = has_alc_control = has_swr_control = has_power_out = has_split = has_split_AB = has_noise_control = has_micgain_control = has_rf_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_mode_control = has_bandwidth_control = has_ifshift_control = has_ptt_control = has_xcvr_auto_on_off = can_synch_clock = true; rxtxa = true; precision = 1; ndigits = 8; } //============================================================================== void RIG_TS990::selectA() { gett("selectA()"); cmd = "CB0;"; sendCommand(cmd); showresp(INFO, ASC, "Main band", cmd, ""); rxtxa = true; cmd = "MV00;"; sendCommand(cmd); showresp(INFO, ASC, "Rx A, Tx A", cmd, ""); rxtxa = true; inuse = onA; } void RIG_TS990::selectB() { gett("selectB()"); cmd = "CB1;"; sendCommand(cmd); showresp(INFO, ASC, "Sub band", cmd, ""); rxtxa = false; cmd = "MV10;"; sendCommand(cmd); showresp(INFO, ASC, "Rx B, Tx B", cmd, ""); rxtxa = false; inuse = onB; } //============================================================================== // Get Attenuator // The TS990 actually has 4 attenuator settings. // RA00; = Off, RA01; = 6dB, RA02; = 12dB, RA03; = 18dB //============================================================================== int RIG_TS990::next_attenuator() { gett("next_attenuator()"); switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_TS990::set_attenuator(int val) { sett("set_attenuator(int val)"); atten_level = val; if (inuse == onB) { if (atten_level == 1) { // If attenuator level = 0 (off) cmd = "RA11;"; // this is the command... } else if (atten_level == 2) { // If attenuator level = 1 (6dB) cmd = "RA12;"; } else if (atten_level == 3) { // if it's 12dB cmd = "RA13;"; } else if (atten_level == 0) { // If it's 18dB cmd = "RA10;"; } sendCommand(cmd); showresp(INFO, ASC, "set Att B", cmd, ""); } else { if (atten_level == 1) { cmd = "RA01;"; } else if (atten_level == 2) { cmd = "RA02;"; } else if (atten_level == 3) { cmd = "RA03;"; } else if (atten_level == 0) { cmd = "RA00;"; } sendCommand(cmd); showresp(INFO, ASC, "set Att A", cmd, ""); } } //============================================================================== // Modified to read and show the actual radio setting, in the button. //============================================================================== int RIG_TS990::get_attenuator() { gett("get_attenuator()"); if (inuse == onB) { cmd = "RA1;"; if (wait_char(';', 5, 100, "get Att B", ASC) < 5) return att_on; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return att_on; if (replystr[p + 2] == '1' && replystr[p + 3] == '0') { att_on = 0; // Attenuator is OFF atten_level = 0; // remember it... } else if (replystr[p + 2] == '1' && replystr[p + 3] == '1') { att_on = 1; // Attenuator is ON, 6dB atten_level = 1; // remember the level } else if (replystr[p + 2] == '1' && replystr[p + 3] == '2') { att_on = 1; // .. still ON, 12dB atten_level = 2; // remember this level } else if (replystr[p + 2] == '1' && replystr[p + 3] == '3') { att_on = 1; // .. still ON 18dB atten_level = 3; // remember... } } else { cmd = "RA0;"; if (wait_char(';', 5, 100, "get Att B", ASC) < 5) return att_on; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return att_on; if (replystr[p + 2] == '0' && replystr[p + 3] == '0') { att_on = 0; atten_level = 0; } else if (replystr[p + 2] == '0' && replystr[p + 3] == '1') { att_on = 1; atten_level = 1; } else if (replystr[p + 2] == '0' && replystr[p + 3] == '2') { att_on = 1; atten_level = 2; } else if (replystr[p + 2] == '0' && replystr[p + 3] == '3') { att_on = 1; atten_level = 3; } } return att_on; } //============================================================================== //Get PreAmp //============================================================================== int RIG_TS990::next_preamp() { gett("next_preamp()"); if (preamp_level) return 0; return 1; } void RIG_TS990::set_preamp(int val) { sett("set_preamp(int val)"); if (inuse == onB) { preamp_level = val; if (val) cmd = "PA11;"; else cmd = "PA10;"; sendCommand(cmd); } else { preamp_level = val; if (val) cmd = "PA01;"; else cmd = "PA00;"; sendCommand(cmd); } showresp(INFO, ASC, "set preamp", cmd, ""); } int RIG_TS990::get_preamp() { gett("get_preamp()"); if (inuse == onB) { cmd = "PA1;"; if (wait_char(';', 5, TS990_WAIT, "get preamp", ASC) < 5) return 0; size_t p = replystr.rfind("PA"); if (p == std::string::npos) return 0; if (replystr[p + 3] == '1') preamp_level = 1; else preamp_level = 0; } else { cmd = "PA0;"; if (wait_char(';', 5, TS990_WAIT, "get preamp", ASC) < 5) return 0; size_t p = replystr.rfind("PA"); if (p == std::string::npos) return 0; if (replystr[p + 3] == '1') preamp_level = 1; else preamp_level = 0; } return preamp_level; } const char *RIG_TS990::PRE_label() { if (preamp_level == 1) return "Pre 1"; return "PRE"; } const char *RIG_TS990::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } //============================================================================== void RIG_TS990::set_split(bool val) { sett("set_split(bool val)"); split = val; if (inuse == onB) { if (val) { cmd = "MV10;TB0;"; sendCommand(cmd); showresp(INFO, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "MV10;TB1;"; sendCommand(cmd); showresp(INFO, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "MV00;TB1;"; sendCommand(cmd); showresp(INFO, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "MV00;TB0;"; sendCommand(cmd); showresp(INFO, ASC, "Rx on A, Tx on A", cmd, ""); } } } int RIG_TS990::get_split() { gett("get_split()"); size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "TB"; cmd.append(";"); if (wait_char(';', 4, TS990_WAIT, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "CB"; cmd.append(";"); if (wait_char(';', 4, TS990_WAIT, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; //split test split = (tx == '1' ? 2 : 0) + (rx == '1' ? 1 : 0); } return split; } //============================================================================== const char * RIG_TS990::get_bwname_(int n, int md) { gett("get_bwname_(int n, int md)"); static char bwname[20]; if (n > 256) { int SH = (n >> 8) & 0x7F; int SL = n & 0x7F; snprintf(bwname, sizeof(bwname), "%s/%s", (md == LSB || md == USB || md == FM) ? TS990_filt_SL[SL].c_str() : (md == AM || md == AMD1 || md == AMD2 || md == AMD3) ? TS990_AM_SL[SL].c_str() : (md == CW ||md == CWR) ? TS990_CAT_CW_width [SL].c_str(): (md == FSK ||md == FSKR) ? TS990_FSK_filt [SL].c_str(): (md == PSK ||md == PSKR) ? TS990_PSK_filt [SL].c_str(): TS990_filt_shift[SL].c_str(), (md == LSB || md == USB || md == FM) ? TS990_filt_SH[SH].c_str() : (md == AM || md == AMD1 || md == AMD2 || md == AMD3) ? TS990_AM_SH[SH].c_str() : (md == CW ||md == CWR) ? TS990_CAT_CW_shift [SH].c_str(): (md == FSK ||md == FSKR) ? TS990_FSK_filt [SH].c_str(): (md == PSK ||md == PSKR) ? TS990_PSK_filt [SH].c_str(): TS990_filt_width[SH].c_str() ); } return bwname; } //============================================================================== // Get/Set VFO for A and B //============================================================================== bool RIG_TS990::check () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "check", ASC); if (ret < 14) return false; return true; } unsigned long long RIG_TS990::get_vfoA () { gett("get_vfoA()"); cmd = "FA;"; if (wait_char(';', 14, TS990_WAIT, "get vfoA", ASC) < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return A.freq; unsigned long long f = 0ULL; unsigned long long mul = 1ULL; for (size_t n = 12; n > 1; n--) { f += (replystr[p + n] - '0') * mul; mul *= 10; } A.freq = f; return A.freq; } void RIG_TS990::set_vfoA (unsigned long long freq) { sett("set_vfoA(unsigned long long freq)"); A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(INFO, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS990::get_vfoB () { gett("get_vfoB()"); cmd = "FB;"; if (wait_char(';', 14, TS990_WAIT, "get vfoB", ASC) < 14) return B.freq; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return B.freq; unsigned long long f = 0ULL; unsigned long long mul = 1ULL; for (size_t n = 12; n > 1; n--) { f += (replystr[p + n] - '0') * mul; mul *= 10; } B.freq = f; return B.freq; } void RIG_TS990::set_vfoB (unsigned long long freq) { sett("set_vfoB(unsigned long long freq)"); B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(INFO, ASC, "set vfo B", cmd, ""); } //============================================================================== // Smeter reading //============================================================================== // response SMbmmmm; int RIG_TS990::get_smeter() { gett("get_smeter()"); if (inuse == onB) cmd = "SM1;"; else cmd = "SM0;"; int mtr = 0; if (wait_char(';', 8, TS990_WAIT, "get", ASC) < 8) return 0; char b; sscanf(replystr.c_str(), "SM%c%d", &b, &mtr); mtr *= 10; mtr /= 7; return mtr; } //============================================================================== // Power out reading //============================================================================== // response SMbmmmm; int RIG_TS990::get_power_out() { gett("get_power_out()"); if (inuse == onB) cmd = "SM1;"; else cmd = "SM0;"; int mtr = 0; if (wait_char(';', 8, TS990_WAIT, "get", ASC) < 8) return 0; char b; sscanf(replystr.c_str(), "SM%c%d", &b, &mtr); mtr *= 25; mtr /= 7; if (mtr > 200) mtr = 200; return mtr; } //============================================================================== // SWR readings //============================================================================== // response RMbmmmm; int RIG_TS990::get_swr(void) { gett("get_swr(void)"); int mtr = 0; cmd = "RM21;"; sendCommand(cmd); showresp(INFO, ASC, "set SWR meter", cmd, ""); cmd = "RM;"; sendCommand(cmd); if (wait_char(';', 8, TS990_WAIT, "get swr", ASC) < 8) return 0; sscanf(replystr.c_str(), "RM2%d", &mtr); mtr *= 10; mtr /= 7; if (mtr > 100) mtr = 100; return mtr; } //============================================================================== // ALC readings //============================================================================== // response RMbmmmm; int RIG_TS990::get_alc(void) { gett("get_alc(void)"); cmd = "RM11;"; sendCommand(cmd); showresp(INFO, ASC, "set ALC meter", cmd, ""); cmd = "RM;"; sendCommand(cmd); if (wait_char(';', 8, TS990_WAIT, "get ALC", ASC) < 8) return 0; size_t p = replystr.find("RM1"); if (p == std::string::npos) return 0; int alc_val = 0; sscanf(replystr.c_str(), "RM1%d", &alc_val); alc_val *= 10; alc_val /= 7; if (alc_val > 100) alc_val = 100; return alc_val; } double RIG_TS990::get_idd() { gett("get_idd(void)"); cmd = "RM41;"; sendCommand(cmd); showresp(INFO, ASC, "set Idd meter", cmd, ""); cmd = "RM;"; sendCommand(cmd); if (wait_char(';', 8, TS990_WAIT, "get Idd", ASC) < 8) return 0; size_t p = replystr.find("RM4"); if (p == std::string::npos) return 0; int idd_val = 0; sscanf(replystr.c_str(), "RM4%d", &idd_val); idd_val *= 10; idd_val /= 7; if (idd_val > 100) idd_val = 100; return idd_val; } double RIG_TS990::get_voltmeter(void) { gett("get_voltmeter(void)"); cmd = "RM51;"; sendCommand(cmd); showresp(INFO, ASC, "set Vdd meter", cmd, ""); cmd = "RM;"; sendCommand(cmd); if (wait_char(';', 8, TS990_WAIT, "get Vdd", ASC) < 8) return 0; size_t p = replystr.find("RM5"); if (p == std::string::npos) return 0; int vdd_val = 0; sscanf(replystr.c_str(), "RM5%d", &vdd_val); vdd_val *= 10; vdd_val /= 7; if (vdd_val > 100) vdd_val = 100; return vdd_val; } //============================================================================== // Transceiver power level //============================================================================== void RIG_TS990::set_power_control(double val) { sett("set_power_control(double val)"); int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); } //============================================================================== // Power control setting //============================================================================== // response: PCppp; double RIG_TS990::get_power_control() { gett("get_power_control()"); cmd = "PC;"; if (wait_char(';', 6, TS990_WAIT, "get pwr ctrl", ASC) < 6) return 0; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return 0; int mtr = 0; replystr[p + 5] = 0; mtr = fm_decimal(replystr.substr(p+2), 3); return mtr; } //============================================================================== // Volume control return 0 ... 100 //============================================================================== // response AGbmmm; int RIG_TS990::get_volume_control() { gett("get_volume_control()"); if (inuse == onB) { cmd = "AG1;"; if (wait_char(';', 7, TS990_WAIT, "get vol ctrl", ASC) < 7) return 0; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int val = fm_decimal(replystr.substr(p+3), 3); return (int)(val / 2.55); } else { cmd = "AG0;"; if (wait_char(';', 7, TS990_WAIT, "get vol ctrl", ASC) < 7) return 0; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int val = fm_decimal(replystr.substr(p+3), 3); return (int)(val / 2.55); } } void RIG_TS990::set_volume_control(int val) { sett("set_volume_control(int val)"); if (inuse == onB) { int ivol = (int)(val * 2.55); cmd = "AG1000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); } else { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); } } //============================================================================== // Tranceiver PTT on/off //============================================================================== void RIG_TS990::set_PTT_control(int val) { sett("set_PTT_control(int val)"); if (val) { if (data_mode) cmd = "TX1;"; else cmd = "TX0;"; } else cmd = "RX;"; sendCommand(cmd); ptt_ = val; } int RIG_TS990::get_PTT() { return ptt_; } //============================================================================== // Transceiver Tune //============================================================================== void RIG_TS990::tune_rig(int how) { switch (how) { case 0: cmd = "AC110;"; break; case 1: cmd = "AC111;"; break; case 2: cmd = "AC112;"; break; } sett("tune_rig()"); sendCommand(cmd); } //============================================================================== // Mode A / B //============================================================================== void RIG_TS990::set_modeA(int val) { std::stringstream ss; ss << "set_modeA(" << val << ") " << TS990modes_[val]; gett(ss.str().c_str()); A.imode = val; cmd = "OM0"; cmd += TS990_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(INFO, ASC, "set mode main band", cmd, ""); set_widths(val); data_mode = (A.imode >= LSBD1); } int RIG_TS990::get_modeA() { int md = A.imode; cmd = "OM0;"; if (wait_char(';', 5, TS990_WAIT, "get mode main band", ASC) < 5) return A.imode; size_t p = replystr.rfind("OM"); if (p == std::string::npos) return A.imode; switch (replystr[p + 3]) { case '1' : md = LSB; break; case '2' : md = USB; break; case '3' : md = CW; break; case '4' : md = FM; break; case '5' : md = AM; break; case '6' : md = FSK; break; case '7' : md = CWR; break; case '9' : md = FSKR; break; case 'A' : md = PSK; break; case 'B' : md = PSKR; break; case 'C' : md = LSBD1; break; case 'D' : md = USBD1; break; case 'E' : md = FMD1; break; case 'F' : md = AMD1; break; case 'G' : md = LSBD2; break; case 'H' : md = USBD2; break; case 'I' : md = FMD2; break; case 'J' : md = AMD2; break; case 'K' : md = LSBD3; break; case 'L' : md = USBD3; break; case 'M' : md = FMD3; break; case 'N' : md = AMD3; break; default : md = A.imode; } gett("get_modeA()"); if (md != A.imode) { std::stringstream ss; ss << "get_modeB(" << md << ") " << TS990modes_[md]; gett(ss.str().c_str()); LOG_INFO("get mode A: %s", TS990modes_[md].c_str()); A.imode = md; set_widths(md); } data_mode = (A.imode >= LSBD1); return A.imode; } void RIG_TS990::set_modeB(int val) { std::stringstream ss; ss << "set_modeB(" << val << ") " << TS990modes_[val]; gett(ss.str().c_str()); B.imode = val; cmd = "OM1"; cmd += TS990_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(INFO, ASC, "set mode sub band", cmd, ""); set_widths(val); data_mode = (B.imode >= LSBD1); } int RIG_TS990::get_modeB() { int md = B.imode; cmd = "OM1;"; if (wait_char(';', 5, TS990_WAIT, "get mode sub band", ASC) < 5) return B.imode; size_t p = replystr.rfind("OM"); if (p == std::string::npos) return B.imode; switch (replystr[p + 3]) { case '1' : md = LSB; break; case '2' : md = USB; break; case '3' : md = CW; break; case '4' : md = FM; break; case '5' : md = AM; break; case '6' : md = FSK; break; case '7' : md = CWR; break; case '9' : md = FSKR; break; case 'A' : md = PSK; break; case 'B' : md = PSKR; break; case 'C' : md = LSBD1; break; case 'D' : md = USBD1; break; case 'E' : md = FMD1; break; case 'F' : md = AMD1; break; case 'G' : md = LSBD2; break; case 'H' : md = USBD2; break; case 'I' : md = FMD2; break; case 'J' : md = AMD2; break; case 'K' : md = LSBD3; break; case 'L' : md = USBD3; break; case 'M' : md = FMD3; break; case 'N' : md = AMD3; break; default : md = B.imode; } gett("get_modeb()"); if (md != B.imode) { std::stringstream ss; ss << "get_modeB(" << md << ") " << TS990modes_[md]; gett(ss.str().c_str()); B.imode = md; set_widths(md); } data_mode = (B.imode >= LSBD1); return B.imode; } //============================================================================== // Microphone gain //============================================================================== void RIG_TS990::set_mic_gain(int val) { sett("set_mic_gain(int val)"); cmd = "MG000;"; val *= 255; val /= 100; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); } //============================================================================== // Mic gain setting //============================================================================== // response MGggg; int RIG_TS990::get_mic_gain() { gett("get_mic_gain()"); int val = 0; cmd = "MG;"; if (wait_char(';', 6, TS990_WAIT, "get mic ctrl", ASC) >= 6) { size_t p = replystr.rfind("MG"); if (p == std::string::npos) return val; replystr[p + 5] = 0; val = fm_decimal(replystr.substr(p+2), 3); val *= 100; val /= 255; } return val; } void RIG_TS990::get_mic_min_max_step(int &min, int &max, int &step) { gett("get_mic_max_step(int &min, int &max, int &step)"); min = 0; max = 100; step = 1; } //============================================================================== // Read/Write SSB and Data Mode Filter Settings //============================================================================== void RIG_TS990::read_menu_0607() { gett("read_menu_0607()"); save_menu_0607 = true;//false; cmd = "EX00607;"; sendCommand(cmd); if (wait_char(';', 12, TS990_WAIT, "Read menu 0607", ASC) >= 12) { size_t p = replystr.rfind("EX00607"); if (p != std::string::npos) save_menu_0607 = (replystr[p+10] == '1'); } } void RIG_TS990::read_menu_0608() { gett("read_menu_0608()"); save_menu_0608 = true;//false; cmd = "EX00608;"; sendCommand(cmd); if (wait_char(';', 12, TS990_WAIT, "Read menu 0608", ASC) >= 12) { size_t p = replystr.rfind("EX00608"); if (p != std::string::npos) save_menu_0608 = (replystr[p+10] == '1'); } } void RIG_TS990::set_menu_0607(int val) { sett("set_menu_0607()"); menu_0607 = val; cmd = "EX00607 00"; cmd += menu_0607 ? "1" : "0"; cmd += ";"; sendCommand(cmd); } void RIG_TS990::set_menu_0608(int val) { sett("set_menu_0608()"); menu_0608 = val; cmd = "EX00608 00"; cmd += menu_0608 ? "1" : "0"; cmd += ";"; sendCommand(cmd); } //============================================================================== // Bandpass filter commands //============================================================================== int RIG_TS990::set_widths(int val) { sett("set_widths(int val)"); int bw = 0; if (inuse == onB) bw = B.iBW; else bw = A.iBW; read_menu_0607(); read_menu_0608(); switch (val) { case LSB: case USB: if (menu_0607) { bandwidths_ = TS990_filt_width; bw_vals_ = TS990_WIDTH_bw_vals; dsp_SL = TS990_filt_width; SL_tooltip = TS990_filt_width_tooltip; SL_label = TS990_filt_width_label; dsp_SH = TS990_filt_shift; SH_tooltip = TS990_filt_shift_tooltip; SH_label = TS990_filt_shift_label; } else { bandwidths_ = TS990_filt_SH; bw_vals_ = TS990_HI_bw_vals; dsp_SL = TS990_filt_SL; SL_tooltip = TS990_filt_SL_tooltip; SL_label = TS990_filt_SL_label; dsp_SH = TS990_filt_SH; SH_tooltip = TS990_filt_SH_tooltip; SH_label = TS990_filt_SH_label; } break; case LSBD1: case LSBD2: case LSBD3: case USBD1: case USBD2: case USBD3: if (menu_0608) { bandwidths_ = TS990_filt_width; bw_vals_ = TS990_WIDTH_bw_vals; dsp_SL = TS990_filt_width; SL_tooltip = TS990_filt_width_tooltip; SL_label = TS990_filt_width_label; dsp_SH = TS990_filt_shift; SH_tooltip = TS990_filt_shift_tooltip; SH_label = TS990_filt_shift_label; } else { bandwidths_ = TS990_filt_SH; bw_vals_ = TS990_HI_bw_vals; dsp_SL = TS990_filt_SL; SL_tooltip = TS990_filt_SL_tooltip; SL_label = TS990_filt_SL_label; dsp_SH = TS990_filt_SH; SH_tooltip = TS990_filt_SH_tooltip; SH_label = TS990_filt_SH_label; } break; case CW: case CWR: bandwidths_ = TS990_CW_width; bw_vals_ = TS990_CW_bw_vals; dsp_SL = TS990_CW_width; SL_tooltip = TS990_CW_W_tooltip; SL_label = TS990_CW_W_btn_label; dsp_SH = TS990_CW_shift; SH_tooltip = TS990_CW_S_tooltip; SH_label = TS990_CW_S_btn_label; break; case FSK: case FSKR: bandwidths_ = TS990_FSK_filt; bw_vals_ = TS990_FSK_bw_vals; dsp_SL = TS990_empty; dsp_SH = TS990_empty; break; case PSK: case PSKR: bandwidths_ = TS990_PSK_filt; bw_vals_ = TS990_PSK_bw_vals; dsp_SL = TS990_empty; dsp_SH = TS990_empty; break; case AM: case AMD1: case AMD2: case AMD3: bandwidths_ = TS990_AM_SH; bw_vals_ = TS990_AM_HI_bw_vals; dsp_SL = TS990_AM_SL; dsp_SH = TS990_AM_SH; SL_tooltip = TS990_AM_SL_tooltip; SL_label = TS990_AM_btn_SL_label; SH_tooltip = TS990_AM_SH_tooltip; SH_label = TS990_AM_btn_SH_label; break; case FM: case FMD1: case FMD2: case FMD3: bandwidths_ = TS990_filt_SH; bw_vals_ = TS990_HI_bw_vals; dsp_SL = TS990_filt_SL; dsp_SH = TS990_filt_SH; SL_tooltip = TS990_filt_SL_tooltip; SL_label = TS990_filt_SL_label; SH_tooltip = TS990_filt_SH_tooltip; SH_label = TS990_filt_SH_label; break; } return bw; } std::vector& RIG_TS990::bwtable(int m) { std::stringstream ss; ss << "bwtable( " << m << " )"; gett(ss.str().c_str()); std::vector& filter = TS990_filt_SH; switch (m) { case LSB: case USB: if (menu_0607) filter = TS990_filt_width; else filter = TS990_filt_SH; break; case FM: case FMD1: case FMD2: case FMD3: filter = TS990_filt_SH; break; case LSBD1: case LSBD2: case LSBD3: case USBD1: case USBD2: case USBD3: if (menu_0608) filter = TS990_filt_width; else filter = TS990_filt_SH; break; case AM: case AMD1: case AMD2: case AMD3: filter = TS990_AM_SH; break; case CW: case CWR: filter = TS990_CW_width; break; case FSK: case FSKR: filter = TS990_FSK_filt; break; case PSK: case PSKR: filter = TS990_PSK_filt; break; } return filter; } std::vector& RIG_TS990::lotable(int m) { std::stringstream ss; ss << "lotable( " << m << " )"; gett(ss.str().c_str()); std::vector& filter = TS990_filt_SL; switch (m) { case LSB: case USB: if (menu_0607) filter = TS990_filt_width; else filter = TS990_filt_SL; break; case FM: case FMD1: case FMD2: case FMD3: filter = TS990_filt_SL; break; case LSBD1: case LSBD2: case LSBD3: case USBD1: case USBD2: case USBD3: if (menu_0608) filter = TS990_filt_width; else filter = TS990_filt_SL; break; case CW: case CWR: filter = TS990_CW_width; break; case FSK: case FSKR: filter = vNOBWS;//TS990_FSK_filt; break; case PSK: case PSKR: filter = vNOBWS;//TS990_PSK_filt; break; case AM: case AMD1: case AMD2: case AMD3: filter = TS990_AM_SL; break; } return filter; } std::vector& RIG_TS990::hitable(int m) { std::stringstream ss; ss << "hitable( " << m << " )"; sett(ss.str().c_str()); std::vector& filter = TS990_filt_SH; switch (m) { case LSB: case USB: if (menu_0607) filter = TS990_filt_shift; else filter = TS990_filt_SH; break; case LSBD1: case LSBD2: case LSBD3: case USBD1: case USBD2: case USBD3: if (menu_0608) filter = TS990_filt_shift; else filter = TS990_filt_SH; break; case CW: case CWR: filter = TS990_CW_shift; break; case FM: case FMD1: case FMD2: case FMD3: filter = TS990_filt_SH; break; case FSK: case FSKR: filter = vNOBWS; break; case PSK: case PSKR: filter = vNOBWS; break; case AM: case AMD1: case AMD2: case AMD3: filter = TS990_AM_SH; break; } return filter; } int RIG_TS990::adjust_bandwidth(int val) { std::stringstream ss; ss << "adust_bandwidth( " << val << " )"; sett(ss.str().c_str()); int retval = 0; switch (val) { case LSB: case USB: if (inuse == onB) retval = menu_0607 ? B_default_SH_WI : B_default_HI_LO; else retval = menu_0607 ? A_default_SH_WI : A_default_HI_LO; break; case LSBD1: case USBD1: if (inuse == onB) retval = menu_0608 ? B_default_SH_WI_D1 : B_default_HI_LO; else retval = menu_0608 ? A_default_SH_WI_D1 : A_default_HI_LO; break; case LSBD2: case USBD2: if (inuse == onB) retval = menu_0608 ? B_default_SH_WI_D2 : B_default_HI_LO; else retval = menu_0608 ? A_default_SH_WI_D2 : A_default_HI_LO; break; case LSBD3: case USBD3: if (inuse == onB) retval = menu_0608 ? B_default_SH_WI_D3 : B_default_HI_LO; else retval = menu_0608 ? A_default_SH_WI_D3 : A_default_HI_LO; break; case FM: retval = (inuse == onB ? B_default_FM : A_default_FM); break; case FMD1: retval = (inuse == onB ? B_default_FM_D1 : A_default_FM_D1); break; case FMD2: retval = (inuse == onB ? B_default_FM_D2 : A_default_FM_D2);; break; case FMD3: retval = (inuse == onB ? B_default_FM_D3 : A_default_FM_D3); break; case AM: retval = (inuse == onB ? B_default_AM : A_default_AM); break; case AMD1: retval = (inuse == onB ? B_default_AM_D1 : A_default_AM_D1); break; case AMD2: retval = (inuse == onB ? B_default_AM_D2 : A_default_AM_D2); break; case AMD3: retval = (inuse == onB ? B_default_AM_D3 : A_default_AM_D3); break; case CW: case CWR: retval = (inuse == onB ? B_default_CW : A_default_CW); break; case FSK: case FSKR: retval = (inuse == onB ? B_default_FSK : A_default_FSK); break; case PSK: case PSKR: retval = (inuse == onB ? B_default_PSK : A_default_PSK); break; } return retval; } int RIG_TS990::def_bandwidth(int val) { read_menu_0607(); read_menu_0608(); return adjust_bandwidth(val); } void RIG_TS990::set_bwA(int val) { size_t SL = 0, SH = 0; SL = val & 0x7F; if (SL < 0) SL = 0; SH = (val >> 8) & 0x7F; if (SH < 0) SH = 0; std::stringstream ss; ss << "set_bwA( " << SH << "/" << SL << " )"; sett(ss.str().c_str()); switch (A.imode) { case LSB: case USB: if (val < 256) break; if (menu_0607) { try { cmd = "SL0"; cmd += TS990_CAT_filt_width.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set width", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_shift.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set filter shift", cmd, ""); A.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else { try { cmd = "SL0"; cmd += TS990_CAT_filt_SL.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set filter lower cutoff", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_SH.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set filter upper cutoff", cmd, ""); A.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } break; case LSBD1: case LSBD2: case LSBD3: case USBD1: case USBD2: case USBD3: if (val < 256) break; if (menu_0608) { try { cmd = "SL0"; cmd += TS990_CAT_filt_width.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set data width", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_shift.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set data shift", cmd, ""); A.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else { try { cmd = "SL0"; cmd += TS990_CAT_filt_SL.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set data lower cutoff", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_SH.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set data upper cutoff", cmd, ""); A.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } break; case AM: case AMD1: case AMD2: case AMD3: if (val < 256) break; try { cmd = "SL0"; cmd += TS990_CAT_AM_SL.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set AM lower", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_AM_SH.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set AM upper", cmd, ""); A.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; case FM: case FMD1: case FMD2: case FMD3: if (val < 256) break; try { cmd = "SL0"; cmd += TS990_CAT_filt_SL.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set FM lower", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_SH.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set FM upper", cmd, ""); A.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; case CW: case CWR: if (val < 256) break; try { cmd = "SL0"; cmd += TS990_CAT_CW_width.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set cw width", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_CW_shift.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set cw shift", cmd, ""); A.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; case FSK: case FSKR: if (val > 256) break; try { cmd = "SL0"; cmd += TS990_CAT_FSK_filt.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set FSK bw", cmd, ""); A.iBW = SL; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; case PSK: case PSKR: if (val > 256) break; try { cmd = "SL0"; cmd += TS990_CAT_PSK_filt.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set PSK bw", cmd, ""); A.iBW = SL; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; } } void RIG_TS990::set_bwB(int val) { size_t SL = 0, SH = 0; SL = val & 0x7F; if (SL < 0) SL = 0; SH = (val >> 8) & 0x7F; if (SH < 0) SH = 0; std::stringstream ss; ss << "set_bwB( " << SH << "/" << SL << " )"; sett(ss.str().c_str()); switch (B.imode) { case LSB: case USB: if (val < 256) break; if (menu_0607) { try { cmd = "SL0"; cmd += TS990_CAT_filt_width.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set width", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_shift.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set filter shift", cmd, ""); B.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else { try { cmd = "SL0"; cmd += TS990_CAT_filt_SL.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set filter lower cutoff", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_SH.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set filter upper cutoff", cmd, ""); B.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } break; case LSBD1: case LSBD2: case LSBD3: case USBD1: case USBD2: case USBD3: if (val < 256) break; if (menu_0608) { try { cmd = "SL0"; cmd += TS990_CAT_filt_width.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set data width", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_shift.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set data shift", cmd, ""); B.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else { try{ cmd = "SL0"; cmd += TS990_CAT_filt_SL.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set data lower cutoff", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_SH.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set data upper cutoff", cmd, ""); B.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } break; case AM: case AMD1: case AMD2: case AMD3: if (val < 256) break; try { cmd = "SL0"; cmd += TS990_CAT_AM_SL.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set AM lower", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_AM_SH.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set AM upper", cmd, ""); B.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; case FM: case FMD1: case FMD2: case FMD3: if (val < 256) break; try { cmd = "SL0"; cmd += TS990_CAT_filt_SL.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set FM lower", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_filt_SH.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set FM upper", cmd, ""); B.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; case CW: case CWR: if (val < 256) break; try { cmd = "SL0"; cmd += TS990_CAT_CW_width.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set cw width", cmd, ""); cmd = "SH0"; cmd += TS990_CAT_CW_shift.at(SH); sendCommand(cmd); showresp(INFO, ASC, "set cw shift", cmd, ""); B.iBW = ((SH << 8) & SL) & 0x8000; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; case FSK: case FSKR: if (val > 256) break; try { cmd = "SL0"; cmd += TS990_CAT_FSK_filt.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set FSK bw", cmd, ""); B.iBW = SL; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; case PSK: case PSKR: if (val > 256) break; try { cmd = "SL0"; cmd += TS990_CAT_PSK_filt.at(SL); sendCommand(cmd); showresp(INFO, ASC, "set PSK bw", cmd, ""); B.iBW = SL; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } break; } } //============================================================================== // Bandwidth / Shift; Lower / Upper DSP settings //============================================================================== // response SLbbb; SHbbb; int RIG_TS990::get_bwA() { size_t p; int SL = 0, SH = 0; read_menu_0607(); read_menu_0608(); switch (A.imode) { case CW: case CWR: A.iBW = A_default_CW; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get CW width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get CW shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_CW = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } break; case FSK: case FSKR: A.iBW = A_default_FSK; SL = A.iBW & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FSK Width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); A_default_FSK = A.iBW = (SL & 0x7F); } break; case PSK: case PSKR: A.iBW = A_default_PSK; SL = A.iBW & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get PSK Width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); A_default_PSK = A.iBW = (SL & 0x7F); } break; case LSB: case USB: SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; if (menu_0607) { A.iBW = A_default_SH_WI; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_SH_WI = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } else { A.iBW = A_default_HI_LO; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get filter lower cutoff", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter upper cutoff", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_HI_LO = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } break; case LSBD1: case USBD1: SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; if (menu_0608) { A.iBW = A_default_SH_WI_D1; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_SH_WI_D1 = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } else { A.iBW = A_default_HI_LO; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get filter lower cutoff", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter upper cutoff", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_HI_LO = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } break; case LSBD2: case USBD2: SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; if (menu_0608) { A.iBW = A_default_SH_WI_D2; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_SH_WI_D2 = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } else { A.iBW = A_default_HI_LO; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get filter lower cutoff", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter upper cutoff", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_HI_LO = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } break; case LSBD3: case USBD3: SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; if (menu_0608) { A.iBW = A_default_SH_WI_D3; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(3), 3); A_default_SH_WI_D3 = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } else { A.iBW = A_default_HI_LO; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get filter lower cutoff", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter upper cutoff", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_HI_LO = A.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } break; case AM: A.iBW = A_default_AM; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get AM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get AM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_AM = A.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case AMD1: A.iBW = A_default_AM_D1; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get AM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get AM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_AM_D1 = A.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case AMD2: A.iBW = A_default_AM_D2; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get AM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get AM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_AM_D2 = A.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case AMD3: A.iBW = A_default_AM_D3; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get AM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get AM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_AM_D3 = A.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case FM: A.iBW = A_default_FM; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get FM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_FM = A.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case FMD1: A.iBW = A_default_FM_D1; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get FM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_FM_D1 = A.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case FMD2 : A.iBW = A_default_FM_D2; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get FM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_FM_D2 = A.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case FMD3: A.iBW = A_default_FM_D3; SL = A.iBW & 0x7F; SH = (A.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get FM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); A_default_FM_D3 = A.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } } std::stringstream ss; ss << "mode: " << TS990modes_[A.imode] << ", get_bwA( " << SH << "/" << SL << " )"; sett(ss.str().c_str()); return A.iBW; } //============================================================================== // Bandwidth / Shift; Lower / Upper DSP settings //============================================================================== // responses SHbbb; SLbbb; int RIG_TS990::get_bwB() { size_t p; int SL = 0, SH = 0; read_menu_0607(); read_menu_0608(); switch (B.imode) { case CW: case CWR: B.iBW = B_default_CW; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get CW width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get CW shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_CW = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } break; case FSK: case FSKR: B.iBW = B_default_FSK; SL = B.iBW & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FSK Width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); B_default_FSK = B.iBW = (SL & 0x7F); } break; case PSK: case PSKR: B.iBW = B_default_PSK; SL = B.iBW & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get PSK Width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); B_default_PSK = B.iBW = (SL & 0x7F); } break; case LSB: case USB: SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; if (menu_0607) { B.iBW = B_default_SH_WI; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_SH_WI = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } else { B.iBW = B_default_HI_LO; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get filter lower cutoff", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter upper cutoff", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_HI_LO = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } break; case LSBD1: case USBD1: SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; if (menu_0608) { B.iBW = B_default_SH_WI_D1; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_SH_WI_D1 = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } else { B.iBW = B_default_HI_LO; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get filter lower cutoff", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter upper cutoff", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_HI_LO = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } break; case LSBD2: case USBD2: SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; if (menu_0608) { B.iBW = B_default_SH_WI_D2; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_SH_WI_D2 = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } else { B.iBW = B_default_HI_LO; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get filter lower cutoff", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter upper cutoff", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_HI_LO = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } break; case LSBD3: case USBD3: SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; if (menu_0608) { B.iBW = B_default_SH_WI_D3; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get width", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter shift", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_SH_WI_D3 = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } else { B.iBW = B_default_HI_LO; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get filter lower cutoff", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get filter upper cutoff", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_HI_LO = B.iBW = ((SH << 8) | (SL & 0x7F )) | 0x8000; } } } break; case AM: B.iBW = B_default_AM; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get AM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get AM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_AM = B.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case AMD1: B.iBW = B_default_AM_D1; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get AM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get AM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_AM_D1 = B.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case AMD2: B.iBW = B_default_AM_D2; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get AM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get AM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_AM_D2 = B.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case AMD3: B.iBW = B_default_AM_D3; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get AM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get AM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_AM_D3 = B.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case FM: B.iBW = B_default_FM; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get FM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_FM = B.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case FMD1: B.iBW = B_default_FM_D1; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get FM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_FM_D1 = B.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case FMD2 : B.iBW = B_default_FM_D2; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get FM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_FM_D2 = B.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } break; case FMD3: B.iBW = B_default_FM_D3; SL = B.iBW & 0x7F; SH = (B.iBW >> 8) & 0x7F; cmd = "SL0;"; if (wait_char(';', 6, TS990_WAIT, "get FM lo", ASC) == 6) { p = replystr.rfind("SL"); if (p == std::string::npos) break; SL = fm_decimal(replystr.substr(2), 3); cmd = "SH0;"; if (wait_char(';', 6, TS990_WAIT, "get FM hi", ASC) == 6) { p = replystr.rfind("SH"); if (p == std::string::npos) break; SH = fm_decimal(replystr.substr(2), 3); B_default_FM_D3 = B.iBW = ((SH << 8) | (SL & 0x7F)) | 0x8000; } } } std::stringstream ss; ss << "mode: " << TS990modes_[B.imode] << ", get_bwB( " << SH << "/" << SL << " )"; sett(ss.str().c_str()); return B.iBW; } int RIG_TS990::get_modetype(int n) { return TS990_mode_type[n]; } void RIG_TS990::set_noise(bool val) //Now Setting AGC { if (inuse == onB) { if (nb_level == 2) { nb_level = 3; nb_label("AGC F", false); cmd = "GC13;"; sendCommand(cmd); } else if (nb_level == 3) { nb_level = 1; nb_label("AGC S", false); cmd = "GC11;"; sendCommand(cmd); } else if (nb_level == 1) { nb_level = 2; nb_label("AGC M", false); cmd = "GC12;"; sendCommand(cmd); } } else { if (nb_level == 2) { nb_level = 3; nb_label("AGC F", false); cmd = "GC03;"; sendCommand(cmd); } else if (nb_level == 3) { nb_level = 1; nb_label("AGC S", false); cmd = "GC01;"; sendCommand(cmd); } else if (nb_level == 1) { nb_level = 2; nb_label("AGC M", false); cmd = "GC02;"; sendCommand(cmd); } } sett("set noise val"); } //---------------------------------------------------------------------- int RIG_TS990::get_agc() { int val = 0; if (inuse == onB) { cmd = "GC1;"; if (wait_char(';', 5, 100, "get AGC", ASC) < 5) return val; gett("get agc"); size_t p = replystr.rfind("GC"); if (p == std::string::npos) return val; if (replystr[p + 3] == '1' ) { nb_label("AGC S", false); } else if (replystr[p + 3] == '2' ) { nb_label("AGC M", false); } else if (replystr[p + 3] == '3' ) { nb_label("AGC F", false); } } else { cmd = "GC0;"; if (wait_char(';', 5, 100, "get AGC", ASC) < 5) return val; gett("get agc"); size_t p = replystr.rfind("GC"); if (p == std::string::npos) return val; if (replystr[p + 3] == '1' ) { nb_label("AGC S", false); } else if (replystr[p + 3] == '2' ) { nb_label("AGC M", false); } else if (replystr[p + 3] == '3' ) { nb_label("AGC F", false); } } return val; } //============================================================================== void RIG_TS990::set_squelch(int val) { val *= 255; val /= 100; if (inuse == onB) { cmd = "SQ1"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set squelch", cmd, ""); sett("set squelch"); } else { cmd = "SQ0"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set squelch", cmd, ""); sett("set squelch"); } } //response SQbmmm; int RIG_TS990::get_squelch() { int val = 0; if (inuse == onB) { cmd = "SQ1;"; if (wait_char(';', 7, TS990_WAIT, "get squelch", ASC) >= 7) { gett("get squelch"); size_t p = replystr.rfind("SQ1"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = fm_decimal(replystr.substr(p+3), 3); } } else { cmd = "SQ0;"; if (wait_char(';', 7, TS990_WAIT, "get squelch", ASC) >= 7) { gett("get squelch"); size_t p = replystr.rfind("SQ0"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = fm_decimal(replystr.substr(p+3), 3); } } val *= 100; val /= 255; return val; } void RIG_TS990::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TS990::set_rf_gain(int val) { val *= 255; val /= 100; if (inuse == onB) { cmd = "RG1"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set rf gain", cmd, ""); sett("set rf gain"); } else { cmd = "RG0"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set rf gain", cmd, ""); sett("set rf gain"); } } //============================================================================== // RF gain setting //============================================================================== // response RGbmmm; int RIG_TS990::get_rf_gain() { int val = progStatus.rfgain; if (inuse == onB) { cmd = "RG1;"; if (wait_char(';', 7, TS990_WAIT, "get rf gain", ASC) < 7) return val; gett("get rf gain"); size_t p = replystr.rfind("RG"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 3); val *= 100; val /= 255; } } else { cmd = "RG0;"; if (wait_char(';', 7, TS990_WAIT, "get rf gain", ASC) < 7) return val; gett("get rf gain"); size_t p = replystr.rfind("RG"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 3); val *= 100; val /= 255; } } return val; } void RIG_TS990::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } static bool nr_on = false; void RIG_TS990::set_noise_reduction(int val) { if (inuse == onB) { cmd.assign("NR1").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(INFO, ASC, "SET noise reduction", cmd, ""); sett("set noise red'"); if (val) nr_on = true; else nr_on = false; } else { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(INFO, ASC, "SET noise reduction", cmd, ""); sett("set noise red'"); if (val) nr_on = true; else nr_on = false; } } int RIG_TS990::get_noise_reduction() { int val = 0; if (inuse == onB) { cmd = rsp = "NR1"; cmd.append(";"); if (wait_char(';', 5, TS990_WAIT, "GET noise reduction", ASC) < 5) return val; gett("get noise red'"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = replystr[p+3] - '0'; if (val == 1) nr_on = true; else nr_on = false; return val; } else { cmd = rsp = "NR0"; cmd.append(";"); if (wait_char(';', 5, TS990_WAIT, "GET noise reduction", ASC) < 5) return val; gett("get noise red'"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = replystr[p+3] - '0'; if (val == 1) nr_on = true; else nr_on = false; } return val; } void RIG_TS990::set_noise_reduction_val(int val) { sett("set_noise_reduction_val(int val)"); if (inuse == onB) { cmd.assign("RL11").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "SET_noise_reduction_val", cmd, ""); sett("set noixe red' val"); } else { cmd.assign("RL10").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "SET_noise_reduction_val", cmd, ""); sett("set noixe red' val"); } } //============================================================================== // Noise reduction setting //============================================================================== // response RL1bmm; RL2bmm; int RIG_TS990::get_noise_reduction_val() { int val = 0; if (inuse == onB) { if (!nr_on) return val; cmd = rsp = "RL11"; cmd.append(";"); if (wait_char(';', 7, TS990_WAIT, "GET noise reduction val", ASC) < 7) return val; gett("get noise red' val"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = fm_decimal(replystr.substr(p+4), 2); } else { if (!nr_on) return val; cmd = rsp = "RL10"; cmd.append(";"); if (wait_char(';', 7, TS990_WAIT, "GET noise reduction val", ASC) < 7) return val; gett("get noise red' val"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = fm_decimal(replystr.substr(p+4), 2); } return val; } void RIG_TS990::set_auto_notch(int v) { if (inuse == onB) { cmd.assign("NT1").append(v ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(INFO, ASC, "SET Auto Notch", cmd, ""); sett("set auto notch"); } else { cmd.assign("NT0").append(v ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(INFO, ASC, "SET Auto Notch", cmd, ""); sett("set auto notch"); } } int RIG_TS990::get_auto_notch() { int val = 0; if (inuse == onB) { cmd = "NT1;"; if (wait_char(';', 5, TS990_WAIT, "get auto notch", ASC) < 5) return val; gett("get auto notch"); size_t p = replystr.rfind("NT"); if (p == std::string::npos) return val; if (replystr[p+3] == '1') val = 1; } else { cmd = "NT0;"; if (wait_char(';', 5, TS990_WAIT, "get auto notch", ASC) < 5) return val; gett("get auto notch"); size_t p = replystr.rfind("NT"); if (p == std::string::npos) return val; if (replystr[p+3] == '1') val = 1; } return val; } void RIG_TS990::set_notch(bool on, int val) { if (inuse == onB) { if (on) { cmd.assign("NT12;"); sendCommand(cmd); showresp(INFO, ASC, "Set notch ON", cmd, ""); sett("set notch on"); int bp = (int)(val * 127.0 / 3000); if (bp == 0) bp = 1; cmd.assign("BP1").append(to_decimal(bp, 3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set notch freq", cmd, ""); sett("set notch freq"); } else { cmd.assign("NT10;"); sendCommand(cmd); showresp(INFO, ASC, "Set notch OFF", cmd, ""); sett("set notch off"); } } else { if (on) { cmd.assign("NT02;"); sendCommand(cmd); showresp(INFO, ASC, "Set notch ON", cmd, ""); sett("set notch on"); int bp = (int)(val * 127.0 / 3000); if (bp == 0) bp = 1; cmd.assign("BP0").append(to_decimal(bp, 3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set notch freq", cmd, ""); sett("set notch freq"); } else { cmd.assign("NT00;"); sendCommand(cmd); showresp(INFO, ASC, "Set notch OFF", cmd, ""); sett("set notch off"); } } } //============================================================================== // Notch setting //============================================================================== // response NTbn; NTbn; BPbnnn; bool RIG_TS990::get_notch(int &val) { if (inuse == onB) { cmd = "NT1;"; if (wait_char(';', 5, TS990_WAIT, "get notch state", ASC) < 5) return 0; gett("get notch state"); size_t p = replystr.rfind("NT"); if (p == std::string::npos) return 0; if (replystr[p+3] == '2') { cmd.assign("BP1;"); if (wait_char(';', 7, TS990_WAIT, "get notch freq", ASC) < 7) return 0; gett("get notch freq"); size_t p = replystr.rfind("BP1"); if (p != std::string::npos) val = (int)(fm_decimal(replystr.substr(p+3), 3) * 3000 / 127.0); return 1; } return 0; } else { cmd = "NT0;"; if (wait_char(';', 5, TS990_WAIT, "get notch state", ASC) < 5) return 0; gett("get notch state"); size_t p = replystr.rfind("NT"); if (p == std::string::npos) return 0; if (replystr[p+3] == '2') { cmd.assign("BP0;"); if (wait_char(';', 7, TS990_WAIT, "get notch freq", ASC) < 7) return 0; gett("get notch freq"); size_t p = replystr.rfind("BP0"); if (p != std::string::npos) val = (int)(fm_decimal(replystr.substr(p+3), 3) * 3000.0 / 127.0); return 1; } return 0; } return 0; } void RIG_TS990::get_notch_min_max_step(int &min, int &max, int &step) { min = 20; max = 3000; step = 10; } //============================================================================== // IF shift controls are used for TX monitoring // MON button turns TX monitor on/off // Slider controls TX monitor level void RIG_TS990::set_if_shift(int val) { progStatus.shift_val = val; val *= 255; val /= 100; cmd = "ML"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set Mon Level", cmd, ""); sett("set monitor level"); } //response MLsss; bool RIG_TS990::get_if_shift(int &val) { cmd = "ML;"; if (wait_char(';', 6, TS990_WAIT, "get Mon Level", ASC) == 6) { size_t p = replystr.rfind("ML"); if (p != std::string::npos) { val = fm_decimal(&replystr[p+2], 3); val *= 100; val /= 100; } } gett("get_if_shift"); bool on = false; cmd = "MO0;"; if (wait_char(';', 5, TS990_WAIT, "get Tx Mon on/off", ASC) == 5) { size_t p = replystr.rfind("MO"); if (p != std::string::npos) on = (replystr[p+3] == '1'); } gett("get TX monitor on/off"); return on; } void RIG_TS990::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = 0; if_shift_max = max = 100; if_shift_step = step = 1; if_shift_mid = 10; } void RIG_TS990::set_monitor( bool b) { if (b) { cmd = "MO01;"; sendCommand(cmd); showresp(INFO, ASC, "set Tx Monitor ON", cmd, ""); } else { cmd = "MO00;"; sendCommand(cmd); showresp(INFO, ASC, "set Tx Monitor OFF", cmd, ""); } sett("set_monitor"); } // --------------------------------------------------------------------- // set date and time // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- static std::string datestr; static std::string timestr; void RIG_TS990::sync_date(char *dt) { datestr.clear(); datestr += dt[2]; datestr += dt[3]; datestr += dt[4]; datestr += dt[5]; datestr += dt[6]; datestr += dt[7]; cmd.assign("CK0"); cmd.append(datestr).append(timestr).append(";"); sendCommand(cmd); showresp(WARN, ASC, "sync_date", cmd, replystr); sett("sync_date"); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_TS990::sync_clock(char *tm) { timestr.clear(); timestr += tm[0]; timestr += tm[1]; timestr += tm[3]; timestr += tm[4]; sett("sync_clock"); } void RIG_TS990::set_xcvr_auto_on() { // send dummy data cmd = "UP;DN;UP;DN;UP;DN;"; sendCommand(cmd); for (int i = 0; i < 22; i ++) { MilliSleep(50); Fl::awake(); } cmd = "PS1;"; sendCommand(cmd); sett("set xcvr ON"); } void RIG_TS990::set_xcvr_auto_off() { cmd = "PS0;"; sendCommand(cmd); sett("set xcvr OFF"); } flrig-2.0.04/src/rigs/kenwood/TS950.cxx0000664000175000017500000003045414502041135014335 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS950.h" #include "support.h" #include "trace.h" struct pwrpair {int mtr; float pwr;}; static const char TS950name_[] = "TS-950"; enum {LSB950, USB950, CW950, FM950, AM950, FSK950}; static std::vectorTS950modes_; static const char *vTS950modes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK"}; static const char TS950_mode_chr[] = { '1', '2', '3', '4', '5', '6' }; static const char TS950_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L' }; enum {NONE_950, FM_W_950, FM_N_950, AM_950, SSB_950, SSB_N_950, CW_950, CW_N_950}; static std::vectorTS950_widths; static const char *vTS950_widths[] = { "NONE", "FM-W", "FM-N", "AM", "SSB", "SSB-N", "CW", "CW-N"}; static int TS950_bw_vals[] = { 1,2,3,4,5,6,7,8, WVALS_LIMIT}; static std::vectorTS950_filters; static const char *vTS950_filters[] = { "000", "002", "003", "005", "007", "008", "009", "010"}; static GUI rig_widgets[]= { { (Fl_Widget *)btnDataPort, 214, 105, 50 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; enum {NO_METER, SWR_METER, ALC_METER}; static int selected_meter = NO_METER; void RIG_TS950::initialize() { VECTOR (TS950modes_, vTS950modes_); VECTOR (TS950_widths, vTS950_widths); VECTOR (TS950_filters, vTS950_filters); modes_ = TS950modes_; _mode_type = TS950_mode_type; bandwidths_ = TS950_widths; bw_vals_ = TS950_bw_vals; rig_widgets[0].W = btnDataPort; cmd = "AI0;"; // auto information OFF sendCommand(cmd); sett("AI off"); MilliSleep(100); cmd = "RM1;"; // select measurement '1' SWR sendCommand(cmd); sett("SWR/PWR meter"); set_data_port(); } RIG_TS950::RIG_TS950() { // base class values name_ = TS950name_; modes_ = TS950modes_; _mode_type = TS950_mode_type; bandwidths_ = TS950_widths; bw_vals_ = TS950_bw_vals; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = rig_widgets; modeB = modeA = def_mode = 1; bwB = bwA = def_bw = 1; freqB = freqA = def_freq = 14070000ULL; can_change_alt_vfo = true; has_noise_control = has_micgain_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_notch_control = has_ifshift_control = has_swr_control = false; has_power_out = has_data_port = has_smeter = has_swr_control = has_alc_control = has_mode_control = has_bandwidth_control = has_ptt_control = true; precision = 10; ndigits = 7; } bool RIG_TS950::check () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "check", ASC); if (ret < 14) return false; return true; } void RIG_TS950::set_data_port() { if (progStatus.data_port) { cmd = "DT1;"; sett("Data Port ON"); } else { cmd = "DT0;"; sett("Data Port OFF"); } sendCommand(cmd); } unsigned long long RIG_TS950::get_vfoA () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "get vfo A", ASC); if (ret < 14) return freqA; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; gett("vfo A"); return freqA; } void RIG_TS950::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); sett("vfo A"); } unsigned long long RIG_TS950::get_vfoB () { cmd = "FB;"; int ret = wait_char(';', 14, 100, "get vfo B", ASC); if (ret < 14) return freqB; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; gett("vfo B"); return freqB; } void RIG_TS950::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); sett("vfo B"); } // SM cmd 0 ... 100 (rig values 0 ... 30) int RIG_TS950::get_smeter() { cmd = "SM;"; int ret = wait_char(';', 7, 100, "get smeter", ASC); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 2; n < 6; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 100) / 30; gett("Smeter"); return mtr; } // RM cmd 0 ... 100 (rig values 0 ... 30) int RIG_TS950::get_swr() { int ret = 0; if (selected_meter != SWR_METER) { cmd = "RM1;"; // select measurement '1' swr sendCommand(cmd); selected_meter = SWR_METER; MilliSleep(200); cmd = "RM;"; ret = wait_char(';', 8, 500, "get alc", ASC); } else { cmd = "RM;"; ret = wait_char(';', 8, 100, "get alc", ASC); } if (ret < 8) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 3; n < 7; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 50) / 30; gett("SWR"); return mtr; } static pwrpair pwrtbl[] = { {0, 0.0}, {3, 5.0}, {6, 10.0}, {7, 15.0}, {16, 100.0}, {30, 250.0} }; // SMpppp; int RIG_TS950::get_power_out(void) { cmd = "SM;"; int ret = wait_char(';', 7, 100, "get smeter", ASC); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; int mtr = 0; sscanf(&replystr[2], "%d", &mtr); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 30) mtr = 30; int pwr = (int)ceil( pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr) * (mtr - pwrtbl[i].mtr) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr) ); if (pwr > 250) pwr = 250; gett("Power out"); return pwr; } int RIG_TS950::get_alc() { int ret = 0; if (selected_meter != ALC_METER) { cmd = "RM3;"; // select measurement '3' ALC sendCommand(cmd); selected_meter = ALC_METER; MilliSleep(200); cmd = "RM;"; ret = wait_char(';', 8, 500, "get alc", ASC); } else { cmd = "RM;"; ret = wait_char(';', 8, 100, "get alc", ASC); } if (ret < 8) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; int mtr = 0; for (size_t n = 3; n < 7; n++) mtr = mtr*10 + replystr[p + n] - '0'; mtr = (mtr * 50) / 30; gett("ALC"); return mtr; } void RIG_TS950::set_modeA(int val) { modeA = val; cmd = "MD"; cmd += TS950_mode_chr[val]; cmd += ';'; sendCommand(cmd); sett("mode A"); } int RIG_TS950::get_modeA() { int ret = check_ifstr(); // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get modeA", ASC); if (ret < 38) return modeA; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeA; modeA = replystr[p+29] - '1'; // 0 - 8 if (modeA == 8) modeA = 7; gett("mode A"); return modeA; } void RIG_TS950::set_modeB(int val) { modeB = val; cmd = "MD"; cmd += TS950_mode_chr[val]; cmd += ';'; sendCommand(cmd); sett("mode B"); } int RIG_TS950::get_modeB() { int ret = check_ifstr(); // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get mode B", ASC); if (ret < 38) return modeB; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeB; modeB = replystr[p+29] - '1'; // 0 - 8 if (modeB == 8) modeB = 7; gett("mode B"); return modeB; } int RIG_TS950::get_modetype(int n) { return _mode_type[n]; } static std::string bw_str = "FL001001;"; void RIG_TS950::set_bwA(int val) { get_bwA(); bwA = val; cmd = bw_str.substr(0, 5); cmd.append(TS950_filters[val]).append(";"); sendCommand(cmd); sett("BW A"); } int RIG_TS950::get_bwA() { cmd = "FL;"; int ret = wait_char(';', 9, 100, "get bwA", ASC); if (ret < 9) return bwA; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwA; replystr[p + 8] = 0; size_t bw = 0; for (bw = 0; bw < TS950_filters.size(); bw++) if (TS950_filters[bw] == replystr.substr(p+5)) { bwA = bw; break; } gett("BW A"); return bwA; } void RIG_TS950::set_bwB(int val) { get_bwB(); bwB = val; cmd = bw_str.substr(0, 5); cmd.append(TS950_filters[val]).append(";"); sendCommand(cmd); sett("BW B"); } int RIG_TS950::get_bwB() { cmd = "FL;"; int ret = wait_char(';', 9, 100, "get bwB", ASC); if (ret < 9) return bwB; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwB; replystr[p + 8] = 0; size_t bw = 0; for (bw = 0; bw < TS950_filters.size(); bw++) if (TS950_filters[bw] == replystr.substr(p+5)) { bwB = bw; break; } gett("BW B"); return bwB; } //LSB950, USB950, CW950, FM950, AM950, FSK950 // "LSB", "USB", "CW", "FM", "AM", "FSK" // '1', '2', '3', '4', '5', '6' // 0 1 2 3 4 5 //NONE_950, FM_W_950, FM_N_950, AM_950, SSB_950, SSB_N_950, CW_950, CW_N_950 int RIG_TS950::def_bandwidth(int val) { if (val == LSB950 || val == USB950) return SSB_950; else if (val == CW950) return CW_950; else if (val == FM950) return FM_W_950; else if (val == AM950) return AM_950; else if (val == FSK950) return SSB_N_950; return NONE_950; } void RIG_TS950::selectA() { cmd = "FR0;"; sendCommand(cmd); sett("Rx on A"); MilliSleep(100); cmd = "FT0;"; sendCommand(cmd); sett("Tx on A"); MilliSleep(100); inuse = onA; } void RIG_TS950::selectB() { cmd = "FR1;"; sendCommand(cmd); sett("Rx on B"); MilliSleep(100); cmd = "FT1;"; sendCommand(cmd); sett("Tx on B"); MilliSleep(100); inuse = onB; } bool RIG_TS950::can_split() { return true; } void RIG_TS950::set_split(bool val) { if (inuse == onB) { if (val) { cmd = "FR1;"; sendCommand(cmd); sett("Rx on B"); MilliSleep(100); cmd = "FT0;"; sendCommand(cmd); sett("Tx on A"); MilliSleep(100); } else { cmd = "FR1;"; sendCommand(cmd); sett("Rx on B"); MilliSleep(100); cmd = "FT1;"; sendCommand(cmd); sett("Tx on B"); MilliSleep(100); } } else { if (val) { cmd = "FR0;"; sendCommand(cmd); sett("Rx on A"); MilliSleep(100); cmd = "FT1;"; sendCommand(cmd); sett("Tx on B"); MilliSleep(100); } else { cmd = "FR0;"; sendCommand(cmd); sett("Rx on A"); MilliSleep(100); cmd = "FT0;"; sendCommand(cmd); sett("Tx on A"); MilliSleep(100); } } } int RIG_TS950::get_split() { int ret = check_ifstr(); // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get split", ASC); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split; split = replystr[p+32] ? true : false; return split; } // Tranceiver PTT on/off void RIG_TS950::set_PTT_control(int val) { if (val) { cmd = "TX;"; sett("ptt ON"); } else { cmd = "RX;"; sett("ptt OFF"); } sendCommand(cmd); } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters ======================================================================== */ int RIG_TS950::get_PTT() { int ret = check_ifstr(); // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get VFO", ASC); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); gett("PTT"); return ptt_; } flrig-2.0.04/src/rigs/kenwood/KENWOOD.cxx0000664000175000017500000002475114502041135014662 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/KENWOOD.h" #include "support.h" #include "tod_clock.h" static int ret = 0; void KENWOOD::selectA() { cmd = "FR0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A", cmd, ""); if (!split) { cmd = "FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on A", cmd, ""); } else { cmd = "FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on B", cmd, ""); } inuse = onA; } void KENWOOD::selectB() { cmd = "FR1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B", cmd, ""); if (!split) { cmd = "FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on B", cmd, ""); } else { cmd = "FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on A", cmd, ""); } inuse = onB; } void KENWOOD::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters ======================================================================== */ bool KENWOOD::check() { cmd = "FA;"; get_trace(1, "check()"); ret = wait_char(';', 14, 100, "check", ASC); gett(""); if (ret < 14) return false; return true; } unsigned long long KENWOOD::get_vfoA () { cmd = "FA;"; get_trace(1, "get_vfoA"); ret = wait_char(';', 14, 100, "get vfo A", ASC); gett(""); if (ret == 14) { size_t p = replystr.rfind("FA"); if (p != std::string::npos) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } } return A.freq; } void KENWOOD::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); sett("vfoA"); } unsigned long long KENWOOD::get_vfoB () { cmd = "FB;"; get_trace(1, "get_vfoB"); ret = wait_char(';', 14, 100, "get vfo B", ASC); gett(""); if (ret == 14) { size_t p = replystr.rfind("FB"); if (p != std::string::npos) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; B.freq = f; } } return B.freq; } void KENWOOD::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); sett("vfoB"); } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters ======================================================================== */ size_t KENWOOD::check_ifstr() { cmd = "IF;"; get_trace(1, "check IF response"); wait_char(';', 38, 100, "check IF response", ASC); gett(""); return replystr.length(); } int KENWOOD::get_split() { ret = check_ifstr(); if (ret < 38) return 0; return (replystr[32] == '1'); } int KENWOOD::get_PTT() { ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } // Tranceiver PTT on/off void KENWOOD::set_PTT_control(int val) { if (val) { cmd = "TX;"; ptt_ = 1; } else { cmd = "RX;"; ptt_ = 0; } sendCommand(cmd); showresp(WARN, ASC, "set PTT", cmd, ""); sett("PTT"); } void KENWOOD::tune_rig(int val) { // cmd = "AC111;"; // | |||______ start tuner = 1 // | ||_______ set TX hold = 1 // | |________ set RX hold = 1 // |__________ tune transceiver command prefix if (tuning()) return; switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC110;"; break; case 2: default: cmd = "AC111;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune_rig", cmd, ""); sett("tune_run"); } bool KENWOOD::tuning() { cmd = "AC;"; if (wait_char(';', 6, 100, "tuning?", ASC) == 6) { if (replystr[4] == '1') return true; } return false; } int KENWOOD::get_tune() { cmd = "AC;"; get_trace(1, "get_tune"); ret = wait_char(';', 6, 100, "tuning?", ASC); gett(""); if (ret == 6) { size_t p = replystr.rfind("AC"); if (p != std::string::npos) { return (replystr[p+4] - '0'); } } return 0; } // Volume control return 0 ... 100 int KENWOOD::get_volume_control() { int volctrl = 0; cmd = "AG0;"; get_trace(1, "get_volume_control"); ret = wait_char(';', 7, 100, "get vol", ASC); gett(""); if (ret == 7) { size_t p = replystr.rfind("AG"); if (p != std::string::npos) { volctrl = fm_decimal(replystr.substr(p+3),3); volctrl = (int)(volctrl / 2.55); } } return volctrl; } void KENWOOD::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0"; cmd.append(to_decimal(ivol, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set vol", cmd, ""); sett("volume"); } void KENWOOD::select_swr() { cmd = "RM1;"; sendCommand(cmd); showresp(WARN, ASC, "select SWR", cmd, ""); sett("select SWR"); } void KENWOOD::select_alc() { cmd = "RM3;"; sendCommand(cmd); showresp(WARN, ASC, "select ALC", cmd, ""); sett("select ALC"); } void KENWOOD::set_rf_gain(int val) { cmd = "RG"; cmd.append(to_decimal(val * 255 / 100, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set rf gain", cmd, ""); sett("RFgain"); } int KENWOOD::get_rf_gain() { cmd = "RG;"; int rfg = 100; get_trace(1, "get_rf_gain"); ret = wait_char(';', 6, 100, "get rf gain", ASC); gett(""); if (ret == 6) { size_t p = replystr.rfind("RG"); if (p != std::string::npos) rfg = fm_decimal(replystr.substr(p+2) ,3) * 100 / 255; } return rfg; } void KENWOOD::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // val 0 .. 100 void KENWOOD::set_mic_gain(int val) { cmd = "MG"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic", cmd, ""); sett("MICgain"); } int KENWOOD::get_mic_gain() { int mgain = 0; cmd = "MG;"; get_trace(1, "get_mic_gain"); ret = wait_char(';', 6, 100, "get mic", ASC); gett(""); if (ret == 6) { size_t p = replystr.rfind("MG"); if (p != std::string::npos) { mgain = fm_decimal(replystr.substr(p+2), 3); } } return mgain; } void KENWOOD::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void KENWOOD::set_noise(bool b) { if (b) cmd = "NB1;"; else cmd = "NB0;"; sendCommand(cmd); showresp(WARN, ASC, "set NB", cmd, ""); sett("setNB"); } int KENWOOD::get_noise() { int response = 1; cmd = "NB;"; get_trace(1, "get_noise"); ret = wait_char(';', 4, 100, "get Noise Blanker", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("NB"); if (p == std::string::npos) response = 0; if (replystr[p+2] == '0') response = 0; } return response; } void KENWOOD::set_squelch(int val) { cmd = "SQ0"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set squelch", cmd, ""); sett("Squelch"); } int KENWOOD::get_squelch() { int val = 0; cmd = "SQ0;"; get_trace(1, "get_squelch"); ret = wait_char(';', 7, 100, "get squelch", ASC); gett(""); if (ret >= 7) { size_t p = replystr.rfind("SQ0"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); } return val; } void KENWOOD::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } //====================================================================== // IF shift only available if the transceiver is in the CW mode // step size is 50 Hz //====================================================================== void KENWOOD::set_if_shift(int val) { if (active_mode == CW || active_mode == CWR) { // cw modes progStatus.shift_val = val; cmd = "IS "; cmd.append(to_decimal(abs(val),4)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set IF shift", cmd, ""); sett("IF shift"); } } bool KENWOOD::get_if_shift(int &val) { bool response = false; if (active_mode == CW || active_mode == CWR) { // cw modes cmd = "IS;"; get_trace(1, "get_IF_shift"); ret = wait_char(';', 8, 100, "get IF shift", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("IS"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 4); } else val = progStatus.shift_val; response = true; } } val = progStatus.shift_val; return response; } void KENWOOD::get_if_min_max_step(int &min, int &max, int &step) { } flrig-2.0.04/src/rigs/kenwood/TS450S.cxx0000664000175000017500000002212414502041135014446 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS450S.h" #include "support.h" static const char TS450Sname_[] = "TS-450S"; static std::vectorTS450Smodes_; static const char *vTS450Smodes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R"}; static const char TS450S_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char TS450S_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U' }; static std::vectorTS450S_widths; static const char *vTS450S_widths[] = { "NONE", "FM-W", "FM-N", "AM", "SSB", "CW"}; static int TS450S_bw_vals[] = { 1,2,3,4,5,6, WVALS_LIMIT}; static std::vectorTS450S_filters; static const char *vTS450S_filters[] = { "000", "002", "003", "005", "007", "009"}; RIG_TS450S::RIG_TS450S() { // base class values name_ = TS450Sname_; modes_ = TS450Smodes_; _mode_type = TS450S_mode_type; bandwidths_ = TS450S_widths; bw_vals_ = TS450S_bw_vals; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeB = modeA = def_mode = 1; bwB = bwA = def_bw = 1; freqB = freqA = def_freq = 14070000ULL; can_change_alt_vfo = true; has_noise_control = has_micgain_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_notch_control = has_ifshift_control = has_swr_control = false; has_smeter = has_swr_control = has_mode_control = has_bandwidth_control = has_ptt_control = true; precision = 10; ndigits = 7; } void RIG_TS450S::initialize() { VECTOR (TS450Smodes_, vTS450Smodes_); VECTOR (TS450S_widths, vTS450S_widths); VECTOR (TS450S_filters, vTS450S_filters); modes_ = TS450Smodes_; _mode_type = TS450S_mode_type; bandwidths_ = TS450S_widths; bw_vals_ = TS450S_bw_vals; cmd = "RM1;"; // select measurement '1' (swr) sendCommand(cmd); } bool RIG_TS450S::check () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "check", ASC); if (ret < 14) return false; return true; } unsigned long long RIG_TS450S::get_vfoA () { cmd = "FA;"; int ret = wait_char(';', 14, 100, "get vfo A", ASC); if (ret < 14) return freqA; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_TS450S::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS450S::get_vfoB () { cmd = "FB;"; int ret = wait_char(';', 14, 100, "get vfo B", ASC); if (ret < 14) return freqB; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_TS450S::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } // SM cmd 0 ... 100 (rig values 0 ... 15) int RIG_TS450S::get_smeter() { cmd = "SM;"; int ret = wait_char(';', 7, 100, "get smeter", ASC); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int mtr = atoi(&replystr[p + 2]); mtr = (mtr * 100) / 30; return mtr; } // RM cmd 0 ... 100 (rig values 0 ... 8) int RIG_TS450S::get_swr() { cmd = "RM;"; int ret = wait_char(';', 8, 100, "get swr", ASC); if (ret < 8) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; int mtr = atoi(&replystr[p + 3]); mtr = (mtr * 50) / 30; return mtr; } void RIG_TS450S::set_modeA(int val) { showresp(WARN, ASC, "set mode A", "", ""); modeA = val; cmd = "MD"; cmd += TS450S_mode_chr[val]; cmd += ';'; sendCommand(cmd); } int RIG_TS450S::get_modeA() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get modeA", ASC); int ret = check_ifstr(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeA; modeA = replystr[p+29] - '1'; // 0 - 6, 8 if (modeA == 8) modeA = 7; return modeA; } void RIG_TS450S::set_modeB(int val) { showresp(WARN, ASC, "set mode B", "", ""); modeB = val; cmd = "MD"; cmd += TS450S_mode_chr[val]; cmd += ';'; sendCommand(cmd); } int RIG_TS450S::get_modeB() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get mode B", ASC); int ret = check_ifstr(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeA; modeB = replystr[p+29] - '1'; // 0 - 6, 8 if (modeB == 8) modeB = 7; return modeB; } int RIG_TS450S::get_modetype(int n) { return _mode_type[n]; } static std::string bw_str = "FL001001;"; void RIG_TS450S::set_bwA(int val) { get_bwA(); showresp(WARN, ASC, "set bw A", "", ""); bwA = val; cmd = bw_str.substr(0, 5); cmd.append(TS450S_filters[val]).append(";"); sendCommand(cmd); } int RIG_TS450S::get_bwA() { cmd = "FL;"; int ret = wait_char(';', 9, 100, "get bwA", ASC); if (ret < 9) return bwA; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwA; replystr[p + 8] = 0; size_t bw = 0; for (bw = 0; bw < TS450S_filters.size(); bw++) if (TS450S_filters[bw] == replystr.substr(p+5)) return bwA = bw; return bwA; } void RIG_TS450S::set_bwB(int val) { get_bwB(); showresp(WARN, ASC, "set bw B", "", ""); bwB = val; cmd = bw_str.substr(0, 5); cmd.append(TS450S_filters[val]).append(";"); sendCommand(cmd); } int RIG_TS450S::get_bwB() { cmd = "FL;"; int ret = wait_char(';', 9, 100, "get bwB", ASC); if (ret < 9) return bwB; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwB; replystr[p + 8] = 0; size_t bw = 0; for (bw = 0; bw < TS450S_filters.size(); bw++) if (TS450S_filters[bw] == replystr.substr(p+5)) return bwB = bw; return bwB; } int RIG_TS450S::def_bandwidth(int val) { if (val == 0 || val == 1) return 4; else if (val == 2 || val == 6) return 5; else if (val == 3) return 1; else if (val == 4) return 3; else if (val == 5 || val == 7) return 2; return 4; } void RIG_TS450S::selectA() { showresp(WARN, ASC, "select A", "", ""); cmd = "FR0;"; sendCommand(cmd); cmd = "FT0;"; sendCommand(cmd); inuse = onA; } void RIG_TS450S::selectB() { showresp(WARN, ASC, "select B", "", ""); cmd = "FR1;"; sendCommand(cmd); cmd = "FT1;"; sendCommand(cmd); inuse = onB; } bool RIG_TS450S::can_split() { return true; } void RIG_TS450S::set_split(bool val) { if (val) { cmd = "FR0;"; sendCommand(cmd); cmd = "FT1;"; sendCommand(cmd); } else { cmd = "FR0;"; sendCommand(cmd); cmd = "FT0;"; sendCommand(cmd); } } int RIG_TS450S::get_split() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get split", ASC); int ret = check_ifstr(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split; split = replystr[p+32] ? true : false; return split; } // Tranceiver PTT on/off void RIG_TS450S::set_PTT_control(int val) { if (val) sendCommand("TX;"); else sendCommand("RX;"); ptt_ = val; } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters ======================================================================== */ int RIG_TS450S::get_PTT() { cmd = "IF;"; int ret = wait_char(';', 38, 100, "get VFO", ASC); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } flrig-2.0.04/src/rigs/kenwood/TS890S.cxx0000664000175000017500000010663014502041135014463 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "kenwood/TS890S.h" #include "support.h" static const char TS890Sname_[] = "TS-890S"; static std::vectorTS890Smodes_; static const char *vTS890Smodes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R", "LSB-D", "USB-D", "FM-D"}; static const char TS890S_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9', '1', '2', '4' }; static const char TS890S_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U', 'L', 'U', 'U' }; //---------------------------------------------------------------------- static std::vectorTS890S_empty; static const char *vTS890S_empty[] = { "N/A" }; //---------------------------------------------------------------------- static int DEF_SL_SH = 0x8A03; static std::vectorTS890S_SSB_SL; static const char *vTS890S_SSB_SL[] = { "0", "50", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000" }; static std::vectorTS890S_CAT_ssb_SL; static const char *vTS890S_CAT_ssb_SL[] = { "SL00;", "SL01;", "SL02;", "SL03;", "SL04;", "SL05;", "SL06;", "SL07;", "SL08;", "SL09;", "SL10;", "SL11;" }; static const char *TS890S_SSB_SL_tooltip = "lo cut"; static const char *TS890S_SSB_btn_SL_label = "L"; static std::vectorTS890S_SSB_SH; static const char *vTS890S_SSB_SH[] = { "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3400", "4000", "5000" }; static std::vectorTS890S_CAT_ssb_SH; static const char *vTS890S_CAT_ssb_SH[] = { "SH00;", "SH01;", "SH02;", "SH03;", "SH04;", "SH05;", "SH06;", "SH07;", "SH08;", "SH09;", "SH10;", "SH11;", "SH12;", "SH13;" }; static const char *TS890S_SSB_SH_tooltip = "hi cut"; static const char *TS890S_SSB_btn_SH_label = "H"; //---------------------------------------------------------------------- static int DEF_width_shift = 0x8D05; static std::vectorTS890S_DATA_width; static const char *vTS890S_DATA_width[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500", "2000", "2500" }; static std::vectorTS890S_CAT_data_width; static const char *vTS890S_CAT_data_width[] = { "SL00;", "SL01;", "SL02;", "SL03;", "SL04;", "SL05;", "SL06;", "SL07;", "SL08;", "SL09;", "SL10;", "SL11;", "SL12;", "SL13;" }; static const char *TS890S_DATA_W_tooltip = "width"; static const char *TS890S_DATA_W_btn_label = "W"; static std::vectorTS890S_DATA_shift; static const char *vTS890S_DATA_shift[] = { "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2210" }; static std::vectorTS890S_CAT_data_shift; static const char *vTS890S_CAT_data_shift[] = { "SH00;", "SH01;", "SH02;", "SH03;", "SH04;", "SH05;", "SH06;", "SH07;", "SH08;", "SH09;", "SH10;", "SH11;", "SH12;" }; static const char *TS890S_DATA_S_tooltip = "shift"; static const char *TS890S_DATA_S_btn_label = "S"; //---------------------------------------------------------------------- static int DEF_am = 0x8201; static std::vectorTS890S_AM_SL; static const char *vTS890S_AM_SL[] = { "10", "100", "200", "500" }; static std::vectorTS890S_CAT_am_SL; static const char *vTS890S_CAT_am_SL[] = { "SL00;", "SL01;", "SL02;", "SL03;"}; static const char *TS890S_AM_SL_tooltip = "lo cut"; static const char *TS890S_AM_btn_SL_label = "L"; static std::vectorTS890S_AM_SH; static const char *vTS890S_AM_SH[] = { "2500", "3000", "4000", "5000" }; static std::vectorTS890S_CAT_am_SH; static const char *vTS890S_CAT_am_SH[] = { "SH00;", "SH01;", "SH02;", "SH03;"}; static const char *TS890S_AM_SH_tooltip = "hi cut"; static const char *TS890S_AM_btn_SH_label = "H"; //---------------------------------------------------------------------- static int DEF_cw = 7; static std::vectorTS890S_CWwidths; static const char *vTS890S_CWwidths[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500", "2000", "2500"}; static std::vectorTS890S_CWbw; static const char *vTS890S_CWbw[] = { "FW0050;", "FW0080;", "FW0100;", "FW0150;", "FW0200;", "FW0250;", "FW0300;", "FW0400;", "FW0500;", "FW0600;", "FW1000;", "FW1500;", "FW2000;", "FW2500;"}; //---------------------------------------------------------------------- static int DEF_fsk = 1; static std::vectorTS890S_FSKwidths; static const char *vTS890S_FSKwidths[] = { "250", "500", "1000", "1500"}; static std::vectorTS890S_FSKbw; static const char *vTS890S_FSKbw[] = { "FW0250;", "FW0500;", "FW1000;", "FW1500;" }; //---------------------------------------------------------------------- static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 2 { (Fl_Widget *)btnNR, 2, 165, 50 }, // 3 { (Fl_Widget *)sldrNR, 54, 165, 156 }, // 4 { (Fl_Widget *)sldrPOWER, 54, 185, 368 }, // 5 { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 6 { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 7 { (Fl_Widget *)btnNotch, 214, 125, 50 }, // 8 { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, // 9 { (Fl_Widget *)sldrSQUELCH, 266, 145, 156 }, // 10 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, // 11 { (Fl_Widget *)NULL, 0, 0, 0 } }; static std::string menu005; void RIG_TS890S::initialize() { VECTOR (TS890Smodes_, vTS890Smodes_); VECTOR (TS890S_empty, vTS890S_empty); VECTOR (TS890S_SSB_SL, vTS890S_SSB_SL); VECTOR (TS890S_CAT_ssb_SL, vTS890S_CAT_ssb_SL); VECTOR (TS890S_SSB_SH, vTS890S_SSB_SH); VECTOR (TS890S_CAT_ssb_SH, vTS890S_CAT_ssb_SH); VECTOR (TS890S_DATA_width, vTS890S_DATA_width); VECTOR (TS890S_CAT_data_width, vTS890S_CAT_data_width); VECTOR (TS890S_DATA_shift, vTS890S_DATA_shift); VECTOR (TS890S_CAT_data_shift, vTS890S_CAT_data_shift); VECTOR (TS890S_AM_SL, vTS890S_AM_SL); VECTOR (TS890S_CAT_am_SL, vTS890S_CAT_am_SL); VECTOR (TS890S_AM_SH, vTS890S_AM_SH); VECTOR (TS890S_CAT_am_SH, vTS890S_CAT_am_SH); VECTOR (TS890S_CWwidths, vTS890S_CWwidths); VECTOR (TS890S_CWbw, vTS890S_CWbw); VECTOR (TS890S_FSKwidths, vTS890S_FSKwidths); VECTOR (TS890S_FSKbw, vTS890S_FSKbw); modes_ = TS890Smodes_; bandwidths_ = TS890S_SSB_SH; dsp_SL = TS890S_SSB_SL; dsp_SH = TS890S_SSB_SH; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnNR; rig_widgets[4].W = sldrNR; rig_widgets[5].W = sldrPOWER; rig_widgets[6].W = btnIFsh; rig_widgets[7].W = sldrIFSHIFT; rig_widgets[8].W = btnNotch; rig_widgets[9].W = sldrNOTCH; rig_widgets[10].W = sldrSQUELCH; rig_widgets[11].W = sldrMICGAIN; // cmd = "EX0050000;"; // if (wait_char(';', 11, 100, "read ex 003", ASC) == 11) // menu005 = replystr; // cmd = "EX005000000;"; // sendCommand(cmd); cmd = "AC000;"; sendCommand(cmd); selectA(); get_preamp(); get_attenuator(); } void RIG_TS890S::shutdown() { // restore state of xcvr beeps // cmd = menu005; // sendCommand(cmd); } RIG_TS890S::RIG_TS890S() { name_ = TS890Sname_; modes_ = TS890Smodes_; bandwidths_ = TS890S_SSB_SH; dsp_SL = TS890S_SSB_SL; SL_tooltip = TS890S_SSB_SL_tooltip; SL_label = TS890S_SSB_btn_SL_label; dsp_SH = TS890S_SSB_SH; SH_tooltip = TS890S_SSB_SH_tooltip; SH_label = TS890S_SSB_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR115200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = USB; B.iBW = A.iBW = DEF_SL_SH; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; nb_level = 2; has_micgain_control = has_ifshift_control = false; has_auto_notch = has_notch_control = has_sql_control = has_swr_control = has_noise_reduction = has_noise_reduction_control = has_alc_control = has_dsp_controls = has_smeter = has_power_out = has_split = has_split_AB = has_noise_control = has_micgain_control = has_rf_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_mode_control = has_bandwidth_control = has_ifshift_control = has_ptt_control = true; rxtxa = true; precision = 1; ndigits = 8; att_level = 0; preamp_level = 0; noise_reduction_level = 0; } const char * RIG_TS890S::get_bwname_(int n, int md) { static char bwname[20]; if (n > 256) { int hi = (n >> 8) & 0x7F; int lo = n & 0xFF; snprintf(bwname, sizeof(bwname), "%s/%s", (md == LSB || md == USB || md == FM) ? TS890S_SSB_SL[lo].c_str() : (md == AM) ? TS890S_AM_SL[lo].c_str() : TS890S_DATA_width[lo].c_str(), (md == LSB || md == USB || md == FM) ? TS890S_SSB_SH[hi].c_str() : (md == AM) ? TS890S_AM_SH[hi].c_str() : TS890S_DATA_shift[hi].c_str() ); } else { snprintf(bwname, sizeof(bwname), "%s", (md == CW || md == CWR) ? TS890S_CWwidths[n].c_str() : TS890S_FSKwidths[n].c_str()); } return bwname; } int RIG_TS890S::get_smeter() { int mtr = 0; cmd = "SM0;"; if (wait_char(';', 8, 100, "get", ASC) < 8) return 0; size_t p = replystr.find("SM0"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; mtr = atoi(&replystr[p + 3]); mtr *= 50; mtr /= 15; if (mtr > 100) mtr = 100; return mtr; } int RIG_TS890S::get_power_out() { int mtr = 0; cmd = "SM0;"; if (wait_char(';', 8, 100, "get power", ASC) < 8) return mtr; size_t p = replystr.rfind("SM0"); if (p == std::string::npos) return mtr; mtr = atoi(&replystr[p + 3]); mtr *= 50; mtr /= 18; if (mtr > 100) mtr = 100; return mtr; } // Transceiver power level void RIG_TS890S::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd, 0); } double RIG_TS890S::get_power_control() { cmd = "PC;"; if (wait_char(';', 6, 100, "get pwr ctrl", ASC) < 6) return 0; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return 0; int mtr = 0; replystr[p + 5] = 0; mtr = atoi(&replystr[p + 2]); return mtr; } void RIG_TS890S::set_attenuator(int val) { if (val >= 0 && val <= 2) { att_level = val; cmd = "RA0"; cmd[2] = '0' + att_level; sendCommand(cmd, 0); } } int RIG_TS890S::get_attenuator() { cmd = "RA;"; if (wait_char(';', 4, 100, "get att", ASC) < 4) return 0; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return 0; att_level = replystr[p+2] - '0'; if (att_level < 0) att_level = 0; if (att_level > 2) att_level = 2; return att_level; } int RIG_TS890S::next_attenuator() { att_level++; if (att_level > 2) att_level = 0; return att_level; } void RIG_TS890S::set_preamp(int val) { preamp_level = val; if (val) cmd = "PA1;"; else cmd = "PA0;"; sendCommand(cmd, 0); } int RIG_TS890S::get_preamp() { cmd = "PA;"; if (wait_char(';', 5, 100, "get preamp", ASC) < 5) return 0; size_t p = replystr.rfind("PA"); if (p == std::string::npos) return 0; if (replystr[p + 2] == '1') preamp_level = 1; else preamp_level = 0; return preamp_level; } const char *RIG_TS890S::PRE_label() { if (preamp_level == 1) return "Pre 1"; return "PRE"; } const char *RIG_TS890S::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } //====================================================================== // mode commands //====================================================================== void RIG_TS890S::set_modeA(int val) { active_mode = A.imode = val; cmd = "MD"; cmd += TS890S_mode_chr[val]; cmd += ';'; sendCommand(cmd, 0); showresp(ERR, ASC, "set mode A", cmd, ""); if ( val == LSBD || val == USBD || val == FMD) { data_mode = true; cmd = "DA1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data A", cmd, ""); } else if (val == LSB || val == USB || val == FM) { data_mode = false; cmd = "DA0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data A", cmd, ""); } set_widths(val); } int RIG_TS890S::get_modeA() { int md = A.imode; cmd = "MD;"; if (wait_char(';', 4, 100, "get mode A", ASC) < 4) return A.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return A.imode; switch (replystr[p + 2]) { case '1' : md = LSB; break; case '2' : md = USB; break; case '3' : md = CW; break; case '4' : md = FM; break; case '5' : md = AM; break; case '6' : md = FSK; break; case '7' : md = CWR; break; case '9' : md = FSKR; break; default : md = A.imode; } if (md == LSB || md == USB || md == FM) { cmd = "DA;"; if (wait_char(';', 4, 100, "get data A", ASC) < 4) return A.imode; p = replystr.rfind("DA"); if (p == std::string::npos) return A.imode; if (replystr[p + 2] == '1') { data_mode = true; if (md == LSB) md = LSBD; else if (md == USB) md = USBD; else if (md == FM) md = FMD; } } if (md != A.imode) { active_mode = A.imode = md; set_widths(md); } return A.imode; } void RIG_TS890S::set_modeB(int val) { active_mode = B.imode = val; cmd = "MD"; cmd += TS890S_mode_chr[val]; cmd += ';'; sendCommand(cmd, 0); showresp(WARN, ASC, "set mode B", cmd, ""); if ( val == LSBD || val == USBD || val == FMD) { data_mode = true; cmd = "DA1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data B", cmd, ""); } else if (val == LSB || val == USB || val == FM) { cmd = "DA0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data B", cmd, ""); } set_widths(val); } int RIG_TS890S::get_modeB() { int md = B.imode; cmd = "MD;"; if (wait_char(';', 4, 100, "get mode B", ASC) < 4) return B.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return B.imode; switch (replystr[p + 2]) { case '1' : md = LSB; break; case '2' : md = USB; break; case '3' : md = CW; break; case '4' : md = FM; break; case '5' : md = AM; break; case '6' : md = FSK; break; case '7' : md = CWR; break; case '9' : md = FSKR; break; default : md = B.imode; } if (md == LSB || md == USB || md == FM) { cmd = "DA;"; if (wait_char(';', 4, 100, "get dat B", ASC) < 4) return B.imode; p = replystr.rfind("DA"); if (p == std::string::npos) return B.imode; if (replystr[p + 2] == '1') { data_mode = true; if (md == LSB) md = LSBD; else if (md == USB) md = USBD; else if (md == FM) md = FMD; } } if (md != B.imode) { active_mode = B.imode = md; set_widths(md); } return B.imode; } //====================================================================== // Bandpass filter commands //====================================================================== int RIG_TS890S::set_widths(int val) { int bw = 0; if (val == LSB || val == USB || val == FM || val == FMD) { bandwidths_ = TS890S_SSB_SH; dsp_SL = TS890S_SSB_SL; dsp_SH = TS890S_SSB_SH; SL_tooltip = TS890S_SSB_SL_tooltip; SL_label = TS890S_SSB_btn_SL_label; SH_tooltip = TS890S_SSB_SH_tooltip; SH_label = TS890S_SSB_btn_SH_label; bw = DEF_SL_SH; // 200 lower, 3000 upper } else if (val == CW || val == CWR) { bandwidths_ = TS890S_CWwidths; dsp_SL = TS890S_empty; dsp_SH = TS890S_empty; bw = DEF_cw; } else if (val == FSK || val == FSKR) { bandwidths_ = TS890S_FSKwidths; dsp_SL = TS890S_empty; dsp_SH = TS890S_empty; bw = 1; } else if (val == AM) { // val == 4 ==> AM bandwidths_ = TS890S_AM_SH; dsp_SL = TS890S_AM_SL; dsp_SH = TS890S_AM_SH; SL_tooltip = TS890S_AM_SL_tooltip; SL_label = TS890S_AM_btn_SL_label; SH_tooltip = TS890S_AM_SH_tooltip; SH_label = TS890S_AM_btn_SH_label; bw = DEF_am; } else if (val == LSBD || val == USBD) { bandwidths_ = TS890S_DATA_width; dsp_SL = TS890S_DATA_shift; SL_tooltip = TS890S_DATA_S_tooltip; SL_label = TS890S_DATA_S_btn_label; dsp_SH = TS890S_DATA_width; SH_tooltip = TS890S_DATA_W_tooltip; SH_label = TS890S_DATA_W_btn_label; bw = DEF_width_shift; } return bw; } std::vector& RIG_TS890S::bwtable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS890S_SSB_SH; else if (m == CW || m == CWR) return TS890S_CWwidths; else if (m == FSK || m == FSKR) return TS890S_FSKwidths; else if (m == AM) return TS890S_AM_SH; else return TS890S_DATA_width; } std::vector& RIG_TS890S::lotable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS890S_SSB_SL; else if (m == AM) return TS890S_AM_SL; else if (m == LSBD || m == USBD) return TS890S_DATA_shift; // CW CWR FSK FSKR return vNOBWS; } std::vector& RIG_TS890S::hitable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS890S_SSB_SH; else if (m == AM) return TS890S_AM_SH; else if (m == LSBD || m == USBD) return TS890S_DATA_width; // CW CWR FSK FSKR return vNOBWS; } int RIG_TS890S::adjust_bandwidth(int val) { if (val == LSB || val == USB || val == FM || val == FMD) return DEF_SL_SH; else if (val == LSBD || val == USBD) return DEF_width_shift; else if (val == CW || val == CWR) return DEF_cw; else if (val == FSK || val == FSKR) return DEF_fsk; // else if (val == AM) return DEF_am; } int RIG_TS890S::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_TS890S::set_bwA(int val) { // LSB, USB, FM, FM-D if (A.imode == LSB || A.imode == USB || A.imode == FM || A.imode == FMD) { if (val < 256) return; A.iBW = val; cmd = TS890S_CAT_ssb_SL[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS890S_CAT_ssb_SH[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } // LSB-D, USB-D if (A.imode == LSBD || A.imode == USBD) { if (val < 256) return; A.iBW = val; cmd = TS890S_CAT_data_shift[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set shift", cmd, ""); cmd = TS890S_CAT_data_width[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set width", cmd, ""); return; } // AM if (A.imode == AM) { if (val < 256) return; A.iBW = val; cmd = TS890S_CAT_am_SL[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS890S_CAT_am_SH[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (val > 256) return; // CW if (A.imode == CW || A.imode == CWR) { A.iBW = val; cmd = TS890S_CWbw[A.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set CW bw", cmd, ""); return; } // FSK if (A.imode == FSK || A.imode == FSKR) { A.iBW = val; cmd = TS890S_FSKbw[A.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set FSK bw", cmd, ""); return; } } void RIG_TS890S::set_bwB(int val) { if (B.imode == LSB || B.imode == USB || B.imode == FM || B.imode == FMD) { if (val < 256) return; B.iBW = val; cmd = TS890S_CAT_ssb_SL[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS890S_CAT_ssb_SH[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (B.imode == LSBD || B.imode == USBD) { // SSB data mode if (val < 256) return; B.iBW = val; cmd = TS890S_CAT_data_shift[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set shift", cmd, ""); cmd = TS890S_CAT_data_width[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set width", cmd, ""); return; } if (B.imode == AM) { if (val < 256) return; B.iBW = val; cmd = TS890S_AM_SL[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS890S_AM_SH[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (val > 256) return; if (B.imode == CW || B.imode == CWR) { B.iBW = val; cmd = TS890S_CWbw[B.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set CW bw", cmd, ""); return; } if (B.imode == FSK || B.imode == FSKR) { B.iBW = val; cmd = TS890S_FSKbw[B.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set FSK bw", cmd, ""); return; } } int RIG_TS890S::get_bwA() { int i = 0, lo = 0, hi = 0; size_t p; switch (A.imode) { case CW: case CWR: A.iBW = DEF_cw; cmd = "FW;"; if (wait_char(';', 7, 100, "get CW width", ASC) == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 14; i++) if (replystr.find(TS890S_CWbw[i]) == p) break; if (i == 14) i = 13; A.iBW = i; } } break; case FSK: case FSKR: A.iBW = DEF_fsk; cmd = "FW;"; if (wait_char(';', 7, 100, "get FSK width", ASC) == 7 ) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS890S_FSKbw[i]) == p) break; if (i == 4) i = 3; A.iBW = i; } } break; case LSB: case USB: case FM: A.iBW = DEF_SL_SH; lo = A.iBW & 0x7F; hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; if (wait_char(';', 5, 100, "get lower", ASC) == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; if (wait_char(';', 5, 100, "get upper", ASC) == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); A.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; case LSBD: case USBD: case FMD: A.iBW = DEF_width_shift; lo = A.iBW & 0x7F; hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; if (wait_char(';', 5, 100, "get width", ASC) == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; if (wait_char(';', 5, 100, "get shift", ASC) == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); A.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; } return A.iBW; } int RIG_TS890S::get_bwB() { int i = 0, lo = 0, hi = 0; size_t p; switch (B.imode) { case CW: case CWR: B.iBW = DEF_cw; cmd = "FW;"; if (wait_char(';', 7, 100, "get CW width", ASC) == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 14; i++) if (replystr.find(TS890S_CWbw[i]) == p) break; if (i == 14) i = 13; B.iBW = i; } } break; case FSK: case FSKR: B.iBW = DEF_fsk; cmd = "FW;"; if (wait_char(';', 7, 100, "get FSK width", ASC) == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS890S_FSKbw[i]) == p) break; if (i == 4) i = 3; B.iBW = i; } } break; case LSB: case USB: case FM: B.iBW = DEF_SL_SH; lo = B.iBW & 0xFF; hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; if (wait_char(';', 5, 100, "get lower", ASC) == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; if (wait_char(';', 5, 100, "get upper", ASC) == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); B.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; case LSBD: case USBD: case FMD: B.iBW = DEF_width_shift; lo = B.iBW & 0x7F; hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; if (wait_char(';', 5, 100, "get width", ASC) == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; if (wait_char(';', 5, 100, "get shift", ASC) == 5 ) { p = replystr.rfind("SH"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); B.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } break; } return B.iBW; } int RIG_TS890S::get_modetype(int n) { return TS890S_mode_type[n]; } //====================================================================== // IF shift command only available if the transceiver is in the CW mode // step size is 50 Hz //====================================================================== void RIG_TS890S::set_if_shift(int val) { if (active_mode == CW || active_mode == CWR) { // cw modes progStatus.shift_val = val; cmd = "IS "; cmd.append(to_decimal(abs(val),4)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set IF shift", cmd, ""); } } bool RIG_TS890S::get_if_shift(int &val) { if (active_mode == CW || active_mode == CWR) { // cw modes cmd = "IS;"; if (wait_char(';', 8, 100, "get IF shift", ASC) == 8) { size_t p = replystr.rfind("IS"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 4); } else val = progStatus.shift_val; return true; } } val = progStatus.shift_val; return false; } void RIG_TS890S::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = 300; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 800; } void RIG_TS890S::set_noise_reduction(int val) { if (val == -1) { if (noise_reduction_level == 1) { nr_label("NR1", true); } else if (noise_reduction_level == 2) { nr_label("NR2", true); } return; } if (noise_reduction_level == 0) { noise_reduction_level = 1; nr_label("NR1", true); } else if (noise_reduction_level == 1) { noise_reduction_level = 2; nr_label("NR2", true); } else if (noise_reduction_level == 2) { noise_reduction_level = 0; nr_label("NR", false); } cmd.assign("NR"); cmd += '0' + noise_reduction_level; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); } int RIG_TS890S::get_noise_reduction() { cmd = rsp = "NR"; cmd.append(";"); if (wait_char(';', 4, 100, "GET noise reduction", ASC) == 4 ) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return noise_reduction_level; noise_reduction_level = replystr[p+2] - '0'; if (noise_reduction_level == 1) { nr_label("NR1", true); } else if (noise_reduction_level == 2) { nr_label("NR2", true); } else { nr_label("NR", false); } } return noise_reduction_level; } void RIG_TS890S::set_noise_reduction_val(int val) { cmd.assign("RL").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); } int RIG_TS890S::get_noise_reduction_val() { if (noise_reduction_level == 0) return 0; int val = 1; cmd = rsp = "RL"; cmd.append(";"); if (wait_char(';', 5, 100, "GET noise reduction val", ASC) == 5) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.noise_reduction_val; val = atoi(&replystr[p+2]); } return val; } void RIG_TS890S::set_auto_notch(int v) { cmd.assign("NT").append(v ? "1" : "0" ).append("0;"); sendCommand(cmd); showresp(WARN, ASC, "SET Auto Notch", cmd, ""); } int RIG_TS890S::get_auto_notch() { cmd = "NT;"; if (wait_char(';', 5, 100, "get auto notch", ASC) == 5) { size_t p = replystr.rfind("NT"); if (p == std::string::npos) return 0; if (replystr[p+2] == '1') return 1; } return 0; } void RIG_TS890S::set_notch(bool on, int val) { if (on) { cmd.assign("NT20;"); sendCommand(cmd); showresp(WARN, ASC, "Set notch ON", cmd, ""); int bp = (int)((val - 300.0) * 128.0 / 2700.0); cmd.assign("BP").append(to_decimal(bp, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set notch freq", cmd, ""); } else { cmd.assign("NT00;"); sendCommand(cmd); showresp(WARN, ASC, "Set notch OFF", cmd, ""); } } bool RIG_TS890S::get_notch(int &val) { val = 300; cmd = "NT;"; if (wait_char(';', 5, 100, "get notch state", ASC) == 5) { size_t p = replystr.rfind("NT"); if (p == std::string::npos) return 0; if (replystr[p+2] == '2') { cmd.assign("BP;"); if (wait_char(';', 6, 100, "get notch freq", ASC) == 6) { size_t p = replystr.rfind("BP"); if (p != std::string::npos) val = (int)((atoi(&replystr[p+2]) * 2700.0 / 128.0) + 300.0); return 1; } } } return 0; } void RIG_TS890S::get_notch_min_max_step(int &min, int &max, int &step) { min = 300; max = 3000; step = 20; } void RIG_TS890S::set_noise(bool val) { if (nb_level == 0) { nb_level = 1; nb_label("NB 1", true); } else if (nb_level == 1) { nb_level = 2; nb_label("NB 2", true); } else if (nb_level == 2) { nb_level = 3; nb_label("NB 3", true); } else if (nb_level == 3) { nb_level = 0; nb_label("NB", false); } cmd = "NB0;"; cmd[2] += nb_level; LOG_INFO("%s", cmd.c_str()); sendCommand(cmd, 0); } int RIG_TS890S::get_noise() { cmd = "NB;"; if (wait_char(';', 4, 100, "get Noise Blanker", ASC) == 4) { size_t p = replystr.rfind("NB"); if (p == std::string::npos) return 0; if (replystr[p+2] == '0') return 0; nb_level = replystr[p+2] - '0'; if (nb_level == 0) { nb_label("NB", false); } else if (nb_level == 1) { nb_label("NB 1", true); } else if (nb_level == 2) { nb_label("NB 2", true); } else if (nb_level == 3) { nb_label("NB 3", true); } } return nb_level; } void RIG_TS890S::set_rf_gain(int val) { cmd = "RG000;"; int rfval = 255 - val; for (int i = 4; i > 1; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, ""); } int RIG_TS890S::get_rf_gain() { int rfval = 0; cmd = rsp = "RG"; cmd += ';'; if (wait_char(';', 6, 100, "get rfgain", ASC) == 6) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 2; i < 5; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } } return 255 - rfval; } void RIG_TS890S::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } int RIG_TS890S::get_PTT() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get VFO", ASC); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } // Tranceiver PTT on/off void RIG_TS890S::set_PTT_control(int val) { if (val) { if (data_mode) cmd = "TX1;"; else cmd = "TX0;"; } else cmd = "RX;"; sendCommand(cmd, 0); } static bool read_alc = false; static int alc_val = 0; int RIG_TS890S::get_swr(void) { int mtr = 0; cmd = "RM21;"; sendCommand(cmd); showresp(INFO, ASC, "set SWR meter", cmd, ""); cmd = "RM;"; sendCommand(cmd); if (wait_char(';', 8, 100, "get SWR", ASC) < 8) return 0; sscanf(replystr.c_str(), "RM2%d", &mtr); mtr *= 50; mtr /= 15; if (mtr > 100) mtr = 100; return mtr; } int RIG_TS890S::get_alc(void) { if (read_alc) { read_alc = false; return alc_val; } cmd = "RM11;"; sendCommand(cmd); showresp(INFO, ASC, "set ALC meter", cmd, ""); cmd = "RM;"; sendCommand(cmd); if (wait_char(';', 8, 100, "get ALC", ASC) < 8) return 0; sscanf(replystr.c_str(), "RM1%d", &alc_val); alc_val *= 100; alc_val /= 15; if (alc_val > 100) alc_val = 100; return alc_val; } /* void RIG_TS890S::selectA() { cmd = "FR0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "Rx A", cmd, ""); cmd = "FT0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "Tx A", cmd, ""); rxtxa = true; inuse = onA; } void RIG_TS890S::selectB() { cmd = "FR1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "Rx B", cmd, ""); cmd = "FT1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "Tx B", cmd, ""); rxtxa = false; inuse = onB; } void RIG_TS890S::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } int RIG_TS890S::get_split() { size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "FT"; cmd.append(";"); if (wait_char(';', 4, 100, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "FR"; cmd.append(";"); if (wait_char(';', 4, 100, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; // split test split = (tx == '1' ? 2 : 0) + (rx == '1' ? 1 : 0); } return split; } unsigned long long RIG_TS890S::get_vfoA () { cmd = "FA;"; if (wait_char(';', 14, 100, "get vfoA", ASC) < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return A.freq; unsigned long long f = 0ULL; unsigned long long mul = 1ULL; for (size_t n = 12; n > 1; n--) { f += (replystr[p + n] - '0') * mul; mul *= 10; } A.freq = f; return A.freq; } void RIG_TS890S::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd, 0); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS890S::get_vfoB () { cmd = "FB;"; if (wait_char(';', 14, 100, "get vfoB", ASC) < 14) return B.freq; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return B.freq; unsigned long long f = 0ULL; unsigned long long mul = 1ULL; for (size_t n = 12; n > 1; n--) { f += (replystr[p + n] - '0') * mul; mul *= 10; } B.freq = f; return B.freq; } void RIG_TS890S::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd, 0); showresp(WARN, ASC, "set vfo B", cmd, ""); } // Volume control return 0 ... 100 int RIG_TS890S::get_volume_control() { cmd = "AG0;"; if (wait_char(';', 7, 100, "get vol ctrl", ASC) < 7) return 0; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int val = atoi(&replystr[p + 3]); return (int)(val / 2.55); } void RIG_TS890S::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd, 0); } void RIG_TS890S::tune_rig() { cmd = "AC111;"; sendCommand(cmd, 0); } // val 0 .. 100 void RIG_TS890S::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd, 0); } int RIG_TS890S::get_mic_gain() { int val = 0; cmd = "MG;"; if (wait_char(';', 6, 100, "get mic ctrl", ASC) >= 6) { size_t p = replystr.rfind("MG"); if (p == std::string::npos) return val; replystr[p + 5] = 0; val = atoi(&replystr[p + 2]); } return val; } void RIG_TS890S::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TS890S::set_squelch(int val) { cmd = "SQ0"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set squelch", cmd, ""); } int RIG_TS890S::get_squelch() { int val = 0; cmd = "SQ0;"; if (wait_char(';', 7, 100, "get squelch", ASC) >= 7) { size_t p = replystr.rfind("SQ0"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); } return val; } void RIG_TS890S::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } */ flrig-2.0.04/src/rigs/kenwood/TS440.cxx0000664000175000017500000002122514502041135014323 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS440.h" #include "support.h" static const char TS440name_[] = "TS-440"; static std::vectorTS440modes_; static const char *vTS440modes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK"}; static const char TS440_mode_chr[] = { '1', '2', '3', '4', '5', '6' }; static const char TS440_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L' }; RIG_TS440::RIG_TS440() { // base class values name_ = TS440name_; modes_ = TS440modes_; _mode_type = TS440_mode_type; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeB = modeA = def_mode = 1; bwB = bwA = def_bw = 1; freqA = def_freq = 14070000ULL; freqB = 7070000ULL; can_change_alt_vfo = true; has_mode_control = has_ptt_control = true; precision = 10; ndigits = 7; } void RIG_TS440::initialize() { VECTOR (TS440modes_, vTS440modes_); modes_ = TS440modes_; _mode_type = TS440_mode_type; cmd = "AI0;"; // disable auto status sett(""); sendCommand(cmd); } bool RIG_TS440::check () { return true; cmd = "ID;"; get_trace(1, "check ID"); int ret = wait_char(';', 6, 100, "check ID", ASC); gett(""); if (ret < 6) return false; return true; } /* ======================================================================== frequency & mode data are contained in the IF; response IFggmmmkkkhhh snnnzrx yytdfcp; 30 characters including the ; gg~~hhh = Value as defined in FA Command s = "+" or "-" Value of RIT/XIT nnn = Value of RIT/XIT (n.nn kHz.) z = "0" (Not Used in TS-440) r = Value as defined in RT Command x = Value as defined in XT Command yy = Memory Channel No. t = 0 for Receive 1 for Transmit d = Value as defined in MD Command f = Value as defined in FN Command c = Value as defined in SC Command p = Value as defined in SP Command ======================================================================== */ int RIG_TS440::get_IF() { cmd = "IF;"; int ret = wait_char(';', 29, 100, "get PTT", ASC); gett(""); return ret; } unsigned long long RIG_TS440::get_vfoA () { cmd = "FA;"; get_trace(1, "get vfoA"); int ret = wait_char(';', 14, 100, "get vfo A", ASC); gett(""); if (ret < 14) return freqA; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_TS440::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoA"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS440::get_vfoB () { cmd = "FB;"; get_trace(1, "get vfoB"); int ret = wait_char(';', 14, 100, "get vfo B", ASC); gett(""); if (ret < 14) return freqB; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_TS440::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoA"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set vfo B", cmd, ""); } void RIG_TS440::set_modeA(int val) { showresp(WARN, ASC, "set mode A", "", ""); modeA = val; cmd = "MD"; cmd += TS440_mode_chr[val]; cmd += ';'; set_trace(1, "get modeA"); sendCommand(cmd); sett(""); } int RIG_TS440::get_modeA() { int ret = get_IF(); if (ret < 26) return modeA; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeA; modeA = replystr[p+26] - '1'; // 0 - 5 return modeA; } void RIG_TS440::set_modeB(int val) { showresp(WARN, ASC, "set mode B", "", ""); modeB = val; cmd = "MD"; cmd += TS440_mode_chr[val]; cmd += ';'; set_trace(1, "set modeB"); sendCommand(cmd); sett(""); } int RIG_TS440::get_modeB() { int ret = get_IF(); if (ret < 26) return modeB; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return modeB; modeB = replystr[p+26] - '1'; // 0 - 5 return modeB; } int RIG_TS440::get_modetype(int n) { return _mode_type[n]; } void RIG_TS440::selectA() { set_trace(1, "selectA"); cmd = "FN0;"; sendCommand(cmd); sett(""); showresp(WARN, ASC, "select A", "", ""); inuse = onA; } void RIG_TS440::selectB() { set_trace(1, "selectB"); cmd = "FN1;"; sendCommand(cmd); sett(""); showresp(WARN, ASC, "select A", "", ""); inuse = onB; } int RIG_TS440::get_PTT() { get_trace(1, "get PTT"); int ret = get_IF(); if (ret < 26) return ptt_; ptt_ = (replystr[25] == '1'); return ptt_; } /* NOT AVAILABLE IN TS440 // SM cmd 0 ... 100 (rig values 0 ... 15) int RIG_TS440::get_smeter() { cmd = "SM;"; get_trace(1, "get Smeter"); int ret = wait_char(';', 7, 100, "get smeter", ASC); gett(""); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int mtr = atoi(&replystr[p + 2]); mtr = (mtr * 100) / 30; return mtr; } // RM cmd 0 ... 100 (rig values 0 ... 8) int RIG_TS440::get_swr() { cmd = "RM;"; get_trace(1, "get SWR"); int ret = wait_char(';', 8, 100, "get swr", ASC); gett(""); if (ret < 8) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; int mtr = atoi(&replystr[p + 3]); mtr = (mtr * 50) / 30; return mtr; } static std::string bw_str = "FL001001;"; int RIG_TS440::get_bwA() { cmd = "FL;"; get_trace(1, "get bwA"); int ret = wait_char(';', 9, 100, "get bwA", ASC); gett(""); if (ret < 9) return bwA; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwA; replystr[p + 8] = 0; int bw = 0; while (TS440_filters[bw]) { if (strcmp(&replystr[p + 5], TS440_filters[bw]) == 0) return bwA = bw; bw++; } return bwA; } void RIG_TS440::set_bwA(int val) { get_bwA(); showresp(WARN, ASC, "set bw A", "", ""); bwA = val; cmd = bw_str.substr(0, 5); cmd.append(TS440_filters[val]).append(";"); set_trace(1, "set bwA"); sendCommand(cmd); sett(""); } int RIG_TS440::get_bwB() { cmd = "FL;"; get_trace(1, "get bwB"); int ret = wait_char(';', 9, 100, "get bwB", ASC); gett(""); if (ret < 9) return bwB; bw_str = replystr; size_t p = replystr.rfind("FL"); if (p == std::string::npos) return bwB; replystr[p + 8] = 0; int bw = 0; while (TS440_filters[bw]) { if (strcmp(&replystr[p + 5], TS440_filters[bw]) == 0) return bwB = bw; bw++; } return bwB; } void RIG_TS440::set_bwB(int val) { get_bwB(); showresp(WARN, ASC, "set bw B", "", ""); bwB = val; cmd = bw_str.substr(0, 5); cmd.append(TS440_filters[val]).append(";"); set_trace(1, "set bwB"); sendCommand(cmd); sett(""); } int RIG_TS440::def_bandwidth(int val) { if (val == 0 || val == 1) return 4; else if (val == 2 || val == 6) return 5; else if (val == 3) return 1; else if (val == 4) return 3; else if (val == 5 || val == 7) return 2; return 4; } bool RIG_TS440::can_split() { return true; } void RIG_TS440::set_split(bool val) { set_trace(1, "set split"); if (val) { cmd = "FR0;"; sendCommand(cmd); sett(""); cmd = "FT1;"; sendCommand(cmd); sett(""); } else { cmd = "FR0;"; sendCommand(cmd); sett(""); cmd = "FT0;"; sendCommand(cmd); sett(""); } } int RIG_TS440::get_split() { int ret = get_IF(); if (ret < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split; split = replystr[p+32] ? true : false; return split; } // Tranceiver PTT on/off void RIG_TS440::set_PTT_control(int val) { set_trace(1, "set PTT"); if (val) sendCommand("TX;"); else sendCommand("RX;"); sett(""); ptt_ = val; } */ flrig-2.0.04/src/rigs/kenwood/TS140.cxx0000664000175000017500000001206514502041135014322 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS140.h" const char TS140name_[] = "TS140"; static std::vectorTS140modes_; static const char *vTS140modes_[] = { "LSB", "USB", "CW", "FM", "AM", "CWN"}; static const char TS140_mode_type[] = {'L', 'U', 'U', 'U', 'U', 'U'}; RIG_TS140::RIG_TS140() { // base class values name_ = TS140name_; modes_ = TS140modes_; bandwidths_ = vNOBWS; serial_baudrate = BR9600; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 2; has_mode_control = has_ptt_control = true; has_attenuator_control = has_preamp_control = has_power_control = has_volume_control = has_bandwidth_control = has_micgain_control = has_notch_control = has_ifshift_control = has_tune_control = has_swr_control = false; precision = 10; ndigits = 7; } void RIG_TS140::initialize() { VECTOR (TS140modes_, vTS140modes_); modes_ = TS140modes_; bandwidths_ = vNOBWS; } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # IF00014070000 -00300 000200; where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters Test output from Minicom to IF; command IF00014070000 -00300 000200; 0001000 is vfoA in LSB 0002000 is vfoA in USB 0003000 CW 0004000 FM 0005000 AM 0007000 CWN (dont have narrow filter however) 0002100 VFOB in USB 0002001 VFOA in USB SPILT 0012000 PTT on in USB ======================================================================== */ bool RIG_TS140::check () { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "check", ASC); int ret = check_ifstr(); if (ret < 38) return false; return true; } unsigned long long RIG_TS140::get_vfoA () { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get VFO", ASC); int ret = check_ifstr(); if (ret < 38) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[ret - 38 + n] - '0'; freqA = f; return freqA; } void RIG_TS140::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); } int RIG_TS140::get_modetype(int n) { return TS140_mode_type[n]; } void RIG_TS140::set_modeA(int val) { if (val == 5) val++; cmd = "MD0;"; cmd[2] = '1' + (val % 10); sendCommand(cmd); } int RIG_TS140::get_modeA() { modeA = 0; // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get mode", ASC); int ret = check_ifstr(); if (ret < 38) return modeA; int md = replystr[ret - 38 + 29] - '1'; if (md < 0) md = 0; if (md > 5) md = 5; modeA = md; return modeA; } // Tranceiver PTT on/off void RIG_TS140::set_PTT_control(int val) { if (val) sendCommand("TX;"); else sendCommand("RX;"); ptt_ = val; } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters ======================================================================== */ int RIG_TS140::get_PTT() { // cmd = "IF;"; // int ret = wait_char(';', 38, 100, "get VFO", ASC); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } flrig-2.0.04/src/rigs/kenwood/TS2000.cxx0000664000175000017500000006520014502041135014376 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS2000.h" #include "support.h" static const char TS2000name_[] = "TS-2000"; static std::vectorTS2000modes_; static const char *vTS2000modes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R"}; static const char TS2000_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char TS2000_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U' }; static std::vectorTS2000_empty; static const char *vTS2000_empty[] = { "N/A" }; //------------------------------------------------------------------------------ static std::vectorTS2000_SL; static const char *vTS2000_SL[] = { "0", "50", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000" }; static std::vectorTS2000_CAT_SL; static const char *vTS2000_CAT_SL[] = { "SL00;", "SL01;", "SL02;", "SL03;", "SL04;", "SL05;", "SL06;", "SL07;", "SL08;", "SL09;", "SL10;", "SL11;" }; static const char *TS2000_SL_tooltip = "lo cut"; static const char *TS2000_SSB_btn_SL_label = "L"; //------------------------------------------------------------------------------ static std::vectorTS2000_SH; static const char *vTS2000_SH[] = { "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3400", "4000", "5000" }; static std::vectorTS2000_CAT_SH; static const char *vTS2000_CAT_SH[] = { "SH00;", "SH01;", "SH02;", "SH03;", "SH04;", "SH05;", "SH06;", "SH07;", "SH08;", "SH09;", "SH10;", "SH11;" }; static const char *TS2000_SH_tooltip = "hi cut"; static const char *TS2000_SSB_btn_SH_label = "H"; //------------------------------------------------------------------------------ static std::vectorTS2000_AM_SL; static const char *vTS2000_AM_SL[] = { "0", "100", "200", "500" }; static std::vectorTS2000_AM_SH; static const char *vTS2000_AM_SH[] = { "2500", "3000", "4000", "5000" }; //------------------------------------------------------------------------------ static std::vectorTS2000_CWwidths; static const char *vTS2000_CWwidths[] = { "50", "80", "100", "150", "200", "300", "400", "500", "600", "1000", "2000"}; static std::vectorTS2000_CWbw; static const char *vTS2000_CWbw[] = { "FW0050;", "FW0080;", "FW0100;", "FW0150;", "FW0200;", "FW0300;", "FW0400;", "FW0500;", "FW0600;", "FW1000;", "FW2000;" }; //------------------------------------------------------------------------------ static std::vectorTS2000_FSKwidths; static const char *vTS2000_FSKwidths[] = { "250", "500", "1000", "1500"}; static std::vectorTS2000_FSKbw; static const char *vTS2000_FSKbw[] = { "FW0250;", "FW0500;", "FW1000;", "FW1500;" }; //------------------------------------------------------------------------------ static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 2 { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 3 { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 4 { (Fl_Widget *)btnNotch, 214, 125, 50 }, // 5 { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, // 6 { (Fl_Widget *)sldrSQUELCH, 266, 145, 156 }, // 7 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, // 8 { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, // 9 { (Fl_Widget *)NULL, 0, 0, 0 } }; // mid range on loudness static std::string menu012 = "EX01200004"; void RIG_TS2000::initialize() { VECTOR (TS2000modes_, vTS2000modes_); VECTOR (TS2000_empty, vTS2000_empty); VECTOR (TS2000_SL, vTS2000_SL); VECTOR (TS2000_SH, vTS2000_SH); VECTOR (TS2000_CAT_SL, vTS2000_CAT_SL); VECTOR (TS2000_CAT_SH, vTS2000_CAT_SH); VECTOR (TS2000_AM_SL, vTS2000_AM_SL); VECTOR (TS2000_AM_SH, vTS2000_AM_SH); VECTOR (TS2000_CWwidths, vTS2000_CWwidths); VECTOR (TS2000_CWbw, vTS2000_CWbw); VECTOR (TS2000_FSKwidths, vTS2000_FSKwidths); VECTOR (TS2000_FSKbw, vTS2000_FSKbw); modes_ = TS2000modes_; bandwidths_ = TS2000_empty; dsp_SL = TS2000_SL; dsp_SH = TS2000_SH; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrSQUELCH; rig_widgets[8].W = sldrMICGAIN; rig_widgets[9].W = sldrPOWER; menu012.clear(); cmd = "EX0120000;"; // read menu 012 state //might return something like EX01200004; if (wait_char(';', 11, 100, "read ex 012", ASC) == 11) menu012 = replystr; // disable beeps before resetting front panel display to SWR cmd = "EX01200000;"; sendCommand(cmd); sett("No beeps"); select_swr(); // restore state of xcvr beeps // cmd = menu012; // sendCommand(cmd); // get current noise reduction values for NR1 and NR2 std::string current_nr; cmd = "NR;"; if (wait_char(';', 4, 100, "read current NR", ASC) == 4) current_nr = replystr; if (current_nr == "?;") return; cmd = "NR1;"; sendCommand(cmd); gett("get NR"); cmd = "RL;"; if (wait_char(';', 5, 100, "GET noise reduction val", ASC) == 5) { size_t p = replystr.rfind("RL"); if (p != std::string::npos) _nrval1 = atoi(&replystr[p+2]); } cmd = "NR2;"; sendCommand(cmd); gett("get NR value"); cmd = "RL;"; if (wait_char(';', 5, 100, "GET noise reduction val", ASC) == 5) { size_t p = replystr.rfind("RL"); if (p != std::string::npos) _nrval2 = atoi(&replystr[p+2]); } // restore xcvr setting for NR cmd = current_nr; sendCommand(cmd); } void RIG_TS2000::shutdown() { // restore state of xcvr beeps if (menu012.empty()) return; cmd = menu012; sendCommand(cmd); sett("restore beeps"); } static bool is_tuning = false; static int skip_get = 2; RIG_TS2000::RIG_TS2000() { // base class values name_ = TS2000name_; modes_ = TS2000modes_; bandwidths_ = TS2000_empty; dsp_SL = TS2000_SL; SL_tooltip = TS2000_SL_tooltip; SL_label = TS2000_SSB_btn_SL_label; dsp_SH = TS2000_SH; SH_tooltip = TS2000_SH_tooltip; SH_label = TS2000_SSB_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8803; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; has_power_out = has_swr_control = has_alc_control = has_split = has_split_AB = has_dsp_controls = has_rf_control = has_notch_control = has_auto_notch = has_ifshift_control = has_smeter = has_noise_reduction = has_noise_reduction_control = has_noise_control = has_micgain_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_mode_control = has_bandwidth_control = has_sql_control = has_ptt_control = has_extras = true; rxona = true; precision = 1; ndigits = 9; att_level = 0; preamp_level = 0; _noise_reduction_level = 0; _nrval1 = 2; _nrval2 = 4; is_tuning = false; } static int ret = 0; const char * RIG_TS2000::get_bwname_(int n, int md) { static char bwname[20]; if (n > 256) { int hi = (n >> 8) & 0x7F; int lo = n & 0xFF; snprintf(bwname, sizeof(bwname), "%s/%s", (md == LSB || md == USB || md == FM) ? TS2000_SL[lo].c_str() : TS2000_AM_SL[lo].c_str(), (md == LSB || md == USB || md == FM) ? TS2000_SH[hi].c_str() : TS2000_AM_SH[hi].c_str() ); } else { snprintf(bwname, sizeof(bwname), "%s", (md == CW || md == CWR) ? TS2000_CWwidths[n].c_str() : TS2000_FSKwidths[n].c_str()); } return bwname; } int RIG_TS2000::get_smeter() { int smtr = 0; if (rxona) cmd = "SM0;"; else cmd = "SM1;"; get_trace(1, "get_smeter"); ret = wait_char(';', 8, 100, "get smeter", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("SM"); if (p != std::string::npos) { smtr = fm_decimal(replystr.substr(p+3),4); if (rxona) smtr = (smtr * 100) / 30; else smtr = (smtr * 100) / 15; } } return smtr; } // Transceiver power level void RIG_TS2000::set_power_control(double val) { int ival = (int)val; cmd = "PC"; cmd.append(to_decimal(ival, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set pwr ctrl", cmd, ""); sett("pwr control"); } int RIG_TS2000::get_power_out() { int poutmtr = 0; cmd = "SM0;"; get_trace(1, "get_power_out"); ret = wait_char(';', 8, 100, "get power out", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("SM0"); if (p != std::string::npos) { poutmtr = fm_decimal(replystr.substr(p+3),4); if (poutmtr <= 6) poutmtr = poutmtr * 2; else if (poutmtr <= 11) poutmtr = 11 + (poutmtr - 6)*(26 - 11)/(11 - 6); else if (poutmtr <= 18) poutmtr = 26 + (poutmtr - 11)*(50 - 26)/(18 - 11); else poutmtr = 50 + (poutmtr - 18)*(100 - 50)/(27 - 18); if (poutmtr > 100) poutmtr = 100; } } return poutmtr; } double RIG_TS2000::get_power_control() { int pctrl = 0; cmd = "PC;"; get_trace(1, "get_power_contro"); ret = wait_char(';', 6, 100, "get pout", ASC); gett(""); if (ret == 6) { size_t p = replystr.rfind("PC"); if (p != std::string::npos) { pctrl = fm_decimal(replystr.substr(p+2), 3); } } return pctrl; } void RIG_TS2000::set_attenuator(int val) { att_level = val; if (val) cmd = "RA01;"; else cmd = "RA00;"; sendCommand(cmd); showresp(WARN, ASC, "set ATT", cmd, ""); sett("attenuator"); } int RIG_TS2000::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator"); ret = wait_char(';', 7, 100, "get ATT", ASC); gett(""); if (ret == 7) { size_t p = replystr.rfind("RA"); if (p != std::string::npos && (p+3 < replystr.length())) { if (replystr[p+2] == '0' && replystr[p+3] == '0') att_level = 0; else att_level = 1; } } return att_level; } void RIG_TS2000::set_preamp(int val) { preamp_level = val; if (val) cmd = "PA1;"; else cmd = "PA0;"; sendCommand(cmd); showresp(WARN, ASC, "set PRE", cmd, ""); sett("preamp"); } int RIG_TS2000::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp"); ret = wait_char(';', 5, 100, "get PRE", ASC); gett(""); if (ret == 5) { size_t p = replystr.rfind("PA"); if (p != std::string::npos && (p+2 < replystr.length())) { if (replystr[p+2] == '1') preamp_level = 1; else preamp_level = 0; } } return preamp_level; } int RIG_TS2000::set_widths(int val) { int bw; switch (val) { case LSB: case USB: case FM: bandwidths_ = TS2000_SH; dsp_SL = TS2000_SL; SL_tooltip = TS2000_SL_tooltip; SL_label = TS2000_SSB_btn_SL_label; dsp_SH = TS2000_SH; SH_tooltip = TS2000_SH_tooltip; SH_label = TS2000_SSB_btn_SH_label; if (val == FM) bw = 0x8A03; // 200 ... 4000 Hz else bw = 0x8803; // 200 ... 3000 Hz break; case CW: case CWR: bandwidths_ = TS2000_CWwidths; dsp_SL = TS2000_empty; dsp_SH = TS2000_empty; bw = 7; break; case FSK: case FSKR: bandwidths_ = TS2000_FSKwidths; dsp_SL = TS2000_empty; dsp_SH = TS2000_empty; bw = 1; break; case AM: default: bandwidths_ = TS2000_AM_SH; dsp_SL = TS2000_AM_SL; dsp_SH = TS2000_AM_SH; bw = 0x8201; break; } return bw; } std::vector& RIG_TS2000::bwtable(int val) { if (val == LSB || val == USB || val == FM) return TS2000_SH; else if (val == CW || val == CWR) return TS2000_CWwidths; else if (val == FSK || val == FSKR) return TS2000_FSKwidths; //else AM m == 4 return TS2000_AM_SH; } std::vector& RIG_TS2000::lotable(int val) { if (val == LSB || val == USB || val == FM) return TS2000_SL; if (val == AM) return TS2000_AM_SL; return vNOBWS; } std::vector& RIG_TS2000::hitable(int val) { if (val == LSB || val == USB || val == FM) return TS2000_SH; if (val == AM) return TS2000_AM_SH; return vNOBWS; } void RIG_TS2000::set_modeA(int val) { if (val >= (int)(sizeof(TS2000_mode_chr)/sizeof(*TS2000_mode_chr))) return; _currmode = A.imode = val; cmd = "MD"; cmd += TS2000_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); sett("modeA"); A.iBW = set_widths(val); } int RIG_TS2000::get_modeA() { if (tuning()) return A.imode; if (skip_get) { skip_get--; return A.imode; } cmd = "MD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 4, 100, "get mode A", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("MD"); if (p != std::string::npos) { int md = replystr[p+2]; md = md - '1'; if (md == 8) md = 7; A.imode = md; A.iBW = set_widths(A.imode); } } _currmode = A.imode; return A.imode; } void RIG_TS2000::set_modeB(int val) { if (val >= (int)(sizeof(TS2000_mode_chr)/sizeof(*TS2000_mode_chr))) return; _currmode = B.imode = val; cmd = "MD"; cmd += TS2000_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode B", cmd, ""); sett("modeB"); B.iBW = set_widths(val); } int RIG_TS2000::get_modeB() { if (tuning()) return B.imode; if (skip_get) return B.imode; cmd = "MD;"; get_trace(1, "get_modeB"); ret = wait_char(';', 4, 100, "get mode B", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("MD"); if (p != std::string::npos) { int md = replystr[p+2]; md = md - '1'; if (md == 8) md = 7; B.imode = md; B.iBW = set_widths(B.imode); } } _currmode = B.imode; return B.imode; } int RIG_TS2000::adjust_bandwidth(int val) { int bw = 0; if (val == LSB || val == USB) bw = 0x8803; else if (val == FM) bw = 0x8A03; else if (val == AM) bw = 0x8301; else if (val == CW || val == CWR) bw = 7; else if (val == FSK || val == FSKR) bw = 1; return bw; } int RIG_TS2000::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_TS2000::set_bwA(int val) { if (A.imode == LSB || A.imode == USB || A.imode == FM || A.imode == AM) { if (val < 256) return; A.iBW = val; int index = A.iBW & 0x7F; try { cmd = TS2000_CAT_SL[index]; sendCommand(cmd); showresp(WARN, ASC, "set lower", cmd, ""); sett("bwA lower"); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } index = (A.iBW >> 8) & 0x7F; try { cmd = TS2000_CAT_SH[index]; sendCommand(cmd); showresp(WARN, ASC, "set upper", cmd, ""); sett("bwA upper"); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } if (val > 256) return; else if (A.imode == CW || A.imode == CWR) { A.iBW = val; int index = A.iBW & 0x7F; try { cmd = TS2000_CWbw[index]; sendCommand(cmd); showresp(WARN, ASC, "set CW bw", cmd, ""); sett("CW bw"); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else if (A.imode == FSK || A.imode == FSKR) { A.iBW = val; int index = A.iBW & 0x7F; try { cmd = TS2000_FSKbw[index]; sendCommand(cmd); showresp(WARN, ASC, "set FSK bw", cmd, ""); sett("FSK bw"); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } } int RIG_TS2000::get_bwA() { if (tuning()) return A.iBW; if (skip_get) return A.iBW; size_t p; if (A.imode == LSB || A.imode == USB || A.imode == FM || A.imode == AM) { int lo = A.iBW & 0xFF, hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get SL"); ret = wait_char(';', 5, 100, "get SL", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p != std::string::npos) lo = fm_decimal(replystr.substr(2), 2); } cmd = "SH;"; get_trace(1, "get SH"); ret = wait_char(';', 5, 100, "get SH", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p != std::string::npos) hi = fm_decimal(replystr.substr(2), 2); A.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } else if (A.imode == CW || A.imode == CWR) { // CW cmd = "FW;"; get_trace(1, "get FW"); ret = wait_char(';', 7, 100, "get FW", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { try { for (A.iBW = 0; A.iBW < (int)TS2000_CWbw.size(); A.iBW++) if (replystr == TS2000_CWbw.at(A.iBW)) break; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } } } else if (A.imode == FSK || A.imode == FSKR) { cmd = "FW;"; get_trace(1, "get FW"); ret = wait_char(';', 7, 100, "get FW", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { try { for (A.iBW = 0; A.iBW < (int)TS2000_FSKbw.size(); A.iBW++) if (replystr == TS2000_FSKbw.at(A.iBW)) break; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } } } return A.iBW; } void RIG_TS2000::set_bwB(int val) { if (B.imode == LSB || B.imode == USB || B.imode == FM || B.imode == AM) { if (val < 256) return; B.iBW = val; int index = B.iBW & 0x7F; try { cmd = TS2000_CAT_SL[index]; sendCommand(cmd); showresp(WARN, ASC, "set lower", cmd, ""); sett("bwB lower"); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } index = (B.iBW >> 8) & 0x7F; try { cmd = TS2000_CAT_SH[index]; sendCommand(cmd); showresp(WARN, ASC, "set upper", cmd, ""); sett("bwB upper"); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } if (val > 256) return; else if (B.imode == CW || B.imode == CWR) { B.iBW = val; int index = B.iBW & 0x7F; try { cmd = TS2000_CWbw[index]; sendCommand(cmd); showresp(WARN, ASC, "set CW bw", cmd, ""); sett("bwB CW"); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else if (B.imode == FSK || B.imode == FSKR) { B.iBW = val; int index = B.iBW & 0x7F; try { cmd = TS2000_FSKbw[index]; sendCommand(cmd); showresp(WARN, ASC, "set FSK bw", cmd, ""); sett("bwB FSK"); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } } int RIG_TS2000::get_bwB() { if (tuning()) return B.iBW; if (skip_get) return B.iBW; size_t p; if (B.imode == LSB || B.imode == USB || B.imode == FM || B.imode == AM) { int lo = B.iBW & 0xFF, hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get SL"); ret = wait_char(';', 5, 100, "get SL", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p != std::string::npos) lo = fm_decimal(replystr.substr(2), 2); } cmd = "SH;"; get_trace(1, "get SH"); ret = wait_char(';', 5, 100, "get SH", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p != std::string::npos) hi = fm_decimal(replystr.substr(2), 2); B.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } else if (B.imode == CW || B.imode == CWR) { cmd = "FW;"; get_trace(1, "get FW"); ret = wait_char(';', 7, 100, "get FW", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { try { for (B.iBW = 0; B.iBW < (int)TS2000_CWbw.size(); B.iBW++) if (replystr == TS2000_CWbw.at(B.iBW)) break; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } } } else if (B.imode == FSK || B.imode == FSKR) { cmd = "FW;"; get_trace(1, "get FW"); ret = wait_char(';', 7, 100, "get FW", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { replystr = replystr.substr(p); try { for (B.iBW = 0; B.iBW < (int)TS2000_FSKbw.size(); B.iBW++) if (replystr == TS2000_FSKbw.at(B.iBW)) break; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } } } return B.iBW; } int RIG_TS2000::get_modetype(int n) { if (n >= (int)(sizeof(TS2000_mode_type)/sizeof(*TS2000_mode_type))) return 0; return TS2000_mode_type[n]; } void RIG_TS2000::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = 400; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 700; } void RIG_TS2000::set_notch(bool on, int val) { if (on) { cmd = "BC2;"; // set manual notch sendCommand(cmd); showresp(WARN, ASC, "set notch on", cmd, ""); sett("notch ON"); cmd = "BP"; // val = round((val - 220) / 50); val = round((val - 200) / 50); cmd.append(to_decimal(val, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set notch val", cmd, ""); sett("notch val"); } else { cmd = "BC0;"; // no notch action sendCommand(cmd); showresp(WARN, ASC, "set notch off", cmd, ""); sett("notch OFF"); } } bool RIG_TS2000::get_notch(int &val) { bool ison = false; cmd = "BC;"; get_trace(1, "get_notch_on_off"); ret = wait_char(';', 4, 100, "get notch on/off", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("BC"); if (p != std::string::npos) { if (replystr[p+2] == '2') { ison = true; cmd = "BP;"; get_trace(1, "get_notch_val"); ret = wait_char(';', 6, 100, "get notch val", ASC); gett(""); if (ret == 6) { gett("notch val"); p = replystr.rfind("BP"); if (p != std::string::npos) val = 200 + 50 * fm_decimal(replystr.substr(p+2),3); } } } } return (ison); } void RIG_TS2000::get_notch_min_max_step(int &min, int &max, int &step) { min = 200; max = 3350; step = 50; } void RIG_TS2000::set_auto_notch(int v) { cmd = v ? "NT1;" : "NT0;"; sendCommand(cmd); showresp(WARN, ASC, "set auto notch", cmd, ""); sett("auto notch"); } int RIG_TS2000::get_auto_notch() { int anotch = 0; cmd = "NT;"; get_trace(1, "get_auto_notch"); ret = wait_char(';', 4, 100, "get auto notch", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("NT"); if (p != std::string::npos) { anotch = (replystr[p+2] == '1'); } } return anotch; } void RIG_TS2000::set_noise_reduction(int val) { if (val == -1) { return; } _noise_reduction_level = val; if (_noise_reduction_level == 0) { nr_label("NR", false); } else if (_noise_reduction_level == 1) { nr_label("NR1", true); } else if (_noise_reduction_level == 2) { nr_label("NR2", true); } cmd.assign("NR"); cmd += '0' + _noise_reduction_level; cmd += ';'; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); sett("noise reduction"); } int RIG_TS2000::get_noise_reduction() { cmd = rsp = "NR"; cmd.append(";"); get_trace(1, "get_noise_reduction"); ret = wait_char(';', 4, 100, "GET noise reduction", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return _noise_reduction_level; _noise_reduction_level = replystr[p+2] - '0'; } if (replystr == "?;") { _noise_reduction_level = 0; return 0; } if (_noise_reduction_level == 1) { nr_label("NR1", true); } else if (_noise_reduction_level == 2) { nr_label("NR2", true); } else { nr_label("NR", false); } return _noise_reduction_level; } void RIG_TS2000::set_noise_reduction_val(int val) { if (_noise_reduction_level == 0) return; if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; cmd.assign("RL").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); sett("noise reduction val"); } int RIG_TS2000::get_noise_reduction_val() { int nrval = 0; if (_noise_reduction_level == 0) return 0; int val = progStatus.noise_reduction_val; cmd = rsp = "RL"; cmd.append(";"); get_trace(1, "get_noise_reduction_val"); ret = wait_char(';', 5, 100, "GET noise reduction val", ASC); gett(""); if (ret == 5) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) { nrval = (_noise_reduction_level == 1 ? _nrval1 : _nrval2); return nrval; } val = atoi(&replystr[p+2]); } if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; return val; } //====================== vfo controls void RIG_TS2000::selectA() { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); inuse = onA; } void RIG_TS2000::selectB() { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); inuse = onB; } unsigned long long RIG_TS2000::get_vfoA () { cmd = "FA;"; if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } return A.freq; } void RIG_TS2000::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS2000::get_vfoB () { cmd = "FB;"; if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) return B.freq; size_t p = replystr.rfind("FB"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; B.freq = f; } return B.freq; } void RIG_TS2000::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } void RIG_TS2000::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } int RIG_TS2000::get_split() { size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "FT"; cmd.append(";"); if (wait_char(';', 4, 100, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "FR"; cmd.append(";"); if (wait_char(';', 4, 100, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; } if (tx == '0' && rx == '0') split = 0; else if (tx == '1' && rx == '0') split = 1; else if (tx == '0' && rx == '1') split = 2; else if (tx == '1' && rx == '1') split = 3; return split; } flrig-2.0.04/src/rigs/kenwood/TS590SG.cxx0000664000175000017500000007777614502041135014611 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "kenwood/TS590SG.h" #include "support.h" static const char TS590SGname_[] = "TS-590SG"; static std::vectorTS590SGmodes_; static const char *vTS590SGmodes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R", "LSB-D", "USB-D", "FM-D", "AM-D"}; static const char TS590SG_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9', '1', '2', '4', '5' }; static const char TS590SG_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U', 'L', 'U', 'U', 'U' }; //---------------------------------------------------------------------- static std::vectorTS590SG_empty; static const char *vTS590SG_empty[] = { "N/A" }; //---------------------------------------------------------------------- static int DEF_SL_SH = 0x8A03; static std::vectorTS590SG_SSB_SL; static const char *vTS590SG_SSB_SL[] = { "0", "50", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000" }; static std::vectorTS590SG_CAT_ssb_SL; static const char *vTS590SG_CAT_ssb_SL[] = { "SL00;", "SL01;", "SL02;", "SL03;", "SL04;", "SL05;", "SL06;", "SL07;", "SL08;", "SL09;", "SL10;", "SL11;" }; static const char *TS590SG_SSB_SL_tooltip = "lo cut"; static const char *TS590SG_SSB_btn_SL_label = "L"; static std::vectorTS590SG_SSB_SH; static const char *vTS590SG_SSB_SH[] = { "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3400", "4000", "5000" }; static std::vectorTS590SG_CAT_ssb_SH; static const char *vTS590SG_CAT_ssb_SH[] = { "SH00;", "SH01;", "SH02;", "SH03;", "SH04;", "SH05;", "SH06;", "SH07;", "SH08;", "SH09;", "SH10;", "SH11;", "SH12;", "SH13;" }; static const char *TS590SG_SSB_SH_tooltip = "hi cut"; static const char *TS590SG_SSB_btn_SH_label = "H"; //---------------------------------------------------------------------- static int DEF_width_shift = 0x8D05; static std::vectorTS590SG_DATA_width; static const char *vTS590SG_DATA_width[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500", "2000", "2500" }; static std::vectorTS590SG_CAT_data_width; static const char *vTS590SG_CAT_data_width[] = { "SL00;", "SL01;", "SL02;", "SL03;", "SL04;", "SL05;", "SL06;", "SL07;", "SL08;", "SL09;", "SL10;", "SL11;", "SL12;", "SL13;" }; static const char *TS590SG_DATA_W_tooltip = "width"; static const char *TS590SG_DATA_W_btn_label = "W"; static std::vectorTS590SG_DATA_shift; static const char *vTS590SG_DATA_shift[] = { "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2210" }; static std::vectorTS590SG_CAT_data_shift; static const char *vTS590SG_CAT_data_shift[] = { "SH00;", "SH01;", "SH02;", "SH03;", "SH04;", "SH05;", "SH06;", "SH07;", "SH08;", "SH09;", "SH10;", "SH11;", "SH12;" }; static const char *TS590SG_DATA_S_tooltip = "shift"; static const char *TS590SG_DATA_S_btn_label = "S"; //---------------------------------------------------------------------- static int DEF_am = 0x8201; static std::vectorTS590SG_AM_SL; static const char *vTS590SG_AM_SL[] = { "10", "100", "200", "500" }; static std::vectorTS590SG_CAT_am_SL; static const char *vTS590SG_CAT_am_SL[] = { "SL00;", "SL01;", "SL02;", "SL03;"}; static const char *TS590SG_AM_SL_tooltip = "lo cut"; static const char *TS590SG_AM_btn_SL_label = "L"; static std::vectorTS590SG_AM_SH; static const char *vTS590SG_AM_SH[] = { "2500", "3000", "4000", "5000" }; static std::vectorTS590SG_CAT_am_SH; static const char *vTS590SG_CAT_am_SH[] = { "SH00;", "SH01;", "SH02;", "SH03;"}; static const char *TS590SG_AM_SH_tooltip = "hi cut"; static const char *TS590SG_AM_btn_SH_label = "H"; //---------------------------------------------------------------------- static int DEF_cw = 7; static std::vectorTS590SG_CWwidths; static const char *vTS590SG_CWwidths[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500", "2000", "2500"}; static std::vectorTS590SG_CWbw; static const char *vTS590SG_CWbw[] = { "FW0050;", "FW0080;", "FW0100;", "FW0150;", "FW0200;", "FW0250;", "FW0300;", "FW0400;", "FW0500;", "FW0600;", "FW1000;", "FW1500;", "FW2000;", "FW2500;"}; //---------------------------------------------------------------------- static int DEF_fsk = 1; static std::vectorTS590SG_FSKwidths; static const char *vTS590SG_FSKwidths[] = { "250", "500", "1000", "1500"}; static std::vectorTS590SG_FSKbw; static const char *vTS590SG_FSKbw[] = { "FW0250;", "FW0500;", "FW1000;", "FW1500;" }; //---------------------------------------------------------------------- static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 2 { (Fl_Widget *)btnNR, 2, 165, 50 }, // 3 { (Fl_Widget *)sldrNR, 54, 165, 156 }, // 4 { (Fl_Widget *)sldrPOWER, 54, 185, 368 }, // 5 { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 6 { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 7 { (Fl_Widget *)btnNotch, 214, 125, 50 }, // 8 { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, // 9 { (Fl_Widget *)sldrSQUELCH, 266, 145, 156 }, // 10 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, // 11 { (Fl_Widget *)NULL, 0, 0, 0 } }; static std::string menu005; void RIG_TS590SG::initialize() { VECTOR (TS590SGmodes_, vTS590SGmodes_); VECTOR (TS590SG_empty, vTS590SG_empty); VECTOR (TS590SG_SSB_SL, vTS590SG_SSB_SL); VECTOR (TS590SG_CAT_ssb_SL, vTS590SG_CAT_ssb_SL); VECTOR (TS590SG_SSB_SH, vTS590SG_SSB_SH); VECTOR (TS590SG_CAT_ssb_SH, vTS590SG_CAT_ssb_SH); VECTOR (TS590SG_DATA_width, vTS590SG_DATA_width); VECTOR (TS590SG_CAT_data_width, vTS590SG_CAT_data_width); VECTOR (TS590SG_DATA_shift, vTS590SG_DATA_shift); VECTOR (TS590SG_CAT_data_shift, vTS590SG_CAT_data_shift); VECTOR (TS590SG_AM_SL, vTS590SG_AM_SL); VECTOR (TS590SG_CAT_am_SL, vTS590SG_CAT_am_SL); VECTOR (TS590SG_AM_SH, vTS590SG_AM_SH); VECTOR (TS590SG_CAT_am_SH, vTS590SG_CAT_am_SH); VECTOR (TS590SG_CWwidths, vTS590SG_CWwidths); VECTOR (TS590SG_CWbw, vTS590SG_CWbw); VECTOR (TS590SG_FSKwidths, vTS590SG_FSKwidths); VECTOR (TS590SG_FSKbw, vTS590SG_FSKbw); modes_ = TS590SGmodes_; bandwidths_ = TS590SG_SSB_SH; dsp_SL = TS590SG_SSB_SL; dsp_SH = TS590SG_SSB_SH; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnNR; rig_widgets[4].W = sldrNR; rig_widgets[5].W = sldrPOWER; rig_widgets[6].W = btnIFsh; rig_widgets[7].W = sldrIFSHIFT; rig_widgets[8].W = btnNotch; rig_widgets[9].W = sldrNOTCH; rig_widgets[10].W = sldrSQUELCH; rig_widgets[11].W = sldrMICGAIN; // cmd = "EX0050000;"; // if (wait_char(';', 11, 100, "read ex 003", ASC) == 11) // menu005 = replystr; // cmd = "EX005000000;"; // sendCommand(cmd); cmd = "AC000;"; sendCommand(cmd); selectA(); get_preamp(); get_attenuator(); } void RIG_TS590SG::shutdown() { // restore state of xcvr beeps // cmd = menu005; // sendCommand(cmd); } RIG_TS590SG::RIG_TS590SG() { name_ = TS590SGname_; modes_ = TS590SGmodes_; bandwidths_ = TS590SG_SSB_SH; dsp_SL = TS590SG_SSB_SL; SL_tooltip = TS590SG_SSB_SL_tooltip; SL_label = TS590SG_SSB_btn_SL_label; dsp_SH = TS590SG_SSB_SH; SH_tooltip = TS590SG_SSB_SH_tooltip; SH_label = TS590SG_SSB_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR115200; stopbits = 1; serial_retries = 2; serial_write_delay = 5; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = USB; B.iBW = A.iBW = DEF_SL_SH; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; nb_level = 2; has_micgain_control = has_ifshift_control = false; has_auto_notch = has_notch_control = has_sql_control = has_swr_control = has_noise_reduction = has_noise_reduction_control = has_alc_control = has_dsp_controls = has_smeter = has_power_out = has_split = has_split_AB = has_noise_control = has_micgain_control = has_rf_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_mode_control = has_bandwidth_control = has_ifshift_control = has_ptt_control = true; rxtxa = true; precision = 1; ndigits = 8; att_level = 0; preamp_level = 0; noise_reduction_level = 0; } static int ret = 0; const char * RIG_TS590SG::get_bwname_(int n, int md) { static char bwname[20]; if (n > 256) { int hi = (n >> 8) & 0x7F; int lo = n & 0xFF; snprintf(bwname, sizeof(bwname), "%s/%s", (md == LSB || md == USB || md == FM) ? TS590SG_SSB_SL[lo].c_str() : (md == AM || md == AMD) ? TS590SG_AM_SL[lo].c_str() : TS590SG_DATA_width[lo].c_str(), (md == LSB || md == USB || md == FM) ? TS590SG_SSB_SH[hi].c_str() : (md == AM || md == AMD) ? TS590SG_AM_SH[hi].c_str() : TS590SG_DATA_shift[hi].c_str() ); } else { snprintf(bwname, sizeof(bwname), "%s", (md == CW || md == CWR) ? TS590SG_CWwidths[n].c_str() : TS590SG_FSKwidths[n].c_str()); } return bwname; } int RIG_TS590SG::get_smeter() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_smeter"); ret = wait_char(';', 8, 100, "get", ASC); gett(""); if (ret < 8) return 0; size_t p = replystr.find("SM0"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; mtr = atoi(&replystr[p + 3]); mtr *= 50; mtr /= 15; if (mtr > 100) mtr = 100; return mtr; } int RIG_TS590SG::get_power_out() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_power_out"); ret = wait_char(';', 8, 100, "get power", ASC); gett(""); if (ret < 8) return mtr; size_t p = replystr.rfind("SM0"); if (p == std::string::npos) return mtr; mtr = atoi(&replystr[p + 3]); mtr *= 50; mtr /= 18; if (mtr > 100) mtr = 100; return mtr; } // Transceiver power level void RIG_TS590SG::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd, 0); } double RIG_TS590SG::get_power_control() { cmd = "PC;"; get_trace(1, "get_power_control"); ret = wait_char(';', 6, 100, "get pwr ctrl", ASC); gett(""); if (ret < 6) return 0; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return 0; int mtr = 0; replystr[p + 5] = 0; mtr = atoi(&replystr[p + 2]); return mtr; } void RIG_TS590SG::set_attenuator(int val) { att_level = val; if (val) cmd = "RA01;"; else cmd = "RA00;"; sendCommand(cmd, 0); } int RIG_TS590SG::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator"); ret = wait_char(';', 7, 100, "get att", ASC); gett(""); if (ret < 7) return 0; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return 0; if (replystr[p + 2] == '0' && replystr[p + 3] == '0') att_level = 0; else att_level = 1; return att_level; } void RIG_TS590SG::set_preamp(int val) { preamp_level = val; if (val) cmd = "PA1;"; else cmd = "PA0;"; sendCommand(cmd, 0); } int RIG_TS590SG::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp"); ret = wait_char(';', 5, 100, "get preamp", ASC); gett(""); if (ret < 5) return 0; size_t p = replystr.rfind("PA"); if (p == std::string::npos) return 0; if (replystr[p + 2] == '1') preamp_level = 1; else preamp_level = 0; return preamp_level; } //====================================================================== // mode commands //====================================================================== void RIG_TS590SG::set_modeA(int val) { active_mode = A.imode = val; cmd = "MD"; cmd += TS590SG_mode_chr[val]; cmd += ';'; sendCommand(cmd, 0); showresp(ERR, ASC, "set mode A", cmd, ""); if ( val == LSBD || val == USBD || val == FMD || val == AMD) { data_mode = true; cmd = "DA1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data A", cmd, ""); } else if (val == LSB || val == USB || val == FM || val == AM) { data_mode = false; cmd = "DA0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data A", cmd, ""); } set_widths(val); } int RIG_TS590SG::get_modeA() { int md = A.imode; cmd = "MD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 4, 100, "get mode A", ASC); gett(""); if (ret < 4) return A.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return A.imode; switch (replystr[p + 2]) { case '1' : md = LSB; break; case '2' : md = USB; break; case '3' : md = CW; break; case '4' : md = FM; break; case '5' : md = AM; break; case '6' : md = FSK; break; case '7' : md = CWR; break; case '9' : md = FSKR; break; default : md = A.imode; } if (md == LSB || md == USB || md == FM || md == AM) { cmd = "DA;"; get_trace(1, "get_modeA DATA"); ret = wait_char(';', 4, 100, "get data A", ASC); gett(""); if (ret < 4) return A.imode; p = replystr.rfind("DA"); if (p == std::string::npos) return A.imode; if (replystr[p + 2] == '1') { data_mode = true; if (md == LSB) md = LSBD; else if (md == USB) md = USBD; else if (md == FM) md = FMD; else if (md == AM) md = AMD; } } if (md != A.imode) { active_mode = A.imode = md; set_widths(md); } return A.imode; } void RIG_TS590SG::set_modeB(int val) { active_mode = B.imode = val; cmd = "MD"; cmd += TS590SG_mode_chr[val]; cmd += ';'; sendCommand(cmd, 0); showresp(WARN, ASC, "set mode B", cmd, ""); if ( val == LSBD || val == USBD || val == FMD || val == AMD) { data_mode = true; cmd = "DA1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data B", cmd, ""); } else if (val == LSB || val == USB || val == FM || val == AM) { cmd = "DA0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data B", cmd, ""); } set_widths(val); } int RIG_TS590SG::get_modeB() { int md = B.imode; cmd = "MD;"; get_trace(1, "get_modeB"); ret = wait_char(';', 4, 100, "get mode B", ASC); gett(""); if (ret < 4) return B.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return B.imode; switch (replystr[p + 2]) { case '1' : md = LSB; break; case '2' : md = USB; break; case '3' : md = CW; break; case '4' : md = FM; break; case '5' : md = AM; break; case '6' : md = FSK; break; case '7' : md = CWR; break; case '9' : md = FSKR; break; default : md = B.imode; } if (md == LSB || md == USB || md == FM || md == AM) { cmd = "DA;"; get_trace(1, "get_modeB DATA"); ret = wait_char(';', 4, 100, "get dat B", ASC); gett(""); if (ret < 4) return B.imode; p = replystr.rfind("DA"); if (p == std::string::npos) return B.imode; if (replystr[p + 2] == '1') { data_mode = true; if (md == LSB) md = LSBD; else if (md == USB) md = USBD; else if (md == FM) md = FMD; else if (md == AM) md = AMD; } } if (md != B.imode) { active_mode = B.imode = md; set_widths(md); } return B.imode; } //====================================================================== // Bandpass filter commands //====================================================================== int RIG_TS590SG::set_widths(int val) { int bw = 0; if (val == LSB || val == USB || val == FM || val == FMD) { bandwidths_ = TS590SG_SSB_SH; dsp_SL = TS590SG_SSB_SL; dsp_SH = TS590SG_SSB_SH; SL_tooltip = TS590SG_SSB_SL_tooltip; SL_label = TS590SG_SSB_btn_SL_label; SH_tooltip = TS590SG_SSB_SH_tooltip; SH_label = TS590SG_SSB_btn_SH_label; bw = DEF_SL_SH; // 200 lower, 3000 upper } else if (val == CW || val == CWR) { bandwidths_ = TS590SG_CWwidths; dsp_SL = TS590SG_empty; dsp_SH = TS590SG_empty; bw = DEF_cw; } else if (val == FSK || val == FSKR) { bandwidths_ = TS590SG_FSKwidths; dsp_SL = TS590SG_empty; dsp_SH = TS590SG_empty; bw = 1; } else if (val == AM || val == AMD) { // val == 4 ==> AM bandwidths_ = TS590SG_AM_SH; dsp_SL = TS590SG_AM_SL; dsp_SH = TS590SG_AM_SH; SL_tooltip = TS590SG_AM_SL_tooltip; SL_label = TS590SG_AM_btn_SL_label; SH_tooltip = TS590SG_AM_SH_tooltip; SH_label = TS590SG_AM_btn_SH_label; bw = DEF_am; } else if (val == LSBD || val == USBD) { bandwidths_ = TS590SG_DATA_width; dsp_SL = TS590SG_DATA_shift; SL_tooltip = TS590SG_DATA_S_tooltip; SL_label = TS590SG_DATA_S_btn_label; dsp_SH = TS590SG_DATA_width; SH_tooltip = TS590SG_DATA_W_tooltip; SH_label = TS590SG_DATA_W_btn_label; bw = DEF_width_shift; } return bw; } std::vector& RIG_TS590SG::bwtable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS590SG_SSB_SH; else if (m == CW || m == CWR) return TS590SG_CWwidths; else if (m == FSK || m == FSKR) return TS590SG_FSKwidths; else if (m == AM || m == AMD) return TS590SG_AM_SH; else return TS590SG_DATA_width; } std::vector& RIG_TS590SG::lotable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS590SG_SSB_SL; else if (m == AM || m == AMD) return TS590SG_AM_SL; else if (m == LSBD || m == USBD) return TS590SG_DATA_shift; // CW CWR FSK FSKR return vNOBWS; } std::vector& RIG_TS590SG::hitable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS590SG_SSB_SH; else if (m == AM || m == AMD) return TS590SG_AM_SH; else if (m == LSBD || m == USBD) return TS590SG_DATA_width; // CW CWR FSK FSKR return vNOBWS; } int RIG_TS590SG::adjust_bandwidth(int val) { if (val == LSB || val == USB || val == FM || val == FMD) return DEF_SL_SH; else if (val == LSBD || val == USBD) return DEF_width_shift; else if (val == CW || val == CWR) return DEF_cw; else if (val == FSK || val == FSKR) return DEF_fsk; // else if (val == AM) return DEF_am; } int RIG_TS590SG::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_TS590SG::set_bwA(int val) { // LSB, USB, FM, FM-D if (A.imode == LSB || A.imode == USB || A.imode == FM || A.imode == FMD) { if (val < 256) return; A.iBW = val; cmd = TS590SG_CAT_ssb_SL[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS590SG_CAT_ssb_SH[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } // LSB-D, USB-D if (A.imode == LSBD || A.imode == USBD) { if (val < 256) return; A.iBW = val; cmd = TS590SG_CAT_data_shift[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set shift", cmd, ""); cmd = TS590SG_CAT_data_width[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set width", cmd, ""); return; } // AM if (A.imode == AM || A.imode == AMD) { if (val < 256) return; A.iBW = val; cmd = TS590SG_CAT_am_SL[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS590SG_CAT_am_SH[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (val > 256) return; // CW if (A.imode == CW || A.imode == CWR) { A.iBW = val; cmd = TS590SG_CWbw[A.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set CW bw", cmd, ""); return; } // FSK if (A.imode == FSK || A.imode == FSKR) { A.iBW = val; cmd = TS590SG_FSKbw[A.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set FSK bw", cmd, ""); return; } } void RIG_TS590SG::set_bwB(int val) { if (B.imode == LSB || B.imode == USB || B.imode == FM || B.imode == FMD) { if (val < 256) return; B.iBW = val; cmd = TS590SG_CAT_ssb_SL[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS590SG_CAT_ssb_SH[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (B.imode == LSBD || B.imode == USBD) { // SSB data mode if (val < 256) return; B.iBW = val; cmd = TS590SG_CAT_data_shift[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set shift", cmd, ""); cmd = TS590SG_CAT_data_width[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set width", cmd, ""); return; } if (B.imode == AM || B.imode == AMD) { if (val < 256) return; B.iBW = val; cmd = TS590SG_AM_SL[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS590SG_AM_SH[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (val > 256) return; if (B.imode == CW || B.imode == CWR) { B.iBW = val; cmd = TS590SG_CWbw[B.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set CW bw", cmd, ""); return; } if (B.imode == FSK || B.imode == FSKR) { B.iBW = val; cmd = TS590SG_FSKbw[B.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set FSK bw", cmd, ""); return; } } int RIG_TS590SG::get_bwA() { int i = 0, lo = 0, hi = 0; size_t p; switch (A.imode) { case CW: case CWR: A.iBW = DEF_cw; cmd = "FW;"; get_trace(1, "get_bwA FW"); ret = wait_char(';', 7, 100, "get CW width", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 14; i++) if (replystr.find(TS590SG_CWbw[i]) == p) break; if (i == 14) i = 13; A.iBW = i; } } break; case FSK: case FSKR: A.iBW = DEF_fsk; cmd = "FW;"; get_trace(1, "get_bwA FW"); ret = wait_char(';', 7, 100, "get FSK width", ASC); gett(""); if (ret == 7 ) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS590SG_FSKbw[i]) == p) break; if (i == 4) i = 3; A.iBW = i; } } break; case LSB: case USB: case FM: A.iBW = DEF_SL_SH; lo = A.iBW & 0x7F; hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_bwA SSB SL"); ret = wait_char(';', 5, 100, "get lower", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; get_trace(1, "get_bwA SSB SL"); ret = wait_char(';', 5, 100, "get upper", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); A.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; case LSBD: case USBD: case FMD: A.iBW = DEF_width_shift; lo = A.iBW & 0x7F; hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_bwA DIGI"); ret = wait_char(';', 5, 100, "get width", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; get_trace(1, "get_bwA SSB SL"); ret = wait_char(';', 5, 100, "get shift", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); A.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; } return A.iBW; } int RIG_TS590SG::get_bwB() { int i = 0, lo = 0, hi = 0; size_t p; switch (B.imode) { case CW: case CWR: B.iBW = DEF_cw; cmd = "FW;"; get_trace(1, "get_bwB FW"); ret = wait_char(';', 7, 100, "get CW width", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 14; i++) if (replystr.find(TS590SG_CWbw[i]) == p) break; if (i == 14) i = 13; B.iBW = i; } } break; case FSK: case FSKR: B.iBW = DEF_fsk; cmd = "FW;"; get_trace(1, "get_bwB FW"); ret = wait_char(';', 7, 100, "get FSK width", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS590SG_FSKbw[i]) == p) break; if (i == 4) i = 3; B.iBW = i; } } break; case LSB: case USB: case FM: B.iBW = DEF_SL_SH; lo = B.iBW & 0xFF; hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_bwB SL"); ret = wait_char(';', 5, 100, "get lower", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; get_trace(1, "get_bwB SH"); ret = wait_char(';', 5, 100, "get upper", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); B.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; case LSBD: case USBD: case FMD: B.iBW = DEF_width_shift; lo = B.iBW & 0x7F; hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_bwB Sl"); ret = wait_char(';', 5, 100, "get width", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; get_trace(1, "get_bwB SH"); ret = wait_char(';', 5, 100, "get shift", ASC); gett(""); if (ret == 5 ) { p = replystr.rfind("SH"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); B.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } break; } return B.iBW; } int RIG_TS590SG::get_modetype(int n) { return TS590SG_mode_type[n]; } //====================================================================== // IF shift command only available if the transceiver is in the CW mode // step size is 50 Hz //====================================================================== void RIG_TS590SG::set_if_shift(int val) { if (active_mode == CW || active_mode == CWR) { // cw modes progStatus.shift_val = val; cmd = "IS "; cmd.append(to_decimal(abs(val),4)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set IF shift", cmd, ""); } } bool RIG_TS590SG::get_if_shift(int &val) { if (active_mode == CW || active_mode == CWR) { // cw modes cmd = "IS;"; get_trace(1, "get_if_shift"); ret = wait_char(';', 8, 100, "get IF shift", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("IS"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 4); } else val = progStatus.shift_val; return true; } } val = progStatus.shift_val; return false; } void RIG_TS590SG::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = 300; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 800; } void RIG_TS590SG::set_noise_reduction(int val) { if (val == -1) { if (noise_reduction_level == 1) { nr_label("NR1", true); } else if (noise_reduction_level == 2) { nr_label("NR2", true); } return; } if (noise_reduction_level == 0) { noise_reduction_level = 1; nr_label("NR1", true); } else if (noise_reduction_level == 1) { noise_reduction_level = 2; nr_label("NR2", true); } else if (noise_reduction_level == 2) { noise_reduction_level = 0; nr_label("NR", false); } cmd.assign("NR"); cmd += '0' + noise_reduction_level; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); } int RIG_TS590SG::get_noise_reduction() { cmd = rsp = "NR"; cmd.append(";"); get_trace(1, "get_noise_reduction"); ret = wait_char(';', 4, 100, "GET noise reduction", ASC); gett(""); if (ret == 4 ) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return noise_reduction_level; noise_reduction_level = replystr[p+2] - '0'; if (noise_reduction_level == 1) { nr_label("NR1", true); } else if (noise_reduction_level == 2) { nr_label("NR2", true); } else { nr_label("NR", false); } } return noise_reduction_level; } void RIG_TS590SG::set_noise_reduction_val(int val) { cmd.assign("RL").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); } int RIG_TS590SG::get_noise_reduction_val() { if (noise_reduction_level == 0) return 0; int val = 1; cmd = rsp = "RL"; cmd.append(";"); get_trace(1, "get_noise_reduction_val"); ret = wait_char(';', 5, 100, "GET noise reduction val", ASC); gett(""); if (ret == 5) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.noise_reduction_val; val = atoi(&replystr[p+2]); } return val; } void RIG_TS590SG::set_auto_notch(int v) { cmd.assign("NT").append(v ? "1" : "0" ).append("0;"); sendCommand(cmd); showresp(WARN, ASC, "SET Auto Notch", cmd, ""); } int RIG_TS590SG::get_auto_notch() { cmd = "NT;"; get_trace(1, "get_auto_notch"); ret = wait_char(';', 5, 100, "get auto notch", ASC); gett(""); if (ret == 5) { size_t p = replystr.rfind("NT"); if (p == std::string::npos) return 0; if (replystr[p+2] == '1') return 1; } return 0; } void RIG_TS590SG::set_notch(bool on, int val) { if (on) { cmd.assign("NT20;"); sendCommand(cmd); showresp(WARN, ASC, "Set notch ON", cmd, ""); int bp = (int)((val - 300.0) * 128.0 / 2700.0); cmd.assign("BP").append(to_decimal(bp, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set notch freq", cmd, ""); } else { cmd.assign("NT00;"); sendCommand(cmd); showresp(WARN, ASC, "Set notch OFF", cmd, ""); } } bool RIG_TS590SG::get_notch(int &val) { val = 300; cmd = "NT;"; get_trace(1, "get_notch"); ret = wait_char(';', 5, 100, "get notch state", ASC); gett(""); if (ret == 5) { size_t p = replystr.rfind("NT"); if (p == std::string::npos) return 0; if (replystr[p+2] == '2') { cmd.assign("BP;"); get_trace(1, "get_notch_freq"); ret = wait_char(';', 6, 100, "get notch freq", ASC); gett(""); if (ret == 6) { size_t p = replystr.rfind("BP"); if (p != std::string::npos) val = (int)((atoi(&replystr[p+2]) * 2700.0 / 128.0) + 300.0); return 1; } } } return 0; } void RIG_TS590SG::get_notch_min_max_step(int &min, int &max, int &step) { min = 300; max = 3000; step = 20; } void RIG_TS590SG::set_noise(bool val) { if (nb_level == 0) { nb_level = 1; nb_label("NB 1", true); } else if (nb_level == 1) { nb_level = 2; nb_label("NB 2", true); } else if (nb_level == 2) { nb_level = 3; nb_label("NB 3", true); } else if (nb_level == 3) { nb_level = 0; nb_label("NB", false); } cmd = "NB0;"; cmd[2] += nb_level; LOG_INFO("%s", cmd.c_str()); sendCommand(cmd, 0); } int RIG_TS590SG::get_noise() { cmd = "NB;"; get_trace(1, "get_noise"); ret = wait_char(';', 4, 100, "get Noise Blanker", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("NB"); if (p == std::string::npos) return 0; if (replystr[p+2] == '0') return 0; nb_level = replystr[p+2] - '0'; if (nb_level == 0) { nb_label("NB", false); } else if (nb_level == 1) { nb_label("NB 1", true); } else if (nb_level == 2) { nb_label("NB 2", true); } else if (nb_level == 3) { nb_label("NB 3", true); } } return nb_level; } void RIG_TS590SG::set_rf_gain(int val) { cmd = "RG000;"; int rfval = 255 - val; for (int i = 4; i > 1; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, ""); } int RIG_TS590SG::get_rf_gain() { int rfval = 0; cmd = rsp = "RG"; cmd += ';'; get_trace(1, "get_rf_gain"); ret = wait_char(';', 6, 100, "get rfgain", ASC); gett(""); if (ret == 6) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 2; i < 5; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } } return 255 - rfval; } void RIG_TS590SG::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } int RIG_TS590SG::get_PTT() { // cmd = "IF;"; // get_trace(1, "get_PTT"); // ret = wait_char(';', 38, 100, "get VFO", ASC); // gett(""); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } // Tranceiver PTT on/off void RIG_TS590SG::set_PTT_control(int val) { if (val) { if (data_mode) cmd = "TX1;"; else cmd = "TX0;"; } else cmd = "RX;"; sendCommand(cmd, 0); } flrig-2.0.04/src/rigs/kenwood/TS590S.cxx0000664000175000017500000011204314502041135014453 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "kenwood/TS590S.h" #include "support.h" #include "trace.h" static const char TS590Sname_[] = "TS-590S"; static std::vectorTS590Smodes_; static const char *vTS590Smodes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R", "LSB-D", "USB-D", "FM-D", "AM-D"}; static const char TS590S_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9', '1', '2', '4', '5' }; static const char TS590S_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U', 'L', 'U', 'U', 'U' }; //---------------------------------------------------------------------- static std::vectorTS590S_empty; static const char *vTS590S_empty[] = { "N/A" }; //---------------------------------------------------------------------- static int DEF_SL_SH = 0x8A03; static std::vectorTS590S_SSB_SL; static const char *vTS590S_SSB_SL[] = { "0", "50", "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000" }; static std::vectorTS590S_CAT_ssb_SL; static const char *vTS590S_CAT_ssb_SL[] = { "SL00;", "SL01;", "SL02;", "SL03;", "SL04;", "SL05;", "SL06;", "SL07;", "SL08;", "SL09;", "SL10;", "SL11;" }; static const char *TS590S_SSB_SL_tooltip = "lo cut"; static const char *TS590S_SSB_btn_SL_label = "L"; static std::vectorTS590S_SSB_SH; static const char *vTS590S_SSB_SH[] = { "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3400", "4000", "5000" }; static std::vectorTS590S_CAT_ssb_SH; static const char *vTS590S_CAT_ssb_SH[] = { "SH00;", "SH01;", "SH02;", "SH03;", "SH04;", "SH05;", "SH06;", "SH07;", "SH08;", "SH09;", "SH10;", "SH11;", "SH12;", "SH13;" }; static const char *TS590S_SSB_SH_tooltip = "hi cut"; static const char *TS590S_SSB_btn_SH_label = "H"; //---------------------------------------------------------------------- static int DEF_width_shift = 0x8D05; static std::vectorTS590S_DATA_width; static const char *vTS590S_DATA_width[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500", "2000", "2500" }; static std::vectorTS590S_CAT_data_width; static const char *vTS590S_CAT_data_width[] = { "SL00;", "SL01;", "SL02;", "SL03;", "SL04;", "SL05;", "SL06;", "SL07;", "SL08;", "SL09;", "SL10;", "SL11;", "SL12;", "SL13;" }; static const char *TS590S_DATA_W_tooltip = "width"; static const char *TS590S_DATA_W_btn_label = "W"; static std::vectorTS590S_DATA_shift; static const char *vTS590S_DATA_shift[] = { "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2210" }; static std::vectorTS590S_CAT_data_shift; static const char *vTS590S_CAT_data_shift[] = { "SH00;", "SH01;", "SH02;", "SH03;", "SH04;", "SH05;", "SH06;", "SH07;", "SH08;", "SH09;", "SH10;", "SH11;", "SH12;" }; static const char *TS590S_DATA_S_tooltip = "shift"; static const char *TS590S_DATA_S_btn_label = "S"; //---------------------------------------------------------------------- static int DEF_am = 0x8201; static std::vectorTS590S_AM_SL; static const char *vTS590S_AM_SL[] = { "10", "100", "200", "500" }; static std::vectorTS590S_CAT_am_SL; static const char *vTS590S_CAT_am_SL[] = { "SL00;", "SL01;", "SL02;", "SL03;"}; static const char *TS590S_AM_SL_tooltip = "lo cut"; static const char *TS590S_AM_btn_SL_label = "L"; static std::vectorTS590S_AM_SH; static const char *vTS590S_AM_SH[] = { "2500", "3000", "4000", "5000" }; static std::vectorTS590S_CAT_am_SH; static const char *vTS590S_CAT_am_SH[] = { "SH00;", "SH01;", "SH02;", "SH03;"}; static const char *TS590S_AM_SH_tooltip = "hi cut"; static const char *TS590S_AM_btn_SH_label = "H"; //---------------------------------------------------------------------- static int DEF_cw = 7; static std::vectorTS590S_CWwidths; static const char *vTS590S_CWwidths[] = { "50", "80", "100", "150", "200", "250", "300", "400", "500", "600", "1000", "1500", "2000", "2500"}; static std::vectorTS590S_CWbw; static const char *vTS590S_CWbw[] = { "FW0050;", "FW0080;", "FW0100;", "FW0150;", "FW0200;", "FW0250;", "FW0300;", "FW0400;", "FW0500;", "FW0600;", "FW1000;", "FW1500;", "FW2000;", "FW2500;"}; //---------------------------------------------------------------------- static int DEF_fsk = 1; static std::vectorTS590S_FSKwidths; static const char *vTS590S_FSKwidths[] = { "250", "500", "1000", "1500"}; static std::vectorTS590S_FSKbw; static const char *vTS590S_FSKbw[] = { "FW0250;", "FW0500;", "FW1000;", "FW1500;" }; //---------------------------------------------------------------------- static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 2 { (Fl_Widget *)btnNR, 2, 165, 50 }, // 3 { (Fl_Widget *)sldrNR, 54, 165, 156 }, // 4 { (Fl_Widget *)sldrPOWER, 54, 185, 368 }, // 5 { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 6 { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 7 { (Fl_Widget *)btnNotch, 214, 125, 50 }, // 8 { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, // 9 { (Fl_Widget *)sldrSQUELCH, 266, 145, 156 }, // 10 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, // 11 { (Fl_Widget *)NULL, 0, 0, 0 } }; static std::string menu003; void RIG_TS590S::initialize() { VECTOR (TS590Smodes_, vTS590Smodes_); VECTOR (TS590S_empty, vTS590S_empty); VECTOR (TS590S_SSB_SL, vTS590S_SSB_SL); VECTOR (TS590S_CAT_ssb_SL, vTS590S_CAT_ssb_SL); VECTOR (TS590S_SSB_SH, vTS590S_SSB_SH); VECTOR (TS590S_CAT_ssb_SH, vTS590S_CAT_ssb_SH); VECTOR (TS590S_DATA_width, vTS590S_DATA_width); VECTOR (TS590S_CAT_data_width, vTS590S_CAT_data_width); VECTOR (TS590S_DATA_shift, vTS590S_DATA_shift); VECTOR (TS590S_CAT_data_shift, vTS590S_CAT_data_shift); VECTOR (TS590S_AM_SL, vTS590S_AM_SL); VECTOR (TS590S_CAT_am_SL, vTS590S_CAT_am_SL); VECTOR (TS590S_AM_SH, vTS590S_AM_SH); VECTOR (TS590S_CAT_am_SH, vTS590S_CAT_am_SH); VECTOR (TS590S_CWwidths, vTS590S_CWwidths); VECTOR (TS590S_CWbw, vTS590S_CWbw); VECTOR (TS590S_FSKwidths, vTS590S_FSKwidths); VECTOR (TS590S_FSKbw, vTS590S_FSKbw); modes_ = TS590Smodes_; bandwidths_ = TS590S_SSB_SH; dsp_SL = TS590S_SSB_SL; dsp_SH = TS590S_SSB_SH; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnNR; rig_widgets[4].W = sldrNR; rig_widgets[5].W = sldrPOWER; rig_widgets[6].W = btnIFsh; rig_widgets[7].W = sldrIFSHIFT; rig_widgets[8].W = btnNotch; rig_widgets[9].W = sldrNOTCH; rig_widgets[10].W = sldrSQUELCH; rig_widgets[11].W = sldrMICGAIN; cmd = "EX0030000;"; if (wait_char(';', 11, 100, "read ex 003", ASC) == 11) menu003 = replystr; cmd = "EX003000000;"; sendCommand(cmd); cmd = "AC000;"; sendCommand(cmd); selectA(); get_preamp(); get_attenuator(); } void RIG_TS590S::shutdown() { // restore state of xcvr beeps cmd = menu003; sendCommand(cmd); } RIG_TS590S::RIG_TS590S() { name_ = TS590Sname_; modes_ = TS590Smodes_; bandwidths_ = TS590S_SSB_SH; dsp_SL = TS590S_SSB_SL; SL_tooltip = TS590S_SSB_SL_tooltip; SL_label = TS590S_SSB_btn_SL_label; dsp_SH = TS590S_SSB_SH; SH_tooltip = TS590S_SSB_SH_tooltip; SH_label = TS590S_SSB_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR115200; stopbits = 1; serial_retries = 2; serial_write_delay = 5; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = USB; B.iBW = A.iBW = DEF_SL_SH; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; nb_level = 2; has_micgain_control = has_ifshift_control = false; has_auto_notch = has_notch_control = has_sql_control = has_swr_control = has_noise_reduction = has_noise_reduction_control = has_alc_control = has_dsp_controls = has_smeter = has_power_out = has_split = has_split_AB = has_noise_control = has_micgain_control = has_rf_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_mode_control = has_bandwidth_control = has_ifshift_control = has_ptt_control = true; rxtxa = true; precision = 1; ndigits = 8; att_level = 0; preamp_level = 0; noise_reduction_level = 0; ptt_ = 0; } static int ret = 0; const char * RIG_TS590S::get_bwname_(int n, int md) { static char bwname[20]; if (n > 256) { int hi = (n >> 8) & 0x7F; int lo = n & 0xFF; snprintf(bwname, sizeof(bwname), "%s/%s", (md == LSB || md == USB || md == FM) ? TS590S_SSB_SL[lo].c_str() : (md == AM || md == AMD) ? TS590S_AM_SL[lo].c_str() : TS590S_DATA_width[lo].c_str(), (md == LSB || md == USB || md == FM) ? TS590S_SSB_SH[hi].c_str() : (md == AM || md == AMD) ? TS590S_AM_SH[hi].c_str() : TS590S_DATA_shift[hi].c_str() ); } else { snprintf(bwname, sizeof(bwname), "%s", (md == CW || md == CWR) ? TS590S_CWwidths[n].c_str() : TS590S_FSKwidths[n].c_str()); } return bwname; } int RIG_TS590S::get_power_out() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_power_out"); ret = wait_char(';', 8, 100, "get power out", ASC); gett(""); if (ret < 8) return mtr; size_t p = replystr.rfind("SM0"); if (p == std::string::npos) return mtr; mtr = atoi(&replystr[p + 3]); mtr *= 50; mtr /= 18; if (mtr > 100) mtr = 100; return mtr; } // Transceiver power level void RIG_TS590S::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd, 0); } double RIG_TS590S::get_power_control() { cmd = "PC;"; get_trace(1, "get_power_control"); ret = wait_char(';', 6, 100, "get pwr ctrl", ASC); gett(""); if (ret < 6) return 0; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return 0; int mtr = 0; replystr[p + 5] = 0; mtr = atoi(&replystr[p + 2]); return mtr; } void RIG_TS590S::set_attenuator(int val) { att_level = val; if (val) cmd = "RA01;"; else cmd = "RA00;"; sendCommand(cmd, 0); } int RIG_TS590S::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator"); ret = wait_char(';', 7, 100, "get att", ASC); gett(""); if (ret < 7) return 0; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return 0; if (replystr[p + 2] == '0' && replystr[p + 3] == '0') att_level = 0; else att_level = 1; return att_level; } void RIG_TS590S::set_preamp(int val) { preamp_level = val; if (val) cmd = "PA1;"; else cmd = "PA0;"; sendCommand(cmd, 0); } int RIG_TS590S::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp"); ret = wait_char(';', 5, 100, "get preamp", ASC); gett(""); if (ret < 5) return 0; size_t p = replystr.rfind("PA"); if (p == std::string::npos) return 0; if (replystr[p + 2] == '1') preamp_level = 1; else preamp_level = 0; return preamp_level; } //====================================================================== // mode commands //====================================================================== void RIG_TS590S::set_modeA(int val) { active_mode = A.imode = val; cmd = "MD"; cmd += TS590S_mode_chr[val]; cmd += ';'; sendCommand(cmd, 0); set_trace(2, "set_mode A", cmd.c_str()); showresp(ERR, ASC, "set mode A", cmd, ""); if ( val == LSBD || val == USBD || val == FMD || val == AMD) { data_mode = true; cmd = "DA1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data A", cmd, ""); set_trace(2, "set data mode", cmd.c_str()); } else if (val == LSB || val == USB || val == FM || val == AM) { data_mode = false; cmd = "DA0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data A", cmd, ""); set_trace(2, "set data mode", cmd.c_str()); } set_widths(val); } int RIG_TS590S::get_modeA() { int md = A.imode; cmd = "MD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 4, 100, "get mode A", ASC); gett(""); if (ret < 4) return A.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return A.imode; switch (replystr[p + 2]) { case '1' : md = LSB; break; case '2' : md = USB; break; case '3' : md = CW; break; case '4' : md = FM; break; case '5' : md = AM; break; case '6' : md = FSK; break; case '7' : md = CWR; break; case '9' : md = FSKR; break; default : md = A.imode; } if (md == LSB || md == USB || md == FM || md == AM) { cmd = "DA;"; get_trace(1, "get_dataA"); ret = wait_char(';', 4, 100, "get data A", ASC); gett(""); if (ret < 4) return A.imode; p = replystr.rfind("DA"); if (p == std::string::npos) return A.imode; if (replystr[p + 2] == '1') { data_mode = true; if (md == LSB) md = LSBD; else if (md == USB) md = USBD; else if (md == FM) md = FMD; else if (md == AM) md = AMD; } } if (md != A.imode) { active_mode = A.imode = md; set_widths(md); } return A.imode; } void RIG_TS590S::set_modeB(int val) { active_mode = B.imode = val; cmd = "MD"; cmd += TS590S_mode_chr[val]; cmd += ';'; sendCommand(cmd, 0); showresp(WARN, ASC, "set mode B", cmd, ""); if ( val == LSBD || val == USBD || val == FMD || val == AMD) { data_mode = true; cmd = "DA1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data B", cmd, ""); } else if (val == LSB || val == USB || val == FM || val == AM) { cmd = "DA0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "set data B", cmd, ""); } set_widths(val); } int RIG_TS590S::get_modeB() { int md = B.imode; cmd = "MD;"; get_trace(1, "get_modeB"); ret = wait_char(';', 4, 100, "get mode B", ASC); gett(""); if (ret < 4) return B.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return B.imode; switch (replystr[p + 2]) { case '1' : md = LSB; break; case '2' : md = USB; break; case '3' : md = CW; break; case '4' : md = FM; break; case '5' : md = AM; break; case '6' : md = FSK; break; case '7' : md = CWR; break; case '9' : md = FSKR; break; default : md = B.imode; } if (md == LSB || md == USB || md == FM || md == AM) { cmd = "DA;"; get_trace(1, "get_dataB"); ret = wait_char(';', 4, 100, "get dataB", ASC); gett(""); if (ret < 4) return B.imode; p = replystr.rfind("DA"); if (p == std::string::npos) return B.imode; if (replystr[p + 2] == '1') { data_mode = true; if (md == LSB) md = LSBD; else if (md == USB) md = USBD; else if (md == FM) md = FMD; else if (md == AM) md = AMD; } } if (md != B.imode) { active_mode = B.imode = md; set_widths(md); } return B.imode; } //====================================================================== // Bandpass filter commands //====================================================================== int RIG_TS590S::set_widths(int val) { int bw = 0; if (val == LSB || val == USB || val == FM || val == FMD) { bandwidths_ = TS590S_SSB_SH; dsp_SL = TS590S_SSB_SL; dsp_SH = TS590S_SSB_SH; SL_tooltip = TS590S_SSB_SL_tooltip; SL_label = TS590S_SSB_btn_SL_label; SH_tooltip = TS590S_SSB_SH_tooltip; SH_label = TS590S_SSB_btn_SH_label; bw = DEF_SL_SH; // 200 lower, 3000 upper } else if (val == CW || val == CWR) { bandwidths_ = TS590S_CWwidths; dsp_SL = TS590S_empty; dsp_SH = TS590S_empty; bw = DEF_cw; } else if (val == FSK || val == FSKR) { bandwidths_ = TS590S_FSKwidths; dsp_SL = TS590S_empty; dsp_SH = TS590S_empty; bw = 1; } else if (val == AM || val == AMD) { bandwidths_ = TS590S_AM_SH; dsp_SL = TS590S_AM_SL; dsp_SH = TS590S_AM_SH; SL_tooltip = TS590S_AM_SL_tooltip; SL_label = TS590S_AM_btn_SL_label; SH_tooltip = TS590S_AM_SH_tooltip; SH_label = TS590S_AM_btn_SH_label; bw = DEF_am; } else if (val == LSBD || val == USBD) { bandwidths_ = TS590S_DATA_width; dsp_SL = TS590S_DATA_shift; SL_tooltip = TS590S_DATA_S_tooltip; SL_label = TS590S_DATA_S_btn_label; dsp_SH = TS590S_DATA_width; SH_tooltip = TS590S_DATA_W_tooltip; SH_label = TS590S_DATA_W_btn_label; bw = DEF_width_shift; } return bw; } std::vector& RIG_TS590S::bwtable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS590S_SSB_SH; else if (m == CW || m == CWR) return TS590S_CWwidths; else if (m == FSK || m == FSKR) return TS590S_FSKwidths; else if (m == AM || m == AMD) return TS590S_AM_SH; else return TS590S_DATA_width; } std::vector& RIG_TS590S::lotable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS590S_SSB_SL; else if (m == AM || m == AMD) return TS590S_AM_SL; else if (m == LSBD || m == USBD) return TS590S_DATA_shift; // CW CWR FSK FSKR return vNOBWS; } std::vector& RIG_TS590S::hitable(int m) { if (m == LSB || m == USB || m == FM || m == FMD) return TS590S_SSB_SH; else if (m == AM || m == AMD) return TS590S_AM_SH; else if (m == LSBD || m == USBD) return TS590S_DATA_width; // CW CWR FSK FSKR return vNOBWS; } int RIG_TS590S::adjust_bandwidth(int val) { if (val == LSB || val == USB || val == FM || val == FMD) return DEF_SL_SH; else if (val == LSBD || val == USBD) return DEF_width_shift; else if (val == CW || val == CWR) return DEF_cw; else if (val == FSK || val == FSKR) return DEF_fsk; // else if (val == AM) return DEF_am; } int RIG_TS590S::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_TS590S::set_bwA(int val) { // LSB, USB, FM, FM-D if (A.imode == LSB || A.imode == USB || A.imode == FM || A.imode == FMD) { if (val < 256) return; A.iBW = val; cmd = TS590S_CAT_ssb_SL[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS590S_CAT_ssb_SH[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } // LSB-D, USB-D if (A.imode == LSBD || A.imode == USBD) { if (val < 256) return; A.iBW = val; cmd = TS590S_CAT_data_shift[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set shift", cmd, ""); cmd = TS590S_CAT_data_width[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set width", cmd, ""); return; } // AM if (A.imode == AM || A.imode == AMD) { if (val < 256) return; A.iBW = val; cmd = TS590S_CAT_am_SL[A.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS590S_CAT_am_SH[(A.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (val > 256) return; // CW if (A.imode == CW || A.imode == CWR) { A.iBW = val; cmd = TS590S_CWbw[A.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set CW bw", cmd, ""); return; } // FSK if (A.imode == FSK || A.imode == FSKR) { A.iBW = val; cmd = TS590S_FSKbw[A.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set FSK bw", cmd, ""); return; } } void RIG_TS590S::set_bwB(int val) { if (B.imode == LSB || B.imode == USB || B.imode == FM || B.imode == FMD) { if (val < 256) return; B.iBW = val; cmd = TS590S_CAT_ssb_SL[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS590S_CAT_ssb_SH[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (B.imode == LSBD || B.imode == USBD) { // SSB data mode if (val < 256) return; B.iBW = val; cmd = TS590S_CAT_data_shift[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set shift", cmd, ""); cmd = TS590S_CAT_data_width[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set width", cmd, ""); return; } if (B.imode == AM || B.imode == AMD) { if (val < 256) return; B.iBW = val; cmd = TS590S_AM_SL[B.iBW & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set lower", cmd, ""); cmd = TS590S_AM_SH[(B.iBW >> 8) & 0x7F]; sendCommand(cmd,0); showresp(WARN, ASC, "set upper", cmd, ""); return; } if (val > 256) return; if (B.imode == CW || B.imode == CWR) { B.iBW = val; cmd = TS590S_CWbw[B.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set CW bw", cmd, ""); return; } if (B.imode == FSK || B.imode == FSKR) { B.iBW = val; cmd = TS590S_FSKbw[B.iBW]; sendCommand(cmd,0); showresp(WARN, ASC, "set FSK bw", cmd, ""); return; } } int RIG_TS590S::get_bwA() { int i = 0, lo = 0, hi = 0; size_t p; switch (A.imode) { case CW: case CWR: A.iBW = DEF_cw; cmd = "FW;"; get_trace(1, "get_bwA"); ret = wait_char(';', 7, 100, "get CW width", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 14; i++) if (replystr.find(TS590S_CWbw[i]) == p) break; if (i == 14) i = 13; A.iBW = i; } } break; case FSK: case FSKR: A.iBW = DEF_fsk; cmd = "FW;"; get_trace(1, "get_FSK_width"); ret = wait_char(';', 7, 100, "get FSK width", ASC); gett(""); if (ret == 7 ) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS590S_FSKbw[i]) == p) break; if (i == 4) i = 3; A.iBW = i; } } break; case LSB: case USB: case FM: A.iBW = DEF_SL_SH; lo = A.iBW & 0x7F; hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_lower"); ret = wait_char(';', 5, 100, "get lower", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; get_trace(1, "get_upper"); ret = wait_char(';', 5, 100, "get upper", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); A.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; case LSBD: case USBD: case FMD: A.iBW = DEF_width_shift; lo = A.iBW & 0x7F; hi = (A.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_width"); ret = wait_char(';', 5, 100, "get width", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; get_trace(1, "get_shift"); ret = wait_char(';', 5, 100, "get shift", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); A.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; } return A.iBW; } int RIG_TS590S::get_bwB() { int i = 0, lo = 0, hi = 0; size_t p; switch (B.imode) { case CW: case CWR: B.iBW = DEF_cw; cmd = "FW;"; get_trace(1, "get_bwB"); ret = wait_char(';', 7, 100, "get CW width", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 14; i++) if (replystr.find(TS590S_CWbw[i]) == p) break; if (i == 14) i = 13; B.iBW = i; } } break; case FSK: case FSKR: B.iBW = DEF_fsk; cmd = "FW;"; get_trace(1, "get_FSK_width"); ret = wait_char(';', 7, 100, "get FSK width", ASC); gett(""); if (ret == 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { for (i = 0; i < 4; i++) if (replystr.find(TS590S_FSKbw[i]) == p) break; if (i == 4) i = 3; B.iBW = i; } } break; case LSB: case USB: case FM: B.iBW = DEF_SL_SH; lo = B.iBW & 0xFF; hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_lower"); ret = wait_char(';', 5, 100, "get lower", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; get_trace(1, "get_upper"); ret = wait_char(';', 5, 100, "get upper", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SH"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); B.iBW = ((hi << 8) | (lo & 0x7F)) | 0x8000; } } break; case LSBD: case USBD: case FMD: B.iBW = DEF_width_shift; lo = B.iBW & 0x7F; hi = (B.iBW >> 8) & 0x7F; cmd = "SL;"; get_trace(1, "get_width"); ret = wait_char(';', 5, 100, "get width", ASC); gett(""); if (ret == 5) { p = replystr.rfind("SL"); if (p == std::string::npos) break; hi = fm_decimal(replystr.substr(2), 2); cmd = "SH;"; get_trace(1, "get_shift"); ret = wait_char(';', 5, 100, "get shift", ASC); gett(""); if (ret == 5 ) { p = replystr.rfind("SH"); if (p == std::string::npos) break; lo = fm_decimal(replystr.substr(2), 2); B.iBW = ((hi << 8) | (lo & 0xFF)) | 0x8000; } } break; } return B.iBW; } int RIG_TS590S::get_modetype(int n) { return TS590S_mode_type[n]; } //====================================================================== // IF shift command only available if the transceiver is in the CW mode // step size is 50 Hz //====================================================================== void RIG_TS590S::set_if_shift(int val) { if (active_mode == CW || active_mode == CWR) { // cw modes progStatus.shift_val = val; cmd = "IS "; cmd.append(to_decimal(abs(val),4)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set IF shift", cmd, ""); } } bool RIG_TS590S::get_if_shift(int &val) { if (active_mode == CW || active_mode == CWR) { // cw modes cmd = "IS;"; get_trace(1, "get_if_shift"); ret = wait_char(';', 8, 100, "get IF shift", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("IS"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 4); } else val = progStatus.shift_val; return true; } } val = progStatus.shift_val; return false; } void RIG_TS590S::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = 300; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 800; } void RIG_TS590S::set_noise_reduction(int val) { if (val == -1) { if (noise_reduction_level == 1) { nr_label("NR1", true); } else if (noise_reduction_level == 2) { nr_label("NR2", true); } return; } if (noise_reduction_level == 0) { noise_reduction_level = 1; nr_label("NR1", true); } else if (noise_reduction_level == 1) { noise_reduction_level = 2; nr_label("NR2", true); } else if (noise_reduction_level == 2) { noise_reduction_level = 0; nr_label("NR", false); } cmd.assign("NR"); cmd += '0' + noise_reduction_level; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); } int RIG_TS590S::get_noise_reduction() { cmd = rsp = "NR"; cmd.append(";"); get_trace(1, "get_noise_reduction"); ret = wait_char(';', 4, 100, "GET noise reduction", ASC); gett(""); if (ret == 4 ) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return noise_reduction_level; noise_reduction_level = replystr[p+2] - '0'; if (noise_reduction_level == 1) { nr_label("NR1", true); } else if (noise_reduction_level == 2) { nr_label("NR2", true); } else { nr_label("NR", false); } } return noise_reduction_level; } void RIG_TS590S::set_noise_reduction_val(int val) { cmd.assign("RL").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); } int RIG_TS590S::get_noise_reduction_val() { if (noise_reduction_level == 0) return 0; int val = 1; cmd = rsp = "RL"; cmd.append(";"); get_trace(1, "get_noise_reduction_val"); ret = wait_char(';', 5, 100, "GET noise reduction val", ASC); gett(""); if (ret == 5) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.noise_reduction_val; val = atoi(&replystr[p+2]); } return val; } void RIG_TS590S::set_auto_notch(int v) { cmd.assign("NT").append(v ? "1" : "0" ).append("0;"); sendCommand(cmd); showresp(WARN, ASC, "SET Auto Notch", cmd, ""); } int RIG_TS590S::get_auto_notch() { cmd = "NT;"; get_trace(1, "get_auto_notch"); ret = wait_char(';', 5, 100, "get auto notch", ASC); gett(""); if ( ret == 5) { size_t p = replystr.rfind("NT"); if (p == std::string::npos) return 0; if (replystr[p+2] == '1') return 1; } return 0; } void RIG_TS590S::set_notch(bool on, int val) { if (on) { cmd.assign("NT20;"); sendCommand(cmd); showresp(WARN, ASC, "Set notch ON", cmd, ""); int bp = (int)((val - 300.0) * 128.0 / 2700.0); cmd.assign("BP").append(to_decimal(bp, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set notch freq", cmd, ""); } else { cmd.assign("NT00;"); sendCommand(cmd); showresp(WARN, ASC, "Set notch OFF", cmd, ""); } } bool RIG_TS590S::get_notch(int &val) { val = 300; cmd = "NT;"; get_trace(1, "get_notch"); ret = wait_char(';', 5, 100, "get notch state", ASC); gett(""); if ( ret == 5) { size_t p = replystr.rfind("NT"); if (p == std::string::npos) return 0; if (replystr[p+2] == '2') { cmd.assign("BP;"); if (wait_char(';', 6, 100, "get notch freq", ASC) == 6) { size_t p = replystr.rfind("BP"); if (p != std::string::npos) val = (int)((atoi(&replystr[p+2]) * 2700.0 / 128.0) + 300.0); return 1; } } } return 0; } void RIG_TS590S::get_notch_min_max_step(int &min, int &max, int &step) { min = 300; max = 3000; step = 20; } void RIG_TS590S::set_noise(bool val) { if (nb_level == 0) { nb_level = 1; nb_label("NB 1", true); } else if (nb_level == 1) { nb_level = 2; nb_label("NB 2", true); } else if (nb_level == 2) { nb_level = 0; nb_label("NB", false); } cmd = "NB0;"; cmd[2] += nb_level; LOG_INFO("%s", cmd.c_str()); sendCommand(cmd, 0); } int RIG_TS590S::get_noise() { cmd = "NB;"; get_trace(1, "get_noise"); ret = wait_char(';', 4, 100, "get Noise Blanker", ASC); gett(""); if ( ret == 4) { size_t p = replystr.rfind("NB"); if (p == std::string::npos) return 0; if (replystr[p+2] == '0') return 0; nb_level = replystr[p+2] - '0'; if (nb_level == 0) { nb_label("NB", false); } else if (nb_level == 1) { nb_label("NB 1", true); } else if (nb_level == 2) { nb_label("NB 2", true); } } return nb_level; } int RIG_TS590S::get_smeter() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_smeter"); ret = wait_char(';', 8, 100, "get", ASC); gett(""); if (ret < 8) return 0; size_t p = replystr.find("SM0"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; mtr = atoi(&replystr[p + 3]); mtr *= 50; mtr /= 15; if (mtr > 100) mtr = 100; return mtr; } void RIG_TS590S::set_rf_gain(int val) { cmd = "RG000;"; int rfval = 255 - val; for (int i = 4; i > 1; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, ""); } int RIG_TS590S::get_rf_gain() { int rfval = 0; cmd = rsp = "RG"; cmd += ';'; get_trace(1, "get_rf_gain"); if (wait_char(';', 6, 100, "get rfgain", ASC) == 6) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 2; i < 5; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } } return 255 - rfval; } void RIG_TS590S::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } int RIG_TS590S::get_PTT() { // cmd = "IF;"; // get_trace(1, "get_PTT"); // ret = wait_char(';', 38, 100, "get VFO", ASC); // gett(""); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } // Tranceiver PTT on/off void RIG_TS590S::set_PTT_control(int val) { if (val) { if (data_mode) cmd = "TX1;"; else cmd = "TX0;"; ptt_ = 1; } else { cmd = "RX;"; ptt_ = 0; } sendCommand(cmd, 0); } /* void RIG_TS590S::selectA() { cmd = "FR0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "Rx A", cmd, ""); cmd = "FT0;"; sendCommand(cmd, 0); showresp(WARN, ASC, "Tx A", cmd, ""); rxtxa = true; inuse = onA; } void RIG_TS590S::selectB() { cmd = "FR1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "Rx B", cmd, ""); cmd = "FT1;"; sendCommand(cmd, 0); showresp(WARN, ASC, "Tx B", cmd, ""); rxtxa = false; inuse = onB; } void RIG_TS590S::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } int RIG_TS590S::get_split() { size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "FT"; cmd.append(";"); if (wait_char(';', 4, 100, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "FR"; cmd.append(";"); if (wait_char(';', 4, 100, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; // split test split = (tx == '1' ? 2 : 0) + (rx == '1' ? 1 : 0); } return split; } unsigned long long RIG_TS590S::get_vfoA () { cmd = "FA;"; if (wait_char(';', 14, 100, "get vfoA", ASC) < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return A.freq; unsigned long long f = 0ULL; unsigned long long mul = 1ULL; for (size_t n = 12; n > 1; n--) { f += (replystr[p + n] - '0') * mul; mul *= 10; } A.freq = f; return A.freq; } void RIG_TS590S::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd, 0); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_TS590S::get_vfoB () { cmd = "FB;"; if (wait_char(';', 14, 100, "get vfoB", ASC) < 14) return B.freq; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return B.freq; unsigned long long f = 0ULL; unsigned long long mul = 1ULL; for (size_t n = 12; n > 1; n--) { f += (replystr[p + n] - '0') * mul; mul *= 10; } B.freq = f; return B.freq; } void RIG_TS590S::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd, 0); showresp(WARN, ASC, "set vfo B", cmd, ""); } // Volume control return 0 ... 100 int RIG_TS590S::get_volume_control() { cmd = "AG0;"; if (wait_char(';', 7, 100, "get vol ctrl", ASC) < 7) return 0; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int val = atoi(&replystr[p + 3]); return (int)(val / 2.55); } void RIG_TS590S::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd, 0); } void RIG_TS590S::tune_rig() { cmd = "AC111;"; sendCommand(cmd, 0); } static bool read_alc = false; static int alc_val = 0; int RIG_TS590S::get_swr(void) { int mtr = 0; read_alc = false; cmd = "RM;"; if (wait_char(';', 8, 100, "get swr/alc", ASC) < 8) return 0; size_t p = replystr.find("RM3"); if (p != std::string::npos) { replystr[p + 7] = 0; alc_val = atoi(&replystr[p + 3]); alc_val *= 100; alc_val /= 15; if (alc_val > 100) alc_val = 100; read_alc = true; } p = replystr.find("RM1"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; mtr = atoi(&replystr[p + 3]); mtr *= 50; mtr /= 15; if (mtr > 100) mtr = 100; return mtr; } int RIG_TS590S::get_alc(void) { if (read_alc) { read_alc = false; return alc_val; } cmd = "RM;"; if (wait_char(';', 8, 100, "get alc", ASC) < 8) return 0; size_t p = replystr.find("RM3"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; alc_val = atoi(&replystr[p + 3]); alc_val *= 100; alc_val /= 15; if (alc_val > 100) alc_val = 100; return alc_val; } // val 0 .. 100 void RIG_TS590S::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd, 0); } int RIG_TS590S::get_mic_gain() { int val = 0; cmd = "MG;"; if (wait_char(';', 6, 100, "get mic ctrl", ASC) >= 6) { size_t p = replystr.rfind("MG"); if (p == std::string::npos) return val; replystr[p + 5] = 0; val = atoi(&replystr[p + 2]); } return val; } void RIG_TS590S::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TS590S::set_squelch(int val) { cmd = "SQ0"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set squelch", cmd, ""); } int RIG_TS590S::get_squelch() { int val = 0; cmd = "SQ0;"; if (wait_char(';', 7, 100, "get squelch", ASC) >= 7) { size_t p = replystr.rfind("SQ0"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); } return val; } void RIG_TS590S::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } */ flrig-2.0.04/src/rigs/kenwood/TS570.cxx0000664000175000017500000005027514502041135014336 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "kenwood/TS570.h" #include "support.h" static const char TS570name_[] = "TS-570"; static std::vectorTS570modes_; static const char *vTS570modes_[] = { "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "FSK-R"}; static const char TS570_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char TS570_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U' }; static std::vectorTS570_SSBwidths; static const char *vTS570_SSBwidths[] = { // same for AM and FM "NARR", "WIDE"}; static int TS570_SSB_bw_vals[] = { 1,2, WVALS_LIMIT}; static std::vectorTS570_SSBbw; static const char *vTS570_SSBbw[] = { "FW0000;", "FW0001;"}; static std::vectorTS570_CWwidths; static const char *vTS570_CWwidths[] = { "50", "100", "200", "300", "400", "600", "1000", "2000"}; static int TS570_CW_bw_vals[] = { 1,2,3,4,5,6,7,8, WVALS_LIMIT}; static std::vectorTS570_CWbw; static const char *vTS570_CWbw[] = { "FW0050;", "FW0100;", "FW0200;", "FW0300;", "FW0400;", "FW0600;", "FW1000;", "FW2000;"}; static std::vectorTS570_FSKwidths; static const char *vTS570_FSKwidths[] = { "250", "500", "1000", "1500"}; static int TS570_FSK_bw_vals[] = { 1,2,3,4, WVALS_LIMIT}; static std::vectorTS570_FSKbw; static const char *vTS570_FSKbw[] = { "FW0250;", "FW0500;", "FW1000;", "FW1500;"}; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 54, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_TS570::initialize() { VECTOR (TS570modes_, vTS570modes_); VECTOR (TS570_SSBwidths, vTS570_SSBwidths); VECTOR (TS570_SSBbw, vTS570_SSBbw); VECTOR (TS570_CWwidths, vTS570_CWwidths); VECTOR (TS570_CWbw, vTS570_CWbw); VECTOR (TS570_FSKwidths, vTS570_FSKwidths); VECTOR (TS570_FSKbw, vTS570_FSKbw); modes_ = TS570modes_; bandwidths_ = TS570_SSBwidths; bw_vals_ = TS570_SSB_bw_vals; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = sldrPOWER; rig_widgets[4].W = btnIFsh; rig_widgets[5].W = sldrIFSHIFT; rig_widgets[6].W = sldrSQUELCH; rig_widgets[7].W = sldrMICGAIN; // progStatus.gettrace = progStatus.settrace = true; is_TS570 = get_ts570id(); if (is_TS570) { cmd = "FR0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A", cmd, ""); cmd = "AC001;"; sendCommand(cmd); showresp(WARN, ASC, "Thru - tune ON", cmd, ""); get_preamp(); get_attenuator(); } } RIG_TS570::RIG_TS570() { // base class values name_ = TS570name_; modes_ = TS570modes_; bandwidths_ = TS570_SSBwidths; bw_vals_ = TS570_SSB_bw_vals; widgets = rig_widgets; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.freq = 14070000ULL; A.imode = 1; A.iBW = 1; B.freq = 7035000ULL; B.imode = 1; B.iBW = 1; can_change_alt_vfo = true; has_notch_control = false; has_smeter = has_power_out = has_split = has_split_AB = has_swr_control = has_ifshift_control = has_noise_control = has_micgain_control = has_volume_control = has_power_control = has_tune_control = has_attenuator_control = has_preamp_control = has_mode_control = has_bandwidth_control = has_rf_control = has_sql_control = has_ptt_control = true; precision = 1; ndigits = 8; } // Test for connection to a TS590nn transceiver // repeat test 20 times to provide autobaud detection // in the event an adapter is expecting to detect the pc baud rate // // TS590 identifier std::strings: // TS590D: ID017; // TS590S: ID018; bool RIG_TS570::get_ts570id() { int ret; size_t p; cmd = "ID;"; for (int i = 0; i < 20; i++) { get_trace(1, "get_ts570id()"); ret = wait_char(';', 6, 100, "get_ID()", ASC); gett(""); if (ret < 6) { MilliSleep(10); Fl::awake(); continue; } p = replystr.rfind("ID"); // expect either ID017; or ID018; if (replystr.substr(p, 6) == "ID017;" || replystr.substr(p, 6) == "ID018;" ) return true; } LOG_ERROR("get_ts570id() failed"); return false; } void RIG_TS570::selectA() { cmd = "FR0;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, ""); inuse = onA; } void RIG_TS570::selectB() { cmd = "FR1;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, ""); inuse = onB; } void RIG_TS570::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } Fl::awake(highlight_vfo, (void *)0); } int RIG_TS570::get_split() { cmd = "IF;"; get_trace(1, "get_split()"); int n = wait_char(';', 38, 100, "get IF", ASC); gett(""); if (n < 38) return split; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split; split = replystr[p+32]=='1' ? true : false; return split; } bool RIG_TS570::check () { return is_TS570; } unsigned long long RIG_TS570::get_vfoA () { cmd = "FA;"; get_trace(1, "get_vfoA()"); int n = wait_char(';', 14, 100, "get vfoA", ASC); gett(""); if (n < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return A.freq; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; A.freq = f; return A.freq; } void RIG_TS570::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfoA", cmd, ""); } unsigned long long RIG_TS570::get_vfoB () { cmd = "FB;"; get_trace(1, "get_vfoB()"); int n = wait_char(';', 14, 100, "get vfoB", ASC); gett(""); if (n < 14) return freqB; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_TS570::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfoB", cmd, ""); } // SM cmd 0 ... 100 (rig values 0 ... 15) //S meter Response // 0 SM0000; // 3 SM0003; // 5 SM0005; // 7 SM0007; // 9 SM0009; //+20 SM0011; //+40 SM0013; int RIG_TS570::get_smeter() { cmd = "SM;"; get_trace(1, "get_smeter()"); int n = wait_char(';', 7, 100, "get smeter", ASC); gett(""); if (n < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return -1; // size_t len = replystr.length(); // replystr[len - 1] = 0; int mtr = atoi(&replystr[p + 2]); if (mtr <= 9) mtr = mtr * 50 / 9; else mtr = 50 + (mtr - 9) * 50 / 6; if (mtr > 100) mtr = 100; return mtr; } // RM cmd 0 ... 100 (rig values 0 ... 8) int RIG_TS570::get_swr() { sendCommand("RM1;"); // select measurement #1 cmd = "RM;"; // select measurement '1' (swr) and read meter get_trace(1, "get_swr()"); int n = wait_char(';', 8, 100, "get swr", ASC); gett(""); if (n < 8) return 0; size_t p = replystr.rfind("RM1"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; int mtr = atoi(&replystr[p + 3]); mtr = (mtr * 100) / 15; return mtr; } // power output measurement 0 ... 15 int RIG_TS570::get_power_out() { cmd = "SM;"; get_trace(1, "get_power_out()"); int n = wait_char(';', 7, 100, "get pwr out", ASC); gett(""); if (n < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int mtr = atoi(&replystr[p + 2]); mtr = (int)(0.34 + (((0.035*mtr - 0.407)*mtr + 5.074)*mtr)); if (mtr < 1) mtr = 0; if (mtr > 100) mtr = 100; return mtr; } // (xcvr power level is in 5W increments) void RIG_TS570::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set pwr", cmd, ""); } double RIG_TS570::get_power_control() { cmd = "PC;"; get_trace(1, "get_power_control()"); int n = wait_char(';', 6, 100, "get pwr ctl", ASC); gett(""); if (n < 6) return 0; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; int mtr = atoi(&replystr[p + 2]); return mtr; } // Volume control return 0 ... 100 (rig values 0 ... 255) int RIG_TS570::get_volume_control() { cmd = "AG;"; get_trace(1, "get_volume_control()"); int n = wait_char(';', 6, 100, "get vol", ASC); gett(""); if (n < 6) return 0; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; int val = atoi(&replystr[p + 2]); return (int)(val / 2.55); } void RIG_TS570::set_volume_control(int val) { int ivol = (int)(val * 2.55); showresp(WARN, ASC, "set vol", cmd, ""); cmd = "AG000;"; for (int i = 4; i > 1; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); } void RIG_TS570::tune_rig() { cmd = "AC 11;"; sendCommand(cmd); showresp(WARN, ASC, "TUNE", cmd, ""); } void RIG_TS570::set_attenuator(int val) { att_on = val; if (val) cmd = "RA01;"; else cmd = "RA00;"; sendCommand(cmd); showresp(WARN, ASC, "set Att", cmd, ""); } int RIG_TS570::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator()"); int n = wait_char(';', 5, 100, "get att", ASC); gett(""); if (n < 5) return att_on; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return att_on; if (replystr[p + 2] == '0' && replystr[p + 3] == '0') att_on = 0; else att_on = 1; return att_on; } void RIG_TS570::set_preamp(int val) { preamp_on = val; if (val) cmd = "PA1;"; else cmd = "PA0;"; sendCommand(cmd); showresp(WARN, ASC, "set pre", cmd, ""); } int RIG_TS570::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp()"); int n = wait_char(';', 4, 100, "get pre", ASC); gett(""); if (n < 4 ) return preamp_on; size_t p = replystr.rfind("PA"); if (p == std::string::npos) return preamp_on; if (replystr[p + 2] == '1') preamp_on = 1; else preamp_on = 0; return preamp_on; } void RIG_TS570::set_widths() { switch (A.imode) { case 0: case 1: case 3: case 4: bandwidths_ = TS570_SSBwidths; bw_vals_ = TS570_SSB_bw_vals; A.iBW = 1; break; case 2: case 6: bandwidths_ = TS570_CWwidths; bw_vals_ = TS570_CW_bw_vals; A.iBW = 5; break; case 5: case 7: bandwidths_ = TS570_FSKwidths; bw_vals_ = TS570_FSK_bw_vals; A.iBW = 2; break; default: break; } } std::vector& RIG_TS570::bwtable(int m) { switch (m) { case 0: case 1: case 3: case 4: return TS570_SSBwidths; break; case 2: case 6: return TS570_CWwidths; break; case 5: case 7: return TS570_FSKwidths; break; } return TS570_SSBwidths; } void RIG_TS570::set_modeA(int val) { A.imode = val; cmd = "MD"; cmd += TS570_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set modeA", cmd, ""); set_widths(); } int RIG_TS570::get_modeA() { cmd = "MD;"; get_trace(1, "get_modeA()"); int n = wait_char(';', 4, 100, "get modeA", ASC); gett(""); if (n < 4) return A.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return A.imode; int md = replystr[p + 2]; md = md - '1'; if (md == 8) md = 7; A.imode = md; set_widths(); return A.imode; } void RIG_TS570::set_modeB(int val) { B.imode = val; cmd = "MD"; cmd += TS570_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set modeB", cmd, ""); set_widths(); } int RIG_TS570::get_modeB() { cmd = "MD;"; get_trace(1, "get_modeB()"); int n = wait_char(';', 4, 100, "get modeB", ASC); gett(""); if (n < 4) return B.imode; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return B.imode; int md = replystr[p + 2]; md = md - '1'; if (md == 8) md = 7; B.imode = md; set_widths(); return B.imode; } int RIG_TS570::adjust_bandwidth(int val) { switch (val) { case 0: case 1: case 3: case 4: bandwidths_ = TS570_SSBwidths; bw_vals_ = TS570_SSB_bw_vals; return 1; case 2: case 6: bandwidths_ = TS570_CWwidths; bw_vals_ = TS570_CW_bw_vals; return 5; case 5: case 7: bandwidths_ = TS570_FSKwidths; bw_vals_ = TS570_FSK_bw_vals; return 2; } return 1; } int RIG_TS570::def_bandwidth(int val) { switch (val) { case 0: case 1: case 3: case 4: return 1; case 2: case 6: return 5; case 5: case 7: return 2; } return 2; } void RIG_TS570::set_bwA(int val) { A.iBW = val; switch (A.imode) { case 0: case 1: case 3: case 4: cmd = TS570_SSBbw[A.iBW]; sendCommand(cmd, 0); break; case 2: case 6: cmd = TS570_CWbw[A.iBW]; sendCommand(cmd, 0); break; case 5: case 7: cmd = TS570_FSKbw[A.iBW]; sendCommand(cmd, 0); break; default: break; } showresp(WARN, ASC, "set bwA", cmd, ""); } int RIG_TS570::get_bwA() { cmd = "FW;"; get_trace(1, "get_bwA()"); int n = wait_char(';', 7, 100, "get bwA", ASC); gett(""); if (n < 7) return A.iBW; size_t p = replystr.rfind("FW"); if (p == std::string::npos) return A.iBW; std::string test = replystr.substr(p, 7); switch (A.imode) { case 0: case 1: case 3: case 4: for (size_t bw = 0; bw < TS570_SSBbw.size(); bw++) if (test == TS570_SSBbw[bw]) return A.iBW = bw; break; case 2: case 6: for (size_t bw = 0; bw < TS570_CWbw.size(); bw++) if (test == TS570_CWbw[bw]) return A.iBW = bw; break; case 5: case 7: for (size_t bw = 0; bw < TS570_FSKbw.size(); bw++) if (test == TS570_FSKbw[bw]) return A.iBW = bw; break; default: break; } return A.iBW; } void RIG_TS570::set_bwB(int val) { B.iBW = val; switch (B.imode) { case 0: case 1: case 3: case 4: cmd = TS570_SSBbw[B.iBW]; sendCommand(cmd, 0); break; case 2: case 6: cmd = TS570_CWbw[B.iBW]; sendCommand(cmd, 0); break; case 5: case 7: cmd = TS570_FSKbw[B.iBW]; sendCommand(cmd, 0); break; default: break; } showresp(WARN, ASC, "set bwB", cmd, ""); } int RIG_TS570::get_bwB() { cmd = "FW;"; get_trace(1, "get_bwB()"); int n = wait_char(';', 7, 100, "get bwB", ASC); gett(""); if (n < 7) return B.iBW; size_t p = replystr.rfind("FW"); if (p == std::string::npos) return B.iBW; std::string test = replystr.substr(p,7); switch (B.imode) { case 0: case 1: case 3: case 4: for (size_t bw = 0; bw < TS570_SSBbw.size(); bw++) if (test == TS570_SSBbw[bw]) return B.iBW = bw; break; case 2: case 6: for (size_t bw = 0; bw < TS570_CWbw.size(); bw++) if (test == TS570_CWbw[bw]) return B.iBW = bw; break; case 5: case 7: for (size_t bw = 0; bw < TS570_FSKbw.size(); bw++) if (test == TS570_FSKbw[bw]) return B.iBW = bw; break; default: break; } return B.iBW; } int RIG_TS570::get_modetype(int n) { return TS570_mode_type[n]; } // val 0 .. 100 void RIG_TS570::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 4; i > 1; i--) { cmd[i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set mic", cmd, ""); } int RIG_TS570::get_mic_gain() { cmd = "MG;"; get_trace(1, "get_mic_gain()"); int n = wait_char(';', 6, 100, "get mic", ASC); gett(""); if (n < 6) return 0; size_t p = replystr.rfind("MG"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; int val = atoi(&replystr[p + 2]); return val; } void RIG_TS570::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TS570::set_noise(bool b) { if (b) cmd = "NB1;"; else cmd = "NB0;"; sendCommand(cmd); showresp(WARN, ASC, "set NB", cmd, ""); } int RIG_TS570::get_noise() { cmd = "NB;"; get_trace(1, "get_noise()"); int n = wait_char(';', 4, 100, "get NB", ASC); gett(""); if (n < 4) return 0; size_t p = replystr.rfind("NB"); if (p == std::string::npos) return 0; return (replystr[p + 2] == '1'); } //====================================================================== // IF shift command // step size is 100 Hz //====================================================================== void RIG_TS570::set_if_shift(int val) { cmd = "IS+0000;"; if (val < 0) cmd[2] = '-'; val = abs(val); for (int i = 6; i > 2; i--) { cmd[i] += val % 10; val /= 10; } sendCommand(cmd, 0); showresp(WARN, ASC, "set IF shift", cmd, ""); } bool RIG_TS570::get_if_shift(int &val) { cmd = "IS;"; get_trace(1, "get_if_shift()"); int n = wait_char(';', 8, 100, "get IFsh", ASC); gett(""); val = 0; if (n < 8) { return false; } size_t p = replystr.rfind("IS"); if (p == std::string::npos) { return false; } replystr[p + 7] = 0; val = atoi(&replystr[p + 3]); if (replystr[p+2] == '-') val = -val; return true; } void RIG_TS570::get_if_min_max_step(int &min, int &max, int &step) { min = -1000; max = 1000; step = 100; } void RIG_TS570::set_rf_gain(int val) { cmd = "RG"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set rf gain", cmd, ""); } int RIG_TS570::get_rf_gain() { int val = progStatus.rfgain; cmd = "RG;"; get_trace(1, "get_rf_gain()"); int n = wait_char(';', 6, 100, "get rf gain", ASC); gett(""); if (n < 6) return val; size_t p = replystr.rfind("RG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); return val; } void RIG_TS570::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } void RIG_TS570::set_squelch(int val) { cmd = "SQ"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd,0); showresp(WARN, ASC, "set squelch", cmd, ""); } int RIG_TS570::get_squelch() { cmd = "SQ;"; get_trace(1, "get_squelch()"); int n = wait_char(';', 6, 100, "get squelch", ASC); gett(""); if (n < 6) return 0; size_t p = replystr.rfind("SQ"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; return atoi(&replystr[p + 2]); } void RIG_TS570::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } // Tranceiver PTT on/off void RIG_TS570::set_PTT_control(int val) { if (val) cmd = "TX;"; else cmd = "RX;"; sendCommand(cmd); showresp(WARN, ASC, "PTT", cmd, ""); } /* ======================================================================== frequency & mode data are contained in the IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode h => function j => scan off/on k => split off /on l => tone off /on m => tone number X => unused characters ======================================================================== */ int RIG_TS570::get_PTT() { cmd = "IF;"; get_trace(1, "get_split()"); int n = wait_char(';', 38, 100, "get IF", ASC); gett(""); if (n < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } flrig-2.0.04/src/rigs/icom/0000775000175000017500000000000014511461606012371 500000000000000flrig-2.0.04/src/rigs/icom/IC728.cxx0000664000175000017500000000601214502720327013566 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC728.h" //============================================================================= // IC-728 // const char IC728name_[] = "IC-728"; static std::vectorIC728modes_; static const char *vIC728modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM"}; const char IC728_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U' }; static std::vectorIC728_widths; static const char *vIC728_widths[] = { "NARR", "WIDE"}; static int IC728_bw_vals[] = {1,2, WVALS_LIMIT}; RIG_IC728::RIG_IC728() { name_ = IC728name_; modes_ = IC728modes_; _mode_type = IC728_mode_type; bandwidths_ = IC728_widths; bw_vals_ = IC728_bw_vals; serial_baudrate = BR1200; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; defaultCIV = 0x38; adjustCIV(defaultCIV); precision = 10; ndigits = 7; }; //============================================================================= void RIG_IC728::initialize() { VECTOR (IC728modes_, vIC728modes_); VECTOR (IC728_widths, vIC728_widths); modes_ = IC728modes_; _mode_type = IC728_mode_type; bandwidths_ = IC728_widths; bw_vals_ = IC728_bw_vals; } bool RIG_IC728::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(10, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC728::get_vfoA () { std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(10, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else freqA = fm_bcd_be(replystr.substr(p+5), 8); } } return freqA; } void RIG_IC728::set_vfoA (unsigned long long freq) { freqA = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 8 ) ); cmd.append( post ); waitFB("set vfo A"); } flrig-2.0.04/src/rigs/icom/IC9700.cxx0000664000175000017500000013476014502720327013661 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2019 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "icom/IC9700.h" #include "support.h" //============================================================================= // IC-9700 // JBA - Enable this for Sub band to be treated as VFO B if rig is in dualwatch. // By doing this, the flrig gui control the two freqs shown in the rig display (my preference). // Otherwise, flrig controls VFOs of Main Band only. // Bottom line is I'm not exactly sure how flrig should behave if rig is in dualwatch // nor do I know how flrig treats other rigs with two receivers. #define DUALWATCH_SUB_AS_B const char IC9700name_[] = "IC-9700"; static int nummodes = 9; enum { LSB9700, USB9700, AM9700, FM9700, DV9700, CW9700, CW9700R, RTTY9700, RTTY9700R, LSB9700D, USB9700D, AM9700D, FM9700D, DVR9700 }; static std::vectorIC9700modes_; static const char *vIC9700modes_[] = { "LSB", "USB", "AM", "FM", "DV", "CW", "CW-R", "RTTY", "RTTY-R", "LSB-D", "USB-D", "AM-D", "FM-D", "DV-R"}; const char IC9700_mode_nbr[] = { 0x00, 0x01, 0x02, 0x05, 0x17, 0x03, 0x07, 0x04, 0x08, 0x00, 0x01, 0x02, 0x05, 0x17 }; const char IC9700_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'U', 'U' }; static std::vectorIC9700_ssb_bws; static const char *vIC9700_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static int IC9700_bw_vals_SSB[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40, WVALS_LIMIT}; static std::vectorIC9700_am_bws; static const char *vIC9700_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7200", "7400", "9700", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000"}; static int IC9700_bw_vals_AM[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49, WVALS_LIMIT}; static std::vectorIC9700_rtty_bws; static const char *vIC9700_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static int IC9700_bw_vals_RTTY[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31, WVALS_LIMIT}; static std::vectorIC9700_fixed_bws; static const char *vIC9700_fixed_bws[] = { "FIXED" }; static int IC9700_bw_vals_fixed[] = { 1, WVALS_LIMIT}; static GUI IC9700_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC9700::initialize() { VECTOR (IC9700modes_, vIC9700modes_); VECTOR (IC9700_ssb_bws, vIC9700_ssb_bws); VECTOR (IC9700_am_bws, vIC9700_am_bws); VECTOR (IC9700_rtty_bws, vIC9700_rtty_bws); VECTOR (IC9700_fixed_bws, vIC9700_fixed_bws); modes_ = IC9700modes_; bandwidths_ = IC9700_ssb_bws; bw_vals_ = IC9700_bw_vals_SSB; _mode_type = IC9700_mode_type; IC9700_widgets[0].W = btnVol; IC9700_widgets[1].W = sldrVOLUME; IC9700_widgets[2].W = btnAGC; IC9700_widgets[3].W = sldrRFGAIN; IC9700_widgets[4].W = sldrSQUELCH; IC9700_widgets[5].W = btnNR; IC9700_widgets[6].W = sldrNR; IC9700_widgets[7].W = btnLOCK; IC9700_widgets[8].W = sldrINNER; IC9700_widgets[9].W = btnCLRPBT; IC9700_widgets[10].W = sldrOUTER; IC9700_widgets[11].W = btnNotch; IC9700_widgets[12].W = sldrNOTCH; IC9700_widgets[13].W = sldrMICGAIN; IC9700_widgets[14].W = sldrPOWER; btn_icom_select_11->activate(); btn_icom_select_12->activate(); btn_icom_select_13->activate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC9700::RIG_IC9700() { defaultCIV = 0xA2; adjustCIV(defaultCIV); name_ = IC9700name_; modes_ = IC9700modes_; bandwidths_ = IC9700_ssb_bws; bw_vals_ = IC9700_bw_vals_SSB; _mode_type = IC9700_mode_type; serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.freq = 14070000ULL; A.imode = USB9700D; A.iBW = 34; B.freq = 7070000ULL; B.imode = USB9700D; B.iBW = 34; def_freq = 14070000ULL; def_mode = USB9700D; def_bw = 34; widgets = IC9700_widgets; has_extras = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_cw_break_in = true; has_vox_onoff = true; has_vox_gain = true; has_vox_anti = true; has_vox_hang = true; has_compON = true; has_compression = true; has_split = true; has_split_AB = true; has_micgain_control = true; has_bandwidth_control = true; has_smeter = true; has_voltmeter = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_sql_control = true; has_agc_control = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_attenuator_control = true; has_preamp_control = true; has_noise_control = true; has_nb_level = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_pbt_controls = true; has_rf_control = true; has_ptt_control = true; has_tune_control = true; ICOMmainsub = true; has_xcvr_auto_on_off = true; has_band_selection = true; // JBA - these two lines broke sat mode when setting the mode of the sub R. // I'm not quite sure what they actually do but they are used in support.cxx and xml_server // A toggle added in get_sat_mode to correct this. can_change_alt_vfo = true; has_a2b = true; precision = 1; ndigits = 10; }; //====================================================================== // IC9700 unique commands //====================================================================== //static int ret = 0; static bool xcvr_is_on = false; void RIG_IC9700::set_xcvr_auto_on() { cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); RigSerial->failed(0); if (waitFOR(8, "get ID") == false) { cmd.clear(); int fes[] = { 2, 2, 2, 3, 7, 13, 25, 50, 75, 150, 150, 150 }; if (progStatus.serial_baudrate >= 0 && progStatus.serial_baudrate <= 11) { cmd.append( fes[progStatus.serial_baudrate], '\xFE'); } RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); cmd.assign(pre_to); cmd += '\x18'; cmd += '\x01'; set_trace(1, "power_on()"); cmd.append(post); RigSerial->failed(0); if (waitFB("Power ON")) { isett("power_on()"); xcvr_is_on = true; cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); int i = 0; for (i = 0; i < 100; i++) { // 10 second total timeout if (waitFOR(8, "get ID", 100) == true) { RigSerial->failed(0); return; } update_progress(i / 2); Fl::awake(); } RigSerial->failed(0); return; } isett("power_on()"); RigSerial->failed(1); xcvr_is_on = false; return; } xcvr_is_on = true; } void RIG_IC9700::set_xcvr_auto_off() { cmd.clear(); cmd.append(pre_to); cmd += '\x18'; cmd += '\x00'; cmd.append(post); waitFB("Power OFF", 200); } void RIG_IC9700::selectA() { // JBA - select Main Band if rig is in sat mode and VFO A if it is not // This is a change from version 1.4.5 #ifdef DUALWATCH_SUB_AS_B int sat_mode = get_sat_mode() + get_dualwatch(); #else int sat_mode = get_sat_mode(); #endif cmd = pre_to; cmd += '\x07'; if( sat_mode ) cmd += '\xD0'; // Select Main band else cmd += '\x00'; // Select VFO A cmd.append(post); waitFB("select A"); set_trace(2, "selectA()", str2hex(replystr.c_str(), replystr.length())); inuse = onA; } void RIG_IC9700::selectB() { // JBA - select Sub Band if rig is in sat mode and VFO B if it is not // This is a change from version 1.4.5 #ifdef DUALWATCH_SUB_AS_B int sat_mode = get_sat_mode() + get_dualwatch(); #else int sat_mode = get_sat_mode(); #endif cmd = pre_to; cmd += '\x07'; if( sat_mode ) cmd += '\xD1'; // Select Sub band else cmd += '\x01'; // Select VFO A cmd.append(post); waitFB("select B"); set_trace(2, "selectB()", str2hex(replystr.c_str(), replystr.length())); inuse = onB; } bool RIG_IC9700::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); get_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } static int ret = 0; unsigned long long RIG_IC9700::get_vfoA () { #ifdef DUALWATCH_SUB_AS_B int sat_mode = get_sat_mode() + get_dualwatch(); #else int sat_mode = get_sat_mode(); #endif if( sat_mode ){ // Rig is in satellite mode - command 0x25 doesn't work in sat mode // See pg 23 of IC9700 CIV manual if (inuse == onB) return A.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } get_trace(2, "get_vfoA()", str2hex(replystr.c_str(), replystr.length())); } else { // Rig is not in satellite mode // The 0x25 command only affects the Main Band VFOs std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); if (inuse == onB) { cmd += '\x01'; resp += '\x01'; } else { cmd += '\x00'; resp += '\x00'; } cmd.append(post); get_trace(1, "get_vfoA()"); ret = waitFOR(12, "get vfo A"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+6), 10); } } } return A.freq; } void RIG_IC9700::set_vfoA (unsigned long long freq) { A.freq = freq; #ifdef DUALWATCH_SUB_AS_B int sat_mode = get_sat_mode() + get_dualwatch(); #else int sat_mode = get_sat_mode(); #endif if( sat_mode ){ // Rig is in satellite mode - command 0x25 doesn't work in sat mode cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); set_trace(2, "set_vfoA()", str2hex(replystr.c_str(), replystr.length())); } else { // Rig is not in satellite mode cmd.assign(pre_to).append("\x25"); if (inuse == onB) cmd += '\x01'; else cmd += '\x00'; cmd.append( to_bcd_be( freq, 10) ); cmd.append( post ); set_trace(1, "set_vfoA"); waitFB("set vfo A"); seth(); } } unsigned long long RIG_IC9700::get_vfoB () { #ifdef DUALWATCH_SUB_AS_B int sat_mode = get_sat_mode() + get_dualwatch(); #else int sat_mode = get_sat_mode(); #endif if( sat_mode ){ // Rig is in satellite mode - command 0x25 doesn't work in sat mode if (inuse != onB) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } get_trace(2, "get_vfoB()", str2hex(replystr.c_str(), replystr.length())); } else { // Rig is not in satellite mode std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); if (inuse == onB) { cmd += '\x00'; resp += '\x00'; } else { cmd += '\x01'; resp += '\x01'; } cmd.append(post); get_trace(1, "get_vfoB()"); ret = waitFOR(12, "get vfo B"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+6), 10); } } } return B.freq; } void RIG_IC9700::set_vfoB (unsigned long long freq) { B.freq = freq; #ifdef DUALWATCH_SUB_AS_B int sat_mode = get_sat_mode() + get_dualwatch(); #else int sat_mode = get_sat_mode(); #endif if( sat_mode ){ // Rig is in satellite mode - command 0x25 doesn't work in sat mode cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); set_trace(2, "set_vfoB()", str2hex(replystr.c_str(), replystr.length())); } else { // Rig is not in satellite mode cmd.assign(pre_to).append("\x25"); if (inuse == onB) cmd += '\x00'; else cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "set_vfoB"); waitFB("set vfo B"); seth(); } } void RIG_IC9700::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC9700_mode_nbr[val]; cmd.append( post ); waitFB("set mode A"); std::stringstream ss; ss << "set_modeA(" << val << ") [" << IC9700modes_[val] << "] " << str2hex(replystr.c_str(), replystr.length()); set_trace(1, ss.str().c_str()); cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; if (A.imode > RTTY9700R) cmd += '\x01'; else cmd += '\x00'; cmd.append( post); waitFB("data mode"); set_trace(2, "set_data_modeA()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9700::get_modeA() { int md = A.imode; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; int ret = waitFOR(8, "get mode/bw A"); std::stringstream ss; ss << "get_modeA() " << str2hex(replystr.c_str(), replystr.length()); get_trace(2, "get_modeA()", ss.str().c_str()); if (ret) { size_t p = replystr.find(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { A.imode = 0; return A.imode; } for (md = 0; md < nummodes; md++) if (replystr[p+5] == IC9700_mode_nbr[md]) break; if (md == nummodes) { checkresponse(); return A.imode; } } } else { checkresponse(); return A.imode; } if (md < CW9700) { // check for DATA / DVR cmd = pre_to; cmd += "\x1A\x06"; cmd.append(post); resp = pre_fm; resp += "\x1A\x06"; if (waitFOR(9, "data mode?")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if ((replystr[p+6] & 0x01) == 0x01) { if (md == LSB9700) md = LSB9700D; if (md == USB9700) md = USB9700D; if (md == AM9700) md = AM9700D; if (md == FM9700) md = FM9700D; if (md == DV9700) md = DVR9700; } } } get_trace(2,"get_data_modeA", str2hex(replystr.c_str(), replystr.length())); } A.imode = md; return A.imode; } void RIG_IC9700::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC9700_mode_nbr[val]; cmd.append( post ); waitFB("set mode B"); std::stringstream ss; ss << "set_modeB(" << val << ") [" << IC9700modes_[val] << "] " << str2hex(replystr.c_str(), replystr.length()); set_trace(1, ss.str().c_str()); cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; if (B.imode > RTTY9700R) cmd += '\x01'; else cmd += '\x00'; cmd.append( post); waitFB("data mode"); set_trace(2, "set_data_modeB()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9700::get_modeB() { int md = B.imode; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; int ret = waitFOR(8, "get mode/bw B"); std::stringstream ss; ss << "get_modeA() " << str2hex(replystr.c_str(), replystr.length()); get_trace(1, ss.str().c_str()); if (ret) { size_t p = replystr.find(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { B.imode = 0; return B.imode; } for (md = 0; md < nummodes; md++) if (replystr[p+5] == IC9700_mode_nbr[md]) break; if (md == nummodes) { checkresponse(); return B.imode; } } } else { checkresponse(); return B.imode; } if (md < CW9700) { // check for DATA / DVR cmd = pre_to; cmd += "\x1A\x06"; cmd.append(post); resp = pre_fm; resp += "\x1A\x06"; if (waitFOR(9, "data mode?")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if ((replystr[p+6] & 0x01) == 0x01) { if (md == LSB9700) md = LSB9700D; if (md == USB9700) md = USB9700D; if (md == AM9700) md = AM9700D; if (md == FM9700) md = FM9700D; if (md == DV9700) md = DVR9700; } } } get_trace(2,"get_data_modeB", str2hex(replystr.c_str(), replystr.length())); } B.imode = md; return B.imode; } int RIG_IC9700::get_bwA() { if (A.imode == DV9700 || A.imode == DVR9700 || A.imode == FM9700 || A.imode == FM9700D) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); int ret = waitFOR(8, "get_bw A"); get_trace(2, "get_bwA()", str2hex(replystr.c_str(), replystr.length())); if (ret) { size_t p = replystr.rfind(resp); A.iBW = fm_bcd(replystr.substr(p+6), 2); } return A.iBW; } void RIG_IC9700::set_bwA(int val) { A.iBW = val; if (A.imode == DV9700 || A.imode == DVR9700 || A.imode == FM9700 || A.imode == FM9700D) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bw A"); std::stringstream ss; const char *bwstr = IC9700_ssb_bws[val].c_str(); if ((A.imode == AM9700) || (A.imode == AM9700D)) bwstr = IC9700_am_bws[val].c_str(); if ((A.imode == RTTY9700) || (A.imode == RTTY9700R)) bwstr = IC9700_rtty_bws[val].c_str(); ss << "set_bwA(" << val << ") [" << bwstr << "] " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); } int RIG_IC9700::get_bwB() { if (B.imode == DV9700 || B.imode == DVR9700 || B.imode == FM9700 || B.imode == FM9700D) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); int ret = waitFOR(8, "get_bw B"); get_trace(2, "get_bwB()", str2hex(replystr.c_str(), replystr.length())); if (ret) { size_t p = replystr.rfind(resp); B.iBW = fm_bcd(replystr.substr(p+6), 2); } return B.iBW; } void RIG_IC9700::set_bwB(int val) { B.iBW = val; if (B.imode == DV9700 || B.imode == DVR9700 || B.imode == FM9700 || B.imode == FM9700D) return; if (B.imode == 5) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); waitFB("set bw B"); std::stringstream ss; const char *bwstr = IC9700_ssb_bws[val].c_str(); if ((B.imode == AM9700) || (B.imode == AM9700D)) bwstr = IC9700_am_bws[val].c_str(); if ((B.imode == RTTY9700) || (B.imode == RTTY9700R)) bwstr = IC9700_rtty_bws[val].c_str(); ss << "set_bwB(" << val << ") [" << bwstr << "] " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); } int RIG_IC9700::adjust_bandwidth(int m) { int bw = 0; switch (m) { case AM9700: case AM9700D: bandwidths_ = IC9700_am_bws; bw_vals_ = IC9700_bw_vals_AM; bw = 19; break; case CW9700: case CW9700R: bandwidths_ = IC9700_ssb_bws; bw_vals_ = IC9700_bw_vals_SSB; bw = 12; break; case RTTY9700: case RTTY9700R: bandwidths_ = IC9700_ssb_bws; bw_vals_ = IC9700_bw_vals_RTTY; bw = 12; break; case FM9700: case FM9700D : case DV9700: case DVR9700 : bandwidths_ = IC9700_fixed_bws; bw_vals_ = IC9700_bw_vals_fixed; bw = 0; break; case LSB9700: case USB9700: case LSB9700D: case USB9700D: default: bandwidths_ = IC9700_ssb_bws; bw_vals_ = IC9700_bw_vals_SSB; bw = 34; } return bw; } std::vector& RIG_IC9700::bwtable(int m) { switch (m) { case AM9700: case AM9700D: return IC9700_am_bws; break; case FM9700: case FM9700D : case DV9700: case DVR9700 : return IC9700_fixed_bws; break; case CW9700: case CW9700R: case RTTY9700: case RTTY9700R: case LSB9700: case USB9700: case LSB9700D: case USB9700D: default: return IC9700_ssb_bws; } return IC9700_ssb_bws; } int RIG_IC9700::def_bandwidth(int m) { int bw = 0; switch (m) { case AM9700: case AM9700D: bw = 19; break; case DV9700: case DVR9700: case FM9700: case FM9700D: bw = 0; break; case RTTY9700: case RTTY9700R: bw = 12; break; case CW9700: case CW9700R: bw = 12; break; case LSB9700: case USB9700: case LSB9700D: case USB9700D: default: bw = 34; } return bw; } void RIG_IC9700::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set mic gain"); set_trace(2, "set_mic_gain()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9700::get_mic_gain() { int val = 0; std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_mic_gain()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC9700::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC9700::set_compression(int on, int val) { if (on) { cmd.assign(pre_to).append("\x14\x0E"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set comp"); cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); } set_trace(2, "set_compression()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_vox_onoff() { cmd.assign(pre_to).append("\x16\x46"); if (progStatus.vox_onoff) { cmd += '\x01'; cmd.append( post ); waitFB("set vox ON"); } else { cmd += '\x00'; cmd.append( post ); waitFB("set vox OFF"); } set_trace(2, "set_vox_onoff()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_vox_gain() { cmd.assign(pre_to).append("\x1A\x05"); cmd +='\x01'; cmd +='\x25'; cmd.append(bcd255(progStatus.vox_gain)); cmd.append( post ); waitFB("SET vox gain"); set_trace(2, "set_vox_gain()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_vox_anti() { cmd.assign(pre_to).append("\x1A\x05"); cmd +='\x01'; cmd +='\x26'; cmd.append(bcd255(progStatus.vox_anti)); cmd.append( post ); waitFB("SET anti-vox"); set_trace(2, "set_vox_anti()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05"); //values 00-20 = 0.0 - 2.0 sec cmd +='\x01'; cmd +='\x27'; cmd.append(to_bcd((int)(progStatus.vox_hang / 10 ), 2)); cmd.append( post ); waitFB("SET vox hang"); set_trace(2, "set_vox_hang()", str2hex(replystr.c_str(), replystr.length())); } // these need to be written and tested void RIG_IC9700::get_vox_onoff() { } void RIG_IC9700::get_vox_gain() { } void RIG_IC9700::get_vox_anti() { } void RIG_IC9700::get_vox_hang() { } // CW controls void RIG_IC9700::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); // values 0-255 cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (60 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); set_trace(2, "set_cw_wpm()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); // values 0-255 cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); set_trace(2, "set_cw_qsk()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); set_trace(2, "set_cw_spot_tone()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x24'; cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); set_trace(2, "set_cw_vol()", str2hex(replystr.c_str(), replystr.length())); } // Volume control val 0 ... 100 void RIG_IC9700::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set vol"); set_trace(2, "set_volume_control()", str2hex(replystr.c_str(), replystr.length())); } /* I:12:20:22: get vol ans in 0 ms, OK cmd FE FE 7A E0 14 01 FD ans FE FE 7A E0 14 01 FD FE FE E0 7A 14 01 00 65 FD 0 1 2 3 4 5 6 7 8 */ int RIG_IC9700::get_volume_control() { int val = 0; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_volume_control()", str2hex(replystr.c_str(), replystr.length())); return (val); } void RIG_IC9700::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC9700::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set power"); set_trace(2, "set_power_control()", str2hex(replystr.c_str(), replystr.length())); } double RIG_IC9700::get_power_control() { int val = progStatus.power_level; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_power_control()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC9700::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } void RIG_IC9700::set_rf_gain(int val) { cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set RF"); set_trace(2, "set_rf_gain()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9700::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get RF")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_rf_gain()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC9700::get_rf_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } int RIG_IC9700::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.40); if (mtr > 100) mtr = 100; } } get_trace(2, "get_smeter()", str2hex(replystr.c_str(), replystr.length())); return mtr; } double RIG_IC9700::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); int ret = waitFOR(9, "get voltmeter"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 6.0 * mtr / 228.0 + 9.7; return val; } } return -1; } int RIG_IC9700::get_power_out() { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get pout")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.15); if (mtr > 100) mtr = 100; } } get_trace(2, "get_power_out()", str2hex(replystr.c_str(), replystr.length())); return mtr; } int RIG_IC9700::get_swr() { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get SWR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.40); if (mtr > 100) mtr = 100; } } get_trace(2, "get_swr()", str2hex(replystr.c_str(), replystr.length())); return mtr; } int RIG_IC9700::get_alc() { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } get_trace(2, "get_alc()", str2hex(replystr.c_str(), replystr.length())); return mtr; } void RIG_IC9700::set_notch(bool on, int val) { int notch = (int)(val * 256.0 / 3000.0); 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(post); waitFB("set notch val"); std::stringstream ss; ss << "set_notch(" << on << ", " << val << ") " << str2hex(replystr.data(), replystr.length()); set_trace(2, "set_notch()", ss.str().c_str()); } bool RIG_IC9700::get_notch(int &val) { bool on = false; val = 0; std::string cstr = "\x16\x48"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; 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 != std::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")) { get_trace(2, "get_notch_val()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)ceil(fm_bcd(replystr.substr(p+6),3) * 3000.0 / 255.0); } } return on; } void RIG_IC9700::get_notch_min_max_step(int &min, int &max, int &step) { min = 0; max = 3000; step = 20; } void RIG_IC9700::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += val ? 0x01 : 0x00; cmd.append( post ); waitFB("set AN"); set_trace(2, "set_auto_notch()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9700::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get AN")) { get_trace(2, "get_auto_notch()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } void RIG_IC9700::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); set_trace(2, "set_split()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9700::get_split() { return split; } static int agcval = 1; int RIG_IC9700::get_agc() { cmd = pre_to; cmd.append("\x16\x12"); cmd.append(post); if (waitFOR(8, "get AGC")) { size_t p = replystr.find(pre_fm); if (p == std::string::npos) return agcval; return (agcval = replystr[p+6]); // 1 = FAST, 2 = MID, 3 = SLOW } get_trace(2, "get_agc()", str2hex(replystr.c_str(), replystr.length())); return agcval; } int RIG_IC9700::incr_agc() { agcval++; if (agcval == 4) agcval = 1; cmd = pre_to; cmd.append("\x16\x12"); cmd += agcval; cmd.append(post); waitFB("set AGC"); set_trace(2, "incr_agc()", str2hex(replystr.c_str(), replystr.length())); return agcval; } static const char *agcstrs[] = {"FST", "MID", "SLO"}; const char *RIG_IC9700::agc_label() { return agcstrs[agcval - 1]; } int RIG_IC9700::agc_val() { return (agcval); } void RIG_IC9700::set_attenuator(int val) { if (val) { atten_level = 1; } else { atten_level = 0; } cmd = pre_to; cmd += '\x11'; cmd += atten_level ? '\x10' : '\x00'; cmd.append( post ); waitFB("set att"); std::stringstream ss; ss << "set_attenuator(" << val << ") " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); } int RIG_IC9700::next_attenuator() { if (atten_level) return 0; return 1; } int RIG_IC9700::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; if (waitFOR(7, "get ATT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (!replystr[p+5]) { atten_level = 0; return 0; } else { atten_level = 1; return 1; } } } get_trace(2, "get_attenuator()", str2hex(replystr.data(), replystr.length())); return 0; } int RIG_IC9700::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 3; default: case 3: return 0; } return 0; } void RIG_IC9700::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += preamp_level; cmd.append( post ); waitFB("set Pre"); std::stringstream ss; ss << "set_preamp(" << val << ") " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); } int RIG_IC9700::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get Pre")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) preamp_level = replystr[p+6]; } get_trace(2, "get_preamp()", str2hex(replystr.c_str(), replystr.length())); return preamp_level; } const char *RIG_IC9700::PRE_label() { switch (preamp_level) { case 0 : default: break; case 1 : return("P1/E0"); break; case 2 : return("P0/E1"); break; case 3 : return("P1/E1"); break; } return("P0/E0"); } const char *RIG_IC9700::ATT_label() { if (atten_level == 1) return("10 dB"); return "ATT"; } // Tranceiver PTT on/off void RIG_IC9700::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); std::stringstream ss; ss << "set_PTT_control(" << val << ") " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); ptt_ = val; } int RIG_IC9700::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } get_trace(2, "get_PTT()", str2hex(replystr.data(), replystr.length())); return ptt_; } void RIG_IC9700::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); set_trace(2, "set_noise()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9700::get_noise() { int val = progStatus.noise; std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+6]; } } get_trace(2, "get_noise()", str2hex(replystr.data(), replystr.length())); return val; } void RIG_IC9700::set_nb_level(int val) { cmd = pre_to; cmd.append("\x14\x12"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set NB level"); set_trace(2, "set_nb_level()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9700::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x14\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NB level")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_nb_level()", str2hex(replystr.data(), replystr.length())); return val; } void RIG_IC9700::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); get_trace(2, "get_noise_reduction()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9700::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } get_trace(2, "get_noise_reduction()", str2hex(replystr.data(), replystr.length())); return progStatus.noise_reduction; } /* I:12:06:50: get NR ans in 0 ms, OK cmd FE FE 7A E0 16 40 FD ans FE FE 7A E0 16 40 FD FE FE E0 7A 16 40 01 FD 0 1 2 3 4 5 6 7 I:12:06:50: get NRval ans in 0 ms, OK cmd FE FE 7A E0 14 06 FD ans FE FE 7A E0 14 06 FD FE FE E0 7A 14 06 00 24 FD 0 1 2 3 4 5 6 7 8 */ void RIG_IC9700::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val *= 16; val += 8; cmd.append(to_bcd(val, 3)); cmd.append(post); waitFB("set NRval"); set_trace(2, "set_noise_reduction_val()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9700::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val -= 8; val /= 16; } } get_trace(2, "get_noise_reduction_val()", str2hex(replystr.data(), replystr.length())); return val; } void RIG_IC9700::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set Sqlch"); set_trace(2, "set_squelch()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9700::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get squelch")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_squelch()", str2hex(replystr.data(), replystr.length())); return val; } void RIG_IC9700::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); set_trace(2, "set_if_shift()", str2hex(replystr.data(), replystr.length())); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); set_trace(2, "set_if_shift_val()", str2hex(replystr.data(), replystr.length())); } bool RIG_IC9700::get_if_shift(int &val) { val = sh_; return sh_on_; } void RIG_IC9700::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC9700::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); set_trace(2, "set_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); set_trace(2, "set_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9700::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } get_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC9700::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } get_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC9700::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if ((bandmode == 0) && banddata) bandmode = 9; if ((bandmode == 1) && banddata) bandmode = 10; if ((bandmode == 2) && banddata) bandmode = 11; if ((bandmode == 3) && banddata) bandmode = 12; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9700::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += '\x01'; cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } // JBA - routine to determine if rig is in satellite mode // Be sure to call this before forming another command as // the variable cmd is common to all of these routines. int RIG_IC9700::get_sat_mode() { int ret; int iret = 0; std::string resp; // Read sat mode cmd = pre_to; cmd.append("\x16\x5a"); cmd.append(post); resp = pre_fm; resp.append("\x16\x5a"); ret = waitFOR(8, "get_sat_mode"); get_trace(2, "get_sat_mode()", str2hex(replystr.c_str(), replystr.length())); if (ret) { size_t p = replystr.rfind(resp); iret = replystr[p+6]; } // These two flags are used elsewhere and broke sat mode - only allow them to // be set if not in sat mode if( iret ) can_change_alt_vfo = has_a2b = false; else can_change_alt_vfo = has_a2b = true; return iret; } // JBA - routine to determine if rig is in dualwatch mode. // Be sure to call this before forming another command as // the variable cmd is common to all of these routines. int RIG_IC9700::get_dualwatch() { int ret; int iret = 0; std::string resp; // Read sat mode cmd = pre_to; cmd.append("\x16\x59"); cmd.append(post); resp = pre_fm; resp.append("\x16\x59"); ret = waitFOR(8, "get_dualwatch"); get_trace(2, "get_dualwatch()", str2hex(replystr.c_str(), replystr.length())); if (ret) { size_t p = replystr.rfind(resp); iret = replystr[p+6]; } return iret; } flrig-2.0.04/src/rigs/icom/IC7410.cxx0000664000175000017500000004620614502720327013652 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC7410.h" #include "support.h" bool IC7410_DEBUG = true; //============================================================================= // IC-7410 /* */ const char IC7410name_[] = "IC-7410"; static std::vectorIC7410modes_; static const char *vIC7410modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "LSB-D", "USB-D", "FM-D"}; enum { LSB7410, USB7410, AM7410, CW7410, RTTY7410, FM7410, CWR7410, RTTYR7410, LSBD7410, USBD7410, FMD7410 }; const char IC7410_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U', 'L', 'U', 'L', 'U', 'U' }; const char IC7410_mode_nbr[] = { 0x00, // Select the LSB mode 0x01, // Select the USB mode 0x02, // Select the AM mode 0x03, // Select the CW mode 0x04, // Select the RTTY mode 0x05, // Select the FM mode 0x07, // Select the CW-R mode 0x08, // Select the RTTY-R mode 0x00, // select lsb-data mode 0x01, // select usb-data mode 0x05, // select fm-data mode }; static std::vectorIC7410_ssb_bws; static const char *vIC7410_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static std::vectorIC7410_rtty_bws; static const char *vIC7410_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static std::vectorIC7410_am_bws; static const char *vIC7410_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7200", "7400", "7410", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000"}; static std::vectorIC7410_fm_bws; static const char *vIC7410_fm_bws[] = { "FIXED" }; static GUI IC7410_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7410::initialize() { VECTOR (IC7410modes_, vIC7410modes_); VECTOR (IC7410_ssb_bws, vIC7410_ssb_bws); VECTOR (IC7410_rtty_bws, vIC7410_rtty_bws); VECTOR (IC7410_am_bws, vIC7410_am_bws); VECTOR (IC7410_fm_bws, vIC7410_fm_bws); modes_ = IC7410modes_; bandwidths_ = IC7410_ssb_bws; _mode_type = IC7410_mode_type; IC7410_widgets[0].W = btnVol; IC7410_widgets[1].W = sldrVOLUME; IC7410_widgets[2].W = btnAGC; IC7410_widgets[3].W = sldrRFGAIN; IC7410_widgets[4].W = sldrSQUELCH; IC7410_widgets[5].W = btnNR; IC7410_widgets[6].W = sldrNR; IC7410_widgets[7].W = btnLOCK; IC7410_widgets[8].W = sldrINNER; IC7410_widgets[9].W = btnCLRPBT; IC7410_widgets[10].W = sldrOUTER; IC7410_widgets[11].W = btnNotch; IC7410_widgets[12].W = sldrNOTCH; IC7410_widgets[13].W = sldrMICGAIN; IC7410_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC7410::RIG_IC7410() { defaultCIV = 0x80; name_ = IC7410name_; modes_ = IC7410modes_; bandwidths_ = IC7410_ssb_bws; _mode_type = IC7410_mode_type; adjustCIV(defaultCIV); serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = IC7410_widgets; has_pbt_controls = true; has_FILTER = true; has_extras = has_cw_wpm = has_cw_spot_tone = has_cw_qsk = has_cw_vol = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_compON = has_compression = has_micgain_control = has_bandwidth_control = true; has_band_selection = true; precision = 1; ndigits = 9; filA = filB = 1; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 1; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 1; B.iBW = 34; }; //====================================================================== // IC7410 unique commands //====================================================================== void RIG_IC7410::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); waitFB("select A"); inuse = onA; } void RIG_IC7410::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); waitFB("select B"); inuse = onB; } void RIG_IC7410::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7410_mode_nbr[val]; cmd += filA; cmd.append( post ); waitFB("set mode A"); // digital set / clear if (val == LSBD7410 || val == USBD7410 || val == FMD7410) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += '\x01'; cmd += filA; cmd.append( post); waitFB("set digital"); } } static const char *szfilter[] = {"1", "2", "3"}; int RIG_IC7410::get_modeA() { int md = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get mode A")) { size_t p = replystr.rfind(resp); if (replystr[p+5] == -1) { A.imode = filA = 0; } else { for (md = LSB7410; md <= RTTYR7410; md++) if (replystr[p+5] == IC7410_mode_nbr[md]) break; filA = replystr[p+6]; if (md == LSB7410 || md == USB7410 || md == FM7410) { cmd = pre_to; cmd.append("\x1a\x06"); cmd.append(post); resp = pre_fm; resp.append("\x1a\x06"); if (waitFOR(9, "get digital setting")) { size_t p = replystr.rfind(resp); if (replystr[p+6] == 0x01) { if (md == LSB7410) md = LSBD7410; else if (md == USB7410) md = USBD7410; else if (md == FM7410) md = FMD7410; } if (replystr[p+7]) filA = replystr[p+7]; } } A.imode = md; } } return A.imode; } void RIG_IC7410::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7410_mode_nbr[val]; cmd += filB; cmd.append( post ); waitFB("set mode B"); if (val == LSBD7410 || val == USBD7410 || val == FMD7410) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += '\x01'; cmd += filB; cmd.append( post); waitFB("set digital"); } } int RIG_IC7410::get_modeB() { int md = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get mode B")) { size_t p = replystr.rfind(resp); if (replystr[p+5] == -1) { B.imode = filB = 0; } else { for (md = LSB7410; md <= RTTYR7410; md++) if (replystr[p+5] == IC7410_mode_nbr[md]) break; filB = replystr[p+6]; if (md == USB7410 || md == AM7410 || md == FM7410) { cmd = pre_to; cmd.append("\x1a\x06"); cmd.append(post); resp = pre_fm; resp.append("\x1a\x06"); if (waitFOR(9, "get digital")) { size_t p = replystr.rfind(resp); if (replystr[p+6] == 0x01) { if (md == LSB7410) md = LSBD7410; else if (md == USB7410) md = USBD7410; else if (md == FM7410) md = FMD7410; } if (replystr[p+7]) filB = replystr[p+7]; } } B.imode = md; } } return B.imode; } int RIG_IC7410::get_bwA() { cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); if (waitFOR(8, "get bw A")) { size_t p = replystr.rfind(resp); A.iBW = fm_bcd(replystr.substr(p+6), 2); } return A.iBW; } void RIG_IC7410::set_bwA(int val) { if (A.imode == FM7410 || A.imode == FMD7410) return; A.iBW = val; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bw A"); } int RIG_IC7410::get_bwB() { cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); if (waitFOR(8, "get bw B")) { size_t p = replystr.rfind(resp); B.iBW = fm_bcd(replystr.substr(p+6), 2); } return B.iBW; } void RIG_IC7410::set_bwB(int val) { if (B.imode == FM7410 || B.imode == FMD7410) return; B.iBW = val; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); waitFB("set bw A"); } int RIG_IC7410::adjust_bandwidth(int m) { switch (m) { case USB7410: case LSB7410: case LSBD7410 : case USBD7410: bandwidths_ = IC7410_ssb_bws; return 34; case AM7410: bandwidths_ = IC7410_am_bws; return 29; break; case FM7410: case FMD7410: bandwidths_ = IC7410_fm_bws; return 0; break; case RTTY7410: case RTTYR7410: bandwidths_ = IC7410_rtty_bws; return 12; break; case CW7410: case CWR7410: bandwidths_ = IC7410_ssb_bws; return 10; break; default: bandwidths_ = IC7410_ssb_bws; return 34; } return 0; } std::vector& RIG_IC7410::bwtable(int m) { switch (m) { case AM7410: return IC7410_am_bws; break; case FM7410: case FMD7410: return IC7410_fm_bws; break; case RTTY7410: case RTTYR7410: return IC7410_rtty_bws; break; case CW7410: case CWR7410: case USB7410: case LSB7410: case LSBD7410 : case USBD7410: default: return IC7410_ssb_bws; } return IC7410_ssb_bws; } int RIG_IC7410::def_bandwidth(int m) { return adjust_bandwidth(m); } void RIG_IC7410::set_mic_gain(int v) { ICvol = (int)(v * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set mic gain"); } void RIG_IC7410::set_attenuator(int val) { int cmdval = 0; if (atten_level == 0) { atten_level = 1; cmdval = 0x20; } else if (atten_level == 1) { atten_level = 0; cmdval = 0x00; } cmd = pre_to; cmd += '\x11'; cmd += cmdval; cmd.append( post ); waitFB("set attenuator"); } int RIG_IC7410::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; if (waitFOR(7, "get attenuator")) { size_t p = replystr.rfind(resp); if (replystr[p+6] == 0x20) { atten_level = 1; } else { atten_level = 0; } } return atten_level; } const char *RIG_IC7410::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } void RIG_IC7410::set_compression(int on, int val) { if (on) { cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append( post ); waitFB("set comp"); cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); } } void RIG_IC7410::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; cmd.append( post ); waitFB("set vox OFF"); } } void RIG_IC7410::set_vox_gain() { cmd.assign(pre_to).append("\x1A\x05"); // values 0-255 = 0 - 100% cmd +='\x00'; cmd +='\x87'; cmd.append(to_bcd((int)(progStatus.vox_gain * 2.55), 3)); cmd.append( post ); waitFB("SET vox gain"); } void RIG_IC7410::set_vox_anti() { cmd.assign(pre_to).append("\x1A\x05"); // values 0-255 = 0 - 100% cmd +='\x00'; cmd +='\x88'; cmd.append(to_bcd((int)(progStatus.vox_anti * 2.55), 3)); cmd.append( post ); waitFB("SET anti-vox"); } void RIG_IC7410::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05"); // values 00-20 = 0.0 - 2.0 sec cmd +='\x00'; cmd +='\x89'; cmd.append(to_bcd((int)(progStatus.vox_hang / 10 ), 2)); cmd.append( post ); waitFB("SET vox hang"); } // CW controls void RIG_IC7410::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); // values 0-255 = 6 to 48 WPM cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (48 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); } void RIG_IC7410::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); // values 0-255 cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); } void RIG_IC7410::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); } void RIG_IC7410::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x14\x15"); cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); } // Tranceiver PTT on/off void RIG_IC7410::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; } int RIG_IC7410::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } void RIG_IC7410::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC7410::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC7410::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC7410::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } const char *RIG_IC7410::FILT(int &val) { if (inuse == onB) { if (filB < 0) filB = 0; if (filB > 3) filB = 3; val = filB; return(szfilter[filB - 1]); } else { if (filA < 0) filA = 0; if (filA > 3) filA = 3; val = filA; return (szfilter[filA - 1]); } } const char *RIG_IC7410::nextFILT() { if (inuse == onB) { filB++; if (filB > 3) filB = 1; set_modeB(B.imode); return(szfilter[filB - 1]); } else { filA++; if (filA > 3) filA = 1; set_modeA(A.imode); return(szfilter[filA - 1]); } } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC7410::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; if ((bandmode == 0) && banddata) bandmode = 8; if ((bandmode == 1) && banddata) bandmode = 9; if ((bandmode == 5) && banddata) bandmode = 10; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC7410::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; if (mode >= 7) cmd += '\x10'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } flrig-2.0.04/src/rigs/icom/ICbase.cxx0000664000175000017500000001506414505023024014160 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "icom/ICbase.h" #include "debug.h" #include "icons.h" #include "tod_clock.h" #include "trace.h" #include "status.h" #include "threads.h" #include "socket_io.h" #include "serial.h" #include "support.h" #include "xmlrpc_rig.h" pthread_mutex_t command_mutex = PTHREAD_MUTEX_INITIALIZER; //============================================================================= void RIG_ICOM::adjustCIV(uchar adr) { CIV = adr; pre_to[2] = ok[3] = bad[3] = pre_fm[3] = CIV; } void RIG_ICOM::checkresponse() { if (!progStatus.use_tcpip && !RigSerial->IsOpen()) return; if (!RigSerial->IsOpen()) return; if (replystr.rfind(ok) != std::string::npos) return; std::string s1 = str2hex(cmd.c_str(), cmd.length()); std::string s2 = str2hex(replystr.c_str(), replystr.length()); LOG_ERROR("\nsent %s\nreply %s", s1.c_str(), s2.c_str()); } bool RIG_ICOM::sendICcommand(std::string cmd, int nbr) { guard_lock reply_lock(&mutex_replystr); if (progStatus.xmlrpc_rig) { respstr = xml_cat_string(cmd); //std::cout << "respstr: " << str2hex(respstr.c_str(), respstr.length()) << std::endl; return respstr.length(); } int ret = sendCommand(cmd); if (!progStatus.use_tcpip && !RigSerial->IsOpen()) return false; if (!RigSerial->IsOpen()) return false; if (ret < nbr) { LOG_ERROR("Expected %d received %d", nbr, ret); return false; } if (ret > nbr) respstr.erase(0, ret - nbr); // look for preamble at beginning if (respstr.rfind(pre_fm) == std::string::npos) { LOG_ERROR("preamble: %s not in %s", pre_fm.c_str(), cmd.c_str()); replystr.clear(); return false; } // look for postamble if (respstr.rfind(post) == std::string::npos) { LOG_ERROR("postample: %s not at end of %s", post.c_str(), cmd.c_str()); replystr.clear(); return false; } replystr = respstr; return true; } #include void RIG_ICOM::ICtrace(std::string cmd, std::string hexstr) { std::string s1 = str2hex(hexstr.c_str(), hexstr.length()); rig_trace(2, cmd.c_str(), s1.c_str()); } bool RIG_ICOM::waitFOR(size_t n, const char *sz, unsigned long timeout) { static char sztemp[200]; memset(sztemp, 0, 200); std::string check = "1234"; std::string eor = "\xFD"; std::string bad = "\xFA\xFD"; // This code creates the preamble of the response from the preamble of the command // by swapping the controller / radio addresses. check[0] = cmd[0]; check[1] = cmd[1]; check[2] = cmd[3]; check[3] = cmd[2]; // int delay = n * 11000.0 / RigSerial->Baud(); int retnbr = 0; replystr.clear(); if (progStatus.xmlrpc_rig) { replystr = xml_cat_string(cmd); return replystr.length(); } size_t tstart = 0; size_t tout = 0; size_t pcheck = 0; size_t peor = 0; if (progStatus.use_tcpip) { send_to_remote(cmd); MilliSleep(progStatus.tcpip_ping_delay); retnbr = read_from_remote(replystr); LOG_DEBUG ("%s: read %d bytes, %s", sz, retnbr, replystr.c_str()); } else { if(!RigSerial->IsOpen()) { LOG_DEBUG("TEST %s", sz); return false; } RigSerial->FlushBuffer(); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); tstart = zmsec(); tout = tstart + timeout; pcheck = std::string::npos; peor = std::string::npos; std::string tempstr; int nret; while ( zmsec() < tout ) { tempstr.clear(); nret = RigSerial->ReadBuffer( tempstr, n, check, eor); replystr.append(tempstr); retnbr += nret; if (replystr.rfind(bad) != std::string::npos) { LOG_ERROR("%s: BAD response; %s", sz, str2hex(replystr.c_str(), replystr.length())); return false; } pcheck = replystr.rfind(check); peor = replystr.rfind(eor); if ((pcheck != std::string::npos) && (peor != std::string::npos) && (peor > pcheck) ) { LOG_DEBUG("%s: read %d bytes in %d msec, %s", sz, retnbr, (int)(zmsec() - tstart), str2hex(replystr.c_str(), replystr.length())); return true; } MilliSleep(1); } } LOG_ERROR("%s: FAILED in %d msec; %s", sz, (int)(zmsec() - tstart), str2hex(replystr.c_str(), replystr.length())); return false; } // waitFB - This function sends the command in the 'cmd' member string (via 'waitFOR'), // specifying the number of bytes in the expected resposne. 'waitFOR' already // knows the construction of the response message so this seems superfluous. bool RIG_ICOM::waitFB(const char *sz, unsigned long timeout) { #if SERIAL_DEBUG fprintf(serlog, "waitFB\n"); #endif return waitFOR(6, sz, timeout); } // exchange & equalize are available in these Icom xcvrs // 718 706MKIIG 746 746PRO 756 756PRO 756PROII 756PROIII // 910 7000 7100 7200 7300 7410 7600 7700 7800 9100 // 5/04/18 dhf void RIG_ICOM::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; ICtrace("A<>B", cmd); cmd.append(post); int fil = filB; filB = filA; filA = fil; waitFB("A<>B"); ICtrace("A<>B", replystr); } void RIG_ICOM::A2B() { cmd = pre_to; cmd += 0x07; cmd += 0xA0; ICtrace("A2B", cmd); cmd.append(post); if (inuse == onB) filA = filB; else filB = filA; waitFB("Equalize vfos"); ICtrace("A2B", replystr); } void RIG_ICOM::tune_rig(int how) { cmd = pre_to; cmd.append("\x1c\x01"); switch (how) { default: case 0: cmd += '\x00'; break; case 1: cmd += '\x01'; break; case 2: cmd += '\x02'; break; } cmd.append( post ); waitFB("tune rig"); ICtrace("tune rig", replystr); } int RIG_ICOM::get_tune() { std::string resp; std::string cstr = "\x1C\x01"; cmd.assign(pre_to).append(cstr).append(post); resp.assign(pre_fm).append(cstr); int val = tune_; if (waitFOR(8, "get TUNE")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = replystr[p + 6]; } return (tune_ = val); } std::string RIG_ICOM::hexstr(std::string s) { return str2hex(s.c_str(), s.length()); } flrig-2.0.04/src/rigs/icom/IC7800.cxx0000664000175000017500000006247114502720327013657 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC7800.h" bool IC7800_DEBUG = true; #include "support.h" //============================================================================= // IC-7800 const char IC7800name_[] = "IC-7800"; enum { LSB7800, USB7800, AM7800, CW7800, RTTY7800, FM7800, CWR7800, RTTYR7800, PSK7800, PSKR7800, LSBD7800, USBD7800, AMD7800 }; static std::vectorIC7800modes_; static const char *vIC7800modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "PSK", "PSK-R", "LSB-D", "USB-D", "AM-D"}; static const char IC7800_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'U', 'L', 'L', 'U', 'U' }; static const char IC7800_mode_nbr[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07, 0x08, 0x12, 0x13, 0X00, 0X01, 0X02 }; static std::vectorIC7800_ssb_bws; static const char *vIC7800_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600" }; static int IC7800_bw_vals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41, WVALS_LIMIT}; static std::vectorIC7800_rtty_bws; static const char *vIC7800_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700" }; static int IC7800_bw_vals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32, WVALS_LIMIT}; static std::vectorIC7800_am_bws; static const char *vIC7800_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7200", "7400", "7800", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000" }; static int IC7800_bw_vals_AM[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50, WVALS_LIMIT}; static std::vectorIC7800_fm_bws; static const char *vIC7800_fm_bws[] = { "FIXED" }; static int IC7800_bw_vals_FM[] = { 1, WVALS_LIMIT}; static GUI IC7800_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7800::initialize() { VECTOR (IC7800modes_, vIC7800modes_); VECTOR (IC7800_ssb_bws, vIC7800_ssb_bws); VECTOR (IC7800_rtty_bws, vIC7800_rtty_bws); VECTOR (IC7800_am_bws, vIC7800_am_bws); VECTOR (IC7800_fm_bws, vIC7800_fm_bws); modes_ = IC7800modes_; bandwidths_ = IC7800_ssb_bws; bw_vals_ = IC7800_bw_vals_SSB; _mode_type = IC7800_mode_type; IC7800_widgets[0].W = btnVol; IC7800_widgets[1].W = sldrVOLUME; IC7800_widgets[2].W = btnAGC; IC7800_widgets[3].W = sldrRFGAIN; IC7800_widgets[4].W = sldrSQUELCH; IC7800_widgets[5].W = btnNR; IC7800_widgets[6].W = sldrNR; IC7800_widgets[7].W = btnLOCK; IC7800_widgets[8].W = sldrINNER; IC7800_widgets[9].W = btnCLRPBT; IC7800_widgets[10].W = sldrOUTER; IC7800_widgets[11].W = btnNotch; IC7800_widgets[12].W = sldrNOTCH; IC7800_widgets[13].W = sldrMICGAIN; IC7800_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC7800::RIG_IC7800() { defaultCIV = 0x6A; name_ = IC7800name_; modes_ = IC7800modes_; bandwidths_ = IC7800_ssb_bws; bw_vals_ = IC7800_bw_vals_SSB; _mode_type = IC7800_mode_type; adjustCIV(defaultCIV); // serial_write_delay = 0; // serial_post_write_delay = 0; widgets = IC7800_widgets; has_extras = has_voltmeter = has_idd_control = has_cw_wpm = has_cw_spot_tone = has_cw_qsk = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_compON = has_compression = has_micgain_control = has_bandwidth_control = has_smeter = has_power_control = has_volume_control = has_mode_control = has_notch_control = has_attenuator_control = has_preamp_control = has_pbt_controls = has_FILTER = has_ptt_control = has_tune_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_rf_control = has_sql_control = has_split_AB = has_split = true; ICOMmainsub = true; has_band_selection = true; can_synch_clock = true; precision = 1; ndigits = 8; filA = filB = 1; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 1; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 1; B.iBW = 34; }; //====================================================================== // IC7800 unique commands //====================================================================== bool RIG_IC7800::check() { return true; } void RIG_IC7800::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\xD0'; cmd.append(post); sendICcommand(cmd, 6); checkresponse(); inuse = onA; } void RIG_IC7800::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\xD1'; cmd.append(post); sendICcommand(cmd, 6); checkresponse(); inuse = onB; } bool RIG_IC7800::can_split() { return true; } void RIG_IC7800::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); } int RIG_IC7800::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); if (waitFOR(7, "get split")) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } return split; } void RIG_IC7800::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7800_mode_nbr[val]; cmd += filA; cmd.append( post ); if (IC7800_DEBUG) LOG_INFO("%s", str2hex(cmd.data(), cmd.length())); sendICcommand (cmd, 6); checkresponse(); // digital set / clear if (val == LSBD7800 || val == USBD7800 || val == AMD7800) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += '\x01'; cmd += filA; cmd.append( post); waitFB("set digital"); } } static const char *szfilter[] = {"1", "2", "3"}; int RIG_IC7800::get_modeA() { int md = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); if (sendICcommand (cmd, 8 )) { size_t p = replystr.rfind(pre_fm); if (p == std::string::npos) return A.imode; if (replystr[p+5] == -1) {A.imode = 0; return A.imode; } for (md = 0; md < 10; md++) if (replystr[p+5] == IC7800_mode_nbr[md]) break; if (md == 10) md = 0; A.imode = md; if (md == LSB7800 || md == USB7800 || md == AM7800) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd.append(post); if (sendICcommand(cmd, 9)) { if (replystr[6] == 0x01 && A.imode == 0x01) { if (A.imode == LSB7800) A.imode = LSBD7800; if (A.imode == USB7800) A.imode = USBD7800; if (A.imode == AM7800) A.imode = AMD7800; } } } } else checkresponse(); return A.imode; } void RIG_IC7800::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7800_mode_nbr[val]; cmd += filB; cmd.append( post ); if (IC7800_DEBUG) LOG_INFO("%s", str2hex(cmd.data(), cmd.length())); sendICcommand (cmd, 6); checkresponse(); // digital set / clear if (val == LSBD7800 || val == USBD7800 || val == AMD7800) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += '\x01'; cmd += filB; cmd.append( post); waitFB("set digital"); } } int RIG_IC7800::get_modeB() { int md = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); if (sendICcommand (cmd, 8 )) { size_t p = replystr.rfind(pre_fm); if (p == std::string::npos) return A.imode; if (replystr[p+5] == -1) {B.imode = 0; return B.imode; } for (md = 0; md < 10; md++) if (replystr[p+5] == IC7800_mode_nbr[md]) break; if (md == 10) md = 0; B.imode = md; if (md == LSB7800 || md == USB7800 || md == AM7800) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd.append(post); if (sendICcommand(cmd, 9)) { if (replystr[6] == 0x01 && A.imode == 0x01) { if (B.imode == LSB7800) B.imode = LSBD7800; if (B.imode == USB7800) B.imode = USBD7800; if (B.imode == AM7800) B.imode = AMD7800; } } } } else checkresponse(); return B.imode; } int RIG_IC7800::get_bwA() { if (A.imode == 5) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); if (sendICcommand (cmd, 8)) { A.iBW = fm_bcd(replystr.substr(6), 2); } return A.iBW; } void RIG_IC7800::set_bwA(int val) { A.iBW = val; if (A.imode == 5) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); if (IC7800_DEBUG) LOG_INFO("%s", str2hex(cmd.data(), cmd.length())); sendICcommand (cmd, 6); checkresponse(); } int RIG_IC7800::get_bwB() { if (B.imode == 5) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); if (sendICcommand (cmd, 8)) { B.iBW = fm_bcd(replystr.substr(6), 2); } return B.iBW; } void RIG_IC7800::set_bwB(int val) { B.iBW = val; if (B.imode == 5) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); if (IC7800_DEBUG) LOG_INFO("%s", str2hex(cmd.data(), cmd.length())); sendICcommand (cmd, 6); checkresponse(); } int RIG_IC7800::adjust_bandwidth(int m) { int bw = 0; switch (m) { case 2: // AM bandwidths_ = IC7800_am_bws; bw_vals_ = IC7800_bw_vals_AM; bw = 19; break; case 5: // FM bandwidths_ = IC7800_fm_bws; bw_vals_ = IC7800_bw_vals_FM; bw = 0; break; case 4: case 8: // RTTY bandwidths_ = IC7800_rtty_bws; bw_vals_ = IC7800_bw_vals_RTTY; bw = 12; break; case 3: case 7: // CW bandwidths_ = IC7800_ssb_bws; bw_vals_ = IC7800_bw_vals_SSB; bw = 12; break; case 0: case 1: // SSB case 12: case 13: // PKT default: bandwidths_ = IC7800_ssb_bws; bw_vals_ = IC7800_bw_vals_SSB; bw = 34; break; } return bw; } std::vector& RIG_IC7800::bwtable(int m) { switch (m) { case 2: // AM return IC7800_am_bws; break; case 5: // FM return IC7800_fm_bws; break; case 4: case 8: // RTTY return IC7800_rtty_bws; break; case 3: case 7: // CW case 0: case 1: // SSB case 12: case 13: // PKT default: return IC7800_ssb_bws; break; } return IC7800_ssb_bws; } int RIG_IC7800::def_bandwidth(int m) { int bw = 0; switch (m) { case 2: // AM bw = 19; break; case 5: // FM bw = 0; break; case 4: case 8: // RTTY bw = 12; break; case 3: case 7: // CW bw = 12; break; case 0: case 1: // SSB case 12: case 13: // PKT default: bw = 34; } return bw; } void RIG_IC7800::set_mic_gain(int v) { ICvol = (int)(v * 255 / 100); if (!progStatus.USBaudio) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); } else { cmd = pre_to; cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x29'; cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); } sendICcommand (cmd, 6); checkresponse(); } static const char *atten_labels[] = { "ATT", "3 dB", "6 dB", "9 dB", "12 dB", "15 dB", "18 dB", "21 dB"}; int RIG_IC7800::next_attenuator() { if (atten_level >= 7) return 0; else return (atten_level + 1); } void RIG_IC7800::set_attenuator(int val) { atten_level = val; int cmdval = atten_level; cmd = pre_to; cmd += '\x11'; cmd += cmdval; cmd.append( post ); sendICcommand(cmd,6); checkresponse(); } int RIG_IC7800::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); if (sendICcommand(cmd,7)) { if (replystr[4] == 0x06) atten_level = replystr[5]; } return atten_level; } const char *RIG_IC7800::ATT_label() { if (atten_level >= 0 && atten_level <= 7) return atten_labels[atten_level]; return atten_labels[0]; } void RIG_IC7800::set_compression(int on, int val) { if (on) { cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append( post ); waitFB("set comp"); cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); } } void RIG_IC7800::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; // ALH cmd.append( post ); waitFB("set vox OFF"); } } void RIG_IC7800::set_vox_gain() { cmd.assign(pre_to).append("\x14\x16"); // ALH values 0-255 cmd.append(to_bcd((int)(progStatus.vox_gain * 2.55), 3)); cmd.append( post ); waitFB("SET vox gain"); } void RIG_IC7800::set_vox_anti() { cmd.assign(pre_to).append("\x14\x17"); //ALH values 0-255 cmd.append(to_bcd((int)(progStatus.vox_anti * 2.55), 3)); cmd.append( post ); waitFB("SET anti-vox"); } void RIG_IC7800::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05\0x01\0x83"); //ALH values 00-20 = 0.0 - 2.0 sec cmd.append(to_bcd((int)(progStatus.vox_hang / 10 ), 2)); cmd.append( post ); waitFB("SET vox hang"); } // CW controls void RIG_IC7800::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); // values 0-255 cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (60 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); } void RIG_IC7800::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); // values 0-255 cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); } void RIG_IC7800::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); } void RIG_IC7800::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x14\x15"); cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); } // Tranceiver PTT on/off void RIG_IC7800::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; } int RIG_IC7800::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } void RIG_IC7800::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC7800::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC7800::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC7800::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } const char *RIG_IC7800::FILT(int &val) { if (inuse == onB) { if (filB < 0) filB = 0; if (filB > 3) filB = 3; val = filB; return(szfilter[filB - 1]); } else { if (filA < 0) filA = 0; if (filA > 3) filA = 3; val = filA; return (szfilter[filA - 1]); } } const char *RIG_IC7800::nextFILT() { if (inuse == onB) { filB++; if (filB > 3) filB = 1; set_modeB(B.imode); return(szfilter[filB - 1]); } else { filA++; if (filA > 3) filA = 1; set_modeA(A.imode); return(szfilter[filA - 1]); } } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC7800::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if ((bandmode == 0) && banddata) bandmode = 10; if ((bandmode == 1) && banddata) bandmode = 11; if ((bandmode == 2) && banddata) bandmode = 12; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC7800::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; if (mode == LSBD7800 || mode == USBD7800 || mode == AMD7800) cmd += '\x10'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); 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; std::string cstr = "\x16\x48"; std::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 != std::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 != std::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; } } // --------------------------------------------------------------------- // set date and time // 1A 05 00 95 HH MM : set time // 1A 05 00 94 YY YY MM DD : set date // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_IC7800::sync_date(char *dt) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x59'; unsigned char val; val = ((dt[0] - '0') << 4) + (dt[1] - '0'); cmd += (val & 0xFF); val = ((dt[2] - '0') << 4) + (dt[3] - '0'); cmd += (val & 0xFF); val = ((dt[4] - '0') << 4) + (dt[5] - '0'); cmd += (val & 0xFF); val = ((dt[6] - '0') << 4) + (dt[7] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_IC7800::sync_clock(char *tm) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x60'; unsigned char val; val = ((tm[0] - '0') << 4) + (tm[1] - '0'); cmd += (val & 0xFF); val = ((tm[3] - '0') << 4) + (tm[4] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } double RIG_IC7800::get_idd(void) { get_trace(1, "get_idd()"); std::string cstr = "\x15\x16"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); double mtr= 0; int ret = waitFOR(9, "get idd"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = 25.0 * mtr / 241.0; if (mtr > 25) mtr = 25; } } return mtr; } double RIG_IC7800::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; int ret = waitFOR(9, "get voltmeter"); igett("voltmeter"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 0.026 * mtr + 9.782; return val; } } return -1; } flrig-2.0.04/src/rigs/icom/IC751.cxx0000664000175000017500000001017414502720327013566 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // aunsigned long int with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC751.h" //============================================================================= // IC-751 // const char IC751name_[] = "IC-751"; static std::vectorIC751modes_; static const char *vIC751modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM"}; const char IC751_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U' }; static std::vectorIC751_widths; static const char *vIC751_widths[] = { "NARR", "WIDE"}; static int IC751_bw_vals[] = {1,2, WVALS_LIMIT}; RIG_IC751::RIG_IC751() { name_ = IC751name_; modes_ = IC751modes_; _mode_type = IC751_mode_type; bandwidths_ = IC751_widths; bw_vals_ = IC751_bw_vals; serial_baudrate = BR9600; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; // bwA = 0; has_mode_control = true; has_smeter = true; has_power_out = true; has_ptt_control = true; defaultCIV = 0x1C; adjustCIV(defaultCIV); precision = 10; ndigits = 7; }; //============================================================================= void RIG_IC751::initialize() { VECTOR (IC751modes_, vIC751modes_); VECTOR (IC751_widths, vIC751_widths); modes_ = IC751modes_; _mode_type = IC751_mode_type; bandwidths_ = IC751_widths; bw_vals_ = IC751_bw_vals; } bool RIG_IC751::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(10, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC751::get_vfoA () { std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(10, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else freqA = fm_bcd_be(replystr.substr(p+5), 8); } } return freqA; } void RIG_IC751::set_vfoA (unsigned long long freq) { freqA = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 8 ) ); cmd.append( post ); waitFB("set vfo A"); } int RIG_IC751::get_smeter() { cmd = pre_to; cmd.append("\x15\x02").append(post); std::string resp = pre_fm; resp.append("\x15\x02"); if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) * 100 / 255); } return -1; } // Tranceiver PTT on/off void RIG_IC751::set_PTT_control(int val) { cmd.assign(pre_to); cmd += '\x1c'; cmd += '\x00'; cmd += (val ? '\x01' : '\x00'); cmd.append( post ); waitFB("set PTT"); } void RIG_IC751::set_modeA(int val) { modeA = val; cmd = pre_to; cmd += "\x06"; cmd += modeA; // set the mode byte cmd.append( post ); waitFB("set mode"); } int RIG_IC751::get_modeA() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(7, "get mode")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { modeA = 0; } else { modeA = replystr[p+5]; } } } return modeA; } flrig-2.0.04/src/rigs/icom/IC7610.cxx0000664000175000017500000016270314502720327013655 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2018 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "icom/IC7610.h" #include "status.h" #include "trace.h" #include "support.h" //============================================================================= // IC-7610 const char IC7610name_[] = "IC-7610"; // these are only defined in this file // undef'd at end of file #define NUM_FILTERS 3 #define NUM_MODES 22 static int mode_filterA[NUM_MODES] = { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1}; static int mode_filterB[NUM_MODES] = { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1}; static int mode_bwA[NUM_MODES] = { -1,-1,-1,-1,-1, -1,-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = { -1,-1,-1,-1,-1, -1,-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1}; static const char *szfilter[NUM_FILTERS] = {"1", "2", "3"}; enum { m7610LSB, m7610USB, m7610AM, m7610FM, m7610CW, // 0..4 m7610CWR, m7610RTTY, m7610RTTYR, m7610PSK, m7610PSKR, // 5..9 m7610LSBD1, m7610USBD1, m7610AMD1, m7610FMD1, // 10..13 m7610LSBD2, m7610USBD2, m7610AMD2, m7610FMD2, // 14..17 m7610LSBD3, m7610USBD3, m7610AMD3, m7610FMD3 // 18..21 }; static std::vectorIC7610modes_; static const char *vIC7610modes_[] = { "LSB", "USB", "AM", "FM", "CW", "CW-R", "RTTY", "RTTY-R", "PSK", "PSK-R", "LSB-D1", "USB-D1", "AM-D1", "FM-D1", "LSB-D2", "USB-D2", "AM-D2", "FM-D2", "LSB-D3", "USB-D3", "AM-D3", "FM-D3"}; const char IC7610_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'U', 'L', 'L', 'U', 'U', 'U', 'L', 'U', 'U', 'U', 'L', 'U', 'U', 'U', }; const char IC7610_mode_nbr[] = { 0x00, 0x01, 0x02, 0x05, 0x03, // lsb, usb, am, fm, cw 0x07, 0x04, 0x08, 0x12, 0x13, // cw-r, tty, tty-r, psk, psk-r 0x00, 0x01, 0x02, 0x05, // lsb-d1, usb-d1, am-d1, fm-d1 0x00, 0x01, 0x02, 0x05, // lsb-d2, usb-d2, am-d2, fm-2d 0x00, 0x01, 0x02, 0x05, // lsb-d3, usb-d3, am-d3, fm-3d }; static std::vectorIC7610_ssb_bws; static const char *vIC7610_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600" }; static int IC7610_bw_vals_SSB[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40, WVALS_LIMIT}; static std::vectorIC7610_rtty_bws; static const char *vIC7610_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700" }; static int IC7610_bw_vals_RTTY[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31, WVALS_LIMIT}; static std::vectorIC7610_am_bws; static const char *vIC7610_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7610", "7400", "7610", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000" }; static int IC7610_bw_vals_AM[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49 WVALS_LIMIT}; static const char *IC7610_bcd_vals[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252", "253", "254", "255" }; static std::vectorIC7610_fm_bws; static const char *vIC7610_fm_bws[] = { "FIXED" }; static int IC7610_bw_vals_FM[] = { 1, WVALS_LIMIT}; static GUI IC7610_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7610::initialize() { VECTOR (IC7610modes_, vIC7610modes_); VECTOR (IC7610_ssb_bws, vIC7610_ssb_bws); VECTOR (IC7610_rtty_bws, vIC7610_rtty_bws); VECTOR (IC7610_am_bws, vIC7610_am_bws); VECTOR (IC7610_fm_bws, vIC7610_fm_bws); modes_ = IC7610modes_; bandwidths_ = IC7610_ssb_bws; bw_vals_ = IC7610_bw_vals_SSB; _mode_type = IC7610_mode_type; IC7610_widgets[0].W = btnVol; IC7610_widgets[1].W = sldrVOLUME; IC7610_widgets[2].W = btnAGC; IC7610_widgets[3].W = sldrRFGAIN; IC7610_widgets[4].W = sldrSQUELCH; IC7610_widgets[5].W = btnNR; IC7610_widgets[6].W = sldrNR; IC7610_widgets[7].W = btnLOCK; IC7610_widgets[8].W = sldrINNER; IC7610_widgets[9].W = btnCLRPBT; IC7610_widgets[10].W = sldrOUTER; IC7610_widgets[11].W = btnNotch; IC7610_widgets[12].W = sldrNOTCH; IC7610_widgets[13].W = sldrMICGAIN; IC7610_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC7610::RIG_IC7610() { defaultCIV = 0x98; adjustCIV(defaultCIV); name_ = IC7610name_; modes_ = IC7610modes_; bandwidths_ = IC7610_ssb_bws; bw_vals_ = IC7610_bw_vals_SSB; _mode_type = IC7610_mode_type; serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = IC7610_widgets; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 11; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 11; B.iBW = 34; has_extras = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_cw_break_in = true; has_vox_onoff = true; has_vox_gain = true; has_vox_anti = true; has_vox_hang = true; has_compON = true; has_compression = true; has_split = true; has_split_AB = true; has_micgain_control = true; has_bandwidth_control = true; has_smeter = true; has_voltmeter = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_sql_control = true; has_idd_control = true; has_agc_control = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_attenuator_control = true; has_preamp_control = true; has_noise_control = true; has_nb_level = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_pbt_controls = true; has_FILTER = true; has_rf_control = true; has_ptt_control = true; has_tune_control = true; precision = 1; ndigits = 8; has_vfo_adj = true; has_xcvr_auto_on_off = true; has_band_selection = true; can_change_alt_vfo = true; has_a2b = true; can_synch_clock = true; }; static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } void RIG_IC7610::selectA() { cmd.assign(pre_to).append("\x07"); cmd += '\xD0'; cmd.append(post); waitFB("select A"); set_trace(2, "selectA() ", str2hex(cmd.c_str(), cmd.length())); inuse = onA; } void RIG_IC7610::selectB() { cmd.assign(pre_to).append("\x07"); cmd += '\xD1'; cmd.append(post); waitFB("select B"); set_trace(2, "selectB() ", str2hex(cmd.c_str(), cmd.length())); inuse = onB; } //====================================================================== // IC7610 unique commands //====================================================================== void RIG_IC7610::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; cmd.append(post); waitFB("Exchange vfos"); get_modeA(); // get mode to update the filter A / B usage get_modeB(); } void RIG_IC7610::set_xcvr_auto_on() { cmd = pre_to; cmd += '\x19'; cmd += '\x00'; cmd.append(post); if (waitFOR(8, "get ID", 100) == false) { cmd.clear(); int fes[] = { 2, 2, 2, 3, 7, 13, 25, 50, 75, 150, 150, 150 }; if (progStatus.serial_baudrate >= 0 && progStatus.serial_baudrate <= 11) { cmd.append( fes[progStatus.serial_baudrate], '\xFE'); } cmd.append(pre_to); cmd += '\x18'; cmd += '\x01'; cmd.append(post); waitFB("Power ON", 200); for (int i = 0; i < 5000; i += 100) { MilliSleep(100); update_progress(100 * i / 5000); Fl::awake(); } } } void RIG_IC7610::set_xcvr_auto_off() { cmd.clear(); cmd.append(pre_to); cmd += '\x18'; cmd += '\x00'; cmd.append(post); waitFB("Power OFF", 200); } bool RIG_IC7610::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); get_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } // FE FE 98 E0 25 00 XX XX XX XX 00 FD // FE FE 98 E0 25 01 XX XX XX XX 00 FD // || || || ||________ 1 MHz digit // || || || |_________ 10 MHz digit // || || ||___________ 10 kHz digit // || || |____________ 100 kHz digit // || ||______________ 100 Hz digit // || |_______________ 1 kHz digit // ||_________________ 1 Hz digit // |__________________ 10 Hz digit unsigned long long RIG_IC7610::get_vfoA () { std::string resp; resp.assign(pre_fm).append("\x25"); resp += '\x00'; cmd.assign(pre_to).append("\x25"); cmd += '\x00'; cmd.append(post); if (waitFOR(12, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+6), 8); } } get_trace(2, "get_vfoA() ", str2hex(replystr.c_str(), replystr.length())); return A.freq; } void RIG_IC7610::set_vfoA (unsigned long long freq) { A.freq = freq; cmd.assign(pre_to).append("\x25"); cmd += '\x00'; cmd.append( to_bcd_be( freq, 8) ); cmd += '\x00'; cmd.append( post ); waitFB("set vfo A"); set_trace(2, "set_vfoA() ", str2hex(cmd.c_str(), cmd.length())); } unsigned long long RIG_IC7610::get_vfoB () { std::string resp; resp.assign(pre_fm).append("\x25"); resp += '\x01'; cmd.assign(pre_to).append("\x25"); cmd += '\x01'; cmd.append(post); if (waitFOR(12, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+6), 8); } } get_trace(2, "get_vfoB() ", str2hex(replystr.c_str(), replystr.length())); return B.freq; } void RIG_IC7610::set_vfoB (unsigned long long freq) { B.freq = freq; cmd.assign(pre_to).append("\x25"); cmd += '\x01'; cmd.append( to_bcd_be( freq, 8 ) ); cmd += '\x00'; cmd.append( post ); waitFB("set vfo B"); set_trace(2, "set_vfoB() ", str2hex(cmd.c_str(), cmd.length())); } // expecting // 0 1 2 3 4 5 6 7 8 9 // FE FE E0 94 26 NN NN NN NN FD // | | | | // | | | |__filter setting, 01, 02, 03 // | | |_____data mode, 00 - off, 01 - data mode 1 // | | |_____02 - data mode 2, 03 - data mode 3 // | |________Mode 00 - LSB // | 01 - USB // | 02 - AM // | 03 - CW // | 04 - RTTY // | 05 - FM // | 07 - CW-R // | 08 - RTTY-R // |___________selected vfo, 00 - active, 01 - inactive int RIG_IC7610::get_modeA() { int md = 0; size_t p; std::string resp; resp.assign(pre_fm).append("\x26"); cmd.assign(pre_to).append("\x26"); cmd += '\x00'; cmd.append(post); if (waitFOR(10, "get mode A")) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeA; if (replystr[p+6] == -1) { A.imode = A.filter = 0; return A.imode; } for (md = 0; md < m7610LSBD1; md++) { if (replystr[p+6] == IC7610_mode_nbr[md]) { A.imode = md; if (replystr[p+7] == 0x01 && A.imode < 4) A.imode += 10; if (replystr[p+7] == 0x02 && A.imode < 4) A.imode += 14; if (replystr[p+7] == 0x03 && A.imode < 4) A.imode += 18; if (A.imode > 21) A.imode = 1; break; } A.filter = replystr[p+8]; } } end_wait_modeA: get_trace(4, "get mode A[", IC7610modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); mode_filterA[A.imode] = A.filter; return A.imode; } // LSB USB AM CW RTTY FM CW-R RTTY-R LSB-D USB-D // 0 1 2 3 4 5 6 7 8 9 void RIG_IC7610::set_modeA(int val) { A.imode = val; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; cmd += IC7610_mode_nbr[A.imode]; // operating mode if (A.imode >= m7610LSBD3) cmd += '\x03'; // data mode D1 else if (A.imode >= m7610LSBD2) cmd += '\x02'; // data mode D2 else if (A.imode >= m7610LSBD1) cmd += '\x01'; // data mode D1 else cmd += '\x00'; cmd += mode_filterA[A.imode]; // filter cmd.append( post ); waitFB("set mode A"); set_trace(4, "set mode A[", IC7610modes_[A.imode].c_str(), "] ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_modeB() { int md = 0; size_t p; std::string resp; resp.assign(pre_fm).append("\x26"); cmd.assign(pre_to).append("\x26"); cmd += '\x01'; cmd.append(post); if (waitFOR(10, "get mode B")) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeB; if (replystr[p+6] == -1) { B.imode = B.filter = 0; return B.imode; } for (md = 0; md < m7610LSBD1; md++) { if (replystr[p+6] == IC7610_mode_nbr[md]) { B.imode = md; if (replystr[p+7] == 0x01 && B.imode < 4) B.imode += 10; if (replystr[p+7] == 0x02 && B.imode < 4) B.imode += 14; if (replystr[p+7] == 0x03 && B.imode < 4) B.imode += 18; if (B.imode > 21) B.imode = 1; break; } } B.filter = replystr[p+8]; } end_wait_modeB: get_trace(4, "get mode B[", IC7610modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); mode_filterB[B.imode] = B.filter; return B.imode; } void RIG_IC7610::set_modeB(int val) { B.imode = val; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x01'; cmd += IC7610_mode_nbr[B.imode]; // operating mode if (B.imode >= m7610LSBD3) cmd += '\x03'; // data mode D1 else if (B.imode >= m7610LSBD2) cmd += '\x02'; // data mode D2 else if (B.imode >= m7610LSBD1) cmd += '\x01'; // data mode D1 else cmd += '\x00'; cmd += mode_filterB[B.imode]; // filter cmd.append( post ); waitFB("set mode B"); set_trace(4, "set mode B[", IC7610modes_[B.imode].c_str(), "] ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_FILT(int mode) { if (inuse == onB) return mode_filterB[mode]; return mode_filterA[mode]; } void RIG_IC7610::set_FILT(int filter) { if (inuse == onB) { B.filter = filter; mode_filterB[B.imode] = filter; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x01'; cmd += IC7610_mode_nbr[B.imode]; // operating mode if (B.imode >= m7610LSBD3) cmd += '\x03'; // data mode D1 else if (B.imode >= m7610LSBD2) cmd += '\x02'; // data mode D2 else if (B.imode >= m7610LSBD1) cmd += '\x01'; // data mode D1 else cmd += '\x00'; cmd += filter; // filter cmd.append( post ); waitFB("set mode/filter B"); set_trace(4, "set mode/filter B[", IC7610modes_[B.imode].c_str(), "] ", str2hex(cmd.c_str(), cmd.length())); } else { A.filter = filter; mode_filterA[A.imode] = filter; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; // selected vfo cmd += IC7610_mode_nbr[A.imode]; // operating mode if (A.imode >= m7610LSBD3) cmd += '\x03'; // data mode D1 else if (A.imode >= m7610LSBD2) cmd += '\x02'; // data mode D2 else if (A.imode >= m7610LSBD1) cmd += '\x01'; // data mode D1 else cmd += '\x00'; cmd += filter; // filter cmd.append( post ); waitFB("set mode/filter A"); set_trace(4, "set mode/filter A[", IC7610modes_[A.imode].c_str(), "] ", str2hex(cmd.c_str(), cmd.length())); } } const char *RIG_IC7610::FILT(int val) { if (val < 1) val = 1; if (val > 3) val = 3; return(szfilter[val - 1]); } const char * RIG_IC7610::nextFILT() { int val = A.filter; if (inuse == onB) val = B.filter; val++; if (val > 3) val = 1; set_FILT(val); return szfilter[val - 1]; } void RIG_IC7610::set_FILTERS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterB[i]; } std::string RIG_IC7610::get_FILTERS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_filterA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_filterB[i] << " "; return s.str(); } std::string RIG_IC7610::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_IC7610::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } bool RIG_IC7610::can_split() { return true; } void RIG_IC7610::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); set_trace(2, "set_split() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); if (waitFOR(7, "get split")) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } get_trace(2, "get_split() ", str2hex(replystr.c_str(), replystr.length())); return split; } int RIG_IC7610::get_bwA() { if (A.imode == 3 || A.imode == 13 || A.imode == 17 || A.imode == 21) return 0; // FM, FM-D int current_vfo = inuse; if (current_vfo == onB) selectA(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); int bwval = A.iBW; if (waitFOR(8, "get_bwA")) { std::string resp = pre_fm; resp.append("\x1A\x03"); size_t p = replystr.find(resp); if (p != std::string::npos) bwval = fm_bcd(replystr.substr(p+6), 2); } if (bwval != A.iBW) { A.iBW = bwval; mode_bwA[A.imode] = bwval; } if (current_vfo == onB) selectB(); get_trace(2, "get_bwA() ", str2hex(replystr.c_str(), replystr.length())); return A.iBW; } void RIG_IC7610::set_bwA(int val) { if (A.imode == 3 || A.imode == 13 || A.imode == 17 || A.imode == 21) return; // FM, FM-D A.iBW = val; int current_vfo = inuse; if (current_vfo == onB) selectA(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bwA"); mode_bwA[A.imode] = val; set_trace(2, "set_bwA() ", str2hex(cmd.c_str(), cmd.length())); if (current_vfo == onB) selectB(); } int RIG_IC7610::get_bwB() { if (B.imode == 3 || B.imode == 13 || B.imode == 17 || B.imode == 21) return 0; // FM, FM-D int current_vfo = inuse; if (current_vfo == onA) selectB(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); int bwval = B.iBW; if (waitFOR(8, "get_bwB")) { std::string resp = pre_fm; resp.append("\x1A\x03"); size_t p = replystr.find(resp); if (p != std::string::npos) bwval = fm_bcd(replystr.substr(p+6), 2); } if (bwval != B.iBW) { B.iBW = bwval; mode_bwB[B.imode] = bwval; } if (current_vfo == onA) selectA(); get_trace(2, "get_bwB() ", str2hex(replystr.c_str(), replystr.length())); return B.iBW; } void RIG_IC7610::set_bwB(int val) { if (B.imode == 3 || B.imode == 13 || B.imode == 17 || B.imode == 21) return; // FM, FM-D B.iBW = val; int current_vfo = inuse; if (current_vfo == onA) selectB(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); waitFB("set bwB"); mode_bwB[B.imode] = val; set_trace(2, "set_bwB() ", str2hex(cmd.c_str(), cmd.length())); if (current_vfo == onA) selectA(); } // LSB USB AM FM CW CW-R RTTY RTTY-R PSK PSK-R // 0 1 2 3 4 5 6 7 8 9 // 10 11 12 13 // DATA-1 // 14 15 16 17 // DATA-2 // 18 19 20 21 // DATA-3 int RIG_IC7610::adjust_bandwidth(int m) { int bw = 0; switch (m) { case 2: case 12: case 16: case 20: // AM, AM-D bandwidths_ = IC7610_am_bws; bw_vals_ = IC7610_bw_vals_AM; bw = 19; break; case 3: case 13: case 17: case 21: // FM, FM-D bandwidths_ = IC7610_fm_bws; bw_vals_ = IC7610_bw_vals_FM; bw = 0; break; case 4: case 5: // CW, CW -R bandwidths_ = IC7610_ssb_bws; bw_vals_ = IC7610_bw_vals_SSB; bw = 12; break; case 6: case 7: // RTTY, RTTY-R bandwidths_ = IC7610_rtty_bws; bw_vals_ = IC7610_bw_vals_RTTY; bw = 12; break; case 0: case 1: case 8: case 9: // LSB, USB, PSK, PSK-R case 10: case 11: // DATA-1 case 14: case 15: // DATA-1 case 18: case 19: // DATA-1 default: bandwidths_ = IC7610_ssb_bws; bw_vals_ = IC7610_bw_vals_SSB; bw = 34; } return bw; } std::vector& RIG_IC7610::bwtable(int m) { switch (m) { case 2: case 12: case 16: case 20: // AM, AM-D return IC7610_am_bws; break; case 3: case 13: case 17: case 21: // FM, FM-D return IC7610_fm_bws; break; case 6: case 7: // RTTY, RTTY-R return IC7610_rtty_bws; break; case 4: case 5: // CW, CW -R case 0: case 1: case 8: case 9: // LSB, USB, PSK, PSK-R case 10: case 11: // DATA-1 case 14: case 15: // DATA-1 case 18: case 19: // DATA-1 default: return IC7610_ssb_bws; } return IC7610_ssb_bws; } int RIG_IC7610::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } int RIG_IC7610::get_mic_gain() { int val = 0; std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_mic_gain() ", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7610::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set mic gain"); set_trace(2, "set_mic_gain() ", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC7610::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } static int comp_level[] = {11,34,58,81,104,128,151,174,197,221,244}; void RIG_IC7610::set_compression(int on, int val) { cmd = pre_to; cmd.append("\x16\x44"); if (on) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); waitFB("set Comp ON/OFF"); set_trace(2, "set_compression on/off ", str2hex(cmd.c_str(), cmd.length())); if (val < 0) return; if (val > 10) return; cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(comp_level[val], 3)); cmd.append( post ); waitFB("set comp"); set_trace(2, "set_compression_level ", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC7610::get_compression(int &on, int &val) { std::string resp; cmd.assign(pre_to).append("\x16\x44").append(post); resp.assign(pre_fm).append("\x16\x44"); if (waitFOR(8, "get comp on/off")) { size_t p = replystr.find(resp); if (p != std::string::npos) on = (replystr[p+6] == 0x01); } get_trace(2, "get_comp on/off() ", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to).append("\x14\x0E").append(post); resp.assign(pre_fm).append("\x14\x0E"); if (waitFOR(9, "get comp level")) { size_t p = replystr.find(resp); int level = 0; if (p != std::string::npos) { level = fm_bcd(replystr.substr(p+6), 3); for (val = 0; val < 11; val++) if (level <= comp_level[val]) break; } } get_trace(2, "get_comp_level() ", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC7610::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; cmd.append( post ); waitFB("set vox OFF"); } set_trace(2, "set_vox_on/off ", str2hex(cmd.c_str(), cmd.length())); } // Xcvr values range 0...255 step 1 void RIG_IC7610::get_vox_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7610::set_vox_gain() { int vox_gain = round((progStatus.vox_gain * 255 / 100 + 0.5)); minmax(0, 255, vox_gain); cmd.assign(pre_to).append("\x14\x16"); cmd.append(to_bcd(vox_gain, 3)); cmd.append( post ); waitFB("SET vox gain"); set_trace(2, "set_vox_gain() ", str2hex(cmd.c_str(), cmd.length())); } // Xcvr values range 0...255 step 1 void RIG_IC7610::get_vox_anti_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7610::set_vox_anti() { int vox_anti = round((progStatus.vox_anti * 255 / 100 + 0.5)); minmax(0, 255, vox_anti); cmd.assign(pre_to).append("\x14\x17"); cmd.append(to_bcd(vox_anti, 3)); cmd.append( post ); waitFB("SET anti-vox"); set_trace(2, "set_vox_anti() ", str2hex(cmd.c_str(), cmd.length())); } // VOX hang 0.0 - 2.0, step 0.1 // Xcvr values 0..20 step 1 void RIG_IC7610::get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 20; step = 1; } void RIG_IC7610::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05\x02\x92"); cmd.append(to_bcd(progStatus.vox_hang, 2)); cmd.append( post ); waitFB("SET vox hang"); set_trace(2, "set_vox_hang() ", str2hex(cmd.c_str(), cmd.length())); } //---------------------------------------------------------------------- // CW controls void RIG_IC7610::get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void RIG_IC7610::set_cw_wpm() { int iwpm = round((progStatus.cw_wpm - 6) * 255 / 42 + 0.5); minmax(0, 255, iwpm); cmd.assign(pre_to).append("\x14\x0C"); cmd.append(to_bcd(iwpm, 3)); cmd.append( post ); waitFB("SET cw wpm"); set_trace(2, "set_cw_wpm() ", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC7610::set_break_in() { // 16 47 00 break-in off // 16 47 01 break-in semi // 16 47 02 break-in full cmd.assign(pre_to).append("\x16\x47"); switch (progStatus.break_in) { case 2: cmd += '\x02'; break_in_label("FULL"); break; case 1: cmd += '\x01'; break_in_label("SEMI"); break; case 0: default: cmd += '\x00'; break_in_label("BK-IN"); } cmd.append(post); waitFB("SET break-in"); set_trace(2, "set_break_in() ", str2hex(cmd.c_str(), cmd.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 != std::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; } void RIG_IC7610::set_cw_qsk() { int qsk = round ((progStatus.cw_qsk - 2.0) * 255.0 / 11.0 + 0.5); minmax(0, 255, qsk); cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(qsk, 3)); cmd.append(post); waitFB("Set cw qsk delay"); set_trace(2, "set_cw_qsk() ", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC7610::get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void RIG_IC7610::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0 + 0.5); minmax(0, 255, n); cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); set_trace(2, "set_cw_spot_tone() ", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC7610::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x02'; cmd += '\x25'; cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); set_trace(2, "set_cw_vol() ", str2hex(cmd.c_str(), cmd.length())); } // Tranceiver PTT on/off void RIG_IC7610::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; set_trace(2, "set_PTT_control() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } get_trace(2, "get_PTT() ", str2hex(replystr.c_str(), replystr.length())); return ptt_; } // Volume control val 0 ... 100 void RIG_IC7610::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set vol"); set_trace(2, "set_volume_control() ", str2hex(cmd.c_str(), cmd.length())); } /* I:12:20:22: get vol ans in 0 ms, OK cmd FE FE 7A E0 14 01 FD ans FE FE 7A E0 14 01 FD FE FE E0 7A 14 01 00 65 FD 0 1 2 3 4 5 6 7 8 */ int RIG_IC7610::get_volume_control() { int val = 0; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_volume_control() ", str2hex(replystr.c_str(), replystr.length())); return (val); } void RIG_IC7610::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7610::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set power"); set_trace(2, "set_power_control() ", str2hex(cmd.c_str(), cmd.length())); } double RIG_IC7610::get_power_control() { int val = progStatus.power_level; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_power_control() ", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7610::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; pmax = max = 100; step = 1; } int RIG_IC7610::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.41); if (mtr > 100) mtr = 100; } } return mtr; } double RIG_IC7610::get_idd(void) { get_trace(1, "get_idd()"); std::string cstr = "\x15\x16"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); double mtr= 0; int ret = waitFOR(9, "get idd"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = 25.0 * mtr / 241.0; if (mtr > 25) mtr = 25; } } return mtr; } double RIG_IC7610::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); int ret = waitFOR(9, "get voltmeter"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 6.0 * mtr / 61.0 - 5.0; return val; } } return -1; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { {0, 0.0}, {21, 5.0}, {43,10.0}, {65, 15.0}, {83, 20.0}, {95, 25.0}, {105, 30.0}, {114, 35.0}, {124, 40.0}, {143, 50.0}, {183, 75.0}, {212, 100.0}, {255, 120.0 } }; int RIG_IC7610::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= 0; if (waitFOR(9, "get power out")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } struct swrpair {int mtr; float swr;}; // Table entries below correspond to SWR readings of 1.1, 1.5, 2.0, 2.5, 3.0 and infinity. // Values are also tweaked to fit the display of the SWR meter. static swrpair swrtbl[] = { {0, 0.0}, {48, 10.5}, {80, 23.0}, {103, 35.0}, {120, 48.0}, {255, 100.0 } }; int RIG_IC7610::get_swr(void) { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(swrtbl) / sizeof(swrpair) - 1; i++) if (mtr >= swrtbl[i].mtr && mtr < swrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(swrtbl[i].swr + (swrtbl[i+1].swr - swrtbl[i].swr)*(mtr - swrtbl[i].mtr)/(swrtbl[i+1].mtr - swrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7610::get_alc(void) { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /1.2); if (mtr > 100) mtr = 100; } } return mtr; } void RIG_IC7610::set_rf_gain(int val) { cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set RF"); set_trace(2, "set_rf_gain() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get RF")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_rf_gain() ", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7610::get_rf_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } int RIG_IC7610::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC7610::set_preamp(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; preamp_level = val; cmd += (unsigned char)preamp_level; cmd.append( post ); waitFB( (preamp_level == 0) ? "set Preamp OFF" : (preamp_level == 1) ? "set Preamp Level 1" : "set Preamp Level 2"); set_trace(2, "set_preamp() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get Preamp Level")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { preamp_level = replystr[p+6]; } } get_trace(2, "get_preamp() ", str2hex(replystr.c_str(), replystr.length())); return preamp_level; } static char attval[] = { '\x00', '\x03', '\x06', '\x09', '\x12', '\x15', '\x18', '\x21', '\x24', '\x27', '\x30', '\x33', '\x36', '\x39', '\x42', '\x45' }; std::string attstr[] = { "OFF","3db","6db","9db","12db","15db","18db","21db", "24db","27db","30db","33db","36db","39db","42db","45db" }; void RIG_IC7610::set_index_att(int v) { if (v < 0) return; if (v >= (int)sizeof(attval)) return; progStatus.index_ic7610att = v; cmd.assign(pre_to); cmd += '\x11'; cmd += attval[v]; cmd.append(post); waitFB("SET attenuator"); set_trace(2, "set_index_att()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; if (waitFOR(7, "get ATT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { atten_level = replystr[p+5]; size_t i = 0; for (i = 0; i < sizeof(attval); i++) { if (attval[i] == atten_level) { progStatus.index_ic7610att = i; break; } } } } get_trace(2, "get_attenuator() ", str2hex(replystr.c_str(), replystr.length())); return progStatus.index_ic7610att; } const char *RIG_IC7610::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Amp 1"; break; case 2: return "Amp 2"; break; } return "PRE"; } const char *RIG_IC7610::ATT_label() { return attstr[progStatus.index_ic7610att].c_str(); } void RIG_IC7610::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); set_trace(2, "set_noise() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_noise() { int val = progStatus.noise; std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+6]; } } get_trace(2, "get_noise() ", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7610::set_nb_level(int val) { cmd = pre_to; cmd.append("\x14\x12"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set NB level"); set_trace(2, "set_nb_level() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x14\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NB level")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_nb_level() ", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7610::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); set_trace(2, "set_noise_reduction() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } get_trace(2, "get_noise_reduction() ", str2hex(replystr.c_str(), replystr.length())); return progStatus.noise_reduction; } /* I:12:06:50: get NR ans in 0 ms, OK cmd FE FE 7A E0 16 40 FD ans FE FE 7A E0 16 40 FD FE FE E0 7A 16 40 01 FD 0 1 2 3 4 5 6 7 I:12:06:50: get NRval ans in 0 ms, OK cmd FE FE 7A E0 14 06 FD ans FE FE 7A E0 14 06 FD FE FE E0 7A 14 06 00 24 FD 0 1 2 3 4 5 6 7 8 */ void RIG_IC7610::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val *= 16; val += 8; cmd.append(to_bcd(val, 3)); cmd.append(post); waitFB("set NRval"); set_trace(2, "set_noise_reduction_val() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val -= 8; val /= 16; } } get_trace(2, "get_noise_reduction_val() ", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7610::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set Sqlch"); set_trace(2, "set_squelch() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get squelch")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_squelch() ", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7610::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += (unsigned char)val; cmd.append( post ); waitFB("set AN"); set_trace(2, "set_auto_notch() ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get AN")) { get_trace(2, "get_auto_notch() ", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } static bool IC7610_notchon = false; void RIG_IC7610::set_notch(bool on, int val) { int notch = val / 20 + 53; minmax(0, 255, notch); if (on != IC7610_notchon) { cmd = pre_to; cmd.append("\x16\x48"); cmd += on ? '\x01' : '\x00'; cmd.append(post); waitFB("set notch"); IC7610_notchon = on; set_trace(2, "set_notch_on/off() ", str2hex(cmd.c_str(), cmd.length())); } cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(notch,3)); cmd.append(post); waitFB("set notch val"); set_trace(2, "set_notch_val() ", str2hex(cmd.c_str(), cmd.length())); } bool RIG_IC7610::get_notch(int &val) { bool on = false; std::string cstr = "\x16\x48"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; 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 != std::string::npos) on = replystr[p + 6] ? 1 : 0; 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())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val = (val - 53) * 20; if (val < 0) val = 0; if (val > 4040) val = 4040; } } } return (IC7610_notchon = on); } void RIG_IC7610::get_notch_min_max_step(int &min, int &max, int &step) { min = 0; max = 4040; step = 20; } static int agcval = 3; int RIG_IC7610::get_agc() { cmd = pre_to; cmd.append("\x16\x12"); cmd.append(post); if (waitFOR(8, "get AGC")) { size_t p = replystr.find(pre_fm); if (p != std::string::npos) agcval = replystr[p+6]; // 1 == off, 2 = FAST, 3 = MED, 4 = SLOW } get_trace(2, "get_agc() ", str2hex(replystr.c_str(), replystr.length())); return agcval; } int RIG_IC7610::incr_agc() { agcval++; if (agcval == 4) agcval = 1; cmd = pre_to; cmd.append("\x16\x12"); cmd += agcval; cmd.append(post); waitFB("set AGC"); set_trace(2, "set_agc() ", str2hex(cmd.c_str(), cmd.length())); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "MED", "SLO"}; const char *RIG_IC7610::agc_label() { return agcstrs[agcval]; } int RIG_IC7610::agc_val() { return (agcval); } void RIG_IC7610::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); set_trace(2, "set_IF_shift_on/off() ", str2hex(cmd.c_str(), cmd.length())); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); set_trace(2, "set_IF_shift_val() ", str2hex(cmd.c_str(), cmd.length())); } bool RIG_IC7610::get_if_shift(int &val) { val = sh_; return sh_on_; } void RIG_IC7610::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC7610::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); set_trace(4, "set_pbt_inner(", IC7610_bcd_vals[shift], ") ", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC7610::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); set_trace(4, "set_pbt_outer(", IC7610_bcd_vals[shift], ") ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } get_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC7610::get_pbt_outer() { get_dual_watch(); get_digi_sel(); int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } get_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7610::setVfoAdj(double v) { vfo_ = v; cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x70'; cmd.append(to_bcd(v, 4)); cmd.append(post); waitFB("SET vfo adjust"); set_trace(2, "set_vfo_adjust()", str2hex(cmd.c_str(), cmd.length())); } double RIG_IC7610::getVfoAdj() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\70'; cmd.append(post); if (waitFOR(11, "get vfo adj")) { size_t p = replystr.find(pre_fm); if (p != std::string::npos) { vfo_ = fm_bcd(replystr.substr(p+8), 4); } } return vfo_; } void RIG_IC7610::set_digi_sel(bool b) { cmd.assign(pre_to).append("\x16\x4E"); if (b) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); waitFB("set_digi_sel"); set_trace(2, "set_digi_sel()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_digi_sel() { cmd = pre_to; cmd.append("\x16\x4E"); cmd.append(post); if (waitFOR(8, "get AGC")) { size_t p = replystr.find(pre_fm); if (p != std::string::npos) progStatus.digi_sel_on_off = replystr[p+6]; } get_trace(2, "get_digi_sel() ", str2hex(replystr.c_str(), replystr.length())); return progStatus.digi_sel_on_off; } void RIG_IC7610::set_digi_val(int v) { cmd = pre_to; cmd.append("\x14\x13"); cmd.append(to_bcd(v, 3)); cmd.append(post); waitFB("set_digi_val"); set_trace(2, "set_digi_val()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_digi_val() { cmd = pre_to; cmd.append("\x14\x13"); cmd.append( post ); if (waitFOR(9, "get digi val")) { size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { progStatus.digi_sel_val = num100(replystr.substr(p+6)); Fl::awake(set_ic7610_digi_sel_val); } } get_trace(2, "get_digi_val()", str2hex(replystr.c_str(), replystr.length())); return progStatus.digi_sel_val; } void RIG_IC7610::set_dual_watch(bool b) { cmd.assign(pre_to); cmd += '\x07'; cmd += '\xC2'; if (b) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); waitFB("set_dual_watch"); set_trace(2, "set_dual_watch()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7610::get_dual_watch() { cmd.assign(pre_to); cmd += '\x07'; cmd += '\xC2'; cmd.append(post); std::string resp = pre_fm; cmd += '\x07'; cmd += '\xC2'; if (waitFOR(8, "get dual watch")) { size_t p = replystr.rfind(resp); progStatus.dual_watch = replystr[p+7]; } get_trace(2, "get_dual_watch()", str2hex(replystr.c_str(), replystr.length())); Fl::awake(set_ic7610_dual_watch); return progStatus.dual_watch; } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 // enum { // m7610LSB, m7610USB, m7610AM, m7610FM, m7610CW, // 0..4 // m7610CWR, m7610RTTY, m7610RTTYR, m7610PSK, m7610PSKR, // 5..9 // m7610LSBD1, m7610USBD1, m7610AMD1, m7610FMD1, // 10..13 // m7610LSBD2, m7610USBD2, m7610AMD2, m7610FMD2, // 14..17 // m7610LSBD3, m7610USBD3, m7610AMD3, m7610FMD3 // 18..21 // }; void RIG_IC7610::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { get_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = fm_bcd(replystr.substr(p+13, 1), 2); int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0xF0; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; // change bandmode selection based on mode / data switch (bandmode) { case 0: bandmode = ((banddata == 0x10) ? m7610LSBD1 : (banddata == 0x20) ? m7610LSBD2 : (banddata == 0x30) ? m7610LSBD3 : m7610LSB); break; case 1: bandmode = ((banddata == 0x10) ? m7610USBD1 : (banddata == 0x20) ? m7610USBD2 : (banddata == 0x30) ? m7610USBD3 : m7610USB); break; case 2: bandmode = ((banddata == 0x10) ? m7610AMD1 : (banddata == 0x20) ? m7610AMD2 : (banddata == 0x30) ? m7610AMD3 : m7610AM); break; case 3: bandmode = m7610CW; break; case 4: bandmode = m7610RTTY; break; case 5: bandmode = ((banddata == 0x10) ? m7610FMD1 : (banddata == 0x20) ? m7610FMD2 : (banddata == 0x30) ? m7610FMD3 : m7610FM); break; case 7: bandmode = m7610CWR; break; case 8: bandmode = m7610RTTYR; break; case 12: bandmode = m7610PSK; break; case 13: bandmode = m7610PSKR; break; default: break; } if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else get_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC7610::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? B.filter : A.filter); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; // Currently hardcoded to write to Register 1 - there is no UI support yet to specify other Registers cmd.append( to_bcd_be( freq, 10 ) ); cmd += IC7610_mode_nbr[mode]; cmd.append( to_bcd_be( fil, 2 ) ); // No way in current UI for user to enable / disable either the TX tone or the RX squelch // tone, so the second nibble of the next byte is always '0'. Full capability would be: // 0 = no tone; 1 = Repeater tone; 2 = T-SQL (Tone squelch - open receive on detection) tone if (mode >= m7610LSBD1 && mode <= m7610FMD1 ) cmd += '\x10'; else if (mode >= m7610LSBD2 && mode <= m7610FMD2 ) cmd += '\x20'; else if (mode >= m7610LSBD3 && mode <= m7610FMD3 ) cmd += '\x30'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); set_trace(2, "set_band_selection()", str2hex(cmd.c_str(), cmd.length())); waitFB("set_band_selection"); } // --------------------------------------------------------------------- // set date and time // 1A 05 00 95 HH MM : set time // 1A 05 00 94 YY YY MM DD : set date // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_IC7610::sync_date(char *dt) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x01'; cmd += '\x59'; unsigned char val; val = ((dt[0] - '0') << 4) + (dt[1] - '0'); cmd += (val & 0xFF); val = ((dt[2] - '0') << 4) + (dt[3] - '0'); cmd += (val & 0xFF); val = ((dt[4] - '0') << 4) + (dt[5] - '0'); cmd += (val & 0xFF); val = ((dt[6] - '0') << 4) + (dt[7] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_IC7610::sync_clock(char *tm) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x01'; cmd += '\x60'; unsigned char val; val = ((tm[0] - '0') << 4) + (tm[1] - '0'); cmd += (val & 0xFF); val = ((tm[3] - '0') << 4) + (tm[4] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } #undef NUM_FILTERS #undef NUM_MODES flrig-2.0.04/src/rigs/icom/IC756.cxx0000664000175000017500000010145714502720327013600 00000000000000// --------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // --------------------------------------------------------------------- #include #include #include "debug.h" #include "status.h" #include "support.h" //====================================================================== static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } //====================================================================== // 756 //====================================================================== #include "icom/IC756.h" const char IC756name_[] = "IC-756"; static std::vectorIC756modes_; static const char *vIC756modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R"}; // mode values are 0, 1, 2, 3, 4, 5, 7, 8 const char IC756_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U'}; static std::vectorIC756_widths; static const char *vIC756_widths[] = { "NORM", "NARR"}; static int IC756_bw_vals[] = {1, 2, WVALS_LIMIT}; static GUI IC756_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC756::initialize() { VECTOR (IC756modes_, vIC756modes_); VECTOR (IC756_widths, vIC756_widths); modes_ = IC756modes_; bandwidths_ = IC756_widths; bw_vals_ = IC756_bw_vals; _mode_type = IC756_mode_type; IC756_widgets[0].W = btnVol; IC756_widgets[1].W = sldrVOLUME; IC756_widgets[2].W = btnAGC; IC756_widgets[3].W = sldrRFGAIN; IC756_widgets[4].W = sldrSQUELCH; IC756_widgets[5].W = btnNR; IC756_widgets[6].W = sldrNR; IC756_widgets[7].W = btnLOCK; IC756_widgets[8].W = sldrINNER; IC756_widgets[9].W = btnCLRPBT; IC756_widgets[10].W = sldrOUTER; IC756_widgets[11].W = btnNotch; IC756_widgets[12].W = sldrNOTCH; IC756_widgets[13].W = sldrMICGAIN; IC756_widgets[14].W = sldrPOWER; } RIG_IC756::RIG_IC756() { defaultCIV = 0x50; name_ = IC756name_; modes_ = IC756modes_; bandwidths_ = IC756_widths; bw_vals_ = IC756_bw_vals; _mode_type = IC756_mode_type; widgets = IC756_widgets; serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = true; serial_dtrptt = false; def_freq = freqB = freqA = B.freq = A.freq = 14070000ULL; def_mode = B.imode = A.imode = 1; def_bw = B.iBW = A.iBW = 0; filter_nbr = 0; ICvol = 0; has_bandwidth_control = has_smeter = has_power_control = has_volume_control = has_mode_control = has_micgain_control = has_auto_notch = has_notch_control = has_attenuator_control = has_preamp_control = has_pbt_controls = has_ptt_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_rf_control = has_sql_control = has_split = restore_mbw = true; precision = 1; ndigits = 9; ICOMmainsub = true; adjustCIV(defaultCIV); }; void RIG_IC756::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC756::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC756::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC756::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } //============================================================================= // 756PRO //============================================================================= #include "icom/IC756.h" const char IC756PROname_[] = "IC-756PRO"; //============================================================================= enum { PRO_LSB, PRO_USB, PRO_AM, PRO_CW, PRO_RTTY, PRO_FM_, PRO_CWR, PRO_RTTYR }; #define NUM_FILTERS 3 #define NUM_MODES 9 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}; static const char *szfilter[NUM_FILTERS] = {"1", "2", "3"}; static std::vectorIC756PROmodes_; static const char *vIC756PROmodes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R"}; const char IC756PRO_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U' }; static std::vectorIC756PRO_bw_vals; static const char *vIC756PRO_bw_vals[] = { "FIXED"}; // IC756_widgets[] declared in RIG_IC756 static GUI IC756PRO_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_IC756PRO::RIG_IC756PRO() { defaultCIV = 0x5C; name_ = IC756PROname_; modes_ = IC756PROmodes_; bandwidths_ = IC756PRO_bw_vals; _mode_type = IC756PRO_mode_type; widgets = IC756PRO_widgets; def_freq = freqA = freqB = A.freq = 14070000; def_mode = modeA = modeB = B.imode = 1; def_bw = A.iBW = B.iBW = 0; atten_level = 3; preamp_level = 2; adjustCIV(defaultCIV); has_extras = true; has_bandwidth_control = true; has_pbt_controls = true; has_tune_control = true; has_swr_control = true; has_alc_control = true; has_smeter = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_micgain_control = true; has_auto_notch = true; has_notch_control = true; has_attenuator_control = true; has_preamp_control = true; has_ptt_control = true; has_noise_reduction = true; has_noise_reduction_control = true; has_noise_control = true; has_rf_control = true; has_a2b = true; has_FILTER = true; has_compON = true; has_compression = true; has_vox_onoff = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_cw_break_in = true; ICOMmainsub = true; has_band_selection = true; precision = 1; ndigits = 9; }; void RIG_IC756PRO::initialize() { VECTOR (IC756PROmodes_, vIC756PROmodes_); VECTOR (IC756PRO_bw_vals, vIC756PRO_bw_vals); modes_ = IC756PROmodes_; bandwidths_ = IC756PRO_bw_vals; _mode_type = IC756PRO_mode_type; IC756PRO_widgets[0].W = btnVol; IC756PRO_widgets[1].W = sldrVOLUME; IC756PRO_widgets[2].W = btnAGC; IC756PRO_widgets[3].W = sldrRFGAIN; IC756PRO_widgets[4].W = sldrSQUELCH; IC756PRO_widgets[5].W = btnNR; IC756PRO_widgets[6].W = sldrNR; IC756PRO_widgets[7].W = btnLOCK; IC756PRO_widgets[8].W = sldrINNER; IC756PRO_widgets[9].W = btnCLRPBT; IC756PRO_widgets[10].W = sldrOUTER; IC756PRO_widgets[11].W = btnNotch; IC756PRO_widgets[12].W = sldrNOTCH; IC756PRO_widgets[13].W = sldrMICGAIN; IC756PRO_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } void RIG_IC756PRO::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; cmd.append(post); waitFB("Exchange main/sub"); int current_vfo = inuse; if (current_vfo == onA) { selectB(); get_modeB(); get_bwB(); selectA(); get_modeA(); get_bwA(); } else { selectA(); get_modeA(); get_bwA(); selectB(); get_modeB(); get_bwB(); } } void RIG_IC756PRO::A2B() { cmd = pre_to; cmd += 0x07; cmd += 0xB1; cmd.append(post); waitFB("Equalize main/sub"); int current_vfo = inuse; selectB(); get_modeB(); get_bwB(); if (current_vfo == onA) selectA(); } void RIG_IC756PRO::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\xD0'; cmd.append(post); waitFB("sel A"); inuse = onA; } void RIG_IC756PRO::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\xD1'; cmd.append(post); waitFB("sel B"); inuse = onB; } bool RIG_IC756PRO::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC756PRO::get_vfoA () { if (inuse == onB) return A.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_IC756PRO::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); } unsigned long long RIG_IC756PRO::get_vfoB () { if (inuse == onA) return B.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return B.freq; } void RIG_IC756PRO::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); } int RIG_IC756PRO::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return 0; } // Volume control val 0 ... 100 void RIG_IC756PRO::set_volume_control(int val) { ICvol = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); } int RIG_IC756PRO::get_volume_control() { std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return ((int)ceil(fm_bcd(replystr.substr(p+6),3) * 100 / 255)); } return progStatus.volume; } void RIG_IC756PRO::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // Tranceiver PTT on/off void RIG_IC756PRO::set_PTT_control(int val) { if (val) trace(1, "set_PTT_control(1)"); else trace(1, "set_PTT_control(0)"); cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; } int RIG_IC756PRO::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } // changed noise blanker to noise reduction void RIG_IC756PRO::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); } int RIG_IC756PRO::get_noise() { std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } void RIG_IC756PRO::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); } int RIG_IC756PRO::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise_reduction; } // 0 < val < 15 void RIG_IC756PRO::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); if (val == 16) val = 255; else val = val * 16; cmd.append(to_bcd(val, 3)); cmd.append(post); waitFB("set NRval"); } int RIG_IC756PRO::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6), 3); if (val == 255) val = 16; else val = val/ 16; } } return val; } int RIG_IC756PRO::get_modetype(int n) { return _mode_type[n]; } void RIG_IC756PRO::set_mic_gain(int val) { val = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); } void RIG_IC756PRO::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC756PRO::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); } void RIG_IC756PRO::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC756PRO::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC756PRO::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC756PRO::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC756PRO::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } int IC756PROsql = 0; void RIG_IC756PRO::set_squelch(int val) { IC756PROsql = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(IC756PROsql, 3)); cmd.append( post ); waitFB("set sql"); } void RIG_IC756PRO::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set power"); } double RIG_IC756PRO::get_power_control() { std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); int val = progStatus.power_level; std::string retstr = "ret str"; if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); retstr = str2hex(replystr.substr(p).c_str(), 9); } } return val; } void RIG_IC756PRO::set_rf_gain(int val) { cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set RF"); } int RIG_IC756PRO::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get RF")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return val; } void RIG_IC756PRO::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB("set split"); } int RIG_IC756PRO::get_split() { return split; } void RIG_IC756PRO::set_modeA(int val) { A.imode = val; switch (val) { case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += mode_filterA[A.imode]; cmd.append( post ); waitFB("set mode A"); } int RIG_IC756PRO::get_modeA() { int md = A.imode; int mf = mode_filterA[A.imode]; std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { A.imode = mf = 0; } else { md = replystr[p+5]; if (md > 6) md--; A.imode = md; mf = replystr[p+6]; } } } if (mf > 0 && mf < 4) mode_filterA[A.imode] = A.filter = mf; return A.imode; } void RIG_IC756PRO::set_modeB(int val) { B.imode = val; switch (val) { case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += mode_filterB[B.imode]; cmd.append( post ); waitFB("set mode B"); } int RIG_IC756PRO::get_modeB() { int md = B.imode; int mf = mode_filterB[B.imode]; std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { B.imode = mf = 0; } else { md = replystr[p+5]; if (md > 6) md--; B.imode = md; mf = replystr[p+6]; } } } if (mf > 0 && mf < 3) mode_filterB[B.imode] = B.filter = mf; return B.imode; } int RIG_IC756PRO::adjust_bandwidth(int m) { if (inuse == onB) return B.iBW; return A.iBW; } int RIG_IC756PRO::def_bandwidth(int m) { if (inuse == onB) return B.iBW; return A.iBW; } std::vector& RIG_IC756PRO::bwtable(int m) { return IC756PRO_bw_vals; } void RIG_IC756PRO::set_bwA(int val) { A.iBW = val; int md = A.imode; switch (md) { case 7 : md = 8; break; case 6 : md = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += md; cmd += A.iBW + 1; cmd.append( post ); waitFB("set mode/filter A"); } int RIG_IC756PRO::get_bwA() { return A.iBW; } void RIG_IC756PRO::set_bwB(int val) { B.iBW = val; int md = B.imode; switch (md) { case 7 : md = 8; break; case 6 : md = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += md; cmd += B.iBW + 1; cmd.append( post ); waitFB("set mode/filter B"); } int RIG_IC756PRO::get_bwB() { return B.iBW; } bool IC756PRO_notchon = false; void RIG_IC756PRO::set_notch(bool on, int val) { int notch = val / 20 + 53; if (notch > 255) notch = 255; if (on != IC756PRO_notchon) { cmd = pre_to; cmd.append("\x16\x48"); cmd += on ? '\x01' : '\x00'; cmd.append(post); waitFB("set notch"); IC756PRO_notchon = on; } if (on) { cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(notch,3)); cmd.append(post); waitFB("set notch val"); } } bool RIG_IC756PRO::get_notch(int &val) { bool on = false; val = 0; std::string cstr = "\x16\x48"; std::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 != std::string::npos) on = replystr[p + 6] ? 1 : 0; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); if (waitFOR(9, "get notch val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val = (val - 53) * 20; if (val < 0) val = 0; if (val > 4040) val = 4040; } } } return on; } void RIG_IC756PRO::get_notch_min_max_step(int &min, int &max, int &step) { min = 20; max = 4040; step = 20; } void RIG_IC756PRO::set_auto_notch(int v) { progStatus.auto_notch = v; cmd = pre_to; cmd.append("\x16\x48"); cmd += v ? '\x01' : '\x00'; cmd.append(post); waitFB("set auto notch"); } int RIG_IC756PRO::get_auto_notch() { return progStatus.auto_notch; } int RIG_IC756PRO::next_attenuator() { switch(atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_IC756PRO::set_attenuator(int val) { atten_level = val; int cmdval = 0; if (atten_level == 1) { cmdval = 0x06; } else if (atten_level == 2) { cmdval = 0x12; } else if (atten_level == 3) { cmdval = 0x18; } else if (atten_level == 0) { cmdval = 0x00; } cmd = pre_to; cmd += '\x11'; cmd += cmdval; cmd.append( post ); waitFB("set att"); } int RIG_IC756PRO::get_attenuator() { std::string cstr = "\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(7, "get att")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == 0x06) { atten_level = 1; } else if (replystr[p+5] == 0x12) { atten_level = 2; } else if (replystr[p+5] == 0x18) { atten_level = 3; } else if (replystr[p+5] == 0x00) { atten_level = 0; } } } return atten_level; } int RIG_IC756PRO::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC756PRO::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char) preamp_level; cmd.append( post ); waitFB("set preamp"); } int RIG_IC756PRO::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get preamp")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { preamp_level = replystr[p+6]; } } return preamp_level; } const char *RIG_IC756PRO::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_IC756PRO::ATT_label() { switch (atten_level) { default: case 0: break; case 1: return "6 dB"; break; case 2: return "12 dB"; break; case 3: return "18 dB"; break; case 4: return "20 dB"; break; } return "ATT"; } const char *RIG_IC756PRO::FILT(int val) { if (val < 1) val = 1; if (val > 3) val = 3; return(szfilter[val - 1]); } int RIG_IC756PRO::get_FILT(int mode) { if (inuse == onB) return mode_filterB[mode]; return mode_filterA[mode]; } void RIG_IC756PRO::set_FILT(int filter) { if (filter < 1 || filter > 3) return; if (inuse == onB) { B.filter = filter; int val = B.imode; mode_filterB[val - 1] = filter; switch (val) { case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += filter; cmd.append( post ); waitFB("set mode/filter B"); } else { A.filter = filter; int val = A.imode; mode_filterA[val - 1] = filter; switch (val) { case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += filter; cmd.append( post ); waitFB("set filter A"); } } const char *RIG_IC756PRO::nextFILT() { if (inuse == onB) { B.filter++; if (B.filter > 3) B.filter = 1; set_FILT(B.filter); return(szfilter[B.filter - 1]); } else { A.filter++; if (A.filter > 3) A.filter = 1; set_FILT(A.filter); return(szfilter[A.filter - 1]); } } void RIG_IC756PRO::set_FILTERS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterB[i]; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } } std::string RIG_IC756PRO::get_FILTERS() { for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_filterA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_filterB[i] << " "; return s.str(); } // CW methods void RIG_IC756PRO::get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void RIG_IC756PRO::set_cw_wpm() { int iwpm = round((progStatus.cw_wpm - 6) * 255 / 42 + 0.5); minmax(0, 255, iwpm); cmd.assign(pre_to).append("\x14\x0C"); cmd.append(to_bcd(iwpm, 3)); cmd.append( post ); waitFB("SET cw wpm"); } void RIG_IC756PRO::set_break_in() { cmd.assign(pre_to).append("\x16\x47"); switch (progStatus.break_in) { case 1: cmd += '\x01'; break_in_label("SEMI"); break; case 0: default: cmd += '\x00'; break_in_label("BK-IN"); } cmd.append(post); 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 != std::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; } void RIG_IC756PRO::set_cw_qsk() { int qsk = round ((progStatus.cw_qsk - 2.0) * 255.0 / 11.0 + 0.5); minmax(0, 255, qsk); cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(qsk, 3)); cmd.append(post); waitFB("Set cw qsk delay"); } void RIG_IC756PRO::get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void RIG_IC756PRO::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0 + 0.5); minmax(0, 255, n); cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); } static int comp_level[] = {11,34,58,81,104,128,151,174,197,221,244}; void RIG_IC756PRO::set_compression(int on, int val) { cmd = pre_to; cmd.append("\x16\x44"); if (on) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); waitFB("set Comp ON/OFF"); if (val < 0) return; if (val > 10) return; cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(comp_level[val], 3)); cmd.append( post ); waitFB("set comp"); } void RIG_IC756PRO::get_compression(int &on, int &val) { std::string resp; cmd.assign(pre_to).append("\x16\x44").append(post); resp.assign(pre_fm).append("\x16\x44"); if (waitFOR(8, "get comp on/off")) { size_t p = replystr.find(resp); if (p != std::string::npos) on = (replystr[p+6] == 0x01); } cmd.assign(pre_to).append("\x14\x0E").append(post); resp.assign(pre_fm).append("\x14\x0E"); if (waitFOR(9, "get comp level")) { size_t p = replystr.find(resp); int level = 0; if (p != std::string::npos) { level = fm_bcd(replystr.substr(p+6), 3); for (val = 0; val < 11; val++) if (level <= comp_level[val]) break; } } } void RIG_IC756PRO::set_vox_onoff() { if (progStatus.vox_onoff) { cmd = pre_to; cmd.append("\x16\x46"); cmd += '\x01'; cmd.append(post); waitFB("set Vox ON"); } else { cmd = pre_to; cmd.append("\x16\x46"); cmd += '\x00'; cmd.append(post); waitFB("set Vox OFF"); } } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC756PRO::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC756PRO::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } // these are only defined in this file #undef NUM_FILTERS #undef NUM_MODES flrig-2.0.04/src/rigs/icom/IC735.cxx0000664000175000017500000001020114502720327013557 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC735.h" //============================================================================= // IC-735 // const char IC735name_[] = "IC-735"; static std::vectorIC735modes_; static const char *vIC735modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM"}; const char IC735_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U' }; RIG_IC735::RIG_IC735() { name_ = IC735name_; modes_ = IC735modes_; _mode_type = IC735_mode_type; serial_baudrate = BR1200; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; has_mode_control = true; has_bandwidth_control = false; defaultCIV = 0x04; adjustCIV(defaultCIV); precision = 10; ndigits = 7; }; void RIG_IC735::initialize() { VECTOR (IC735modes_, vIC735modes_); modes_ = IC735modes_; _mode_type = IC735_mode_type; } //============================================================================= void RIG_IC735::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); waitFB("select A"); } void RIG_IC735::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); waitFB("select B"); } bool RIG_IC735::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(10, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC735::get_vfoA () { if (inuse == onB) return A.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(10, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else freqA = fm_bcd_be(replystr.substr(p+5), 8); } } return freqA; } void RIG_IC735::set_vfoA (unsigned long long freq) { freqA = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 8 ) ); cmd.append( post ); waitFB("set vfo A"); } unsigned long long RIG_IC735::get_vfoB () { if (inuse == onA) return B.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(10, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else freqB = fm_bcd_be(replystr.substr(p+5), 8); } } return freqB; } void RIG_IC735::set_vfoB (unsigned long long freq) { freqA = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 8 ) ); cmd.append( post ); waitFB("set vfo B"); } void RIG_IC735::set_modeA(int val) { modeA = val; cmd = pre_to; cmd += "\x06"; cmd += modeA; // set the mode byte cmd.append( post ); waitFB("set mode"); } int RIG_IC735::get_modeA() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(7, "get mode")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { modeA = 0; } else { modeA = replystr[p+5]; } } } return modeA; } flrig-2.0.04/src/rigs/icom/IC705.cxx0000664000175000017500000014127314502720327013572 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // Modified: January 2017 // Andy Stewart, KB1OIQ // Updated: June 2018 // Cliff Scott, AE5ZA // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include "icom/IC705.h" #include "status.h" #include "trace.h" #include "tod_clock.h" #include "support.h" //============================================================================= // IC-705 const char IC705name_[] = "IC-705"; // these are only defined in this file // undef'd at end of file #define NUM_FILTERS 3 #define NUM_MODES 13 static int mode_filterA[NUM_MODES] = {1,1,1,1,1,1,1,1,1,1,1,1}; static int mode_filterB[NUM_MODES] = {1,1,1,1,1,1,1,1,1,1,1,1}; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; 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 { LSB705, USB705, AM705, FM705, CW705, CWR705, RTTY705, RTTYR705, LSBD705, USBD705, AMD705, FMD705, DV705 }; static std::vectorIC705modes_; static const char *vIC705modes_[] = { "LSB", "USB", "AM", "FM", "CW", "CW-R", "RTTY", "RTTY-R", "LSB-D", "USB-D", "AM-D", "FM-D", "DV"}; char IC705_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'U', 'U', 'U' }; const char IC705_mode_nbr[] = { 0x00, 0x01, 0x02, 0x05, 0x03, 0x07, 0x04, 0x08, 0x00, 0x01, 0x02, 0x05, 0x17 }; static std::vectorIC705_ssb_bws; static const char *vIC705_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600" }; static int IC705_bw_vals_SSB[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40, WVALS_LIMIT}; static std::vectorIC705_rtty_bws; static const char *vIC705_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700" }; static int IC705_bw_vals_RTTY[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31, WVALS_LIMIT}; static std::vectorIC705_am_bws; static const char *vIC705_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "705", "7400", "705", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000" }; static int IC705_bw_vals_AM[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49 WVALS_LIMIT}; static std::vectorIC705_fm_bws; static const char *vIC705_fm_bws[] = { "FIXED" }; static int IC705_bw_vals_FM[] = { 1, WVALS_LIMIT}; static GUI IC705_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC705::initialize() { VECTOR (IC705modes_, vIC705modes_); VECTOR (IC705_ssb_bws, vIC705_ssb_bws); VECTOR (IC705_rtty_bws, vIC705_rtty_bws); VECTOR (IC705_am_bws, vIC705_am_bws); VECTOR (IC705_fm_bws, vIC705_fm_bws); modes_ = IC705modes_; bandwidths_ = IC705_ssb_bws; bw_vals_ = IC705_bw_vals_SSB; _mode_type = IC705_mode_type; IC705_widgets[0].W = btnVol; IC705_widgets[1].W = sldrVOLUME; IC705_widgets[2].W = btnAGC; IC705_widgets[3].W = sldrRFGAIN; IC705_widgets[4].W = sldrSQUELCH; IC705_widgets[5].W = btnNR; IC705_widgets[6].W = sldrNR; IC705_widgets[7].W = btnLOCK; IC705_widgets[8].W = sldrINNER; IC705_widgets[9].W = btnCLRPBT; IC705_widgets[10].W = sldrOUTER; IC705_widgets[11].W = btnNotch; IC705_widgets[12].W = sldrNOTCH; IC705_widgets[13].W = sldrMICGAIN; IC705_widgets[14].W = sldrPOWER; btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC705::RIG_IC705() { defaultCIV = 0xA4; adjustCIV(defaultCIV); name_ = IC705name_; modes_ = IC705modes_; bandwidths_ = IC705_ssb_bws; bw_vals_ = IC705_bw_vals_SSB; _mode_type = IC705_mode_type; serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = IC705_widgets; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 9; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 9; B.iBW = 34; has_extras = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_cw_break_in = true; has_vox_onoff = true; has_vox_gain = true; has_vox_anti = true; has_vox_hang = true; has_compON = true; has_compression = true; has_split = true; has_split_AB = true; has_micgain_control = true; has_bandwidth_control = true; has_smeter = true; has_voltmeter = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_sql_control = true; has_agc_control = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_attenuator_control = true; has_preamp_control = true; has_noise_control = true; has_nb_level = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_pbt_controls = true; has_FILTER = true; has_rf_control = true; has_ptt_control = true; has_tune_control = true; has_band_selection = true; has_xcvr_auto_on_off = true; precision = 1; ndigits = 9; has_vfo_adj = true; can_change_alt_vfo = true; has_a2b = true; CW_sense = 0; // CW is LSB }; static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } void RIG_IC705::selectA() { cmd.assign(pre_to).append("\x07"); cmd += '\x00'; cmd.append(post); waitFB("select A"); isett("selectA"); inuse = onA; } void RIG_IC705::selectB() { cmd.assign(pre_to).append("\x07"); cmd += '\x01'; cmd.append(post); waitFB("select B"); isett("selectB"); inuse = onB; } //====================================================================== // IC705 unique commands //====================================================================== void RIG_IC705::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; cmd.append(post); waitFB("Exchange vfos"); get_modeA(); // get mode to update the filter A / B usage get_modeB(); } void RIG_IC705::set_xcvr_auto_on() { cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); RigSerial->failed(0); if (waitFOR(8, "get ID") == false) { cmd.clear(); int fes[] = { 2, 2, 2, 3, 7, 13, 25, 50, 75, 150, 150, 150 }; if (progStatus.serial_baudrate >= 0 && progStatus.serial_baudrate <= 11) { cmd.append( fes[progStatus.serial_baudrate], '\xFE'); } RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); cmd.assign(pre_to); cmd += '\x18'; cmd += '\x01'; set_trace(1, "power_on()"); cmd.append(post); RigSerial->failed(0); if (waitFB("Power ON")) { isett("power_on()"); cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); int i = 0; for (i = 0; i < 150; i++) { // 15 second total timeout if (waitFOR(8, "get ID", 100) == true) { RigSerial->failed(0); return; } update_progress(i / 2); Fl::awake(); } RigSerial->failed(0); return; } isett("power_on()"); RigSerial->failed(1); return; } } void RIG_IC705::set_xcvr_auto_off() { cmd.clear(); cmd.append(pre_to); cmd += '\x18'; cmd += '\x00'; cmd.append(post); waitFB("Power OFF", 200); } bool RIG_IC705::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); isett("check vfo"); return ok; } unsigned long long RIG_IC705::get_vfoA () { std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); if (inuse == onB) { cmd += '\x01'; resp += '\x01'; } else { cmd += '\x00'; resp += '\x00'; } cmd.append(post); if (waitFOR(12, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+6), 10); } } igett("get_vfoA"); return A.freq; } void RIG_IC705::set_vfoA (unsigned long long freq) { A.freq = freq; cmd.assign(pre_to).append("\x25"); if (inuse == onB) cmd += '\x01'; else cmd += '\x00'; cmd.append( to_bcd_be( freq, 10) ); cmd.append( post ); waitFB("set vfo A"); isett("set_vfoA"); } unsigned long long RIG_IC705::get_vfoB () { std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); if (inuse == onB) { cmd += '\x00'; resp += '\x00'; } else { cmd += '\x01'; resp += '\x01'; } cmd.append(post); if (waitFOR(12, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+6), 10); } } igett("get_vfoB"); return B.freq; } void RIG_IC705::set_vfoB (unsigned long long freq) { B.freq = freq; cmd.assign(pre_to).append("\x25"); if (inuse == onB) cmd += '\x00'; else cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); isett("set_vfoB"); } // expecting // 0 1 2 3 4 5 6 7 8 9 // FE FE E0 94 26 NN NN NN NN FD // | | | | // | | | |__filter setting, 01, 02, 03 // | | |_____data mode, 00 - off, 01 - on // | |________Mode 00 - LSB // | 01 - USB // | 02 - AM // | 03 - CW // | 04 - RTTY // | 05 - FM // | 07 - CW-R // | 08 - RTTY-R // | 17 - DV // |___________selected vfo, 00 - active, 01 - inactive int RIG_IC705::get_modeA() { int md = 0; size_t p; std::string resp; cmd.assign(pre_to).append("\x26"); resp.assign(pre_fm).append("\x26"); if (inuse == onB) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); if (waitFOR(10, "get mode A")) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeA; if (replystr[p+6] == -1) { md = A.imode = 0; } else { for (md = 0; md < DV705; md++) { if (replystr[p+6] == IC705_mode_nbr[md]) { A.imode = md; if (replystr[p+7] == 0x01 && A.imode < CW705) A.imode += 8; if (A.imode > DV705) A.imode = 1; break; } } A.filter = replystr[p+8]; if (A.filter > 0 && A.filter < 4) mode_filterA[A.imode] = A.filter; } } end_wait_modeA: get_trace(4, "get mode A[", IC705modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (A.imode == CW705 || A.imode == CWR705) { cmd.assign(pre_to).append("\x1A\x05"); cmd += '\x00'; cmd += '\x53'; cmd.append(post); resp.assign(pre_fm).append("\x1A\x05"); resp += '\x00'; resp += '\x53'; if (waitFOR(10, "get CW sideband")) { p = replystr.rfind(resp); CW_sense = replystr[p+8]; if (CW_sense) { IC705_mode_type[CW705] = 'U'; IC705_mode_type[CWR705] = 'L'; } else { IC705_mode_type[CW705] = 'L'; IC705_mode_type[CWR705] = 'U'; } } get_trace(2, "get CW sideband ", str2hex(replystr.c_str(), replystr.length())); } return A.imode; } // LSB USB AM CW RTTY FM CW-R RTTY-R LSB-D USB-D // 0 1 2 3 4 5 6 7 8 9 void RIG_IC705::set_modeA(int val) { A.imode = val; cmd.assign(pre_to); cmd += '\x26'; if (inuse == onB) cmd += '\x01'; // unselected vfo else cmd += '\x00'; // selected vfo cmd += IC705_mode_nbr[A.imode]; // operating mode if (A.imode >= LSBD705 && A.imode < DV705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += mode_filterA[A.imode]; // filter cmd.append( post ); waitFB("set mode A"); set_trace(4, "set mode A[", IC705modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC705::get_modeB() { int md = 0; size_t p; std::string resp; cmd.assign(pre_to).append("\x26"); resp.assign(pre_fm).append("\x26"); if (inuse == onB) cmd += '\x00'; // active vfo else cmd += '\x01'; // inactive vfo cmd.append(post); if (waitFOR(10, "get mode B")) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeB; if (replystr[p+6] == -1) { md = filA = 0; } else { for (md = 0; md < LSBD705; md++) { if (replystr[p+6] == IC705_mode_nbr[md]) { B.imode = md; if (replystr[p+7] == 0x01 && B.imode < CW705) B.imode += 8; if (B.imode > DV705) B.imode = 1; break; } } B.filter = replystr[p+8]; } } end_wait_modeB: get_trace(4, "get mode B[", IC705modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (B.filter > 0 && B.filter < 4) mode_filterB[B.imode] = B.filter; get_trace(4, "get mode A[", IC705modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (B.imode == CW705 || B.imode == CWR705) { cmd.assign(pre_to).append("\x1A\x05"); cmd += '\x00'; cmd += '\x53'; cmd.append(post); resp.assign(pre_fm).append("\x1A\x05"); resp += '\x00'; resp += '\x53'; if (waitFOR(10, "get CW sideband")) { p = replystr.rfind(resp); CW_sense = replystr[p+8]; if (CW_sense) { IC705_mode_type[CW705] = 'U'; IC705_mode_type[CWR705] = 'L'; } else { IC705_mode_type[CW705] = 'L'; IC705_mode_type[CWR705] = 'U'; } } get_trace(2, "get CW sideband ", str2hex(replystr.c_str(), replystr.length())); } return B.imode; } void RIG_IC705::set_modeB(int val) { B.imode = val; cmd.assign(pre_to); cmd += '\x26'; if (inuse == onB) cmd += '\x00'; // selected vfo else cmd += '\x01'; // unselected vfo cmd += IC705_mode_nbr[B.imode]; // operating mode if (B.imode >= LSBD705 && B.imode < DV705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += mode_filterB[B.imode]; // filter cmd.append( post ); waitFB("set mode B"); set_trace(4, "set mode B[", IC705modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC705::get_FILT(int mode) { if (inuse == onB) return mode_filterB[mode]; return mode_filterA[mode]; } void RIG_IC705::set_FILT(int filter) { if (filter < 1 || filter > 3) return; if (inuse == onB) { B.filter = filter; mode_filterB[B.imode] = filter; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; // selected vfo cmd += IC705_mode_nbr[B.imode]; // operating mode if (B.imode >= LSBD705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += filter; // filter cmd.append( post ); waitFB("set mode/filter B"); set_trace(4, "set mode/filter B[", IC705modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); } else { A.filter = filter; mode_filterA[A.imode] = filter; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; // selected vfo cmd += IC705_mode_nbr[A.imode]; // operating mode if (A.imode >= LSBD705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += filter; // filter cmd.append( post ); waitFB("set mode/filter A"); set_trace(4, "set mode/filter A[", IC705modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); } } const char *RIG_IC705::FILT(int val) { if (val < 1) val = 1; if (val > 3) val = 3; return(szfilter[val - 1]); } const char * RIG_IC705::nextFILT() { int val = A.filter; if (inuse == onB) val = B.filter; val++; if (val > 3) val = 1; set_FILT(val); return szfilter[val - 1]; } void RIG_IC705::set_FILTERS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterB[i]; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } } std::string RIG_IC705::get_FILTERS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } for (int i = 0; i < NUM_MODES; i++) s << mode_filterA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_filterB[i] << " "; return s.str(); } std::string RIG_IC705::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_IC705::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } bool RIG_IC705::can_split() { return true; } void RIG_IC705::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); isett("set_split"); } int RIG_IC705::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); if (waitFOR(7, "get split")) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } igett("get_split"); return split; } int RIG_IC705::get_bwA() { if (A.imode == 3 || A.imode == 11) return 0; // FM, FM-D int current_vfo = inuse; if (current_vfo == onB) selectA(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); int bwval = A.iBW; if (waitFOR(8, "get_bwA")) { std::string resp = pre_fm; resp.append("\x1A\x03"); size_t p = replystr.find(resp); if (p != std::string::npos) bwval = fm_bcd(replystr.substr(p+6), 2); } if (bwval != A.iBW) { A.iBW = bwval; mode_bwA[A.imode] = bwval; } if (current_vfo == onB) selectB(); igett("get_bwA"); return A.iBW; } void RIG_IC705::set_bwA(int val) { if (A.imode == 3 || A.imode == 11) return; // FM, FM-D A.iBW = val; int current_vfo = inuse; if (current_vfo == onB) selectA(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bwA"); mode_bwA[A.imode] = val; isett("set_bwA"); if (current_vfo == onB) selectB(); } int RIG_IC705::get_bwB() { if (B.imode == 3 || B.imode == 11) return 0; // FM, FM-D int current_vfo = inuse; if (current_vfo == onA) selectB(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); int bwval = B.iBW; if (waitFOR(8, "get_bwB")) { std::string resp = pre_fm; resp.append("\x1A\x03"); size_t p = replystr.find(resp); if (p != std::string::npos) bwval = fm_bcd(replystr.substr(p+6), 2); } if (bwval != B.iBW) { B.iBW = bwval; mode_bwB[B.imode] = bwval; } if (current_vfo == onA) selectA(); igett("get_bwB"); return B.iBW; } void RIG_IC705::set_bwB(int val) { if (B.imode == 3 || B.imode == 11) return; // FM, FM-D B.iBW = val; int current_vfo = inuse; if (current_vfo == onA) selectB(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); waitFB("set bwB"); mode_bwB[B.imode] = val; isett("set_bwB"); if (current_vfo == onA) selectA(); } // LSB USB AM FM CW CW-R RTTY RTTY-R LSB-D USB-D AM-D FM-D // 0 1 2 3 4 5 6 7 8 9 10 11 int RIG_IC705::adjust_bandwidth(int m) { int bw = 0; switch (m) { case 2: case 10: // AM, AM-D bandwidths_ = IC705_am_bws; bw_vals_ = IC705_bw_vals_AM; bw = 19; break; case 3: case 11: // FM, FM-D bandwidths_ = IC705_fm_bws; bw_vals_ = IC705_bw_vals_FM; bw = 0; break; case 6: case 7: // RTTY, RTTY-R bandwidths_ = IC705_rtty_bws; bw_vals_ = IC705_bw_vals_RTTY; bw = 12; break; case 4: case 5: // CW, CW -R bandwidths_ = IC705_ssb_bws; bw_vals_ = IC705_bw_vals_SSB; bw = 12; break; case 0: case 1: // LSB, USB case 8: case 9: // LSB-D, USB-D default: bandwidths_ = IC705_ssb_bws; bw_vals_ = IC705_bw_vals_SSB; bw = 34; } return bw; } std::vector& RIG_IC705::bwtable(int m) { switch (m) { case 2: case 10: // AM, AM-D return IC705_am_bws; break; case 3: case 11: // FM, FM-D return IC705_fm_bws; break; case 6: case 7: // RTTY, RTTY-R return IC705_rtty_bws; break; case 4: case 5: // CW, CW -R case 0: case 1: // LSB, USB case 8: case 9: // LSB-D, USB-D default: return IC705_ssb_bws; } return IC705_ssb_bws; } int RIG_IC705::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } int RIG_IC705::get_mic_gain() { int val = 0; std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return val; } void RIG_IC705::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set mic gain"); } void RIG_IC705::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } static int comp_level[] = {11,34,58,81,104,128,151,174,197,221,244}; void RIG_IC705::set_compression(int on, int val) { cmd = pre_to; cmd.append("\x16\x44"); if (on) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); waitFB("set Comp ON/OFF"); if (val < 0) return; if (val > 10) return; cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(comp_level[val], 3)); cmd.append( post ); waitFB("set comp"); } void RIG_IC705::get_compression(int &on, int &val) { std::string resp; cmd.assign(pre_to).append("\x16\x44").append(post); resp.assign(pre_fm).append("\x16\x44"); if (waitFOR(8, "get comp on/off")) { size_t p = replystr.find(resp); if (p != std::string::npos) on = (replystr[p+6] == 0x01); } cmd.assign(pre_to).append("\x14\x0E").append(post); resp.assign(pre_fm).append("\x14\x0E"); if (waitFOR(9, "get comp level")) { size_t p = replystr.find(resp); int level = 0; if (p != std::string::npos) { level = fm_bcd(replystr.substr(p+6), 3); for (val = 0; val < 11; val++) if (level <= comp_level[val]) break; } } } void RIG_IC705::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; cmd.append( post ); waitFB("set vox OFF"); } } // Xcvr values range 0...255 step 1 void RIG_IC705::get_vox_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC705::set_vox_gain() { int vox_gain = round((progStatus.vox_gain * 255 / 100 + 0.5)); minmax(0, 255, vox_gain); cmd.assign(pre_to).append("\x14\x16"); cmd.append(to_bcd(vox_gain, 3)); cmd.append( post ); waitFB("SET vox gain"); } // Xcvr values range 0...255 step 1 void RIG_IC705::get_vox_anti_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC705::set_vox_anti() { int vox_anti = round((progStatus.vox_anti * 255 / 100 + 0.5)); minmax(0, 255, vox_anti); cmd.assign(pre_to).append("\x14\x17"); cmd.append(to_bcd(vox_anti, 3)); cmd.append( post ); waitFB("SET anti-vox"); } // VOX hang 0.0 - 2.0, step 0.1 // Xcvr values 0..20 step 1 void RIG_IC705::get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 20; step = 1; } void RIG_IC705::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05\x01\x91"); cmd.append(to_bcd(progStatus.vox_hang, 2)); cmd.append( post ); waitFB("SET vox hang"); } //---------------------------------------------------------------------- // CW controls void RIG_IC705::get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void RIG_IC705::set_cw_wpm() { int iwpm = round((progStatus.cw_wpm - 6) * 255 / 42 + 0.5); minmax(0, 255, iwpm); cmd.assign(pre_to).append("\x14\x0C"); cmd.append(to_bcd(iwpm, 3)); cmd.append( post ); waitFB("SET cw wpm"); } void RIG_IC705::set_break_in() { // 16 47 00 break-in off // 16 47 01 break-in semi // 16 47 02 break-in full cmd.assign(pre_to).append("\x16\x47"); switch (progStatus.break_in) { case 2: cmd += '\x02'; break_in_label("FULL"); break; case 1: cmd += '\x01'; break_in_label("SEMI"); break; case 0: default: cmd += '\x00'; break_in_label("BK-IN"); } cmd.append(post); 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 != std::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; } void RIG_IC705::set_cw_qsk() { int qsk = round ((progStatus.cw_qsk - 2.0) * 255.0 / 11.0 + 0.5); minmax(0, 255, qsk); cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(qsk, 3)); cmd.append(post); waitFB("Set cw qsk delay"); } void RIG_IC705::get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void RIG_IC705::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0 + 0.5); minmax(0, 255, n); cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); } void RIG_IC705::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x24'; cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); } // Tranceiver PTT on/off void RIG_IC705::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; } int RIG_IC705::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } // Volume control val 0 ... 100 void RIG_IC705::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set vol"); } /* I:12:20:22: get vol ans in 0 ms, OK cmd FE FE 7A E0 14 01 FD ans FE FE 7A E0 14 01 FD FE FE E0 7A 14 01 00 65 FD 0 1 2 3 4 5 6 7 8 */ int RIG_IC705::get_volume_control() { int val = 0; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return (val); } void RIG_IC705::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC705::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(bcd255(val * 10)); cmd.append( post ); set_trace(2, "set_power_control()", str2hex(cmd.c_str(), cmd.length())); waitFB("set power"); } double RIG_IC705::get_power_control() { int val = progStatus.power_level; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)) / 10; } get_trace(2, "get_power_control()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC705::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; max = 10.0; step = 0.1; } int RIG_IC705::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.41); if (mtr > 100) mtr = 100; } } return mtr; } double RIG_IC705::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); int ret = waitFOR(9, "get voltmeter"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 16.0 * mtr / 241.0; return val; } } return -1; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { {0, 0.0}, {26, 0.5}, {52, 1.0}, {80, 2.0}, {104, 3.0}, {122, 4.0}, {143, 5.0}, {158, 6.0}, {174, 7.0}, {191, 8.0}, {210, 9.0}, {228, 10.0}, {245, 11.0}, {255, 11.6} }; int RIG_IC705::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= 0; int ret = waitFOR(9, "get power out"); igett("get power out"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } struct swrpair {int mtr; float swr;}; // Table entries below correspond to SWR readings of 1.1, 1.5, 2.0, 2.5, 3.0 and infinity. // Values are also tweaked to fit the display of the SWR meter. static swrpair swrtbl[] = { {0, 0.0}, {48, 10.5}, {80, 23.0}, {103, 35.0}, {120, 48.0}, {255, 100.0 } }; int RIG_IC705::get_swr(void) { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(swrtbl) / sizeof(swrpair) - 1; i++) if (mtr >= swrtbl[i].mtr && mtr < swrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(swrtbl[i].swr + (swrtbl[i+1].swr - swrtbl[i].swr)*(mtr - swrtbl[i].mtr)/(swrtbl[i+1].mtr - swrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC705::get_alc(void) { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /1.2); if (mtr > 100) mtr = 100; } } return mtr; } void RIG_IC705::set_rf_gain(int val) { cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set RF"); } int RIG_IC705::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get RF")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return val; } void RIG_IC705::get_rf_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } int RIG_IC705::next_preamp() { if (atten_level == 1) return preamp_level; switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC705::set_preamp(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; preamp_level = val; cmd += (unsigned char)preamp_level; cmd.append( post ); waitFB( (preamp_level == 0) ? "set Preamp OFF" : (preamp_level == 1) ? "set Preamp Level 1" : "set Preamp Level 2"); } int RIG_IC705::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get Preamp Level")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { preamp_level = replystr[p+6]; } } return preamp_level; } void RIG_IC705::set_attenuator(int val) { if (val) { atten_level = 1; } else { atten_level = 0; } cmd = pre_to; cmd += '\x11'; cmd += atten_level ? '\x20' : '\x00'; cmd.append( post ); waitFB("set att"); } int RIG_IC705::next_attenuator() { if (atten_level) return 0; return 1; } int RIG_IC705::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; if (waitFOR(7, "get ATT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == 0x20) { atten_level = 1; return 1; } else { atten_level = 0; return 0; } } } return 0; } const char *RIG_IC705::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_IC705::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } void RIG_IC705::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); } int RIG_IC705::get_noise() { int val = progStatus.noise; std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+6]; } } return val; } void RIG_IC705::set_nb_level(int val) { cmd = pre_to; cmd.append("\x14\x12"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set NB level"); } int RIG_IC705::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x14\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NB level")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC705::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); } int RIG_IC705::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise_reduction; } /* I:12:06:50: get NR ans in 0 ms, OK cmd FE FE 7A E0 16 40 FD ans FE FE 7A E0 16 40 FD FE FE E0 7A 16 40 01 FD 0 1 2 3 4 5 6 7 I:12:06:50: get NRval ans in 0 ms, OK cmd FE FE 7A E0 14 06 FD ans FE FE 7A E0 14 06 FD FE FE E0 7A 14 06 00 24 FD 0 1 2 3 4 5 6 7 8 */ void RIG_IC705::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val *= 16; val += 8; cmd.append(to_bcd(val, 3)); cmd.append(post); waitFB("set NRval"); } int RIG_IC705::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val -= 8; val /= 16; } } return val; } void RIG_IC705::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set Sqlch"); } int RIG_IC705::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get squelch")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC705::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += (unsigned char)val; cmd.append( post ); waitFB("set AN"); } int RIG_IC705::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get AN")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } void RIG_IC705::set_notch(bool on, int freq) { int hexval; switch (vfo->imode) { default: case USB705: case USBD705: case RTTYR705: case DV705: hexval = freq - 1500; break; case LSB705: case LSBD705: case RTTY705: hexval = 1500 - freq; break; case CW705: if (CW_sense) hexval = freq - progStatus.cw_spot_tone; else hexval = progStatus.cw_spot_tone - freq; break; case CWR705: if (CW_sense) hexval = progStatus.cw_spot_tone - freq; else 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(hexval,3)); cmd.append(post); waitFB("set notch val"); set_trace(2, "set_notch_val() ", str2hex(cmd.c_str(), cmd.length())); } bool RIG_IC705::get_notch(int &val) { bool on = false; val = 1500; std::string cstr = "\x16\x48"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; 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 != std::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 != std::string::npos) { val = (int)ceil(fm_bcd(replystr.substr(p+6),3)); val -= 128; val *= 20; switch (vfo->imode) { default: case USB705: case USBD705: case RTTYR705: case DV705: val = 1500 + val; break; case LSB: case LSBD705: case RTTY705: val = 1500 - val; break; case CW705: if (CW_sense) val = progStatus.cw_spot_tone + val; else val = progStatus.cw_spot_tone - val; break; case CWR705: if (CW_sense) val = progStatus.cw_spot_tone - val; else val = progStatus.cw_spot_tone + val; break; } } get_trace(2, "get_notch_val() ", str2hex(replystr.c_str(), replystr.length())); } } return on; } void RIG_IC705::get_notch_min_max_step(int &min, int &max, int &step) { switch (vfo->imode) { default: case USB705: case USBD705: case RTTYR705: case LSB705: case LSBD705: case RTTY705: case DV705: min = 0; max = 3000; step = 20; break; case CW705: case CWR705: min = progStatus.cw_spot_tone - 500; max = progStatus.cw_spot_tone + 500; step = 20; break; } } static int agcval = 3; int RIG_IC705::get_agc() { cmd = pre_to; cmd.append("\x16\x12"); cmd.append(post); if (waitFOR(8, "get AGC")) { size_t p = replystr.find(pre_fm); if (p != std::string::npos) agcval = replystr[p+6]; // 1 == off, 2 = FAST, 3 = MED, 4 = SLOW } return agcval; } int RIG_IC705::incr_agc() { agcval++; if (agcval == 4) agcval = 1; cmd = pre_to; cmd.append("\x16\x12"); cmd += agcval; cmd.append(post); waitFB("set AGC"); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "MED", "SLO"}; const char *RIG_IC705::agc_label() { return agcstrs[agcval]; } int RIG_IC705::agc_val() { return (agcval); } void RIG_IC705::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); } bool RIG_IC705::get_if_shift(int &val) { val = sh_; return sh_on_; } void RIG_IC705::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC705::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); isett("set_pbt_inner()"); waitFB("set PBT inner"); } void RIG_IC705::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); isett("set_pbt_outer()"); waitFB("set PBT outer"); } int RIG_IC705::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } igett("get_pbt_inner"); return val; } int RIG_IC705::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } igett("get_pbt_outer"); return val; } void RIG_IC705::setVfoAdj(double v) { vfo_ = v; cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x89'; cmd.append(bcd255(int(v))); cmd.append(post); waitFB("SET vfo adjust"); } double RIG_IC705::getVfoAdj() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x89'; cmd.append(post); if (waitFOR(11, "get vfo adj")) { size_t p = replystr.find(pre_fm); if (p != std::string::npos) { vfo_ = num100(replystr.substr(p+8)); } } return vfo_; } /* Received from transceiver: Rx 56 bytes 00 | FE FE E0 A4 04 | 1A 01 band stack register command 06 | 03 register # 3 07 | 01 left side of display 08 | 00 00 05 07 00 frequency 13 | 00 mode 14 | 02 filter # 15 | 00 data mode == 0x01 16 | 00 duplex tone 17 | 00 digital squelch 18 | 00 08 85 repeater tone freq 21 | 00 08 85 tone squelch freq 25 | 00 00 23 dtcs code 27 | 00 digital squelch code 28 | 00 50 00 duplex offset freq 31 | 43 51 43 51 43 51 20 20 destination call 8 chars 39 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 register description 16 chars 55 | FD */ // test std::string const char bstack[] = "\ \xFE\xFE\xE0\xA4\x1A\ \x01\x03\x01\ \x00\x00\x05\x07\x00\ \x02\ \x02\ \x01\ \x00\ \x00\ \x00\x08\x85\ \x00\x08\x85\ \x00\x00\x23\ \x00\ \x00\x50\x00\ \x43\x51\x43\x51\x43\x51\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\ \xFD\ "; const char reg_strings[] = "W1HKJ 1234567812345678"; const char *sfreq[12] = { "\x00\x00\x91\x01\x00", // 160 "\x00\x00\x57\x03\x00", // 80 "\x00\x00\x07\x07\x00", // 40 "\x00\x00\x14\x10\x00", // 30 "\x00\x00\x07\x14\x00", // 20 "\x00\x80\x06\x18\x00", // 18 "\x00\x00\x07\x21\x00", // 15 "\x00\x00\x07\x24\x00", "\x00\x00\x07\x28\x00", "\x00\x00\x07\x50\x00", "\x00\x00\x07\x44\x01", "\x00\x00\x07\x30\x04" }; void RIG_IC705::get_band_selection(int v) { int v2 = v; switch (v) { case 11: v2 = 13; break; case 12: v2 = 14; break; default: break; } cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v2, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(56, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { int bandfreq = fm_bcd_be(replystr.substr(p + 8, 5), 10); // int bandmode = fm_bcd(replystr.substr(p + 13, 1) ,2); int mode = 0; for (int md = LSB705; md <= DV705; md++) { if (replystr[p + 13] == IC705_mode_nbr[md]) { mode = md; if (replystr[p+15] == 0x01 && mode < CW705) mode += 8; break; } } if (mode > DV705) mode = USB705; int bandfilter = replystr[p+14]; int tone = fm_bcd(replystr.substr(p + 18, 3), 6); tTONE = 0; for (size_t n = 0; n < sizeof(PL_tones) / sizeof(*PL_tones); n++) { if (tone == PL_tones[n]) { tTONE = n; break; } } tone = fm_bcd(replystr.substr(p + 21, 3), 6); rTONE = 0; for (size_t n = 0; n < sizeof(PL_tones) / sizeof(*PL_tones); n++) { if (tone == PL_tones[n]) { rTONE = n; break; } } if (inuse == onB) { set_vfoB(bandfreq); set_modeB(mode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(mode); set_FILT(bandfilter); } } return; } } void RIG_IC705::set_band_selection(int v) { switch (v) { case 11: v = 13; break; case 12: v = 14; break; default: break; } unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? B.filter : A.filter); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd += '\x1A'; cmd += '\x01'; cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); // freq cmd += IC705_mode_nbr[mode]; // mode cmd += fil; // filter # if (mode >= LSBD705 && mode < DV705) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += '\x00'; cmd += '\x00'; // duplex tone, digital squelch cmd.append(to_bcd(PL_tones[tTONE], 6)); // transmit tone cmd.append(to_bcd(PL_tones[rTONE], 6)); // receive tone cmd += '\x00'; cmd += '\x00'; cmd += '\x23'; // dtcs tone cmd += '\x00'; //digital squelch code cmd += '\x00'; cmd += '\x60'; cmd += '\x00'; // duplex offset cmd.append(" "); cmd.append(" "); cmd.append(post); waitFB("set_band_selection"); isett("set_band_selection"); } flrig-2.0.04/src/rigs/icom/IC7000.cxx0000664000175000017500000006434614502720327013652 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "icom/IC7000.h" #include "debug.h" #include "support.h" //============================================================================= // IC-7000 static int ret = 0; // used by get_trace enum { LSB7000, USB7000, AM7000, CW7000, RTTY7000, FM7000, WFM7000, CWR7000, RTTYR7000, DV7000, LSBD7000, USBD7000, AMD7000, FMD7000 }; const char IC7000name_[] = "IC-7000"; static std::vectorIC7000modes_; static const char *vIC7000modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R"}; const char IC7000_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U' }; static std::vectorIC7000_SSB_CWwidths; static const char *vIC7000_SSB_CWwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static int IC7000_bw_vals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41, WVALS_LIMIT}; static std::vectorIC7000_RTTYwidths; static const char *vIC7000_RTTYwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static int IC7000_bw_vals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32, WVALS_LIMIT}; static std::vectorIC7000_AMwidths; static const char *vIC7000_AMwidths[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7200", "7400", "7600", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000"}; static int IC7000_bw_vals_AM[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50, WVALS_LIMIT}; static std::vectorIC7000_FMwidths; static const char *vIC7000_FMwidths[] = { "FIXED" }; static int IC7000_bw_vals_FM[] = { 1, WVALS_LIMIT}; static GUI IC7000_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7000::initialize() { VECTOR (IC7000modes_, vIC7000modes_); VECTOR (IC7000_SSB_CWwidths, vIC7000_SSB_CWwidths); VECTOR (IC7000_RTTYwidths, vIC7000_RTTYwidths); VECTOR (IC7000_AMwidths, vIC7000_AMwidths); VECTOR (IC7000_FMwidths, vIC7000_FMwidths); modes_ = IC7000modes_; bandwidths_ = IC7000_SSB_CWwidths; bw_vals_ = IC7000_bw_vals_SSB; IC7000_widgets[0].W = btnVol; IC7000_widgets[1].W = sldrVOLUME; IC7000_widgets[2].W = btnAGC; IC7000_widgets[3].W = sldrRFGAIN; IC7000_widgets[4].W = sldrSQUELCH; IC7000_widgets[5].W = btnNR; IC7000_widgets[6].W = sldrNR; IC7000_widgets[7].W = btnLOCK; IC7000_widgets[8].W = sldrINNER; IC7000_widgets[9].W = btnCLRPBT; IC7000_widgets[10].W = sldrOUTER; IC7000_widgets[11].W = btnNotch; IC7000_widgets[12].W = sldrNOTCH; IC7000_widgets[13].W = sldrMICGAIN; IC7000_widgets[14].W = sldrPOWER; btn_icom_select_11->activate(); btn_icom_select_12->activate(); btn_icom_select_13->deactivate(); cmd = pre_to; cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x92'; cmd += '\x00'; cmd.append(post); waitFB("CI-V"); cmd = pre_to; cmd.append("\x16\x51"); cmd += '\x00'; cmd.append(post); waitFB("NF2 OFF"); } RIG_IC7000::RIG_IC7000() { defaultCIV = 0x70; adjustCIV(defaultCIV); name_ = IC7000name_; modes_ = IC7000modes_; bandwidths_ = IC7000_SSB_CWwidths; bw_vals_ = IC7000_bw_vals_SSB; // serial_write_delay = 0; // serial_post_write_delay = 0; _mode_type = IC7000_mode_type; widgets = IC7000_widgets; def_freq = A.freq = 432399230ULL; def_mode = A.imode = 1; def_bw = A.iBW = 28; B.freq = 432399230ULL; B.imode = 1; B.iBW = 28; preamp_level = 0; restore_mbw = false; has_extras = has_compON = has_compression = has_smeter = has_power_out = has_alc_control = has_swr_control = has_split = has_auto_notch = has_power_control = has_volume_control = has_mode_control = has_bandwidth_control = has_micgain_control = has_notch_control = has_noise_control = has_noise_reduction_control = has_noise_reduction = has_attenuator_control = has_preamp_control = has_ptt_control = has_tune_control = has_rf_control = has_sql_control = true; has_band_selection = true; precision = 1; ndigits = 9; }; //====================================================================== // IC7000 unique commands //====================================================================== #include "debug.h" void RIG_IC7000::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); waitFB("sel A"); inuse = onA; } void RIG_IC7000::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); waitFB("sel B"); inuse = onB; } bool RIG_IC7000::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "check"); bool ok = waitFOR(11, "check vfo"); igett("check()"); return ok; } unsigned long long RIG_IC7000::get_vfoA () { if (inuse == onB) return A.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "get vfo A"); ret = waitFOR(11, "get vfo A"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_IC7000::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append(post); waitFB("set vfo A"); isett("set_vfoA()"); } unsigned long long RIG_IC7000::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "get vfo B"); ret = waitFOR(11, "get vfo B"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return B.freq; } void RIG_IC7000::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); isett("set_vfoB()"); } void RIG_IC7000::set_modeA(int val) { A.imode = val; switch (val) { case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd.append( post ); waitFB("set mode A"); isett("set_modeA()"); } int RIG_IC7000::get_modeA() { int md; std::string resp = pre_fm; resp += '\x04'; cmd = pre_to; cmd += '\x04'; cmd.append(post); get_trace(1,"get mode A"); ret = waitFOR(8, "get mode A"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { md = replystr[p+5]; if (md == -1) { md = filA = 0; } else { if (md > 6) md--; A.imode = md; } } } return A.imode; } void RIG_IC7000::set_modeB(int val) { B.imode = val; switch (val) { case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd.append( post ); waitFB("set mode B"); isett("set_modeB()"); } int RIG_IC7000::get_modeB() { int md; std::string resp = pre_fm; resp += '\x04'; cmd = pre_to; cmd += '\x04'; cmd.append(post); get_trace(1, "get mode B"); ret = waitFOR(8, "get mode B"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { md = replystr[p+5]; if (md == -1) { md = filB = 0; } else { if (md > 6) md--; B.imode = md; } } } return B.imode; } int RIG_IC7000::get_bwA() { std::string cstr = "\x1A\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get bw A"); ret = waitFOR(8, "get bw A"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) A.iBW = (fm_bcd(replystr.substr(p+6),2)); } return A.iBW; } int RIG_IC7000::get_bwB() { std::string cstr = "\x1A\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get bw B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) B.iBW = (fm_bcd(replystr.substr(p+6),2)); } return B.iBW; } void RIG_IC7000::set_bwA(int val) { A.iBW = val; cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(val, 2)); cmd.append( post ); waitFB("set bw A"); isett("set_bwA()"); } void RIG_IC7000::set_bwB(int val) { B.iBW = val; cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(val, 2)); cmd.append( post ); waitFB("set bw B"); isett("set_bwB()"); } int RIG_IC7000::adjust_bandwidth(int m) { if (m == 3 || m == 6) { //CW bandwidths_ = IC7000_SSB_CWwidths; bw_vals_ = IC7000_bw_vals_SSB; return 12; } if (m == 4 || m == 7) { //RTTY bandwidths_ = IC7000_RTTYwidths; bw_vals_ = IC7000_bw_vals_RTTY; return 12; } if (m == 2) { // AM bandwidths_ = IC7000_AMwidths; bw_vals_ = IC7000_bw_vals_AM; return 28; } if (m == 5) { // FM bandwidths_ = IC7000_FMwidths; bw_vals_ = IC7000_bw_vals_FM; return 0; } bandwidths_ = IC7000_SSB_CWwidths; bw_vals_ = IC7000_bw_vals_SSB; return 32; } int RIG_IC7000::def_bandwidth(int m) { return adjust_bandwidth(m); } int RIG_IC7000::get_attenuator() { std::string cstr = "\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get att"); ret = waitFOR(7, "get att"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+5] ? 1 : 0); } return progStatus.attenuator; } void RIG_IC7000::set_attenuator(int val) { cmd = pre_to; cmd += '\x11'; cmd += val ? '\x12' : '\x00'; cmd.append( post ); waitFB("set att"); isett("set_attenuator()"); } void RIG_IC7000::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += val ? '\x01' : '\x00'; cmd.append( post ); set_trace(1, "set preamp"); waitFB("set preamp"); isett(""); } int RIG_IC7000::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get preamp"); ret = waitFOR(8, "get preamp"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) preamp_level = replystr[p+6] ? 1 : 0; } return preamp_level; } void RIG_IC7000::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += val ? 0x01 : 0x00; cmd.append( post ); waitFB("set AN"); isett("set_auto_notch()"); } int RIG_IC7000::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get autonotch"); ret = waitFOR(8, "get AN"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } void RIG_IC7000::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); isett("set_split()"); } int RIG_IC7000::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); get_trace(1, "get split"); ret = waitFOR(7, "get split"); igett(""); if (ret) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } return split; } // Volume control val 0 ... 100 void RIG_IC7000::set_volume_control(int val) { int ICvol = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); isett("set_volume_control()"); } int RIG_IC7000::get_volume_control() { std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get vol"); ret = waitFOR(9, "get vol"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } return progStatus.volume; } void RIG_IC7000::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7000::set_rf_gain(int val) { int ICrfg = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(ICrfg, 3)); cmd.append( post ); waitFB("set RF"); isett("set_rf_gain()"); } int RIG_IC7000::get_rf_gain() { std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); get_trace(1, "get rfgain"); ret = waitFOR(9, "get RF"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } return progStatus.rfgain; } void RIG_IC7000::set_squelch(int val) { int ICsql = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(ICsql, 3)); cmd.append( post ); waitFB("set sql"); isett("set_squelch()"); } int RIG_IC7000::get_squelch() { std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get squelch"); ret = waitFOR(9, "get sql"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) * 100 / 255); } return progStatus.squelch; } void RIG_IC7000::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((int)(val * 255 / 100), 3)); cmd.append( post ); waitFB("set power"); isett("set_power_control()"); } double RIG_IC7000::get_power_control() { std::string cstr = "\x14\x0A"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr).append(post); get_trace(1, "get power"); ret = waitFOR(9, "get power"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } return progStatus.power_level; } int RIG_IC7000::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7000::get_power_out() { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get pout")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7000::get_alc() { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7000::get_mic_gain() { std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get micgain"); ret = waitFOR(9, "get mic"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_IC7000::set_mic_gain(int val) { val = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); isett("set_mic_gain()"); } void RIG_IC7000::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7000::set_notch(bool on, int val) { int notch = (int)(val * 256.0 / 3000.0); cmd = pre_to; cmd.append("\x16\x48"); cmd += on ? '\x01' : '\x00'; cmd.append(post); waitFB("set notch"); isett("set_notc()"); cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(notch,3)); cmd.append(post); waitFB("set notch val"); isett("set_notch_val()"); } bool RIG_IC7000::get_notch(int &val) { bool on = false; val = 0; std::string cstr = "\x16\x48"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get notch"); ret = waitFOR(8, "get notch"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) on = replystr[p + 6]; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); get_trace(1, "get notch value"); ret = waitFOR(9, "notch val"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)ceil(fm_bcd(replystr.substr(p+6),3) * 3000.0 / 255.0); } } return on; } void RIG_IC7000::get_notch_min_max_step(int &min, int &max, int &step) { min = 0; max = 3000; step = 20; } void RIG_IC7000::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); isett("set_noise()"); } int RIG_IC7000::get_noise() { std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } void RIG_IC7000::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB("set NR"); isett("set_noise_reduction()"); } int RIG_IC7000::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get noise reduction"); ret = waitFOR(8, "get NR"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] == 0x01 ? 1 : 0); } return 0; } // 0 < val < 100 void RIG_IC7000::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append(post); waitFB("set NR val"); isett("set_noise_reduction_val()"); } int RIG_IC7000::get_noise_reduction_val() { std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get noise reduction value"); ret = waitFOR(9, "get NR val"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_IC7000::set_compression(int on, int val) { if (on) { cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); isett("set compression ON"); cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 10, 3)); // 0 - 10 cmd.append( post ); waitFB("set comp level"); isett("set compression level"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); isett("set_commpression OFF"); } } // Tranceiver PTT on/off void RIG_IC7000::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); isett("set PTT"); ptt_ = val; } int RIG_IC7000::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); get_trace(1, "get PTT"); ret = waitFOR(8, "get PTT"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } void RIG_IC7000::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); isett("set PBT inner"); } void RIG_IC7000::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); isett("set PBT outer"); } int RIG_IC7000::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get pbt inner"); ret = waitFOR(9, "get pbt inner"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } return val; } int RIG_IC7000::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get pbt outer"); ret = waitFOR(9, "get pbt outer"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } return val; } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC7000::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); get_trace(1, "get band stack"); ret = waitFOR(23, "get band stack"); igett(""); if (ret) { size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } } void RIG_IC7000::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); isett("set band selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); get_trace(1, "get band stack"); ret = waitFOR(23, "get band stack"); igett(""); } std::vector& RIG_IC7000::bwtable(int m) { switch (m) { case AM7000: case AMD7000: return IC7000_AMwidths; break; case DV7000: case FM7000: case WFM7000: case FMD7000: return IC7000_SSB_CWwidths; break; case RTTY7000: case RTTYR7000: return IC7000_RTTYwidths; break; case CW7000: case CWR7000: case USB7000: case LSB7000: case USBD7000: case LSBD7000: return IC7000_SSB_CWwidths; break; default: return IC7000_SSB_CWwidths; break; } return IC7000_SSB_CWwidths; } flrig-2.0.04/src/rigs/icom/IC718.cxx0000664000175000017500000003266514502720327013602 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC718.h" #include "support.h" bool DEBUG_718 = true; //============================================================================= // IC-718 // const char IC718name_[] = "IC-718"; static std::vectorIC718modes_; static const char *vIC718modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "CW-R", "RTTY-R"}; const char IC718_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U', 'U'}; static std::vectorIC718_widths; static const char *vIC718_widths[] = { "Wide", "Med", "Narr"}; static int IC718_bw_vals[] = {1,2,3,WVALS_LIMIT}; static GUI IC718_widgetsdgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnNR, 214, 105, 50 }, { (Fl_Widget *)sldrNR, 266, 105, 156 }, { (Fl_Widget *)sldrMICGAIN,266, 125, 156 }, { (Fl_Widget *)sldrPOWER, 266, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_IC718::RIG_IC718() { name_ = IC718name_; modes_ = IC718modes_; _mode_type = IC718_mode_type; bandwidths_ = IC718_widths; bw_vals_ = IC718_bw_vals; widgets = IC718_widgetsdgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; filter_nbr = 1; has_smeter = has_power_control = has_volume_control = has_mode_control = has_bandwidth_control = has_micgain_control = has_attenuator_control = has_preamp_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_auto_notch = has_rf_control = has_split = has_compON = has_extras = has_vox_onoff = true; defaultCIV = 0x5E; adjustCIV(defaultCIV); precision = 1; ndigits = 8; }; //============================================================================= void RIG_IC718::initialize() { VECTOR (IC718modes_, vIC718modes_); VECTOR (IC718_widths, vIC718_widths); modes_ = IC718modes_; _mode_type = IC718_mode_type; bandwidths_ = IC718_widths; bw_vals_ = IC718_bw_vals; IC718_widgetsdgets[0].W = btnVol; IC718_widgetsdgets[1].W = sldrVOLUME; IC718_widgetsdgets[2].W = sldrRFGAIN; IC718_widgetsdgets[3].W = btnNR; IC718_widgetsdgets[4].W = sldrNR; IC718_widgetsdgets[5].W = sldrMICGAIN; IC718_widgetsdgets[6].W = sldrPOWER; } int RIG_IC718::adjust_bandwidth(int m) { return 0; } void RIG_IC718::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); waitFB("sel A"); } void RIG_IC718::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); waitFB("sel B"); } bool RIG_IC718::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC718::get_vfoA () { if (inuse == onB) return A.freq; cmd = pre_to; cmd += '\x03'; cmd.append( post ); std::string resp = pre_fm; resp += '\x03'; if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_IC718::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); } unsigned long long RIG_IC718::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return B.freq; } void RIG_IC718::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); } // Volume control val 0 ... 100 void RIG_IC718::set_volume_control(int val) { int ICvol = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); } int RIG_IC718::get_volume_control() { cmd = pre_to; cmd.append("\x14\x01"); cmd.append( post ); std::string resp = pre_fm; resp.append("\x14\x01"); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if ( p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) * 100 / 255); } return 0; } void RIG_IC718::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int RIG_IC718::get_smeter() { cmd = pre_to; cmd.append("\x15\x02"); cmd.append( post ); std::string resp = pre_fm; resp.append("\x15\x02"); int mtr = 0; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(1.3 * mtr - 36.0); if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; return (mtr * 100 / 255); } } return -1; } void RIG_IC718::set_attenuator(int val) { atten_level = val; cmd = pre_to; cmd += '\x11'; cmd += val ? '\x20' : '\x00'; cmd.append( post ); waitFB("set att"); } void RIG_IC718::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); } int RIG_IC718::get_noise() { cmd = pre_to; cmd.append("\x16\x22"); cmd.append(post); std::string resp = pre_fm; resp.append("\x16\x22"); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } void RIG_IC718::set_nb_level(int val) { } int RIG_IC718::get_nb_level() { return 0; } void RIG_IC718::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set nr"); } int RIG_IC718::get_noise_reduction() { cmd = pre_to; cmd.append("\x16\x40"); cmd.append(post); std::string resp = pre_fm; resp.append("\x16\x40"); if (waitFOR(8, "get nr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } void RIG_IC718::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val = val * 16 + 8; cmd.append(to_bcd(val, 3)); cmd.append(post); waitFB("set NRval"); } int RIG_IC718::get_noise_reduction_val() { int val = 0; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = fm_bcd(replystr.substr(p+6), 3); val = (val - 8) / 16; } return val; } void RIG_IC718::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char)val; cmd.append( post ); waitFB("set pre"); } int RIG_IC718::get_preamp() { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd.append( post ); std::string resp = pre_fm; resp += '\x16'; resp += '\x02'; if (waitFOR(8, "get pre")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { preamp_level = replystr[p+6]; } } return 0; } const char *RIG_IC718::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "P ON"; break; } return "PRE"; } const char *RIG_IC718::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } void RIG_IC718::set_rf_gain(int val) { int ICrfg = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(ICrfg, 3)); cmd.append( post ); waitFB("set rf gain"); } int RIG_IC718::get_rf_gain() { cmd = pre_to; cmd.append("\x14\x02").append(post); std::string resp = pre_fm; cmd.append("\x14\x02"); if (waitFOR(9, "get rfg")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) * 100 / 255); } return 0; } void RIG_IC718::set_squelch(int val) { int ICsql = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(ICsql, 3)); cmd.append( post ); waitFB("set sql"); } void RIG_IC718::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((int)(val * 255 / 100), 3)); cmd.append( post ); waitFB("set power"); } double RIG_IC718::get_power_control() { std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } return progStatus.power_level; } void RIG_IC718::set_mic_gain(int val) { val = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); } int RIG_IC718::get_mic_gain() { std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_IC718::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC718::set_modeA(int val) { modeA = val; cmd = pre_to; cmd += '\x06'; cmd += val > 4 ? val + 2 : val; cmd += filter_nbr; cmd.append( post ); waitFB("set mode A"); } int RIG_IC718::get_modeA() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get modeA")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { modeA = filA = 0; return modeA; } modeA = replystr[p+5]; if (modeA > 6) modeA -= 2; filter_nbr = replystr[p+6]; } } return modeA; } void RIG_IC718::set_modeB(int val) { modeB = val; cmd = pre_to; cmd += '\x06'; cmd += val > 4 ? val + 2 : val; cmd += filter_nbr; cmd.append( post ); waitFB("set mode A"); } int RIG_IC718::get_modeB() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get modeB")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { modeB = filB = 0; return modeB; } modeB = replystr[p+5]; if (modeB > 6) modeB -= 2; filter_nbr = replystr[p+6]; } } return modeB; } int RIG_IC718::get_modetype(int n) { return _mode_type[n]; } void RIG_IC718::set_bwA(int val) { filter_nbr = val + 1; set_modeA(modeA); } int RIG_IC718::get_bwA() { return filter_nbr - 1; } void RIG_IC718::set_bwB(int val) { filter_nbr = val + 1; set_modeB(modeB); } int RIG_IC718::get_bwB() { return filter_nbr - 1; } // added by Jason Turning - N6WBL void RIG_IC718::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += (unsigned char)val; cmd.append( post ); waitFB("set AN"); } int RIG_IC718::get_auto_notch() { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd.append( post ); std::string resp = pre_fm; resp += '\x16'; resp += '\x41'; if (waitFOR(8, "get AN")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[6] == 0x01) { auto_notch_label("AN", true); return 1; } else { auto_notch_label("AN", false); return 0; } } } return 0; } void RIG_IC718::set_compression(int on, int val) { if (on) { cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set compON"); } else { cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set compOFF"); } } void RIG_IC718::set_vox_onoff() { if (progStatus.vox_onoff) { cmd = pre_to; cmd.append("\x16\x46"); cmd += '\x01'; cmd.append(post); waitFB("set voxON"); } else { cmd = pre_to; cmd.append("\x16\x46"); cmd += '\x00'; cmd.append(post); waitFB("set voxOFF"); } } void RIG_IC718::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); } int RIG_IC718::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); if (waitFOR(7, "get split")) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } return split; } // N6WBL flrig-2.0.04/src/rigs/icom/IC706MKIIG.cxx0000664000175000017500000002166114502720327014352 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC706MKIIG.h" //============================================================================= // IC-706MKIIG // // optional filter std::strings // "EMPTY", "NARR", "NORM", "WIDE", "MED", // "FL-101", "FL-232", "FL-100", "FL-223", "FL-272", "FL-103", "FL-94" const char IC706MKIIGname_[] = "IC-706MKIIG"; static std::vectorIC706MKIIGmodes_; static const char *vIC706MKIIGmodes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "WFM"}; enum { LSB706, USB706, AM706, CW706, RTTY706, FM706, WFM706 }; const char IC706MKIIG_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U', 'U'}; static std::vectorIC706MKIIG_ssb_cw_rtty_bws; static const char *vIC706MKIIG_ssb_cw_rtty_bws[] = { "WIDE", "NORMAL", "NARROW"}; static int IC706MKIIG_vals_ssb_cw_rtty_bws[] = { 1, 2, 3, WVALS_LIMIT }; static std::vectorIC706MKIIG_am_fm_bws; static const char *vIC706MKIIG_am_fm_bws[] = { "NORMAL", "NARROW"}; static int IC706MKIIG_vals_am_fm_bws[] = { 1, 2, WVALS_LIMIT }; static std::vectorIC706MKIIG_wfm_bws; static const char *vIC706MKIIG_wfm_bws[] = { "FIXED"}; static int IC706MKIIG_vals_wfm_bws[] = { 1, WVALS_LIMIT}; RIG_IC706MKIIG::RIG_IC706MKIIG() { name_ = IC706MKIIGname_; modes_ = IC706MKIIGmodes_; bandwidths_ = IC706MKIIG_ssb_cw_rtty_bws; bw_vals_ = IC706MKIIG_vals_ssb_cw_rtty_bws; _mode_type = IC706MKIIG_mode_type; serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; def_freq = freqA = freqB = A.freq = B.imode = 14070000ULL; def_mode = modeA = modeB = A.imode = B.imode = 1; def_bw = bwA = bwB = A.iBW = B.iBW = 0; filter_nbr = 0; has_mode_control = true; has_bandwidth_control = true; // has_split = true; has_smeter = true; has_mode_control = true; has_attenuator_control = true; defaultCIV = 0x58; adjustCIV(defaultCIV); precision = 1; ndigits = 9; }; //============================================================================= void RIG_IC706MKIIG::initialize() { VECTOR (IC706MKIIGmodes_, vIC706MKIIGmodes_); VECTOR (IC706MKIIG_ssb_cw_rtty_bws, vIC706MKIIG_ssb_cw_rtty_bws); VECTOR (IC706MKIIG_am_fm_bws, vIC706MKIIG_am_fm_bws); VECTOR (IC706MKIIG_wfm_bws, vIC706MKIIG_wfm_bws); modes_ = IC706MKIIGmodes_; bandwidths_ = IC706MKIIG_ssb_cw_rtty_bws; bw_vals_ = IC706MKIIG_vals_ssb_cw_rtty_bws; _mode_type = IC706MKIIG_mode_type; if (progStatus.use706filters) { if (!progStatus.ssb_cw_wide.empty()) IC706MKIIG_ssb_cw_rtty_bws[0] = progStatus.ssb_cw_wide.c_str(); if (!progStatus.ssb_cw_normal.empty()) IC706MKIIG_ssb_cw_rtty_bws[1] = progStatus.ssb_cw_normal.c_str(); if (!progStatus.ssb_cw_narrow.empty()) IC706MKIIG_ssb_cw_rtty_bws[2] = progStatus.ssb_cw_narrow.c_str(); } else { IC706MKIIG_ssb_cw_rtty_bws.clear(); IC706MKIIG_ssb_cw_rtty_bws.push_back("FIXED"); IC706MKIIG_vals_ssb_cw_rtty_bws[0] = 1; IC706MKIIG_vals_ssb_cw_rtty_bws[1] = WVALS_LIMIT; } } void RIG_IC706MKIIG::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); waitFB("select A"); inuse = onA; } void RIG_IC706MKIIG::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); waitFB("select B"); inuse = onB; } bool RIG_IC706MKIIG::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC706MKIIG::get_vfoA () { if (inuse == onB) return A.freq; cmd = pre_to; cmd += '\x03'; cmd.append( post ); std::string resp = pre_fm; resp += '\x03'; if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_IC706MKIIG::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); } unsigned long long RIG_IC706MKIIG::get_vfoB () { if (inuse == onA) return B.freq; cmd = pre_to; cmd += '\x03'; cmd.append( post ); std::string resp = pre_fm; resp += '\x03'; if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return B.freq; } void RIG_IC706MKIIG::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); } //void RIG_IC706MKIIG::set_split(bool b) //{ // cmd = pre_to; // cmd += 0x0F; // cmd += b ? 0x01 : 0x00; // cmd.append( post ); // waitFB("set split"); //} // When wide or normal operation is available, // add “00” for wide operation or // “01” for normal operation; // When normal or narrow operation is available, // add “00” for normal operation or // “01” for narrow operation; // When wide, normal and narrow operation is available, // add “00” for wide operation, // “01” for normal operation // and “02” for narrow void RIG_IC706MKIIG::set_modeA(int val) { modeA = val; cmd = pre_to; cmd += 0x06; cmd += val; switch (val) { case AM706: case FM706: cmd += IC706MKIIG_vals_am_fm_bws[filter_nbr]; break; case WFM706: cmd += IC706MKIIG_vals_wfm_bws[filter_nbr]; break; case LSB706: case USB706: case CW706: case RTTY706: default: if (progStatus.use706filters) { cmd += IC706MKIIG_vals_ssb_cw_rtty_bws[filter_nbr]; } else { // No filters cmd += 0x01; } break; } cmd.append( post ); waitFB("set mode A"); } int RIG_IC706MKIIG::get_modeA() { cmd = pre_to; cmd += 0x04; cmd.append(post); std::string resp = pre_fm; resp += 0x04; if (waitFOR(8, "get mode A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { modeA = replystr[p+5]; filter_nbr = replystr[p+6] - 1; } } return modeA; } int RIG_IC706MKIIG::get_modetype(int n) { return _mode_type[n]; } void RIG_IC706MKIIG::set_bwA(int val) { filter_nbr = val; set_modeA(modeA); } int RIG_IC706MKIIG::get_bwA() { return filter_nbr; } int RIG_IC706MKIIG::adjust_bandwidth(int m) { switch (m) { case LSB706: case USB706: case CW706: case RTTY706: bandwidths_ = IC706MKIIG_ssb_cw_rtty_bws; bw_vals_ = IC706MKIIG_vals_ssb_cw_rtty_bws; return 1; break; case AM706: case FM706: bandwidths_ = IC706MKIIG_am_fm_bws; bw_vals_ = IC706MKIIG_vals_am_fm_bws; return 0; break; case WFM706: bandwidths_ = IC706MKIIG_wfm_bws; bw_vals_ = IC706MKIIG_vals_wfm_bws; return 0; break; default: bandwidths_ = IC706MKIIG_ssb_cw_rtty_bws; bw_vals_ = IC706MKIIG_vals_ssb_cw_rtty_bws; return 1; break; } return 0; } int RIG_IC706MKIIG::def_bandwidth(int m) { switch (m) { default: case LSB706: case USB706: case CW706: case RTTY706: return 1; break; case AM706: case FM706: return 0; break; case WFM706: return 0; break; } return 1; } std::vector& RIG_IC706MKIIG::bwtable(int m) { switch (m) { case LSB706: case USB706: case CW706: case RTTY706: return IC706MKIIG_ssb_cw_rtty_bws; break; case AM706: case FM706: return IC706MKIIG_am_fm_bws; break; case WFM706: return IC706MKIIG_wfm_bws; break; default: break; } return IC706MKIIG_ssb_cw_rtty_bws; } void RIG_IC706MKIIG::set_attenuator(int val) { cmd = pre_to; cmd += '\x11'; cmd += val ? '\x20' : '\x00'; cmd.append( post ); waitFB("set att"); } int RIG_IC706MKIIG::get_smeter() { cmd = pre_to; cmd.append("\x15\x02"); cmd.append( post ); std::string resp = pre_fm; resp.append("\x15\x02"); if (waitFOR(9, "get smeter")) { // SHOULD BE 10 bytes size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return -1; } flrig-2.0.04/src/rigs/icom/IC7100.cxx0000664000175000017500000014102714502720327013643 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC7100.h" #include #include #include "tod_clock.h" #include "status.h" #include "support.h" //============================================================================= // IC-7100 /* */ const char IC7100name_[] = "IC-7100"; static int nummodes = 14; // these are only defined in this file // undef'd at end of file #define NUM_FILTERS 3 #define NUM_MODES 14 static int mode_filterA[NUM_MODES] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1}; static int mode_filterB[NUM_MODES] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1}; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorszfilter; static const char *vszfilter[] = {"1", "2", "3"}; enum { LSB7100, USB7100, AM7100, CW7100, RTTY7100, FM7100, WFM7100, CWR7100, RTTYR7100, DV7100, LSBD7100, USBD7100, AMD7100, FMD7100 }; static const char mdval[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 17, 0, 1, 2, 5}; static std::vectorIC7100modes_; static const char *vIC7100modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "WFM", "CW-R", "RTTY-R", "DV", "LSB-D", "USB-D", "AM-D", "FM-D"}; static char IC7100_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U', 'U', 'U', 'U', 'U', 'L', 'U', 'U', 'U' }; const char IC7100_mode_nbr[] = { 0x00, // Select the LSB mode 0x01, // Select the USB mode 0x02, // Select the AM mode 0x03, // Select the CW mode 0x04, // Select the RTTY mode 0x05, // Select the FM mode 0x06, // Select the WFM mode 0x07, // Select the CW-R mode 0x08, // Select the RTTY-R mode 0x17, // Select the DV mode 0x00, // LSB-D 0x01, // USB-D 0x02, // AM-D 0x05 // FM-D }; static std::vectorIC7100_ssb_bws; static const char *vIC7100_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static int IC7100_vals_ssb_bws[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41, WVALS_LIMIT}; static std::vectorIC7100_am_bws; static const char *vIC7100_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7100", "7400", "7100", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000"}; static int IC7100_bw_vals_AM[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50, WVALS_LIMIT}; static std::vectorIC7100_rtty_bws; static const char *vIC7100_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static int IC7100_bw_vals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32, WVALS_LIMIT}; static std::vectorIC7100_fixed_bws; static const char *vIC7100_fixed_bws[] = { "FIXED" }; static int IC7100_fixed_bw_vals[] = { 1, WVALS_LIMIT}; static GUI IC7100_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7100::initialize() { VECTOR (szfilter, vszfilter); VECTOR (IC7100modes_, vIC7100modes_); VECTOR (IC7100_ssb_bws, vIC7100_ssb_bws); VECTOR (IC7100_am_bws, vIC7100_am_bws); VECTOR (IC7100_rtty_bws, vIC7100_rtty_bws); VECTOR (IC7100_fixed_bws, vIC7100_fixed_bws); modes_ = IC7100modes_; bandwidths_ = IC7100_ssb_bws; bw_vals_ = IC7100_vals_ssb_bws; _mode_type = IC7100_mode_type; IC7100_widgets[0].W = btnVol; IC7100_widgets[1].W = sldrVOLUME; IC7100_widgets[2].W = btnAGC; IC7100_widgets[3].W = sldrRFGAIN; IC7100_widgets[4].W = sldrSQUELCH; IC7100_widgets[5].W = btnNR; IC7100_widgets[6].W = sldrNR; IC7100_widgets[7].W = btnLOCK; IC7100_widgets[8].W = sldrINNER; IC7100_widgets[9].W = btnCLRPBT; IC7100_widgets[10].W = sldrOUTER; IC7100_widgets[11].W = btnNotch; IC7100_widgets[12].W = sldrNOTCH; IC7100_widgets[13].W = sldrMICGAIN; IC7100_widgets[14].W = sldrPOWER; btn_icom_select_11->activate(); btn_icom_select_12->activate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC7100::RIG_IC7100() { defaultCIV = 0x88; name_ = IC7100name_; modes_ = IC7100modes_; bandwidths_ = IC7100_ssb_bws; bw_vals_ = IC7100_vals_ssb_bws; _mode_type = IC7100_mode_type; adjustCIV(defaultCIV); serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 2; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = IC7100_widgets; has_smeter = true; has_voltmeter = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_idd_control = true; has_split = true; has_split_AB = true; has_mode_control = true; has_bandwidth_control = true; has_micgain_control = true; has_pbt_controls = true; has_FILTER = true; has_power_control = true; has_volume_control = true; has_rf_control = true; has_sql_control = true; has_noise_control = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_attenuator_control = true; has_preamp_control = true; has_ptt_control = true; has_tune_control = true; has_extras = true; 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; has_vox_gain = true; has_vox_anti = true; has_vox_hang = true; has_band_selection = true; has_compON = true; has_compression = true; has_vfo_adj = true; has_nb_level = true; restore_mbw = true; has_xcvr_auto_on_off = true; can_synch_clock = true; precision = 1; ndigits = 9; A.filter = B.filter = 1; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 1; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 1; B.iBW = 34; CW_sense = 0; // progStatus.gettrace = // progStatus.settrace = // progStatus.serialtrace = // progStatus.rigtrace = // progStatus.xmltrace = // progStatus.trace = false; // progStatus.gettrace = true; // progStatus.settrace = true; // progStatus.serialtrace = true; // progStatus.rigtrace = true; // progStatus.xmltrace = true; // progStatus.trace = true; }; //====================================================================== // IC7100 unique commands //====================================================================== static bool xcvr_is_on = false; void RIG_IC7100::set_xcvr_auto_on() { int nr = progStatus.serial_baudrate == 6 ? 25 : progStatus.serial_baudrate == 5 ? 13 : progStatus.serial_baudrate == 4 ? 7 : progStatus.serial_baudrate == 3 ? 3 : 2; cmd.assign(pre_to); cmd += '\x19'; cmd += '\x00'; cmd.append(post); get_trace(1, "getID()"); if (waitFOR(8, "get ID", 100) == false) { // xcvr must be OFF cmd.append(nr, '\xFE'); cmd.append(pre_to); cmd += '\x18'; cmd += '\x01'; cmd.append(post); RigSerial->failed(0); set_trace(1, "set_xcvr_auto_on()"); if (waitFB("Power ON")) { seth(); cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); int i = 0; for (i = 0; i < 100; i++) { MilliSleep(50); if (waitFOR(8, "get ID") == true) { RigSerial->failed(0); xcvr_is_on = true; return; } update_progress(i); Fl::awake(); } xcvr_is_on = false; RigSerial->failed(1); return; } seth(); RigSerial->failed(1); xcvr_is_on = false; return; } xcvr_is_on = true; } void RIG_IC7100::set_xcvr_auto_off() { cmd.clear(); cmd.append(pre_to); cmd += '\x18'; cmd += '\x00'; cmd.append(post); set_trace(1, "set_xcvr_auto_off()"); waitFB("Power OFF", 200); seth(); } bool RIG_IC7100::check () { if (xcvr_is_on) return true; cmd = pre_to; cmd += '\x19'; cmd += '\x00'; cmd.append(post); set_trace(1, "get ID"); xcvr_is_on = waitFOR(8, "get ID"); seth(); return xcvr_is_on; } static int ret = 0; void RIG_IC7100::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); set_trace(1, "selectA()"); waitFB("select A"); seth(); inuse = onA; } void RIG_IC7100::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); set_trace(1, "selectB()"); waitFB("select B"); seth(); inuse = onB; } unsigned long long RIG_IC7100::get_vfoA () { if (inuse == onB) return A.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1,"get_vfoA()"); ret = waitFOR(11, "get vfo A"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_IC7100::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "set_vfoA()"); waitFB("set vfo A"); seth(); } unsigned long long RIG_IC7100::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1,"get_vfoB()"); ret = waitFOR(11, "get vfo B"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return B.freq; } void RIG_IC7100::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "set_vfoB()"); waitFB("set vfo B"); seth(); } bool RIG_IC7100::can_split() { return true; } void RIG_IC7100::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); set_trace(1, "set_split()"); waitFB(val ? "set split ON" : "set split OFF"); seth(); } int RIG_IC7100::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); get_trace(1,"get_split()"); ret = waitFOR(7, "get split"); geth(); if (ret) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } return split; } // Tranceiver PTT on/off void RIG_IC7100::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); set_trace(1, "set_PTT()"); waitFB("set ptt"); ptt_ = val; seth(); } int RIG_IC7100::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); get_trace(1,"get_PTT()"); ret = waitFOR(8, "get PTT"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } void RIG_IC7100::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7100_mode_nbr[val]; if (val < LSBD7100) cmd += A.filter; cmd.append( post ); set_trace(1, "set_mode_A()"); waitFB("set mode A"); seth(); if (val >= LSBD7100) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += A.filter; cmd.append( post); set_trace(1, "set_date_mode_A()"); waitFB("set data mode A"); seth(); } } int RIG_IC7100::get_modeA() { int md = 0; size_t p = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; get_trace(1,"get_modeA()"); ret = waitFOR(8, "get mode A"); geth(); if (ret) { p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { md = filA = 0; } else { for (md = 0; md < nummodes; md++) if (replystr[p+5] == IC7100_mode_nbr[md]) break; A.filter = replystr[p+6]; if (md == nummodes) { checkresponse(); return A.imode; } } } } else { checkresponse(); return A.imode; } if (md == LSB7100 || md == USB7100 || md == AM7100 || md == FM7100) { cmd = pre_to; cmd.append("\x1a\x06"); cmd.append(post); resp = pre_fm; resp.append("\x1a\x06"); get_trace(1,"get_digital_setting()"); ret = waitFOR(9, "get digital setting"); geth(); if (ret) { p = replystr.rfind(resp); if (p != std::string::npos) { if ((replystr[p+6] & 0x01) == 0x01) { if (md == USB7100) md = USBD7100; else if (md == LSB7100) md = LSBD7100; else if (md == AM7100) md = AMD7100; else if (md == FM7100) md = FMD7100; } } if (replystr[p+7]) A.filter = replystr[p+7]; } } A.imode = md; if (A.filter > 0 && A.filter < 4) mode_filterA[A.imode] = A.filter; get_trace(4, "mode_filterA[", IC7100modes_[md].c_str(), "] = ", szfilter[A.filter-1].c_str()); if (A.imode == CW7100 || A.imode == CWR7100) { cmd.assign(pre_to).append("\x1A\x05"); cmd += '\x00'; cmd += '\x32'; cmd.append(post); resp.assign(pre_fm).append("\x1A\x05"); resp += '\x00'; resp += '\x32'; get_trace(1,"get_CW_sideband()"); ret = waitFOR(10, "get CW sideband"); geth(); if (ret) { p = replystr.rfind(resp); CW_sense = replystr[p + 8]; if (CW_sense) { IC7100_mode_type[CW7100] = 'U'; IC7100_mode_type[CWR7100] = 'L'; } else { IC7100_mode_type[CW7100] = 'L'; IC7100_mode_type[CWR7100] = 'U'; } } } return A.imode; } void RIG_IC7100::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7100_mode_nbr[val]; if (val < LSBD7100) cmd += B.filter; cmd.append( post ); set_trace(1, "set_mode_B()"); waitFB("set mode B"); seth(); if (val >= LSBD7100) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += B.filter; cmd.append( post); set_trace(1, "set_data_modeB()"); waitFB("set data mode B"); seth(); } } int RIG_IC7100::get_modeB() { int md = 0; size_t p = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; get_trace(1,"get_modeB()"); ret = waitFOR(8, "get mode B"); geth(); if (ret) { p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { md = filB = 0; } else { for (md = 0; md < nummodes; md++) if (replystr[p+5] == IC7100_mode_nbr[md]) break; if (md > 6) md -= 2; B.filter = replystr[p+6]; if (md == nummodes) { checkresponse(); return A.imode; } } } } else { checkresponse(); return B.imode; } if (md == LSB7100 || md == USB7100 || md == AM7100 || md == FM7100) { cmd = pre_to; cmd.append("\x1a\x06"); cmd.append(post); resp = pre_fm; resp.append("\x1a\x06"); get_trace(1,"get_digital_setting()"); ret = waitFOR(9, "get digital setting"); geth(); if (ret) { p = replystr.rfind(resp); if (p != std::string::npos) { if ((replystr[p+6] & 0x01) == 0x01) { if (md == USB7100) md = USBD7100; else if (md == LSB7100) md = LSBD7100; else if (md == AM7100) md = AMD7100; else if (md == FM7100) md = FMD7100; } } if (replystr[p+7]) B.filter = replystr[p+7]; } } B.imode = md; if (B.filter > 0 && B.filter < 4) mode_filterA[B.imode] = B.filter; get_trace(4, "mode_filterB[", IC7100modes_[md].c_str(), "] = ", szfilter[A.filter-1].c_str()); if (B.imode == CW7100 || B.imode == CWR7100) { cmd.assign(pre_to).append("\x1A\x05"); cmd += '\x00'; cmd += '\x32'; cmd.append(post); resp.assign(pre_fm).append("\x1A\x05"); resp += '\x00'; resp += '\x32'; get_trace(1,"get_CW_sideband()"); ret = waitFOR(10, "get CW sideband"); geth(); if (ret) { p = replystr.rfind(resp); CW_sense = replystr[p + 8]; if (CW_sense) { IC7100_mode_type[CW7100] = 'U'; IC7100_mode_type[CWR7100] = 'L'; } else { IC7100_mode_type[CW7100] = 'L'; IC7100_mode_type[CWR7100] = 'U'; } } } return B.imode; } int RIG_IC7100::get_bwA() { if (A.imode == DV7100 || A.imode == FM7100 || A.imode == WFM7100 || A.imode == FMD7100) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); get_trace(1,"get_bwA()"); ret = waitFOR(8, "get bw A"); geth(); if (ret) { size_t p = replystr.rfind(resp); A.iBW = fm_bcd(replystr.substr(p+6), 2); } return A.iBW; } void RIG_IC7100::set_bwA(int val) { A.iBW = val; if (A.imode == DV7100 || A.imode == FM7100 || A.imode == WFM7100 || A.imode == FMD7100) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bw A"); } int RIG_IC7100::get_bwB() { if (B.imode == DV7100 || B.imode == FM7100 || B.imode == WFM7100 || B.imode == FMD7100) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); get_trace(1,"get_bwB()"); ret = waitFOR(8, "get bw B"); geth(); if (ret) { size_t p = replystr.rfind(resp); B.iBW = fm_bcd(replystr.substr(p+6), 2); } return B.iBW; } void RIG_IC7100::set_bwB(int val) { B.iBW = val; if (B.imode == DV7100 || B.imode == FM7100 || B.imode == WFM7100 || B.imode == FMD7100) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); waitFB("set bw B"); } std::string RIG_IC7100::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_IC7100::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_IC7100::adjust_bandwidth(int m) { switch (m) { case AM7100: case AMD7100: bandwidths_ = IC7100_am_bws; bw_vals_ = IC7100_bw_vals_AM; return 29; break; case USB7100: case LSB7100: case USBD7100: case LSBD7100: bandwidths_ = IC7100_ssb_bws; bw_vals_ = IC7100_vals_ssb_bws; return 34; break; case DV7100: case FM7100: case WFM7100: case FMD7100: bandwidths_ = IC7100_fixed_bws; bw_vals_ = IC7100_fixed_bw_vals; return 0; break; case RTTY7100: case RTTYR7100: bandwidths_ = IC7100_rtty_bws; bw_vals_ = IC7100_bw_vals_RTTY; return 12; break; case CW7100: case CWR7100: bandwidths_ = IC7100_ssb_bws; bw_vals_ = IC7100_vals_ssb_bws; return 10; break; default: bandwidths_ = IC7100_ssb_bws; bw_vals_ = IC7100_vals_ssb_bws; return 34; } return 0; } std::vector& RIG_IC7100::bwtable(int m) { switch (m) { case AM7100: case AMD7100: return IC7100_am_bws; break; case DV7100: case FM7100: case WFM7100: case FMD7100: return IC7100_fixed_bws; break; case RTTY7100: case RTTYR7100: return IC7100_rtty_bws; break; case CW7100: case CWR7100: case USB7100: case LSB7100: case USBD7100: case LSBD7100: default: return IC7100_ssb_bws; } return IC7100_ssb_bws; } int RIG_IC7100::def_bandwidth(int m) { return adjust_bandwidth(m); } void RIG_IC7100::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set_mic_gain()"); waitFB("set mic gain"); seth(); } int RIG_IC7100::get_mic_gain() { int val = progStatus.volume; std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1,"get_mic_gain()"); ret = waitFOR(9, "get mic gain"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7100::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7100::set_attenuator(int val) { if (val) { atten_level = 1; } else { atten_level = 0; } cmd = pre_to; cmd += '\x11'; cmd += atten_level ? '\x12' : '\x00'; cmd.append( post ); set_trace(1, "set_attenuator()"); waitFB("set att"); seth(); } int RIG_IC7100::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; get_trace(1,"get_attenuator()"); ret = waitFOR(7, "get ATT"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (replystr[p+5] == 0x12) { atten_level = 1; } else { atten_level = 0; } } return atten_level; } int RIG_IC7100::next_preamp() { if (inuse == onA) { if (A.freq > 100000000) { if (preamp_level) return 0; return 1; } else { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } } } else { if (B.freq > 100000000) { if (preamp_level) return 0; return 1; } else { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } } } return 0; } void RIG_IC7100::set_preamp(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; preamp_level = val; if (inuse == onA && A.freq > 100000000 && val > 1) val = 1; if (inuse == onB && B.freq > 100000000 && val > 1) val = 1; cmd += (unsigned char)preamp_level; cmd.append( post ); set_trace(1, "set_preamp()"); waitFB( (preamp_level == 0) ? "set Preamp OFF" : (preamp_level == 1) ? "set Preamp Level 1" : "set Preamp Level 2"); seth(); } int RIG_IC7100::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1,"get_preamp()"); ret = waitFOR(8, "get preamp"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) preamp_level = replystr[p+6]; } return preamp_level; } const char *RIG_IC7100::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_IC7100::ATT_label() { if (atten_level == 1) return "12 dB"; return "ATT"; } void RIG_IC7100::set_compression(int on, int val) { if (on) { cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append( post ); waitFB("set comp"); cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); } } void RIG_IC7100::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; cmd.append( post ); waitFB("set vox OFF"); } } void RIG_IC7100::set_vox_gain() { cmd.assign(pre_to).append("\x1A\x05"); // values 0-255 = 0 - 100% cmd +='\x01'; cmd +='\x63'; cmd.append(to_bcd((int)(progStatus.vox_gain * 2.55), 3)); cmd.append( post ); waitFB("SET vox gain"); } void RIG_IC7100::set_vox_anti() { cmd.assign(pre_to).append("\x1A\x05"); // values 0-255 = 0 - 100% cmd +='\x01'; cmd +='\x64'; cmd.append(to_bcd((int)(progStatus.vox_anti * 2.55), 3)); cmd.append( post ); waitFB("SET anti-vox"); } void RIG_IC7100::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05"); // values 00-20 = 0.0 - 2.0 sec cmd +='\x01'; cmd +='\x65'; cmd.append(to_bcd((int)(progStatus.vox_hang / 10 ), 2)); cmd.append( post ); waitFB("SET vox hang"); } // CW controls void RIG_IC7100::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); // values 0-255 = 6 to 48 WPM cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (48 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); } void RIG_IC7100::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); // values 0-255 cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); } void RIG_IC7100::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); } void RIG_IC7100::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x01'; cmd += '\x32'; cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); set_trace(1, "set_cw_vol()"); waitFB("SET cw sidetone volume"); seth(); } 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); get_trace(1,"get_break_in()"); ret = waitFOR(8, "get break in"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { progStatus.break_in = replystr[p+6]; if (progStatus.break_in == 0) break_in_label("qsk"); else break_in_label("QSK ON"); } } return progStatus.break_in; } void RIG_IC7100::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set_power_control()"); waitFB("set power"); seth(); } double RIG_IC7100::get_power_control() { int val = progStatus.power_level; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); get_trace(1,"get_power_control()"); ret = waitFOR(9, "get power"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7100::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; pmax = max = 100; step = 1; } void RIG_IC7100::set_rf_gain(int val) { if (inuse == onA && (A.imode == DV7100 || A.imode == FM7100 || A.imode == WFM7100 || A.imode == FMD7100)) return; if (inuse == onB && (A.imode == DV7100 || A.imode == FM7100 || A.imode == WFM7100 || A.imode == FMD7100)) return; cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set_rf_gain()"); waitFB("set RF"); seth(); } int RIG_IC7100::get_rf_gain() { if (inuse == onA && (A.imode == DV7100 || A.imode == FM7100 || A.imode == WFM7100 || A.imode == FMD7100)) return progStatus.rfgain; if (inuse == onB && (A.imode == DV7100 || A.imode == FM7100 || A.imode == WFM7100 || A.imode == FMD7100)) return progStatus.rfgain; int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); get_trace(1,"get_rf_gain()"); ret = waitFOR(9, "get RF"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return val; } void RIG_IC7100::get_rf_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } // Volume control val 0 ... 100 void RIG_IC7100::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set_volume_control()"); waitFB("set vol"); seth(); } int RIG_IC7100::get_volume_control() { int val = progStatus.volume; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1,"get_volume_control()"); ret = waitFOR(9, "get vol"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7100::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set_squelch()"); waitFB("set Sqlch"); seth(); } int RIG_IC7100::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1,"get_squelch()"); ret = waitFOR(9, "get squelch"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7100::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } struct meterpair {int mtr; float val;}; static meterpair smtrtbl[] = { {0, 0}, {120, 50}, {241, 100} }; int RIG_IC7100::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; get_trace(1,"get_smeter()"); ret = waitFOR(9, "get smeter"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(smtrtbl) / sizeof(meterpair) - 1; i++) if (mtr >= smtrtbl[i].mtr && mtr < smtrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(smtrtbl[i].val + (smtrtbl[i+1].val - smtrtbl[i].val)*(mtr - smtrtbl[i].mtr)/(smtrtbl[i+1].mtr - smtrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } double RIG_IC7100::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); ret = waitFOR(9, "get voltmeter"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = (2.0 * mtr / 77.0) + 9.82; return val; } } return -1; } double RIG_IC7100::get_idd(void) { get_trace(1, "get_idd()"); std::string cstr = "\x15\x16"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); double mtr= 0; ret = waitFOR(9, "get idd"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = 25.0 * mtr / 241.0; if (mtr > 25) mtr = 25; } } return mtr; } static meterpair pwrtbl[] = { {0, 0.0}, {40, 10.0}, {76, 20.0}, {92, 25.0}, {103, 30.0}, {124, 40.0}, {143, 50.0}, {183, 75.0}, {213, 100.0}, {255, 140.0} }; int RIG_IC7100::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; int val = 0; get_trace(1,"get_power_out()"); ret = waitFOR(9, "get power out"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = hex2val(replystr.substr(p+6, 2)); mtr = std::max(0, std::min(mtr, 255)); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(meterpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; val = (int)ceil(pwrtbl[i].val + (pwrtbl[i+1].val - pwrtbl[i].val)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (val > 100) val = 100; } } return val; } int RIG_IC7100::get_swr() { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; get_trace(1,"get_swr()"); ret = waitFOR(9, "get SWR"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.40); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7100::get_alc() { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; get_trace(1,"get_alc()"); ret = waitFOR(9, "get alc"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /1.2); if (mtr > 100) mtr = 100; } } return mtr; } void RIG_IC7100::set_notch(bool on, int freq) { 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: if (CW_sense) hexval = freq - progStatus.cw_spot_tone; else hexval = progStatus.cw_spot_tone - freq; break; case CWR7100: if (CW_sense) hexval = progStatus.cw_spot_tone - freq; else 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); set_trace(1, "set_notch()"); waitFB("set notch"); seth(); cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(hexval,3)); cmd.append(post); set_trace(1, "set_notch_val()"); waitFB("set notch val"); seth(); } bool RIG_IC7100::get_notch(int &val) { bool on = false; val = 1500; std::string cstr = "\x16\x48"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1,"get_notch()"); ret = waitFOR(8, "get notch"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) on = replystr[p + 6]; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); get_trace(1, "get_notch_val()"); ret = waitFOR(9, "notch val"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { 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: if (CW_sense) val = progStatus.cw_spot_tone + val; else val = progStatus.cw_spot_tone - val; break; case CWR7100: if (CW_sense) val = progStatus.cw_spot_tone - val; else val = progStatus.cw_spot_tone + val; break; } } } } return on; } void RIG_IC7100::get_notch_min_max_step(int &min, int &max, int &step) { 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) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += val ? 0x01 : 0x00; cmd.append( post ); waitFB("set AN"); } int RIG_IC7100::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1,"get_auto_notch()"); ret = waitFOR(8, "get AN"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } void RIG_IC7100::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC7100::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC7100::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1,"get_pbt_inner()"); ret = waitFOR(9, "get pbt inner"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } return val; } int RIG_IC7100::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1,"get_pbt_outer()"); ret = waitFOR(9, "get pbt outer"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } return val; } void RIG_IC7100::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); set_trace(1, "set)noise()"); waitFB("set noise"); seth(); } int RIG_IC7100::get_noise() { std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1,"get_noise()"); ret = waitFOR(8, "get noise"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise; } void RIG_IC7100::set_nb_level(int val) { cmd = pre_to; cmd.append("\x14\x12"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set_nb_level()"); waitFB("set NB level"); seth(); } int RIG_IC7100::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x14\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1,"get_nb_level()"); ret = waitFOR(9, "get NB level"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7100::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); set_trace(1, "set_noise_reduction()"); waitFB("set NR"); seth(); } int RIG_IC7100::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1,"get_noise_reduction()"); ret = waitFOR(8, "get NR"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise_reduction; } void RIG_IC7100::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val *= 16; val += 8; cmd.append(to_bcd(val, 3)); cmd.append(post); set_trace(1, "set_noise_reduction_val"); waitFB("set NRval"); seth(); } int RIG_IC7100::get_noise_reduction_val() { int val = 0; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1,"get_noise_reduction_val()"); ret = waitFOR(9, "get NRval"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val -= 8; val /= 16; } } return val; } // Read/Write band stack registers // // // ( 0) xFE xFE x88 xE0 x1A x01 band stack command // ( 6) x01 frequency band code // ( 7) x01 register code // ( 8) x00 x00 x91 x01 x00 frequency // (13) x03 x02 operating mode / filter setting // (15) x00 data mode 0x00 / 0x01 // (16) x00 duplex tone setting // (17) x00 digital squelch setting // (18) x00 x08 x85 repeater tone frequency // (21) x00 x08 x85 tone squelch frequency // (24) x00 x00 x23 dtcs code // (27) x00 digital squelch code // (28) x00 x50 x00 duplex offset frequency // (31) x43 x51 x43 x51 x43 x51 x20 x20 destination call, 8 chars "CKCKCK " // (39) x20 x20 x20 x20 x20 x20 x20 x20 x20 x20 x20 x20 x20 x20 x20 x20 memory name, 16 chars // (55) xFD void RIG_IC7100::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); get_trace(1,"get_band_selection()"); ret = waitFOR(56, "get band stack"); geth(); if (ret) { size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p + 8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; if ((bandmode == 0) && banddata) bandmode = 10; if ((bandmode == 1) && banddata) bandmode = 11; if ((bandmode == 2) && banddata) bandmode = 12; if ((bandmode == 5) && banddata) bandmode = 13; int tone = fm_bcd(replystr.substr(p + 18, 3), 6); tTONE = 0; for (size_t n = 0; n < sizeof(PL_tones) / sizeof(*PL_tones); n++) { if (tone == PL_tones[n]) { tTONE = n; break; } } tone = fm_bcd(replystr.substr(p + 21, 3), 6); rTONE = 0; for (size_t n = 0; n < sizeof(PL_tones) / sizeof(*PL_tones); n++) { if (tone == PL_tones[n]) { rTONE = n; break; } } if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } } void RIG_IC7100::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? B.filter : A.filter); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); // byte 8 cmd += IC7100_mode_nbr[mode]; // byte 13 cmd += fil; // byte 14 if (mode >= 9) // byte 15 data mode cmd += '\x01'; else cmd += '\x00'; cmd += '\x00'; // byte 16 duplex tone cmd += '\x00'; // byte 17 dig squelch cmd.append(to_bcd(PL_tones[tTONE], 6)); // byte 18 repeater tone cmd.append(to_bcd(PL_tones[rTONE], 6)); // byte 21 tone squelch freq cmd += '\x00'; cmd += '\x00'; cmd += '\x23'; // byte 24 dtcs tone cmd += '\x00'; // byte 27 digitital squelch code cmd += '\x00'; cmd += '\x60'; cmd += '\x00'; // byte 28 duplex offset frequency cmd.append("CKCKCK "); // byte 31 destination call cmd.append(" "); // byte 39 memory name, 16 chars cmd.append(post); set_trace(1, "set band selection"); waitFB("set_band_selection"); seth(); } void RIG_IC7100::setVfoAdj(double v) { vfo_ = v; cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x47'; cmd.append(bcd255(int(v))); cmd.append(post); set_trace(1, "set vfo adjust"); waitFB("SET vfo adjust"); seth(); } double RIG_IC7100::getVfoAdj() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x47'; cmd.append(post); get_trace(1, "getVfoAdj"); ret = waitFOR(11, "get vfo adj"); geth(); if (ret) { size_t p = replystr.find(pre_fm); if (p != std::string::npos) { vfo_ = num100(replystr.substr(p+8)); } } return vfo_; } int RIG_IC7100::get_FILT(int mode) { if (inuse == onB) return mode_filterB[mode]; return mode_filterA[mode]; } void RIG_IC7100::set_FILT(int filter) { if (filter < 1 || filter > 3) return; if (inuse == onB) { B.filter = filter; mode_filterB[B.imode] = filter; cmd = pre_to; cmd += '\x06'; cmd += mdval[B.imode]; if (B.imode < LSBD7100) cmd += filter; cmd.append( post ); set_trace(1, "set mode/filter B"); waitFB("set mode/filter B"); seth(); if (B.imode >= LSBD7100) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += filter; cmd.append( post); set_trace(1, "set mode B"); waitFB("set data mode B"); seth(); } } else { A.filter = filter; mode_filterA[A.imode] = filter; cmd = pre_to; cmd += '\x06'; cmd += mdval[A.imode]; if (A.imode < LSBD7100) cmd += filter; cmd.append( post ); set_trace(1, "set filter A"); waitFB("set filter A "); seth(); if (A.imode >= LSBD7100) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += filter; cmd.append( post); set_trace(1, "set data mode A"); waitFB("set data mode A"); seth(); } } } const char *RIG_IC7100::FILT(int val) { if (val < 1) val = 1; if (val > 3) val = 3; return szfilter[val - 1].c_str(); } const char *RIG_IC7100::nextFILT() { int val = A.filter; if (inuse == onB) val = B.filter; val++; if (val > 3) val = 1; set_FILT(val); return szfilter[val - 1].c_str(); } void RIG_IC7100::set_FILTERS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterB[i]; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } } std::string RIG_IC7100::get_FILTERS() { for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_filterA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_filterB[i] << " "; return s.str(); } // --------------------------------------------------------------------- // set date and time // 1A 05 00 95 HH MM : set time // 1A 05 00 94 YY YY MM DD : set date // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_IC7100::sync_date(char *dt) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x01'; cmd += '\x20'; unsigned char val; val = ((dt[0] - '0') << 4) + (dt[1] - '0'); cmd += (val & 0xFF); val = ((dt[2] - '0') << 4) + (dt[3] - '0'); cmd += (val & 0xFF); val = ((dt[4] - '0') << 4) + (dt[5] - '0'); cmd += (val & 0xFF); val = ((dt[6] - '0') << 4) + (dt[7] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_IC7100::sync_clock(char *tm) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x01'; cmd += '\x21'; unsigned char val; val = ((tm[0] - '0') << 4) + (tm[1] - '0'); cmd += (val & 0xFF); val = ((tm[3] - '0') << 4) + (tm[4] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } flrig-2.0.04/src/rigs/icom/ICR71.cxx0000664000175000017500000000755014502720327013627 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // aunsigned long int with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/ICR71.h" //============================================================================= // IC-R71 // const char ICR71name_[] = "IC-R71"; static std::vectorICR71modes_; static const char *vICR71modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM"}; const char ICR71_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U' }; //static std::vectorICR71_widths; //static const char *vICR71_widths[] = //{ "NARR", "WIDE"}; //static int ICR71_bw_vals[] = {1,2, WVALS_LIMIT}; RIG_ICR71::RIG_ICR71() { name_ = ICR71name_; modes_ = ICR71modes_; _mode_type = ICR71_mode_type; // bandwidths_ = ICR71_widths; // bw_vals_ = ICR71_bw_vals; serial_baudrate = BR9600; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; // bwA = 0; has_mode_control = true; has_smeter = true; has_power_out = false; has_voltmeter = false; defaultCIV = 0x1A; adjustCIV(defaultCIV); precision = 10; ndigits = 7; }; //============================================================================= void RIG_ICR71::initialize() { VECTOR (ICR71modes_, vICR71modes_); modes_ = ICR71modes_; _mode_type = ICR71_mode_type; } bool RIG_ICR71::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(10, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_ICR71::get_vfoA () { std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(10, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else freqA = fm_bcd_be(replystr.substr(p+5), 8); } } return freqA; } void RIG_ICR71::set_vfoA (unsigned long long freq) { freqA = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 8 ) ); cmd.append( post ); waitFB("set vfo A"); } int RIG_ICR71::get_smeter() { cmd = pre_to; cmd.append("\x15\x02").append(post); std::string resp = pre_fm; resp.append("\x15\x02"); if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) * 100 / 255); } return -1; } void RIG_ICR71::set_modeA(int val) { modeA = val; cmd = pre_to; cmd += "\x06"; cmd += modeA; // set the mode byte cmd.append( post ); waitFB("set mode"); } int RIG_ICR71::get_modeA() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(7, "get mode")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { modeA = 0; } else { modeA = replystr[p+5]; } } } return modeA; } flrig-2.0.04/src/rigs/icom/IC7600.cxx0000664000175000017500000011317214502720327013650 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2022 // David Freese, W1HKJ // Andrew Hart, VE3NVK (ALH) // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC7600.h" #include "support.h" bool IC7600_DEBUG = true; //============================================================================= // IC-7600 const char IC7600name_[] = "IC-7600"; static std::vectorIC7600modes_; static const char *vIC7600modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "PSK", "PSK-R", "LSB-D1", "LSB-D2", "LSB-D3", "USB-D1", "USB-D2", "USB-D3"}; const char IC7600_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'U', 'L', 'L', 'L', 'L', 'U', 'U', 'U' }; const char IC7600_mode_nbr[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07, 0x08, 0x12, 0x13, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01 }; static std::vectorIC7600_ssb_bws; static const char *vIC7600_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600" }; static int IC7600_bw_vals_SSB[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40, WVALS_LIMIT}; static std::vectorIC7600_rtty_bws; static const char *vIC7600_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700" }; static int IC7600_bw_vals_RTTY[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31, WVALS_LIMIT}; static std::vectorIC7600_am_bws; static const char *vIC7600_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7600", "7400", "7600", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000" }; static int IC7600_bw_vals_AM[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49 WVALS_LIMIT}; static std::vectorIC7600_fm_bws; static const char *vIC7600_fm_bws[] = { "FIXED" }; static int IC7600_bw_vals_FM[] = { 1, WVALS_LIMIT}; static GUI IC7600_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7600::initialize() { VECTOR (IC7600modes_, vIC7600modes_); VECTOR (IC7600_ssb_bws, vIC7600_ssb_bws); VECTOR (IC7600_rtty_bws, vIC7600_rtty_bws); VECTOR (IC7600_am_bws, vIC7600_am_bws); VECTOR (IC7600_fm_bws, vIC7600_fm_bws); modes_ = IC7600modes_; bandwidths_ = IC7600_ssb_bws; bw_vals_ = IC7600_bw_vals_SSB; IC7600_widgets[0].W = btnVol; IC7600_widgets[1].W = sldrVOLUME; IC7600_widgets[2].W = btnAGC; IC7600_widgets[3].W = sldrRFGAIN; IC7600_widgets[4].W = sldrSQUELCH; IC7600_widgets[5].W = btnNR; IC7600_widgets[6].W = sldrNR; IC7600_widgets[7].W = btnLOCK; IC7600_widgets[8].W = sldrINNER; IC7600_widgets[9].W = btnCLRPBT; IC7600_widgets[10].W = sldrOUTER; IC7600_widgets[11].W = btnNotch; IC7600_widgets[12].W = sldrNOTCH; IC7600_widgets[13].W = sldrMICGAIN; IC7600_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC7600::RIG_IC7600() { defaultCIV = 0x7A; adjustCIV(defaultCIV); name_ = IC7600name_; modes_ = IC7600modes_; bandwidths_ = IC7600_ssb_bws; bw_vals_ = IC7600_bw_vals_SSB; // serial_write_delay = 0; // serial_post_write_delay = 0; _mode_type = IC7600_mode_type; widgets = IC7600_widgets; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 13; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 13; B.iBW = 34; has_extras = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_vox_onoff = true; has_vox_gain = true; has_vox_anti = true; has_vox_hang = true; has_compON = true; has_compression = true; has_split = true; has_split_AB = true; has_micgain_control = true; has_bandwidth_control = true; has_smeter = true; has_voltmeter = true; has_power_out = has_swr_control = has_alc_control = has_idd_control = has_sql_control = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_attenuator_control = true; has_preamp_control = true; has_noise_control = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_pbt_controls = true; has_FILTER = true; has_rf_control = true; has_ptt_control = true; has_tune_control = true; ICOMmainsub = true; has_band_selection = true; can_synch_clock = true; precision = 1; ndigits = 8; filA = filB = 1; }; //====================================================================== // IC7600 unique commands //====================================================================== static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } void RIG_IC7600::selectA() { cmd.assign(pre_to).append("\x07\xD0").append(post); set_trace(2, "selectA()", str2hex(cmd.c_str(), cmd.length())); waitFB("select A"); inuse = onA; } void RIG_IC7600::selectB() { cmd.assign(pre_to).append("\x07\xD1").append(post); set_trace(2, "selectB()", str2hex(cmd.c_str(), cmd.length())); waitFB("select B"); inuse = onB; } bool RIG_IC7600::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC7600::get_vfoA () { if (inuse == onB) return A.freq; std::string resp; cmd.assign(pre_to).append("\x03").append( post ); if (waitFOR(11, "get vfo A")) { resp.assign(pre_fm).append("\x03"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } get_trace(2, "get_vfoA()", str2hex(replystr.c_str(), replystr.length())); return A.freq; } void RIG_IC7600::set_vfoA (unsigned long long freq) { A.freq = freq; cmd.assign(pre_to).append("\x05"); cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(2, "set_vfoA()", str2hex(cmd.c_str(), cmd.length())); waitFB("set vfo A"); } unsigned long long RIG_IC7600::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; cmd.assign(pre_to).append("\x03").append(post); if (waitFOR(11, "get vfo B")) { resp.assign(pre_fm).append("\x03"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } get_trace(2, "get_vfoB()", str2hex(replystr.c_str(), replystr.length())); return B.freq; } void RIG_IC7600::set_vfoB (unsigned long long freq) { B.freq = freq; cmd.assign(pre_to).append("\x05"); cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(2, "set_vfoB()", str2hex(cmd.c_str(), cmd.length())); waitFB("set vfo B"); } bool RIG_IC7600::can_split() { return true; } void RIG_IC7600::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); set_trace(2, "set_split()", str2hex(cmd.c_str(), cmd.length())); waitFB(val ? "set split ON" : "set split OFF"); } int RIG_IC7600::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); if (waitFOR(7, "get split")) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } get_trace(2, "get_split()", str2hex(replystr.c_str(), replystr.length())); return split; } void RIG_IC7600::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7600_mode_nbr[val]; cmd += filA; cmd.append( post ); waitFB("set modeA"); set_trace(4, "set mode A[", IC7600modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); // digital set / clear if (val >= 10) { cmd = pre_to; cmd.append("\x1A\x06"); switch (val) { case 10 : case 13 : cmd.append("\x01\x01"); break; case 11 : case 14 : cmd.append("\x02\x01"); break; case 12 : case 15 : cmd.append("\x03\x01"); break; } cmd.append( post); waitFB("set digital mode ON/OFF"); set_trace(2, "set_data_modeA()", str2hex(replystr.c_str(), replystr.length())); } } static const char *szfilter[] = {"1", "2", "3"}; int RIG_IC7600::get_modeA() { int md = 0; std::string resp; size_t p; cmd.assign(pre_to).append("\x04").append(post); if (waitFOR(8, "get mode A")) { resp.assign(pre_fm).append("\x04"); p = replystr.rfind(resp); if (p == std::string::npos) return A.imode; if (replystr[p+5] == -1) { A.imode = filA = 0; return A.imode; } for (md = 0; md < 10; md++) { if (replystr[p+5] == IC7600_mode_nbr[md]) { A.imode = md; filA = replystr[p+6]; get_trace(2, "get_modeA()", str2hex(replystr.c_str(), replystr.length())); if (A.imode < 2) { cmd.assign(pre_to).append("\x1A\x06").append(post); if (waitFOR(9, "data mode?")) { resp.assign(pre_fm).append("\x1A\x06"); p = replystr.rfind(resp); if (p == std::string::npos) return A.imode; int dmode = replystr[p+6]; if(dmode != 0) { if (A.imode == 0) A.imode = 9 + dmode; else if (A.imode == 1) A.imode = 12 + dmode; } get_trace(2, "get_data_modeA()", str2hex(replystr.c_str(), replystr.length())); } } } } } if (A.imode > 15) A.imode = 0; return A.imode; } void RIG_IC7600::set_modeB(int val) { B.imode = val; cmd.assign(pre_to).append("\x06"); cmd += IC7600_mode_nbr[val]; cmd += filB; cmd.append( post ); waitFB("set modeB"); set_trace(4, "set mode B[", IC7600modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); // digital set / clear if (val >= 10) { cmd = pre_to; cmd.append("\x1A\x06"); switch (val) { case 10 : case 13 : cmd.append("\x01\x01"); break; case 11 : case 14 : cmd.append("\x02\x01"); break; case 12 : case 15 : cmd.append("\x03\x01"); break; } cmd.append( post); waitFB("set digital mode ON/OFF"); set_trace(2, "set_data_modeB()", str2hex(replystr.c_str(), replystr.length())); } } int RIG_IC7600::get_modeB() { int md = 0; std::string resp; size_t p; cmd.assign(pre_to).append("\x04").append(post); if (waitFOR(8, "get mode B")) { resp.assign(pre_fm).append("\x04"); p = replystr.rfind(resp); if (p == std::string::npos) return B.imode; if (replystr[p+5] == -1) { B.imode = filB = 0; return B.imode; } for (md = 0; md < 10; md++) if (replystr[p+5] == IC7600_mode_nbr[md]) break; if (md == 10) md = 0; B.imode = md; filB = replystr[p+6]; get_trace(2, "get_modeB()", str2hex(replystr.c_str(), replystr.length())); if (B.imode < 2) { cmd.assign(pre_to).append("\x1A\x06").append(post); if (waitFOR(9, "data mode?")) { resp.assign(pre_fm).append("\x1A\x06"); p = replystr.rfind(resp); if (p == std::string::npos) return B.imode; int dmode = replystr[p+6]; if(dmode != 0) { if (B.imode == 0) B.imode = 9 + dmode; else if (B.imode == 1) B.imode = 12 + dmode; } get_trace(2, "get_data_modeB()", str2hex(replystr.c_str(), replystr.length())); } } } if (B.imode > 15) B.imode = 0; return B.imode; } int RIG_IC7600::get_bwA() { if (A.imode == 5) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); if (waitFOR(8, "get_bwA")) { std::string resp = pre_fm; resp.append("\x1A\x02"); size_t p = replystr.find(resp); if (p != std::string::npos) A.iBW = fm_bcd(replystr.substr(p+6), 2); } return A.iBW; } void RIG_IC7600::set_bwA(int val) { A.iBW = val; if (A.imode == 5) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bwA"); } int RIG_IC7600::get_bwB() { if (B.imode == 5) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); if (waitFOR(8, "get_bwB")) { std::string resp = pre_fm; resp.append("\x1A\x02"); size_t p = replystr.find(resp); if (p != std::string::npos) B.iBW = fm_bcd(replystr.substr(p+6), 2); } return B.iBW; } void RIG_IC7600::set_bwB(int val) { B.iBW = val; if (B.imode == 5) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bwB"); } int RIG_IC7600::adjust_bandwidth(int m) { int bw = 0; switch (m) { case 2: // AM bandwidths_ = IC7600_am_bws; bw_vals_ = IC7600_bw_vals_AM; bw = 19; break; case 5: // FM bandwidths_ = IC7600_fm_bws; bw_vals_ = IC7600_bw_vals_FM; bw = 0; break; case 4: case 7: // RTTY bandwidths_ = IC7600_rtty_bws; bw_vals_ = IC7600_bw_vals_RTTY; bw = 12; break; case 3: case 6: // CW bandwidths_ = IC7600_ssb_bws; bw_vals_ = IC7600_bw_vals_SSB; bw = 12; break; case 8: case 9: // PKT bandwidths_ = IC7600_ssb_bws; bw_vals_ = IC7600_bw_vals_SSB; bw = 34; break; case 0: case 1: // SSB case 10: case 11 : case 12 : case 13: case 14 : case 15 : default: bandwidths_ = IC7600_ssb_bws; bw_vals_ = IC7600_bw_vals_SSB; bw = 34; } return bw; } std::vector& RIG_IC7600::bwtable(int m) { switch (m) { case 2: // AM return IC7600_am_bws; break; case 5: // FM return IC7600_fm_bws; break; case 4: case 7: // RTTY return IC7600_rtty_bws; break; case 3: case 6: // CW case 8: case 9: // PKT case 0: case 1: // SSB case 10: case 11 : case 12 : case 13: case 14 : case 15 : default: return IC7600_ssb_bws; } return IC7600_ssb_bws; } int RIG_IC7600::def_bandwidth(int m) { int bw = 0; switch (m) { case 2: // AM bw = 19; break; case 5: // FM bw = 0; break; case 4: case 7: // RTTY bw = 12; break; case 3: case 6: // CW bw = 12; break; case 8: case 9: // PKT bw = 34; break; case 0: case 1: // SSB case 10: case 11 : case 12 : case 13: case 14 : case 15 : default: bw = 34; } return bw; } int RIG_IC7600::get_mic_gain() { int val = 0; std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } minmax(0,100,val); get_trace(2, "get_mic_gain()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC7600::set_mic_gain(int v) { int ICvol = (int)(v * 255 / 100); minmax(0, 255, ICvol); if (!progStatus.USBaudio) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); } else { cmd = pre_to; cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x29'; cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); } waitFB("set mic gain"); set_trace(2, "set_mic_gain()", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC7600::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // alh added ++++++++++++++++++++++++++++ void RIG_IC7600::set_compression(int on, int val) { if (on) { cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append( post ); waitFB("set comp"); cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); } } void RIG_IC7600::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; // ALH cmd.append( post ); waitFB("set vox OFF"); } } void RIG_IC7600::set_vox_gain() { cmd.assign(pre_to).append("\x1A\x05"); // ALH values 0-255 cmd +='\x01'; cmd +='\x65'; cmd.append(to_bcd((int)(progStatus.vox_gain * 2.55), 3)); cmd.append( post ); waitFB("SET vox gain"); } void RIG_IC7600::set_vox_anti() { cmd.assign(pre_to).append("\x1A\x05"); //ALH values 0-255 cmd +='\x01'; cmd +='\x66'; cmd.append(to_bcd((int)(progStatus.vox_anti * 2.55), 3)); cmd.append( post ); waitFB("SET anti-vox"); } void RIG_IC7600::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05"); //ALH values 00-20 = 0.0 - 2.0 sec cmd +='\x01'; // ALH cmd +='\x67'; // ALH cmd.append(to_bcd((int)(progStatus.vox_hang / 10 ), 2)); cmd.append( post ); waitFB("SET vox hang"); } // CW controls void RIG_IC7600::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); // values 0-255 cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (60 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); } void RIG_IC7600::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); // values 0-255 cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); } void RIG_IC7600::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); } void RIG_IC7600::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x24'; // ALH / DF cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); } // Tranceiver PTT on/off void RIG_IC7600::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); set_trace(2, "set_PTT()", str2hex(cmd.c_str(), cmd.length())); ptt_ = val; } int RIG_IC7600::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } get_trace(2, "get_PTT()", str2hex(replystr.c_str(), replystr.length())); return ptt_; } // Volume control val 0 ... 100 void RIG_IC7600::set_volume_control(int val) { int ICvol = (int)(val * 255 / 100); minmax(0, 255, ICvol); cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); } /* I:12:20:22: get vol ans in 0 ms, OK cmd FE FE 7A E0 14 01 FD ans FE FE 7A E0 14 01 FD FE FE E0 7A 14 01 00 65 FD 0 1 2 3 4 5 6 7 8 */ int RIG_IC7600::get_volume_control() { int val = 0; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)ceil(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } minmax(0, 100, val); progStatus.volume = val; return (progStatus.volume); } void RIG_IC7600::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7600::set_power_control(double value) { int val = (int)(value * 255 / 100); minmax(0, 255, val); cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd(val, 3)); cmd.append( post ); waitFB("set power"); } double RIG_IC7600::get_power_control() { int val = progStatus.power_level; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)ceil(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } minmax(0, 100, val); progStatus.power_level = val; return (progStatus.power_level); } void RIG_IC7600::get_pc_min_max_step(double &min, double &max, double &step) { min = 2; pmax = max = 100; step = 1; } int RIG_IC7600::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.41); if (mtr > 100) mtr = 100; } } return mtr; } double RIG_IC7600::get_idd(void) { get_trace(1, "get_idd()"); std::string cstr = "\x15\x16"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); double mtr= 0; int ret = waitFOR(9, "get idd"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = 25.0 * mtr / 241.0; if (mtr > 25) mtr = 25; } } return mtr; } double RIG_IC7600::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); int ret = waitFOR(9, "get voltmeter"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 6.0 * mtr / 61.0 - 5.0; return val; } } return -1; } int RIG_IC7600::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get power out")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.13); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7600::get_swr(void) { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7600::get_alc(void) { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /1.2); if (mtr > 100) mtr = 100; } } return mtr; } void RIG_IC7600::set_rf_gain(int val) { int ICrfg = (int)(val * 255 / 100); minmax(0, 255, ICrfg); cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(ICrfg, 3)); cmd.append( post ); waitFB("set RF"); } int RIG_IC7600::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get RF")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } minmax(0, 100, val); progStatus.rfgain = val; return (progStatus.rfgain); } void RIG_IC7600::get_rf_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } // ALH inserted code from the IC7100 to get the preamp to switch correctly int RIG_IC7600::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC7600::set_preamp(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; preamp_level = val; cmd += (unsigned char)preamp_level; cmd.append( post ); waitFB( (preamp_level == 0) ? "set Preamp OFF" : (preamp_level == 1) ? "set Preamp Level 1" : "set Preamp Level 2"); set_trace(2, "set_preamp()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7600::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get Pre")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { preamp_level = replystr[p+6]; } } get_trace(2, "get_preamp() ", str2hex(replystr.c_str(), replystr.length())); return preamp_level; } // ALH end of changed code for the preamp. int RIG_IC7600::next_attenuator() { switch (atten_level) { case 0x00: return 0x06; case 0x06: return 0x12; case 0x12: return 0x18; case 0x18: return 0x00; } return 0; } void RIG_IC7600::set_attenuator(int val) { atten_level = val; cmd = pre_to; cmd += '\x11'; cmd += atten_level; cmd.append( post ); set_trace(2, "set_attenuator()", str2hex(cmd.c_str(), cmd.length())); waitFB("set att"); } int RIG_IC7600::get_attenuator() { cmd = pre_to; std::string resp = pre_fm; cmd += '\x11'; resp += '\x11'; cmd.append( post ); if (waitFOR(7, "get ATT")) { get_trace(2, "get_ATT()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) atten_level = replystr[p+5]; } return atten_level; } const char *RIG_IC7600::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Amp 1"; break; case 2: return "Amp 2"; break; } return "PRE"; } const char *RIG_IC7600::ATT_label() { if (atten_level == 0x06) return("6 dB"); if (atten_level == 0x12) return("12 dB"); if (atten_level == 0x18) return("18 dB"); return "ATT"; } void RIG_IC7600::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); } /* I:12:06:50: get noise ans in 0 ms, OK cmd FE FE 7A E0 16 22 FD ans FE FE 7A E0 16 22 FD FE FE E0 7A 16 22 00 FD */ int RIG_IC7600::get_noise() { std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise; } void RIG_IC7600::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); } int RIG_IC7600::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise_reduction; } /* I:12:06:50: get NR ans in 0 ms, OK cmd FE FE 7A E0 16 40 FD ans FE FE 7A E0 16 40 FD FE FE E0 7A 16 40 01 FD 0 1 2 3 4 5 6 7 I:12:06:50: get NRval ans in 0 ms, OK cmd FE FE 7A E0 14 06 FD ans FE FE 7A E0 14 06 FD FE FE E0 7A 14 06 00 24 FD 0 1 2 3 4 5 6 7 8 */ void RIG_IC7600::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append(post); waitFB("set NRval"); } int RIG_IC7600::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)ceil(fm_bcd(replystr.substr(p+6),3) * 100 / 255); } minmax(0, 100, val); return val; } void RIG_IC7600::set_squelch(int val) { int ICsql = (int)(val * 255 / 100); minmax(0, 255, ICsql); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(ICsql, 3)); cmd.append( post ); waitFB("set Sqlch"); } int RIG_IC7600::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get squelch")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)ceil(fm_bcd(replystr.substr(p+6), 3) * 100 / 255); } minmax(0, 100, val); progStatus.squelch = val; return (progStatus.squelch); } void RIG_IC7600::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += (unsigned char)val; cmd.append( post ); waitFB("set AN"); } int RIG_IC7600::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get AN")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } static bool IC7600_notchon = false; void RIG_IC7600::set_notch(bool on, int val) { int notch = val / 20 + 53; minmax(0, 255, notch); if (on != IC7600_notchon) { cmd = pre_to; cmd.append("\x16\x48"); cmd += on ? '\x01' : '\x00'; cmd.append(post); waitFB("set notch"); IC7600_notchon = on; } if (on) { cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(notch,3)); cmd.append(post); waitFB("set notch val"); } } bool RIG_IC7600::get_notch(int &val) { bool on = false; val = 0; std::string cstr = "\x16\x48"; std::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 != std::string::npos) on = replystr[p + 6] ? 1 : 0; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); if (waitFOR(9, "get notch val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val = (val - 53) * 20; if (val < 0) val = 0; if (val > 4040) val = 4040; } } } return (IC7600_notchon = on); } void RIG_IC7600::get_notch_min_max_step(int &min, int &max, int &step) { min = 0; max = 4040; step = 20; } void RIG_IC7600::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC7600::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC7600::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC7600::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } const char *RIG_IC7600::FILT(int &val) { if (inuse == onB) { if (filB < 0) filB = 0; if (filB > 3) filB = 3; val = filB; return(szfilter[filB - 1]); } else { if (filA < 0) filA = 0; if (filA > 3) filA = 3; val = filA; return (szfilter[filA - 1]); } } const char *RIG_IC7600::nextFILT() { if (inuse == onB) { filB++; if (filB > 3) filB = 1; set_modeB(B.imode); return(szfilter[filB - 1]); } else { filA++; if (filA > 3) filA = 1; set_modeA(A.imode); return(szfilter[filA - 1]); } } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC7600::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if ((bandmode == 0) && banddata) bandmode = ((banddata == 0x10) ? 10 : (banddata == 0x20) ? 11 : (banddata == 0x30) ? 12 : 0); if ((bandmode == 1) && banddata) bandmode = ((banddata == 0x10) ? 13 : (banddata == 0x20) ? 14 : (banddata == 0x30) ? 15 : 0); if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC7600::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; if (mode >= 9) cmd += '\x10'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } // --------------------------------------------------------------------- // set date and time // 1A 05 00 95 HH MM : set time // 1A 05 00 94 YY YY MM DD : set date // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_IC7600::sync_date(char *dt) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x53'; unsigned char val; val = ((dt[0] - '0') << 4) + (dt[1] - '0'); cmd += (val & 0xFF); val = ((dt[2] - '0') << 4) + (dt[3] - '0'); cmd += (val & 0xFF); val = ((dt[4] - '0') << 4) + (dt[5] - '0'); cmd += (val & 0xFF); val = ((dt[6] - '0') << 4) + (dt[7] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_IC7600::sync_clock(char *tm) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x54'; unsigned char val; val = ((tm[0] - '0') << 4) + (tm[1] - '0'); cmd += (val & 0xFF); val = ((tm[3] - '0') << 4) + (tm[4] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } flrig-2.0.04/src/rigs/icom/IC756PRO2.cxx0000664000175000017500000007277214502720327014252 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC756PRO2.h" #include "debug.h" #include "status.h" #include "support.h" const char IC756PRO2name_[] = "IC-756PRO-II"; //============================================================================= static std::vectorIC756PRO2modes_; static const char *vIC756PRO2modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "D-LSB", "D-USB", "D-FM"}; const char IC756PRO2_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'U' }; static std::vectorIC756PRO2_SSBwidths; static const char *vIC756PRO2_SSBwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static int IC756PRO2_bw_vals_SSB[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40, WVALS_LIMIT}; static std::vectorIC756PRO2_RTTYwidths; static const char *vIC756PRO2_RTTYwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static int IC756PRO2_bw_vals_RTTY[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31, WVALS_LIMIT}; static std::vectorIC756PRO2_AMFMwidths; static const char *vIC756PRO2_AMFMwidths[] = { "FILT-1", "FILT-2", "FILT-3" }; static int IC756PRO2_bw_vals_AMFM[] = { 0, 1, 2, WVALS_LIMIT}; static GUI IC756PRO2_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC756PRO2::initialize() { VECTOR (IC756PRO2modes_, vIC756PRO2modes_); VECTOR (IC756PRO2_SSBwidths, vIC756PRO2_SSBwidths); VECTOR (IC756PRO2_RTTYwidths, vIC756PRO2_RTTYwidths); VECTOR (IC756PRO2_AMFMwidths, vIC756PRO2_AMFMwidths); modes_ = IC756PRO2modes_; bandwidths_ = IC756PRO2_SSBwidths; bw_vals_ = IC756PRO2_bw_vals_SSB; IC756PRO2_widgets[0].W = btnVol; IC756PRO2_widgets[1].W = sldrVOLUME; IC756PRO2_widgets[2].W = btnAGC; IC756PRO2_widgets[3].W = sldrRFGAIN; IC756PRO2_widgets[4].W = sldrSQUELCH; IC756PRO2_widgets[5].W = btnNR; IC756PRO2_widgets[6].W = sldrNR; IC756PRO2_widgets[7].W = btnLOCK; IC756PRO2_widgets[8].W = sldrINNER; IC756PRO2_widgets[9].W = btnCLRPBT; IC756PRO2_widgets[10].W = sldrOUTER; IC756PRO2_widgets[11].W = btnNotch; IC756PRO2_widgets[12].W = sldrNOTCH; IC756PRO2_widgets[13].W = sldrMICGAIN; IC756PRO2_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC756PRO2::RIG_IC756PRO2() { defaultCIV = 0x64; name_ = IC756PRO2name_; modes_ = IC756PRO2modes_; bandwidths_ = IC756PRO2_SSBwidths; bw_vals_ = IC756PRO2_bw_vals_SSB; // serial_write_delay = 0; // serial_post_write_delay = 0; _mode_type = IC756PRO2_mode_type; widgets = IC756PRO2_widgets; def_freq = freqA = freqB = A.freq = 14070000ULL; def_mode = modeA = modeB = B.imode = 1; def_bw = bwA = bwB = A.iBW = B.iBW = 32; atten_level = 3; preamp_level = 2; adjustCIV(defaultCIV); has_extras = true; has_bandwidth_control = true; has_pbt_controls = true; has_FILTER = true; has_tune_control = true; has_swr_control = true; has_alc_control = true; has_smeter = true; has_power_out = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_micgain_control = true; has_auto_notch = true; has_notch_control = true; has_attenuator_control = true; has_preamp_control = true; has_ptt_control = true; has_noise_reduction = true; has_noise_reduction_control = true; has_noise_control = true; has_rf_control = true; has_a2b = true; ICOMmainsub = true; has_band_selection = true; precision = 1; ndigits = 9; filA = filB = 1; }; void RIG_IC756PRO2::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; cmd.append(post); waitFB("Exchange vfos"); set_trace(2, "swapAB()", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC756PRO2::A2B() { cmd = pre_to; cmd += 0x07; cmd += 0xB1; cmd.append(post); waitFB("Equalize vfos"); set_trace(2, "A2B()", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC756PRO2::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\xD0'; cmd.append(post); waitFB("sel A"); set_trace(2, "selectA()", str2hex(cmd.c_str(), cmd.length())); inuse = onA; } void RIG_IC756PRO2::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\xD1'; cmd.append(post); waitFB("sel B"); set_trace(2, "selectB()", str2hex(cmd.c_str(), cmd.length())); inuse = onB; } bool RIG_IC756PRO2::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); get_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC756PRO2::get_vfoA () { if (inuse == onB) return A.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } get_trace(2, "get_vfoA()", str2hex(replystr.c_str(), replystr.length())); return A.freq; } void RIG_IC756PRO2::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); set_trace(2, "set_vfoA()", str2hex(cmd.c_str(), cmd.length())); } unsigned long long RIG_IC756PRO2::get_vfoB () { if (inuse == onA) return B.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } get_trace(2, "get_vfoB()", str2hex(replystr.c_str(), replystr.length())); return B.freq; } void RIG_IC756PRO2::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); set_trace(2, "set_vfoB()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC756PRO2::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); int mtr = -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) mtr = (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } get_trace(2, "get_smeter()", str2hex(replystr.c_str(), replystr.length())); return mtr; } // Volume control val 0 ... 100 void RIG_IC756PRO2::set_volume_control(int val) { ICvol = (int)(val); cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); set_trace(2, "set_volume_control()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC756PRO2::get_volume_control() { std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return ((int)(fm_bcd(replystr.substr(p+6),3))); } get_trace(2, "get_volume_control()", str2hex(replystr.c_str(), replystr.length())); return 0; } void RIG_IC756PRO2::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } // Tranceiver PTT on/off void RIG_IC756PRO2::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; set_trace(2, "set_PTT()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC756PRO2::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } get_trace(2, "get_PTT()", str2hex(replystr.c_str(), replystr.length())); return ptt_; } // changed noise blanker to noise reduction void RIG_IC756PRO2::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); set_trace(2, "set_noise()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC756PRO2::get_noise() { int val = progStatus.noise; std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (replystr[p+6] ? 1 : 0); } get_trace(2, "get_noise()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC756PRO2::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); } int RIG_IC756PRO2::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } // 0 < val < 100 void RIG_IC756PRO2::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append(post); waitFB("set NR val"); } int RIG_IC756PRO2::get_noise_reduction_val() { std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NR val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } int RIG_IC756PRO2::get_modetype(int n) { return _mode_type[n]; } void RIG_IC756PRO2::set_mic_gain(int val) { val = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); } void RIG_IC756PRO2::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC756PRO2::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); } void RIG_IC756PRO2::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC756PRO2::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC756PRO2::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC756PRO2::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC756PRO2::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } int IC756PRO2sql = 0; void RIG_IC756PRO2::set_squelch(int val) { IC756PRO2sql = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(IC756PRO2sql, 3)); cmd.append( post ); waitFB("set sql"); } int IC756PRO2rfg = 0; void RIG_IC756PRO2::set_rf_gain(int val) { IC756PRO2rfg = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(IC756PRO2rfg, 3)); cmd.append( post ); waitFB("set rf gain"); set_trace(2, "set_rf_gain()", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC756PRO2::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((int)(val * 255 / 100), 3)); cmd.append( post ); waitFB("set power"); set_trace(2, "set_power_control()", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC756PRO2::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB("set split"); set_trace(2, "set_split()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC756PRO2::get_split() { return split; } //====================================================================== // IC756PRO2 unique commands //====================================================================== void RIG_IC756PRO2::set_modeA(int val) { A.imode = val; bool datamode = false; switch (val) { case 10 : val = 5; datamode = true; break; case 9 : val = 1; datamode = true; break; case 8 : val = 0; datamode = true; break; case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += filA; cmd.append( post ); waitFB("set mode A"); set_trace(4, "set mode A[", IC756PRO2modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (datamode) { // LSB / USB ==> use DATA mode cmd = pre_to; cmd.append("\x1A\x06\x01"); cmd.append(post); waitFB("data mode"); set_trace(2, "set_digital()", str2hex(cmd.c_str(), cmd.length())); } } static const char *szfilter[] = {"1", "2", "3"}; int RIG_IC756PRO2::get_modeA() { int md; std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); // replystr = "\xFE\xFE\x64\xE0\x04\xFD\xFE\xFE\xE0\x64\x04\x05\x01\xFD"; { if (waitFOR(8, "get mode A")) { get_trace(2, "get_modeA()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { A.imode = filA = 0; } else { md = replystr[p+5]; if (md > 6) md--; filA = replystr[p+6]; cstr = "\x1A\x06"; resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); // replystr = "\xFE\xFE\x64\xE0\x1A\x06\xFD\xFE\xFE\xE0\x64\x1A\x06\x00\xFD"; { if (waitFOR(8, "data ?")) { get_trace(2, "get_data_modeA()", str2hex(replystr.c_str(), replystr.length())); p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6]) { switch (md) { case 0 : md = 8; break; case 1 : md = 9; break; case 5 : md = 10; break; default : break; } } } } A.imode = md; } } } return A.imode; } void RIG_IC756PRO2::set_modeB(int val) { B.imode = val; bool datamode = false; switch (val) { case 10 : val = 5; datamode = true; break; case 9 : val = 1; datamode = true; break; case 8 : val = 0; datamode = true; break; case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += filB; cmd.append( post ); waitFB("set mode B"); set_trace(4, "set mode B[", IC756PRO2modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (datamode) { // LSB / USB ==> use DATA mode cmd = pre_to; cmd.append("\x1A\x06\x01"); cmd.append(post); waitFB("data mode"); set_trace(2, "set_digital()", str2hex(cmd.c_str(), cmd.length())); } } int RIG_IC756PRO2::get_modeB() { int md; std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode B")) { get_trace(2, "get_modeB()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { B.imode = filB = 0; } else { md = replystr[p+5]; if (md > 6) md--; filB = replystr[p+6]; cstr = "\x1A\x06"; resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "data ?")) { get_trace(2, "get_data_modeB()", str2hex(replystr.c_str(), replystr.length())); p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6]) { switch (md) { case 0 : md = 8; break; case 1 : md = 9; break; case 5 : md = 10; break; default : break; } } } } B.imode = md; } } } return B.imode; } int RIG_IC756PRO2::adjust_bandwidth(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) { //SSB bandwidths_ = IC756PRO2_SSBwidths; bw_vals_ = IC756PRO2_bw_vals_SSB; return (32); } if (m == 3 || m == 6) { //CW bandwidths_ = IC756PRO2_SSBwidths; bw_vals_ = IC756PRO2_bw_vals_SSB; return (14); } if (m == 4 || m == 7) { //RTTY bandwidths_ = IC756PRO2_RTTYwidths; bw_vals_ = IC756PRO2_bw_vals_RTTY; return (28); } bandwidths_ = IC756PRO2_AMFMwidths; bw_vals_ = IC756PRO2_bw_vals_AMFM; return (0); } int RIG_IC756PRO2::def_bandwidth(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) { //SSB return (32); } if (m == 3 || m == 6) { //CW return (14); } if (m == 4 || m == 7) { //RTTY return (28); } bandwidths_ = IC756PRO2_AMFMwidths; return (0); } std::vector& RIG_IC756PRO2::bwtable(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) //SSB return IC756PRO2_SSBwidths; if (m == 3 || m == 6) //CW return IC756PRO2_SSBwidths; if (m == 4 || m == 7) //RTTY return IC756PRO2_RTTYwidths; return IC756PRO2_AMFMwidths; } int RIG_IC756PRO2::get_swr() { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = -1; if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) mtr = (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55 ); } get_trace(2, "get_swr()", str2hex(replystr.c_str(), replystr.length())); return mtr; } int RIG_IC756PRO2::get_alc() { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) mtr = (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55 ); } get_trace(2, "get_alc()", str2hex(replystr.c_str(), replystr.length())); return mtr; } // Transceiver power level return power in watts int RIG_IC756PRO2::get_power_out() { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = -1; if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) mtr = (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55 ); } get_trace(2, "get_power_out()", str2hex(replystr.c_str(), replystr.length())); return mtr; } void RIG_IC756PRO2::set_bwA(int val) { if (bandwidths_ == IC756PRO2_AMFMwidths) { A.iBW = val; set_modeA(A.imode); return; } A.iBW = val; cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(A.iBW,2)); cmd.append( post ); waitFB("set bw A"); set_trace(4, "set_bwA() ", bwtable(A.imode)[val].c_str(), ": ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC756PRO2::get_bwA() { std::string cstr = "\x1A\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get bw A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) A.iBW = (int)(fm_bcd(replystr.substr(p + 6), 2)); } get_trace(2, "get_bwA()", str2hex(replystr.c_str(), replystr.length())); if (bandwidths_ == IC756PRO2_AMFMwidths) { if (A.iBW < 0) A.iBW = 0; if (A.iBW > 2) A.iBW = 2; } return A.iBW; } void RIG_IC756PRO2::set_bwB(int val) { if (bandwidths_ == IC756PRO2_AMFMwidths) { B.iBW = val; set_modeB(B.imode); return; } B.iBW = val; cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(B.iBW,2)); cmd.append( post ); waitFB("set bw B"); set_trace(4, "set_bwB() ", bwtable(B.imode)[val].c_str(), ": ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC756PRO2::get_bwB() { std::string cstr = "\x1A\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get bw B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) B.iBW = (int)(fm_bcd(replystr.substr(p + 6), 2)); } get_trace(2, "get_bwB()", str2hex(replystr.c_str(), replystr.length())); if (bandwidths_ == IC756PRO2_AMFMwidths) { if (B.iBW < 0) B.iBW = 0; if (B.iBW > 2) B.iBW = 2; } return B.iBW; } bool IC756PRO2_notchon = false; void RIG_IC756PRO2::set_notch(bool on, int val) { int notch = (int)(val/20.0 + 128); if (notch > 256) notch = 255; if (on != IC756PRO2_notchon) { cmd = pre_to; cmd.append("\x16\x48"); cmd += on ? '\x01' : '\x00'; cmd.append(post); waitFB("set notch"); IC756PRO2_notchon = on; } if (on) { cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(notch,3)); cmd.append(post); waitFB("set notch val"); } } bool RIG_IC756PRO2::get_notch(int &val) { bool on = false; val = 0; std::string cstr = "\x16\x48"; std::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 != std::string::npos) on = replystr[p + 6] ? 1 : 0; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); if (waitFOR(9, "get notch val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = 20*ceil(fm_bcd(replystr.substr(p + 6),3) - 128); } } return on; } void RIG_IC756PRO2::get_notch_min_max_step(int &min, int &max, int &step) { min = -1280; max = 1280; step = 20; } int RIG_IC756PRO2::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_IC756PRO2::set_attenuator(int val) { atten_level = val; int cmdval = 0; if (atten_level == 1) { cmdval = 0x06; } else if (atten_level == 2) { cmdval = 0x12; } else if (atten_level == 3) { cmdval = 0x18; } else if (atten_level == 0) { cmdval = 0x00; } cmd = pre_to; cmd += '\x11'; cmd += cmdval; cmd.append( post ); waitFB("set att"); } int RIG_IC756PRO2::get_attenuator() { std::string cstr = "\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(7, "get att")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == 0x06) { atten_level = 1; } else if (replystr[p+5] == 0x12) { atten_level = 2; } else if (replystr[p+5] == 0x18) { atten_level = 3; } else if (replystr[p+5] == 0x00) { atten_level = 0; } } } get_trace(2, "get_ATT()", str2hex(replystr.c_str(), replystr.length())); return atten_level; } int RIG_IC756PRO2::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC756PRO2::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char) preamp_level; cmd.append( post ); waitFB("set preamp"); set_trace(2, "set_preamp()", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC756PRO2::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get preamp")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) preamp_level = replystr[p+6]; } get_trace(2, "get_preamp()", str2hex(replystr.c_str(), replystr.length())); return preamp_level; } const char *RIG_IC756PRO2::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_IC756PRO2::ATT_label() { switch (atten_level) { default: case 0: break; case 1: return "6 dB"; break; case 2: return "12 dB"; break; case 3: return "18 dB"; break; } return "ATT"; } const char *RIG_IC756PRO2::FILT(int &val) { if (inuse == onB) { val = filB; return(szfilter[filB - 1]); } else { val = filA; return (szfilter[filA - 1]); } } const char *RIG_IC756PRO2::nextFILT() { if (inuse == onB) { filB++; if (filB > 3) filB = 1; set_modeB(B.imode); return(szfilter[filB - 1]); } else { filA++; if (filA > 3) filA = 1; set_modeA(A.imode); return(szfilter[filA - 1]); } } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC756PRO2::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; if ((bandmode == 0 || bandmode == 1) && banddata) bandmode += 7; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC756PRO2::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; if (mode >= 7) cmd += '\x10'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } flrig-2.0.04/src/rigs/icom/IC746.cxx0000664000175000017500000010420314502720327013567 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC746.h" #include "support.h" //============================================================================= // IC-746, IC746PRO //============================================================================= const char IC746name_[] = "IC-746"; static std::vectorIC746modes_; static const char *vIC746modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R"}; // mode values are 0, 1, 2, 3, 4, 5, 7, 8 const char IC746_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U'}; static std::vectorIC746_widths; static const char *vIC746_widths[] = { "NORM", "NARR"}; static int IC746_bw_vals[] = { 1, 2, WVALS_LIMIT}; static GUI IC746_widgetsdgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC746::initialize() { VECTOR (IC746modes_, vIC746modes_); VECTOR (IC746_widths, vIC746_widths); modes_ = IC746modes_; bandwidths_ = IC746_widths; bw_vals_ = IC746_bw_vals; _mode_type = IC746_mode_type; IC746_widgetsdgets[0].W = btnVol; IC746_widgetsdgets[1].W = sldrVOLUME; IC746_widgetsdgets[2].W = btnAGC; IC746_widgetsdgets[3].W = sldrRFGAIN; IC746_widgetsdgets[4].W = sldrSQUELCH; IC746_widgetsdgets[5].W = btnNR; IC746_widgetsdgets[6].W = sldrNR; IC746_widgetsdgets[7].W = btnLOCK; IC746_widgetsdgets[8].W = sldrINNER; IC746_widgetsdgets[9].W = btnCLRPBT; IC746_widgetsdgets[10].W = sldrOUTER; IC746_widgetsdgets[11].W = btnNotch; IC746_widgetsdgets[12].W = sldrNOTCH; IC746_widgetsdgets[13].W = sldrMICGAIN; IC746_widgetsdgets[14].W = sldrPOWER; } RIG_IC746::RIG_IC746() { defaultCIV = 0x56; name_ = IC746name_; modes_ = IC746modes_; bandwidths_ = IC746_widths; bw_vals_ = IC746_bw_vals; _mode_type = IC746_mode_type; widgets = IC746_widgetsdgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; def_freq = freqB = freqA = B.freq = A.freq = 14070000ULL; def_mode = modeB = modeA = B.imode = A.imode = 1; def_bw = bwB = bwA = B.iBW = A.iBW = 0; filter_nbr = 0; ICvol = 0; has_bandwidth_control = has_smeter = has_power_control = has_volume_control = has_mode_control = has_micgain_control = has_notch_control = has_attenuator_control = has_preamp_control = has_pbt_controls = true; has_ptt_control = has_tune_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_rf_control = has_sql_control = has_split = restore_mbw = true; has_extras = true; precision = 1; ndigits = 9; }; void RIG_IC746::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); waitFB("sel A"); inuse = onA; } void RIG_IC746::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); waitFB("sel B"); inuse = onB; } bool RIG_IC746::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC746::get_vfoA () { if (inuse == onB) return A.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_IC746::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); } unsigned long long RIG_IC746::get_vfoB () { if (inuse == onA) return B.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return B.freq; } void RIG_IC746::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); } int RIG_IC746::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return 0; } // Volume control val 0 ... 100 void RIG_IC746::set_volume_control(int val) { ICvol = (int)(val); cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); } int RIG_IC746::get_volume_control() { std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3)); } return 0; } void RIG_IC746::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } // Tranceiver PTT on/off void RIG_IC746::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; } int RIG_IC746::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } void RIG_IC746::set_attenuator(int val) { cmd = pre_to; cmd += '\x11'; cmd += val ? 0x20 : 0x00; cmd.append( post ); waitFB("set att"); } int RIG_IC746::get_attenuator() { std::string cstr = "\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(7, "get att")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+5] ? 1 : 0); } return 0; } int RIG_IC746::next_preamp() { switch(preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC746::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char) preamp_level; cmd.append( post ); waitFB("set preamp"); } int RIG_IC746::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get preamp")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) preamp_level = replystr[p+6]; } return preamp_level; } const char *RIG_IC746::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_IC746::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } // changed noise blanker to noise reduction void RIG_IC746::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); } int RIG_IC746::get_noise() { std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } void RIG_IC746::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); } int RIG_IC746::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return 0; } // 0 < val < 100 void RIG_IC746::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append(post); waitFB("set NR val"); } int RIG_IC746::get_noise_reduction_val() { std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NR val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_IC746::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += val > 5 ? val + 1 : val; cmd += filter_nbr + 1; // filter # cmd.append( post ); waitFB("set mode A"); } int RIG_IC746::get_modeA() { std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { A.imode = filter_nbr = 0; } else { A.imode = replystr[p+5]; if (A.imode > 6) A.imode--; filter_nbr = replystr[p+6] - 1; } } } return A.imode; } void RIG_IC746::set_bwA(int val) { filter_nbr = val; set_modeA(A.imode); } int RIG_IC746::get_bwA() { return filter_nbr; } void RIG_IC746::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += val > 5 ? val + 1 : val; cmd += filter_nbr + 1; // filter cmd.append( post ); waitFB("set mode B"); } int RIG_IC746::get_modeB() { std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { B.imode = filter_nbr = 0; } else { B.imode = replystr[p+5]; if (B.imode > 6) B.imode--; filter_nbr = replystr[p+6] - 1; } } } return B.imode; } void RIG_IC746::set_bwB(int val) { filter_nbr = val; set_modeB(B.imode); } int RIG_IC746::get_bwB() { return filter_nbr; } int RIG_IC746::get_modetype(int n) { return _mode_type[n]; } void RIG_IC746::set_mic_gain(int val) { val = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); } void RIG_IC746::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC746::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); } void RIG_IC746::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC746::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC746::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC746::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC746::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } int ICsql = 0; void RIG_IC746::set_squelch(int val) { ICsql = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(ICsql, 3)); cmd.append( post ); waitFB("set sql"); } int ICrfg = 0; void RIG_IC746::set_rf_gain(int val) { ICrfg = (int)(val * 255 / 100); cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(ICrfg, 3)); cmd.append( post ); waitFB("set rf gain"); } void RIG_IC746::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((int)(val * 255 / 100), 3)); cmd.append( post ); waitFB("set power"); } void RIG_IC746::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x10 : 0x00; cmd.append(post); waitFB("set split"); } int RIG_IC746::get_split() { return split; } //============================================================================= // 746PRO const char IC746PROname_[] = "IC-746PRO"; static std::vectorIC746PROmodes_; static const char *vIC746PROmodes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "D-LSB", "D-USB", "D-FM"}; const char IC746PRO_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'U' }; static std::vectorIC746PRO_SSBwidths; static const char *vIC746PRO_SSBwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static int IC746PRO_bw_vals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41, WVALS_LIMIT}; static std::vectorIC746PRO_RTTYwidths; static const char *vIC746PRO_RTTYwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static int IC746PRO_bw_vals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32, WVALS_LIMIT}; static std::vectorIC746PRO_AMFMwidths; static const char *vIC746PRO_AMFMwidths[] = { "FILT-1", "FILT-2", "FILT-3" }; static int IC746PRO_bw_vals_AMFM[] = { 1,2,3,WVALS_LIMIT}; void RIG_IC746PRO::initialize() { VECTOR (IC746PROmodes_, vIC746PROmodes_); VECTOR (IC746PRO_SSBwidths, vIC746PRO_SSBwidths); VECTOR (IC746PRO_RTTYwidths, vIC746PRO_RTTYwidths); VECTOR (IC746PRO_AMFMwidths, vIC746PRO_AMFMwidths); modes_ = IC746PROmodes_; bandwidths_ = IC746PRO_SSBwidths; bw_vals_ = IC746PRO_bw_vals_SSB; IC746_widgetsdgets[0].W = btnVol; IC746_widgetsdgets[1].W = sldrVOLUME; IC746_widgetsdgets[2].W = btnAGC; IC746_widgetsdgets[3].W = sldrRFGAIN; IC746_widgetsdgets[4].W = sldrSQUELCH; IC746_widgetsdgets[5].W = btnNR; IC746_widgetsdgets[6].W = sldrNR; IC746_widgetsdgets[7].W = btnLOCK; IC746_widgetsdgets[8].W = sldrINNER; IC746_widgetsdgets[9].W = btnCLRPBT; IC746_widgetsdgets[10].W = sldrOUTER; IC746_widgetsdgets[11].W = btnNotch; IC746_widgetsdgets[12].W = sldrNOTCH; IC746_widgetsdgets[13].W = sldrMICGAIN; IC746_widgetsdgets[14].W = sldrPOWER; btn_icom_select_11->activate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC746PRO::RIG_IC746PRO() { defaultCIV = 0x66; name_ = IC746PROname_; modes_ = IC746PROmodes_; bandwidths_ = IC746PRO_SSBwidths; bw_vals_ = IC746PRO_bw_vals_SSB; _mode_type = IC746PRO_mode_type; atten_level = 1; preamp_level = 2; def_mode = modeB = modeA = B.imode = A.imode = 1; def_bw = bwB = bwA = B.iBW = A.iBW = 34; def_freq = freqB = freqA = B.freq = A.freq = 14070000L; has_smeter = has_power_control = has_volume_control = has_mode_control = has_bandwidth_control = has_micgain_control = has_notch_control = has_attenuator_control = has_preamp_control = has_pbt_controls = true; has_ptt_control = has_tune_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_rf_control = has_sql_control = has_split = restore_mbw = true; has_swr_control = has_alc_control = has_power_out = true; has_extras = true; has_band_selection = true; adjustCIV(defaultCIV); }; void RIG_IC746PRO::set_modeA(int val) { A.imode = val; bool datamode = false; switch (val) { case 10 : val = 5; datamode = true; break; case 9 : val = 1; datamode = true; break; case 8 : val = 0; datamode = true; break; case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += filter_nbr + 1; // filter 1 ... 3 cmd.append( post ); waitFB("set mode A"); if (datamode) { // LSB / USB ==> use DATA mode cmd = pre_to; cmd.append("\x1A\x06\x01"); cmd.append(post); waitFB("data mode"); } } int RIG_IC746PRO::get_modeA() { int md; std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { md = replystr[p+5]; if (md > 6) md--; filter_nbr = replystr[p+6] - 1; cstr = "\x1A\x06"; resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "data ?")) { p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6]) { switch (md) { case 0 : md = 8; break; case 1 : md = 9; break; case 5 : md = 10; break; default : break; } } } } A.imode = md; } } return A.imode; } void RIG_IC746PRO::set_modeB(int val) { B.imode = val; bool datamode = false; switch (val) { case 10 : val = 5; datamode = true; break; case 9 : val = 1; datamode = true; break; case 8 : val = 0; datamode = true; break; case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += filter_nbr + 1; cmd.append( post ); waitFB("set mode B"); if (datamode) { // LSB / USB ==> use DATA mode cmd = pre_to; cmd.append("\x1A\x06\x01"); cmd.append(post); waitFB("data mode"); } } int RIG_IC746PRO::get_modeB() { int md; std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { md = replystr[p+5]; if (md > 6) md--; filter_nbr = replystr[p+6] - 1; // this is the filter #; not the bandwidth cstr = "\x1A\x06"; resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "data ?")) { p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6]) { switch (md) { case 0 : md = 8; break; case 1 : md = 9; break; case 5 : md = 10; break; default : break; } } } } B.imode = md; } } return B.imode; } int RIG_IC746PRO::adjust_bandwidth(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) { //SSB bandwidths_ = IC746PRO_SSBwidths; bw_vals_ = IC746PRO_bw_vals_SSB; return (32); } if (m == 3 || m == 6) { //CW bandwidths_ = IC746PRO_SSBwidths; bw_vals_ = IC746PRO_bw_vals_SSB; return (14); } if (m == 4 || m == 7) { //RTTY bandwidths_ = IC746PRO_RTTYwidths; bw_vals_ = IC746PRO_bw_vals_RTTY; return (28); } bandwidths_ = IC746PRO_AMFMwidths; bw_vals_ = IC746PRO_bw_vals_AMFM; return (0); } int RIG_IC746PRO::def_bandwidth(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) { //SSB return (32); } if (m == 3 || m == 6) { //CW return (14); } if (m == 4 || m == 7) { //RTTY return (28); } bandwidths_ = IC746PRO_AMFMwidths; return (0); } std::vector& RIG_IC746PRO::bwtable(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) //SSB return IC746PRO_SSBwidths; if (m == 3 || m == 6) //CW return IC746PRO_SSBwidths; if (m == 4 || m == 7) //RTTY return IC746PRO_RTTYwidths; return IC746PRO_AMFMwidths; } int RIG_IC746PRO::get_swr() { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55 ); } return -1; } int RIG_IC746PRO::get_alc() { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55 ); } return -1; } // Transceiver power level return power in watts int RIG_IC746PRO::get_power_out() { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55 ); } return -1; } void RIG_IC746PRO::set_bwA(int val) { // if (bandwidths_ == IC746PRO_AMFMwidths) { // filter_nbr = val; // set_modeA(A.imode); // return; // } A.iBW = val; cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(A.iBW,2)); cmd.append( post ); waitFB("set bw A"); } int RIG_IC746PRO::get_bwA() { std::string cstr = "\x1A\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get bw A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) A.iBW = (int)ceil(fm_bcd(replystr.substr(p + 6), 2)); } return A.iBW; } void RIG_IC746PRO::set_bwB(int val) { // if (bandwidths_ == IC746PRO_AMFMwidths) { // filter_nbr = val; // set_modeA(A.imode); // return; // } B.iBW = val; cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(B.iBW,2)); cmd.append( post ); waitFB("set bw B"); } int RIG_IC746PRO::get_bwB() { std::string cstr = "\x1A\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get bw B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) B.iBW = (int)(fm_bcd(replystr.substr(p + 6), 2)); } return B.iBW; } int RIG_IC746PRO::get_attenuator() { std::string cstr = "\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(7, "get att")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+5] ? 1 : 0); } return 0; } void RIG_IC746PRO::set_attenuator(int val) { int cmdval = val ? 0x20 : 0x00; cmd = pre_to; cmd += '\x11'; cmd += cmdval; cmd.append( post ); waitFB("set att"); } bool IC_notchon = false; void RIG_IC746PRO::set_notch(bool on, int val) { int notch = (int)(val/20.0 + 128); if (notch > 256) notch = 255; if (on != IC_notchon) { cmd = pre_to; cmd.append("\x16\x48"); cmd += on ? '\x01' : '\x00'; cmd.append(post); waitFB("set notch"); IC_notchon = on; } if (on) { cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(notch,3)); cmd.append(post); waitFB("set notch val"); } } bool RIG_IC746PRO::get_notch(int &val) { bool on = false; val = 0; std::string cstr = "\x16\x48"; std::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 != std::string::npos) on = replystr[p + 6] ? 1 : 0; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); if (waitFOR(9, "get notch val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = 20*ceil(fm_bcd(replystr.substr(p + 6),3) - 128); } } return on; } void RIG_IC746PRO::get_notch_min_max_step(int &min, int &max, int &step) { min = -1280; max = 1280; step = 20; } void RIG_IC746PRO::set_rf_gain(int val) { int ICrfg = val * 255 / 100; cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(ICrfg, 3)); cmd.append( post ); waitFB("set rf gain"); } int RIG_IC746PRO::get_rf_gain() { std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get rfgain")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55); } return progStatus.rfgain; } void RIG_IC746PRO::set_squelch(int val) { int IC746PROsql = val * 255 / 100; cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(IC746PROsql, 3)); cmd.append( post ); waitFB("set sql"); } int RIG_IC746PRO::get_squelch() { std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get sql")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return progStatus.squelch; } void RIG_IC746PRO::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((int)(val * 2.55), 3)); cmd.append( post ); waitFB("set power"); } double RIG_IC746PRO::get_power_control() { std::string cstr = "\x14\x0A"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr).append(post); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55); } return progStatus.power_level; } void RIG_IC746PRO::set_preamp(int val) { if (preamp_level == 0) { preamp_level = 1; } else if (preamp_level == 1) { preamp_level = 2; } else if (preamp_level == 2) { preamp_level = 0; } cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char) preamp_level; cmd.append( post ); waitFB("set preamp"); } int RIG_IC746PRO::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get preamp")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { preamp_level = 1; } else if (replystr[p+6] == 0x02) { preamp_level = 2; } else { preamp_level = 0; } } } return preamp_level; } const char *RIG_IC746PRO::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_IC746PRO::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } int RIG_IC746PRO::get_mic_gain() { std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_IC746PRO::set_mic_gain(int val) { val = (int)(val * 2.55); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); } void RIG_IC746PRO::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC746PRO::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); } void RIG_IC746PRO::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC746PRO::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC746PRO::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC746PRO::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC746PRO::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC746PRO::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); } int RIG_IC746PRO::get_split() { return split; } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC746PRO::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; if ((bandmode == 0 || bandmode == 1) && banddata) bandmode += 7; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC746PRO::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; if (mode >= 7) cmd += '\x10'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } flrig-2.0.04/src/rigs/icom/IC7300.cxx0000664000175000017500000015007414502732364013653 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // Modified: January 2017 // Andy Stewart, KB1OIQ // Updated: June 2018 // Cliff Scott, AE5ZA // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include "icom/IC7300.h" #include "status.h" #include "trace.h" #include "support.h" //============================================================================= // IC-7300 const char IC7300name_[] = "IC-7300"; // these are only defined in this file // undef'd at end of file #define NUM_FILTERS 3 #define NUM_MODES 12 static int mode_filterA[NUM_MODES] = {1,1,1,1,1,1,1,1,1,1,1,1}; static int mode_filterB[NUM_MODES] = {1,1,1,1,1,1,1,1,1,1,1,1}; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; 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 { LSB7300, USB7300, AM7300, FM7300, CW7300, CWR7300, RTTY7300, RTTYR7300, LSBD7300, USBD7300, AMD7300, FMD7300 }; static std::vectorIC7300modes_; static const char *vIC7300modes_[] = { "LSB", "USB", "AM", "FM", "CW", "CW-R", "RTTY", "RTTY-R", "LSB-D", "USB-D", "AM-D", "FM-D"}; char IC7300_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'U', 'U' }; const char IC7300_mode_nbr[] = { 0x00, 0x01, 0x02, 0x05, 0x03, 0x07, 0x04, 0x08, 0x00, 0x01, 0x02, 0x05 }; static std::vectorIC7300_ssb_bws; static const char *vIC7300_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600" }; static int IC7300_bw_vals_SSB[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40, WVALS_LIMIT}; static std::vectorIC7300_rtty_bws; static const char *vIC7300_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700" }; static int IC7300_bw_vals_RTTY[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31, WVALS_LIMIT}; static std::vectorIC7300_am_bws; static const char *vIC7300_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7300", "7400", "7300", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000" }; static int IC7300_bw_vals_AM[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49 WVALS_LIMIT}; static std::vectorIC7300_fm_bws; static const char *vIC7300_fm_bws[] = { "FIXED" }; static int IC7300_bw_vals_FM[] = { 1, WVALS_LIMIT}; static GUI IC7300_widgets[]= { { btnVol, 2, 125, 50 }, //0 { sldrVOLUME, 54, 125, 156 }, //1 { btnAGC, 2, 145, 50 }, //2 { sldrRFGAIN, 54, 145, 156 }, //3 { sldrSQUELCH, 54, 165, 156 }, //4 { btnNR, 2, 185, 50 }, //5 { sldrNR, 54, 185, 156 }, //6 { btnLOCK, 214, 105, 50 }, //7 { sldrINNER, 266, 105, 156 }, //8 { btnCLRPBT, 214, 125, 50 }, //9 { sldrOUTER, 266, 125, 156 }, //10 { btnNotch, 214, 145, 50 }, //11 { sldrNOTCH, 266, 145, 156 }, //12 { sldrMICGAIN, 266, 165, 156 }, //13 { sldrPOWER, 266, 185, 156 }, //14 { NULL, 0, 0, 0 } }; void RIG_IC7300::initialize() { VECTOR (IC7300modes_, vIC7300modes_); VECTOR (IC7300_ssb_bws, vIC7300_ssb_bws); VECTOR (IC7300_rtty_bws, vIC7300_rtty_bws); VECTOR (IC7300_am_bws, vIC7300_am_bws); VECTOR (IC7300_fm_bws, vIC7300_fm_bws); name_ = IC7300name_; modes_ = IC7300modes_; bandwidths_ = IC7300_ssb_bws; bw_vals_ = IC7300_bw_vals_SSB; _mode_type = IC7300_mode_type; IC7300_widgets[0].W = btnVol; IC7300_widgets[1].W = sldrVOLUME; IC7300_widgets[2].W = btnAGC; IC7300_widgets[3].W = sldrRFGAIN; IC7300_widgets[4].W = sldrSQUELCH; IC7300_widgets[5].W = btnNR; IC7300_widgets[6].W = sldrNR; IC7300_widgets[7].W = btnLOCK; IC7300_widgets[8].W = sldrINNER; IC7300_widgets[9].W = btnCLRPBT; IC7300_widgets[10].W = sldrOUTER; IC7300_widgets[11].W = btnNotch; IC7300_widgets[12].W = sldrNOTCH; IC7300_widgets[13].W = sldrMICGAIN; IC7300_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC7300::RIG_IC7300() { defaultCIV = 0x94; adjustCIV(defaultCIV); name_ = IC7300name_; modes_ = IC7300modes_; bandwidths_ = IC7300_ssb_bws; bw_vals_ = IC7300_bw_vals_SSB; _mode_type = IC7300_mode_type; serial_baudrate = BR115200; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = IC7300_widgets; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 9; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 9; B.iBW = 34; has_extras = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_cw_break_in = true; has_vox_onoff = true; has_vox_gain = true; has_vox_anti = true; has_vox_hang = true; has_compON = true; has_compression = true; has_split = true; has_split_AB = true; has_micgain_control = true; has_bandwidth_control = true; has_smeter = true; has_voltmeter = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_idd_control = true; has_sql_control = true; has_agc_control = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_attenuator_control = true; has_preamp_control = true; has_noise_control = true; has_nb_level = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_pbt_controls = true; has_FILTER = true; has_rf_control = true; has_ptt_control = true; has_tune_control = true; has_band_selection = true; has_xcvr_auto_on_off = true; precision = 1; ndigits = 8; has_vfo_adj = true; can_change_alt_vfo = true; has_a2b = true; inuse = onA; can_synch_clock = true; CW_sense = 0; // CW is LSB // progStatus.gettrace = // progStatus.settrace = // progStatus.serialtrace = // progStatus.rigtrace = // progStatus.xmltrace = // progStatus.trace = false; // progStatus.gettrace = true; // progStatus.settrace = true; // progStatus.serialtrace = true; // progStatus.rigtrace = true; // progStatus.xmltrace = true; // progStatus.trace = true; }; static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } void RIG_IC7300::selectA() { cmd.assign(pre_to).append("\x07"); cmd += '\x00'; cmd.append(post); set_trace(1, "select A"); waitFB("select A"); seth(); inuse = onA; } void RIG_IC7300::selectB() { cmd.assign(pre_to).append("\x07"); cmd += '\x01'; cmd.append(post); set_trace(1, "select B"); waitFB("select B"); seth(); inuse = onB; } //====================================================================== // IC7300 unique commands //====================================================================== bool RIG_IC7300::canswap() { return true; } void RIG_IC7300::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; cmd.append(post); set_trace(1, "swap AB"); waitFB("Exchange vfos"); seth(); get_modeA(); // get mode to update the filter A / B usage get_modeB(); } static int ret = 0; static bool xcvr_is_on = false; void RIG_IC7300::set_xcvr_auto_on() { cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); RigSerial->failed(0); if (waitFOR(8, "get ID", 100) == false) { cmd.clear(); int fes[] = { 2, 2, 2, 3, 7, 13, 25, 50, 75, 150, 150, 150 }; if (progStatus.serial_baudrate >= 0 && progStatus.serial_baudrate <= 11) { cmd.append( fes[progStatus.serial_baudrate], '\xFE'); } RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); std::string tempbuf; RigSerial->ReadBuffer(tempbuf, 150); cmd.assign(pre_to); cmd += '\x18'; cmd += '\x01'; cmd.append(post); RigSerial->failed(0); if ( waitFB("Power ON", 100) ) { // 5 second delay for (size_t n = 0; n < 50; n++) { Fl::awake(); MilliSleep(100); update_progress(2 * n); } update_progress(0); xcvr_is_on = true; cmd = pre_to; cmd += '\x19'; cmd += '\x00'; get_trace(1, "getID()"); cmd.append(post); int i = 0; for (i = 0; i < 50; i++) { // 5 second total timeout if (waitFOR(8, "get ID", 100) == true) { RigSerial->failed(0); update_progress(0); return; } update_progress(2 * i); Fl::awake(); } } update_progress(0); set_trace(1, "power_ON failed"); RigSerial->failed(1); xcvr_is_on = false; return; } xcvr_is_on = true; } void RIG_IC7300::set_xcvr_auto_off() { cmd.clear(); cmd.append(pre_to); cmd += '\x18'; cmd += '\x00'; cmd.append(post); set_trace(1, "set xcvr auto OFF"); waitFB("Power OFF", 200); seth(); } // --------------------------------------------------------------------- // set date and time // 1A 05 00 95 HH MM : set time // 1A 05 00 94 YY YY MM DD : set date // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_IC7300::sync_date(char *dt) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x94'; unsigned char val; val = ((dt[0] - '0') << 4) + (dt[1] - '0'); cmd += (val & 0xFF); val = ((dt[2] - '0') << 4) + (dt[3] - '0'); cmd += (val & 0xFF); val = ((dt[4] - '0') << 4) + (dt[5] - '0'); cmd += (val & 0xFF); val = ((dt[6] - '0') << 4) + (dt[7] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_IC7300::sync_clock(char *tm) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x95'; unsigned char val; val = ((tm[0] - '0') << 4) + (tm[1] - '0'); cmd += (val & 0xFF); val = ((tm[3] - '0') << 4) + (tm[4] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } bool RIG_IC7300::check () { if (xcvr_is_on) return true; cmd = pre_to; cmd += '\x19'; cmd += '\x00'; cmd.append(post); return (xcvr_is_on = waitFOR(8, "get ID")); } unsigned long long RIG_IC7300::get_vfoA () { std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); if (inuse == onB) { cmd += '\x01'; resp += '\x01'; } else { cmd += '\x00'; resp += '\x00'; } cmd.append(post); ret = waitFOR(12, "get vfo A"); // igett("vfo A"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+6), 10); } } return A.freq; } void RIG_IC7300::set_vfoA (unsigned long long freq) { // set_trace(1, "set_vfoA()"); A.freq = freq; cmd.assign(pre_to).append("\x25"); if (inuse == onB) cmd += '\x01'; else cmd += '\x00'; cmd.append( to_bcd_be( freq, 10) ); cmd.append( post ); set_trace(1, "set_vfoA"); waitFB("set vfo A"); seth(); } unsigned long long RIG_IC7300::get_vfoB () { std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); if (inuse == onB) { cmd += '\x00'; resp += '\x00'; } else { cmd += '\x01'; resp += '\x01'; } cmd.append(post); ret = waitFOR(12, "get vfo B"); // igett("vfo B"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+6), 10); } } return B.freq; } void RIG_IC7300::set_vfoB (unsigned long long freq) { // set_trace(1, "set_vfoB()"); B.freq = freq; cmd.assign(pre_to).append("\x25"); if (inuse == onB) cmd += '\x00'; else cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "set_vfoB"); waitFB("set vfo B"); seth(); } // expecting // 0 1 2 3 4 5 6 7 8 9 // FE FE E0 94 26 NN NN NN NN FD // | | | | // | | | |__filter setting, 01, 02, 03 // | | |_____data mode, 00 - off, 01 - on // | |________Mode 00 - LSB // | 01 - USB // | 02 - AM // | 03 - CW // | 04 - RTTY // | 05 - FM // | 07 - CW-R // | 08 - RTTY-R // |___________selected vfo, 00 - active, 01 - inactive int RIG_IC7300::get_modeA() { int md = 0; size_t p; std::string resp; cmd.assign(pre_to).append("\x26"); resp.assign(pre_fm).append("\x26"); if (inuse == onB) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); ret = waitFOR(10, "get mode A"); igett("mode A"); if (ret) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeA; if (replystr[p+6] == -1) { md = A.imode = 0; } else { 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) A.imode += 8; if (A.imode > 11) A.imode = 1; break; } } A.filter = replystr[p+8]; if (A.filter > 0 && A.filter < 4) mode_filterA[A.imode] = A.filter; } } end_wait_modeA: get_trace(4, "get mode A [", IC7300modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (A.imode == CW7300 || A.imode == CWR7300) { cmd.assign(pre_to).append("\x1A\x05"); cmd += '\x00'; cmd += '\x53'; cmd.append(post); resp.assign(pre_fm).append("\x1A\x05"); resp += '\x00'; resp += '\x53'; get_trace(1, "get_CW_sideband"); ret = waitFOR(10, "get CW sideband"); geth(); if (ret) { p = replystr.rfind(resp); CW_sense = replystr[p+8]; if (CW_sense) { IC7300_mode_type[CW7300] = 'U'; IC7300_mode_type[CWR7300] = 'L'; } else { IC7300_mode_type[CW7300] = 'L'; IC7300_mode_type[CWR7300] = 'U'; } } } return A.imode; } // LSB USB AM CW RTTY FM CW-R RTTY-R LSB-D USB-D // 0 1 2 3 4 5 6 7 8 9 void RIG_IC7300::set_modeA(int val) { A.imode = val; cmd.assign(pre_to); cmd += '\x26'; if (inuse == onB) cmd += '\x01'; // unselected vfo else cmd += '\x00'; // selected vfo cmd += IC7300_mode_nbr[A.imode]; // operating mode if (A.imode >= LSBD7300) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += mode_filterA[A.imode]; // filter cmd.append( post ); set_trace(1, "set mode A"); waitFB("set mode A"); seth(); } int RIG_IC7300::get_modeB() { int md = 0; size_t p; std::string resp; cmd.assign(pre_to).append("\x26"); resp.assign(pre_fm).append("\x26"); if (inuse == onB) cmd += '\x00'; // active vfo else cmd += '\x01'; // inactive vfo cmd.append(post); ret = waitFOR(10, "get mode B"); igett("mode B"); if (ret) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeB; if (replystr[p+6] == -1) { md = filA = 0; } else { 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) B.imode += 8; if (B.imode > 11) B.imode = 1; break; } } B.filter = replystr[p+8]; } } end_wait_modeB: get_trace(4, "get mode B [", IC7300modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); if (B.filter > 0 && B.filter < 4) mode_filterB[B.imode] = B.filter; if (B.imode == CW7300 || B.imode == CWR7300) { cmd.assign(pre_to).append("\x1A\x05"); cmd += '\x00'; cmd += '\x53'; cmd.append(post); resp.assign(pre_fm).append("\x1A\x05"); resp += '\x00'; resp += '\x53'; get_trace(1, "get_CW_sideband"); ret = waitFOR(10, "get CW sideband"); geth(); if (ret) { p = replystr.rfind(resp); CW_sense = replystr[p+8]; if (CW_sense) { IC7300_mode_type[CW7300] = 'U'; IC7300_mode_type[CWR7300] = 'L'; } else { IC7300_mode_type[CW7300] = 'L'; IC7300_mode_type[CWR7300] = 'U'; } } } return B.imode; } void RIG_IC7300::set_modeB(int val) { B.imode = val; cmd.assign(pre_to); cmd += '\x26'; if (inuse == onB) cmd += '\x00'; // selected vfo else cmd += '\x01'; // unselected vfo cmd += IC7300_mode_nbr[B.imode]; // operating mode if (B.imode >= LSBD7300) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += mode_filterB[B.imode]; // filter cmd.append( post ); set_trace(1, "set mode B"); waitFB("set mode B"); seth(); } int RIG_IC7300::get_FILT(int mode) { if (inuse == onB) return mode_filterB[mode]; return mode_filterA[mode]; } void RIG_IC7300::set_FILT(int filter) { if (filter < 1 || filter > 3) return; if (inuse == onB) { B.filter = filter; mode_filterB[B.imode] = filter; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; // selected vfo cmd += IC7300_mode_nbr[B.imode]; // operating mode if (B.imode >= LSBD7300) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += filter; // filter cmd.append( post ); set_trace(1, "set mode/filter B"); waitFB("set mode/filter B"); seth(); } else { A.filter = filter; mode_filterA[A.imode] = filter; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; // selected vfo cmd += IC7300_mode_nbr[A.imode]; // operating mode if (A.imode >= LSBD7300) cmd += '\x01'; // data mode else cmd += '\x00'; cmd += filter; // filter cmd.append( post ); set_trace(1, "set mode/filter A"); waitFB("set mode/filter A"); seth(); } } const char *RIG_IC7300::FILT(int val) { if (val < 1) val = 1; if (val > 3) val = 3; return(szfilter[val - 1]); } const char * RIG_IC7300::nextFILT() { int val = A.filter; if (inuse == onB) val = B.filter; val++; if (val > 3) val = 1; set_FILT(val); return szfilter[val - 1]; } void RIG_IC7300::set_FILTERS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterB[i]; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } } std::string RIG_IC7300::get_FILTERS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } for (int i = 0; i < NUM_MODES; i++) s << mode_filterA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_filterB[i] << " "; return s.str(); } std::string RIG_IC7300::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_IC7300::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } bool RIG_IC7300::can_split() { return true; } void RIG_IC7300::set_split(bool val) { // set_trace(1, "set_split()"); split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); set_trace(1, "set_split"); waitFB(val ? "set split ON" : "set split OFF"); seth(); } int RIG_IC7300::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); ret = waitFOR(7, "get split"); igett("split"); if (ret) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } return split; } int RIG_IC7300::get_bwA() { if (A.imode == 3 || A.imode == 11) return 0; // FM, FM-D int current_vfo = inuse; if (current_vfo == onB) selectA(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); int bwval = A.iBW; ret = waitFOR(8, "get_bwA"); igett("bw A"); if (ret) { std::string resp = pre_fm; resp.append("\x1A\x03"); size_t p = replystr.find(resp); if (p != std::string::npos) bwval = fm_bcd(replystr.substr(p+6), 2); } if (bwval != A.iBW) { A.iBW = bwval; mode_bwA[A.imode] = bwval; } if (current_vfo == onB) selectB(); return A.iBW; } void RIG_IC7300::set_bwA(int val) { // set_trace(1, "set_bwA()"); if (A.imode == 3 || A.imode == 11) return; // FM, FM-D A.iBW = val; int current_vfo = inuse; if (current_vfo == onB) selectA(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); set_trace(1, "set bw A"); waitFB("set bwA"); seth(); mode_bwA[A.imode] = val; set_pbt_inner(progStatus.pbt_inner); set_pbt_outer(progStatus.pbt_outer); if (current_vfo == onB) selectB(); } int RIG_IC7300::get_bwB() { if (B.imode == 3 || B.imode == 11) return 0; // FM, FM-D int current_vfo = inuse; if (current_vfo == onA) selectB(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); int bwval = B.iBW; ret = waitFOR(8, "get_bwB"); igett("bw B"); if (ret) { std::string resp = pre_fm; resp.append("\x1A\x03"); size_t p = replystr.find(resp); if (p != std::string::npos) bwval = fm_bcd(replystr.substr(p+6), 2); } if (bwval != B.iBW) { B.iBW = bwval; mode_bwB[B.imode] = bwval; } if (current_vfo == onA) selectA(); return B.iBW; } void RIG_IC7300::set_bwB(int val) { // set_trace(1, "set_bwB()"); if (B.imode == 3 || B.imode == 11) return; // FM, FM-D B.iBW = val; int current_vfo = inuse; if (current_vfo == onA) selectB(); cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); set_trace(1, "set bw B"); waitFB("set bwB"); seth(); mode_bwB[B.imode] = val; set_pbt_inner(progStatus.pbt_inner); set_pbt_outer(progStatus.pbt_outer); if (current_vfo == onA) selectA(); } // LSB USB AM FM CW CW-R RTTY RTTY-R LSB-D USB-D AM-D FM-D // 0 1 2 3 4 5 6 7 8 9 10 11 int RIG_IC7300::adjust_bandwidth(int m) { int bw = 0; switch (m) { case AM7300: case AMD7300: // AM, AM-D bandwidths_ = IC7300_am_bws; bw_vals_ = IC7300_bw_vals_AM; bw = 19; break; case FM7300: case FMD7300: // FM, FM-D bandwidths_ = IC7300_fm_bws; bw_vals_ = IC7300_bw_vals_FM; bw = 0; break; case RTTY7300: case RTTYR7300: // RTTY, RTTY-R bandwidths_ = IC7300_rtty_bws; bw_vals_ = IC7300_bw_vals_RTTY; bw = 12; break; case CW7300: case CWR7300: // CW, CW -R bandwidths_ = IC7300_ssb_bws; bw_vals_ = IC7300_bw_vals_SSB; bw = 12; break; case LSB7300: case USB7300: // LSB, USB case LSBD7300: case USBD7300: // LSB-D, USB-D default: bandwidths_ = IC7300_ssb_bws; bw_vals_ = IC7300_bw_vals_SSB; bw = 34; } return bw; } std::vector& RIG_IC7300::bwtable(int m) { switch (m) { case AM7300: case AMD7300: // AM, AM-D return IC7300_am_bws; break; case FM7300: case FMD7300: // FM, FM-D return IC7300_fm_bws; break; case RTTY7300: case RTTYR7300: // RTTY, RTTY-R return IC7300_rtty_bws; break; case CW7300: case CWR7300: // CW, CW -R case LSB7300: case USB7300: // LSB, USB case LSBD7300: case USBD7300: // LSB-D, USB-D default: return IC7300_ssb_bws; } return IC7300_ssb_bws; } int RIG_IC7300::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } int RIG_IC7300::get_mic_gain() { int val = 0; std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); ret = waitFOR(9, "get mic"); igett("mic"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return val; } void RIG_IC7300::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set mic gain"); waitFB("set mic gain"); seth(); } void RIG_IC7300::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } static int comp_level[] = {11,34,58,81,104,128,151,174,197,221,244}; void RIG_IC7300::set_compression(int on, int val) { cmd = pre_to; cmd.append("\x16\x44"); if (on) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); set_trace(1, "set comp on/off"); waitFB("set Comp ON/OFF"); seth(); if (val < 0) return; if (val > 10) return; cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(comp_level[val], 3)); cmd.append( post ); set_trace(1, "set comp"); waitFB("set comp"); seth(); } void RIG_IC7300::get_compression(int &on, int &val) { std::string resp; cmd.assign(pre_to).append("\x16\x44").append(post); resp.assign(pre_fm).append("\x16\x44"); get_trace(1, "get comp on/off"); ret = waitFOR(8, "get comp on/off"); geth(); if (ret) { size_t p = replystr.find(resp); if (p != std::string::npos) on = (replystr[p+6] == 0x01); } cmd.assign(pre_to).append("\x14\x0E").append(post); resp.assign(pre_fm).append("\x14\x0E"); get_trace(1, "get_compression"); ret = waitFOR(9, "get comp level"); geth(); if (ret) { size_t p = replystr.find(resp); int level = 0; if (p != std::string::npos) { level = fm_bcd(replystr.substr(p+6), 3); for (val = 0; val < 11; val++) if (level <= comp_level[val]) break; } } } void RIG_IC7300::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); set_trace(1, "set vox on"); waitFB("set vox ON"); seth(); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; cmd.append( post ); set_trace(1, "set vox off"); waitFB("set vox OFF"); seth(); } } // Xcvr values range 0...255 step 1 void RIG_IC7300::get_vox_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7300::set_vox_gain() { int vox_gain = round((progStatus.vox_gain * 255 / 100 + 0.5)); minmax(0, 255, vox_gain); cmd.assign(pre_to).append("\x14\x16"); cmd.append(to_bcd(vox_gain, 3)); cmd.append( post ); set_trace(1, "set vox gain"); waitFB("SET vox gain"); seth(); } // Xcvr values range 0...255 step 1 void RIG_IC7300::get_vox_anti_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7300::set_vox_anti() { int vox_anti = round((progStatus.vox_anti * 255 / 100 + 0.5)); minmax(0, 255, vox_anti); cmd.assign(pre_to).append("\x14\x17"); cmd.append(to_bcd(vox_anti, 3)); cmd.append( post ); set_trace(1, "set anti vox"); waitFB("SET anti-vox"); seth(); } // VOX hang 0.0 - 2.0, step 0.1 // Xcvr values 0..20 step 1 void RIG_IC7300::get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 20; step = 1; } void RIG_IC7300::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05\x01\x91"); cmd.append(to_bcd(progStatus.vox_hang, 2)); cmd.append( post ); set_trace(1, "set vox hang"); waitFB("SET vox hang"); seth(); } //---------------------------------------------------------------------- // CW controls void RIG_IC7300::get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void RIG_IC7300::set_cw_wpm() { int iwpm = round((progStatus.cw_wpm - 6) * 255 / 42 + 0.5); minmax(0, 255, iwpm); cmd.assign(pre_to).append("\x14\x0C"); cmd.append(to_bcd(iwpm, 3)); cmd.append( post ); set_trace(1, "set cw wpm"); waitFB("SET cw wpm"); seth(); } void RIG_IC7300::set_break_in() { // 16 47 00 break-in off // 16 47 01 break-in semi // 16 47 02 break-in full cmd.assign(pre_to).append("\x16\x47"); switch (progStatus.break_in) { case 2: cmd += '\x02'; break_in_label("FULL"); break; case 1: cmd += '\x01'; break_in_label("SEMI"); break; case 0: default: cmd += '\x00'; break_in_label("BK-IN"); } cmd.append(post); set_trace(1, "set QSK"); waitFB("SET break-in"); seth(); } int RIG_IC7300::get_break_in() { cmd.assign(pre_to).append("\x16\x47").append(post); std::string resp; resp.assign(pre_fm); get_trace(1, "get_break_in()"); ret = waitFOR(8, "get break in"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::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_IC7300::get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void RIG_IC7300::set_cw_qsk() { int qsk = round ((progStatus.cw_qsk - 2.0) * 255.0 / 11.0 + 0.5); minmax(0, 255, qsk); cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(qsk, 3)); cmd.append(post); set_trace(1, "set cw QSK delay"); waitFB("Set cw qsk delay"); seth(); } void RIG_IC7300::get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void RIG_IC7300::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0 + 0.5); minmax(0, 255, n); cmd.append(to_bcd(n, 3)); cmd.append( post ); set_trace(1, "set cw spot tone"); waitFB("SET cw spot tone"); seth(); } void RIG_IC7300::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x24'; cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); set_trace(1, "set cw sideband volume"); waitFB("SET cw sidetone volume"); seth(); } // Tranceiver PTT on/off void RIG_IC7300::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); set_trace(1, "set PTT"); waitFB("set ptt"); seth(); ptt_ = val; } int RIG_IC7300::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); ret = waitFOR(8, "get PTT"); // igett("ptt"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } // Volume control val 0 ... 100 void RIG_IC7300::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set volume control"); waitFB("set vol"); seth(); } /* I:12:20:22: get vol ans in 0 ms, OK cmd FE FE 7A E0 14 01 FD ans FE FE 7A E0 14 01 FD FE FE E0 7A 14 01 00 65 FD 0 1 2 3 4 5 6 7 8 */ int RIG_IC7300::get_volume_control() { int val = 0; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get_volume_control()"); ret = waitFOR(9, "get vol"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return (val); } void RIG_IC7300::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC7300::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set power"); isett("set pwr"); } double RIG_IC7300::get_power_control() { int val = progStatus.power_level; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); ret = waitFOR(9, "get power"); // igett("power control"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7300::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; pmax = max = 100; step = 1; } int RIG_IC7300::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; get_trace(1, "get_smeter()"); ret = waitFOR(9, "get smeter"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr / 2.41); if (mtr > 100) mtr = 100; } } return mtr; } double RIG_IC7300::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; ret = waitFOR(9, "get voltmeter"); igett("voltmeter"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 0.026 * mtr + 9.782; return val; } } return -1; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { {0, 0}, {2, 0.5}, {3, 1.1}, {4, 1.7}, {6, 2.2}, {12, 3}, {15, 3.6}, {21, 5}, {25, 5.6}, {31, 7}, {34, 7.9}, {40, 9.6}, {42, 9.9}, {43, 10}, {46, 11}, {49, 12}, {65, 15}, {83, 20}, {95, 25}, {105, 30}, {118, 35}, {126, 40}, {143, 50}, {183, 75}, {220, 100}, {255, 120} }; int RIG_IC7300::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= 0; int val = 0; ret = waitFOR(9, "get power out"); igett("power out"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = hex2val(replystr.substr(p+6, 2)); mtr = std::max(0, std::min(mtr, 255)); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(*pwrtbl) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; val = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (val > 100) val = 100; } } return val; } struct swrpair {int mtr; float swr;}; // Table entries below correspond to SWR readings of 1.1, 1.5, 2.0, 2.5, 3.0 and infinity. // Values are also tweaked to fit the display of the SWR meter. static swrpair swrtbl[] = { {0, 0.0}, {48, 10.5}, {80, 23.0}, {103, 35.0}, {120, 48.0}, {255, 100.0 } }; int RIG_IC7300::get_swr(void) { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; ret = waitFOR(9, "get swr"); igett("swr"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(swrtbl) / sizeof(swrpair) - 1; i++) if (mtr >= swrtbl[i].mtr && mtr < swrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(swrtbl[i].swr + (swrtbl[i+1].swr - swrtbl[i].swr)*(mtr - swrtbl[i].mtr)/(swrtbl[i+1].mtr - swrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7300::get_alc(void) { get_trace(1, "get_alc()"); std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; ret = waitFOR(9, "get alc"); igett("alc"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /1.2); if (mtr > 100) mtr = 100; } } return mtr; } double RIG_IC7300::get_idd(void) { get_trace(1, "get_idd()"); std::string cstr = "\x15\x16"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); double mtr= 0; ret = waitFOR(9, "get idd"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = 25.0 * mtr / 241.0; if (mtr > 25) mtr = 25; } } return mtr; } void RIG_IC7300::set_rf_gain(int val) { cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set rf gain"); waitFB("set RF"); seth(); } int RIG_IC7300::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); get_trace(1, "get_rf_gain"); ret = waitFOR(9, "get RF"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } return val; } void RIG_IC7300::get_rf_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } const char *RIG_IC7300::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Amp 1"; break; case 2: return "Amp 2"; break; } return "PRE"; } int RIG_IC7300::next_preamp() { if (atten_level == 1) return preamp_level; switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC7300::set_preamp(int val) { if (val) { atten_level = 0; } cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char)val; cmd.append( post ); set_trace(1, "set_preamp"); waitFB( (preamp_level == 0) ? "set Preamp OFF" : (preamp_level == 1) ? "set Preamp Level 1" : "set Preamp Level 2"); seth(); int tries = 50; while (get_preamp() != val && tries) { MilliSleep(1); tries--; } } int RIG_IC7300::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get_preamp()"); ret = waitFOR(8, "get Preamp Level"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { preamp_level = replystr[p+6]; } } return preamp_level; } const char *RIG_IC7300::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } void RIG_IC7300::set_attenuator(int val) { if (val) { atten_level = 1; preamp_level = 0; } else { atten_level = 0; } cmd = pre_to; cmd += '\x11'; cmd += atten_level ? '\x20' : '\x00'; cmd.append( post ); set_trace(1, "set attenuator"); waitFB("set att"); seth(); } int RIG_IC7300::next_attenuator() { if (atten_level) return 0; return 1; } int RIG_IC7300::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; get_trace(1, "get_attenuator()"); ret = waitFOR(7, "get ATT"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == 0x20) { atten_level = 1; } else { atten_level = 0; } } } return atten_level; } void RIG_IC7300::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); set_trace(1, "set noise"); waitFB("set noise"); seth(); } int RIG_IC7300::get_noise() { int val = progStatus.noise; std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get_noice()"); ret = waitFOR(8, "get noise"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+6]; } } return val; } void RIG_IC7300::set_nb_level(int val) { cmd = pre_to; cmd.append("\x14\x12"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set nb level"); waitFB("set NB level"); seth(); } int RIG_IC7300::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x14\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get_nb_level()"); ret = waitFOR(9, "get NB level"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7300::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); set_trace(1, "set noise reduction"); waitFB("set NR"); seth(); } int RIG_IC7300::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get_noise_reduction()"); ret = waitFOR(8, "get NR"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise_reduction; } /* I:12:06:50: get NR ans in 0 ms, OK cmd FE FE 7A E0 16 40 FD ans FE FE 7A E0 16 40 FD FE FE E0 7A 16 40 01 FD 0 1 2 3 4 5 6 7 I:12:06:50: get NRval ans in 0 ms, OK cmd FE FE 7A E0 14 06 FD ans FE FE 7A E0 14 06 FD FE FE E0 7A 14 06 00 24 FD 0 1 2 3 4 5 6 7 8 */ void RIG_IC7300::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val *= 16; val += 8; cmd.append(to_bcd(val, 3)); cmd.append(post); set_trace(1, "set noise reduction val"); waitFB("set NRval"); seth(); } int RIG_IC7300::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get_noise_reduction_val()"); ret = waitFOR(9, "get NRval"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val -= 8; val /= 16; } } return val; } void RIG_IC7300::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set squelch"); waitFB("set Sqlch"); seth(); } #include int RIG_IC7300::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get_squelch()"); ret = waitFOR(9, "get squelch"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7300::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += (unsigned char)val; cmd.append( post ); set_trace(1, "set auto notch"); waitFB("set AN"); seth(); } int RIG_IC7300::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get_auto_notch()"); ret = waitFOR(8, "get AN"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } void RIG_IC7300::set_notch(bool on, int freq) { 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: if (CW_sense) hexval = freq - progStatus.cw_spot_tone; else hexval = progStatus.cw_spot_tone - freq; break; case CWR7300: if (CW_sense) hexval = progStatus.cw_spot_tone - freq; else 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); set_trace(1, "set_notch"); waitFB("set notch"); seth(); cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(hexval,3)); cmd.append(post); set_trace(1, "set notch value"); waitFB("set notch val"); seth(); } bool RIG_IC7300::get_notch(int &val) { bool on = false; val = 1500; std::string cstr = "\x16\x48"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get_notch()"); ret = waitFOR(8, "get notch"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p == std::string::npos) { return 0; } on = replystr[p + 6]; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); get_trace(1, "notch val"); ret = waitFOR(9, "notch val"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p == std::string::npos) { return 0; } else { 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: if (CW_sense) val = progStatus.cw_spot_tone + val; else val = progStatus.cw_spot_tone - val; break; case CWR7300: if (CW_sense) val = progStatus.cw_spot_tone - val; else val = progStatus.cw_spot_tone + val; break; } } } } return on; } void RIG_IC7300::get_notch_min_max_step(int &min, int &max, int &step) { 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() { std::string cstr = "\x16\x12"; cmd = pre_to; cmd.append(cstr); cmd.append(post); std::string retstr = pre_fm; retstr.append(cstr); get_trace(1, "get_agc"); ret = waitFOR(8, "get AGC"); geth(); if (ret) { size_t p = replystr.find(retstr); if (p != std::string::npos) agcval = replystr[p+6]; // 1 == FAST, 2 = MED, 3 = SLOW } return agcval; } int RIG_IC7300::incr_agc() { agcval++; if (agcval == 4) agcval = 1; cmd = pre_to; cmd.append("\x16\x12"); cmd += agcval; cmd.append(post); set_trace(1, "set AGC"); waitFB("set AGC"); seth(); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "MED", "SLO"}; const char *RIG_IC7300::agc_label() { return agcstrs[agcval]; } int RIG_IC7300::agc_val() { return (agcval); } void RIG_IC7300::set_pbt_inner(int val) { cmd = pre_to; cmd.append("\x14\x07"); cmd.append(bcd255(val + 50)); cmd.append(post); set_trace(1, "set_pbt_inner()"); waitFB("set PBT inner"); seth(); } void RIG_IC7300::set_pbt_outer(int val) { cmd = pre_to; cmd.append("\x14\x08"); cmd.append(bcd255(val + 50)); cmd.append(post); set_trace(1, "set_pbt_outer()"); waitFB("set PBT outer"); seth(); } int RIG_IC7300::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get_pbt_inner()"); ret = waitFOR(9, "get pbt inner"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)) - 50; } } return val; } int RIG_IC7300::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get_pbt_outer"); ret = waitFOR(9, "get pbt outer"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)) - 50; } } return val; } void RIG_IC7300::setVfoAdj(double v) { vfo_ = v; cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x58'; int vint = roundf(v * 2.55); cmd += (vint / 100); vint %= 100; cmd += ((vint % 10) + ((vint / 10) << 4)); cmd.append(post); set_trace(1, "set VFO adjust"); waitFB("SET vfo adjust"); seth(); MilliSleep(100); getVfoAdj(); } double RIG_IC7300::getVfoAdj() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x58'; cmd.append(post); get_trace(1, "getVFOadj"); ret = waitFOR(11, "get vfo adj"); geth(); if (ret) { size_t p = replystr.find(pre_fm); if (p != std::string::npos) { vfo_ = 100 * (replystr[p+8] & 0x0F) + 10 * ((replystr[p+9] & 0xF0) >> 4) + (replystr[p+9] & 0x0F); vfo_ /= 2.55; } } return vfo_; } void RIG_IC7300::get_vfoadj_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 0.3922; } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC7300::get_band_selection(int v) { std::string cstr = "\x1A\x01"; std::string retstr = pre_fm; retstr.append(cstr); cmd.assign(pre_to); cmd.append(cstr); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); get_trace(1, "get_band_selection()"); ret = waitFOR(23, "get band stack"); geth(); if (ret) { size_t p = replystr.rfind(retstr); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; if ((bandmode < 4) && banddata) bandmode += 8; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } } void RIG_IC7300::set_band_selection(int v) { // set_trace(1, "set_band_selection()"); unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? B.filter : A.filter); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += IC7300_mode_nbr[mode]; cmd += fil; if (mode >= 7) cmd += '\x10'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); set_trace(1, "set_band_selection"); waitFB("set_band_selection"); seth(); } /* rn - register number 1/2/3 f5..f1 - frequency BCD reverse mo - mode fi - filter # fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode t1..t3 - tx tone BCD fwd r1..r3 - rx tone BCD fwd FE FE 94 E0 1A 01 05 01 FD FE FE E0 94 1A 01 05 01 00 00 07 14 00 01 03 10 00 10 00 00 08 85 FD */ flrig-2.0.04/src/rigs/icom/IC756PRO3.cxx0000664000175000017500000007067214502720327014250 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC756PRO3.h" #include "debug.h" #include "status.h" #include "support.h" //============================================================================= // 756PRO-III const char IC756PRO3name_[] = "IC-756PRO-III"; static std::vectorIC756PRO3modes_; static const char *vIC756PRO3modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "D-LSB", "D-USB", "D-FM"}; const char IC756PRO3_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'U' }; static std::vectorIC756PRO3_SSBwidths; static const char *vIC756PRO3_SSBwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static int IC756PRO3_bw_vals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41, WVALS_LIMIT}; static std::vectorIC756PRO3_RTTYwidths; static const char *vIC756PRO3_RTTYwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static int IC756PRO3_bw_vals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32, WVALS_LIMIT}; static std::vectorIC756PRO3_AMFMwidths; static const char *vIC756PRO3_AMFMwidths[] = { "FILT-1", "FILT-2", "FILT-3" }; static int IC756PRO3_bw_vals_AMFM[] = { 1,2,3, WVALS_LIMIT}; static GUI IC756PRO3_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC756PRO3::initialize() { VECTOR (IC756PRO3modes_, vIC756PRO3modes_); VECTOR (IC756PRO3_SSBwidths, vIC756PRO3_SSBwidths); VECTOR (IC756PRO3_RTTYwidths, vIC756PRO3_RTTYwidths); VECTOR (IC756PRO3_AMFMwidths, vIC756PRO3_AMFMwidths); modes_ = IC756PRO3modes_; bandwidths_ = IC756PRO3_SSBwidths; bw_vals_ = IC756PRO3_bw_vals_SSB; IC756PRO3_widgets[0].W = btnVol; IC756PRO3_widgets[1].W = sldrVOLUME; IC756PRO3_widgets[2].W = btnAGC; IC756PRO3_widgets[3].W = sldrRFGAIN; IC756PRO3_widgets[4].W = sldrSQUELCH; IC756PRO3_widgets[5].W = btnNR; IC756PRO3_widgets[6].W = sldrNR; IC756PRO3_widgets[7].W = btnLOCK; IC756PRO3_widgets[8].W = sldrINNER; IC756PRO3_widgets[9].W = btnCLRPBT; IC756PRO3_widgets[10].W = sldrOUTER; IC756PRO3_widgets[11].W = btnNotch; IC756PRO3_widgets[12].W = sldrNOTCH; IC756PRO3_widgets[13].W = sldrMICGAIN; IC756PRO3_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC756PRO3::RIG_IC756PRO3() { defaultCIV = 0x6E; name_ = IC756PRO3name_; modes_ = IC756PRO3modes_; bandwidths_ = IC756PRO3_SSBwidths; bw_vals_ = IC756PRO3_bw_vals_SSB; // serial_write_delay = 0; // serial_post_write_delay = 0; _mode_type = IC756PRO3_mode_type; atten_level = 3; // will force initializing to 0 dB preamp_level = 2; // will force initializaing to 0 dB widgets = IC756PRO3_widgets; def_freq = freqA = freqB = A.freq = 14070000ULL; def_mode = modeA = modeB = B.imode = 1; def_bw = bwA = bwB = A.iBW = B.iBW = 32; has_extras = has_split = has_split_AB = has_bandwidth_control = has_pbt_controls = true; has_FILTER = true; has_tune_control = has_swr_control = has_alc_control = has_smeter = has_power_out = has_power_control = has_volume_control = has_mode_control = has_micgain_control = has_auto_notch = has_notch_control = has_attenuator_control = has_preamp_control = has_ptt_control = has_noise_reduction = has_noise_reduction_control = has_noise_control = has_sql_control = has_rf_control = has_a2b = true; has_band_selection = true; adjustCIV(defaultCIV); ICOMmainsub = true; precision = 1; ndigits = 9; filA = filB = 1; }; void RIG_IC756PRO3::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; cmd.append(post); waitFB("Exchange vfos"); } void RIG_IC756PRO3::A2B() { cmd = pre_to; cmd += 0x07; cmd += 0xB1; cmd.append(post); waitFB("Equalize vfos"); } void RIG_IC756PRO3::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\xB0'; cmd.append(post); waitFB("sel A"); inuse = onA; } void RIG_IC756PRO3::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\xB1'; cmd.append(post); waitFB("sel B"); inuse = onB; } bool RIG_IC756PRO3::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC756PRO3::get_vfoA () { if (inuse == onB) return A.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_IC756PRO3::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); } unsigned long long RIG_IC756PRO3::get_vfoB () { if (inuse == onA) return B.freq; std::string cstr = "\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) B.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return B.freq; } void RIG_IC756PRO3::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); } int RIG_IC756PRO3::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return 0; } int RIG_IC756PRO3::get_power_out() { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get pout")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return 0; } int RIG_IC756PRO3::get_alc() { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return 0; } int RIG_IC756PRO3::get_swr() { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return 0; } // Volume control val 0 ... 100 void RIG_IC756PRO3::set_volume_control(int val) { ICvol = (int)(val * 2.55); cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); } int RIG_IC756PRO3::get_volume_control() { std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_IC756PRO3::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // Tranceiver PTT on/off void RIG_IC756PRO3::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; } int RIG_IC756PRO3::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } // changed noise blanker to noise reduction void RIG_IC756PRO3::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); } int RIG_IC756PRO3::get_noise() { std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise; } void RIG_IC756PRO3::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); } int RIG_IC756PRO3::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise_reduction; } // 0 < val < 100 void RIG_IC756PRO3::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); cmd.append(to_bcd(val * 2.55, 3)); cmd.append(post); waitFB("set NR val"); } int RIG_IC756PRO3::get_noise_reduction_val() { std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NR val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return progStatus.noise_reduction_val; } int RIG_IC756PRO3::get_modetype(int n) { return _mode_type[n]; } int RIG_IC756PRO3::get_mic_gain() { std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_IC756PRO3::set_mic_gain(int val) { val = (int)(val * 2.55); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); } void RIG_IC756PRO3::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC756PRO3::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); } void RIG_IC756PRO3::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC756PRO3::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC756PRO3::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC756PRO3::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC756PRO3::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC756PRO3::set_squelch(int val) { int IC756PRO3sql = (int)(val * 2.55); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(IC756PRO3sql, 3)); cmd.append( post ); waitFB("set sql"); } int RIG_IC756PRO3::get_squelch() { std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get sql")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return progStatus.squelch; } void RIG_IC756PRO3::set_rf_gain(int val) { int IC756PRO3rfg = (int)(val * 2.55); cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(IC756PRO3rfg, 3)); cmd.append( post ); waitFB("set rf gain"); } int RIG_IC756PRO3::get_rf_gain() { std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get rfgain")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55); } return progStatus.rfgain; } void RIG_IC756PRO3::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((int)(val * 2.55), 3)); cmd.append( post ); waitFB("set power"); } double RIG_IC756PRO3::get_power_control() { std::string cstr = "\x14\x0A"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr).append(post); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55); } return progStatus.power_level; } void RIG_IC756PRO3::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); } int RIG_IC756PRO3::get_split() { return split; } int RIG_IC756PRO3::adjust_bandwidth(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) { //SSB bandwidths_ = IC756PRO3_SSBwidths; bw_vals_ = IC756PRO3_bw_vals_SSB; return (32); } if (m == 3 || m == 6) { //CW bandwidths_ = IC756PRO3_SSBwidths; bw_vals_ = IC756PRO3_bw_vals_SSB; return (14); } if (m == 4 || m == 7) { //RTTY bandwidths_ = IC756PRO3_RTTYwidths; bw_vals_ = IC756PRO3_bw_vals_RTTY; return (28); } bandwidths_ = IC756PRO3_AMFMwidths; bw_vals_ = IC756PRO3_bw_vals_AMFM; return (0); } int RIG_IC756PRO3::def_bandwidth(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) { //SSB return (32); } if (m == 3 || m == 6) { //CW return (14); } if (m == 4 || m == 7) { //RTTY return (28); } bandwidths_ = IC756PRO3_AMFMwidths; return (0); } std::vector& RIG_IC756PRO3::bwtable(int m) { if (m == 0 || m == 1 || m == 8 || m == 9) //SSB return IC756PRO3_SSBwidths; if (m == 3 || m == 6) //CW return IC756PRO3_SSBwidths; if (m == 4 || m == 7) //RTTY return IC756PRO3_RTTYwidths; return IC756PRO3_AMFMwidths; } void RIG_IC756PRO3::set_bwA(int val) { if (bandwidths_ == IC756PRO3_AMFMwidths) { A.iBW = val + 1; set_modeA(A.imode); return; } A.iBW = val; cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(A.iBW,2)); cmd.append( post ); waitFB("set bw A"); } int RIG_IC756PRO3::get_bwA() { if (bandwidths_ == IC756PRO3_AMFMwidths) { return A.iBW - 1; } std::string cstr = "\x1A\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get bw A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) A.iBW = (int)(fm_bcd(replystr.substr(p + 6), 2)); } return A.iBW; } void RIG_IC756PRO3::set_bwB(int val) { if (bandwidths_ == IC756PRO3_AMFMwidths) { B.iBW = val + 1; set_modeB(B.imode); return; } B.iBW = val; cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(B.iBW,2)); cmd.append( post ); waitFB("set bw B"); } int RIG_IC756PRO3::get_bwB() { if (bandwidths_ == IC756PRO3_AMFMwidths) { return B.iBW - 1; } std::string cstr = "\x1A\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get bw B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) B.iBW = (int)(fm_bcd(replystr.substr(p + 6), 2)); } return B.iBW; } bool IC756PRO3_notchon = false; void RIG_IC756PRO3::set_notch(bool on, int val) { int notch = (int)(val/20.0 + 128); if (notch > 256) notch = 255; if (on != IC756PRO3_notchon) { cmd = pre_to; cmd.append("\x16\x48"); cmd += on ? '\x01' : '\x00'; cmd.append(post); waitFB("set notch"); IC756PRO3_notchon = on; } if (on) { cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(notch,3)); cmd.append(post); waitFB("set notch val"); } } bool RIG_IC756PRO3::get_notch(int &val) { bool on = false; val = 0; std::string cstr = "\x16\x48"; std::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 != std::string::npos) on = replystr[p + 6] ? 1 : 0; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); if (waitFOR(9, "get notch val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = 20*ceil(fm_bcd(replystr.substr(p + 6),3) - 128); } } return on; } void RIG_IC756PRO3::get_notch_min_max_step(int &min, int &max, int &step) { min = -1280; max = 1280; step = 20; } int RIG_IC756PRO3::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_IC756PRO3::set_attenuator(int val) { atten_level = val; int cmdval = 0; if (atten_level == 1) { cmdval = 0x06; } else if (atten_level == 2) { cmdval = 0x12; } else if (atten_level == 3) { cmdval = 0x18; } else if (atten_level == 0) { cmdval = 0x00; } cmd = pre_to; cmd += '\x11'; cmd += cmdval; cmd.append( post ); waitFB("set att"); } int RIG_IC756PRO3::get_attenuator() { std::string cstr = "\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(7, "get att")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == 0x06) { atten_level = 1; } else if (replystr[p+5] == 0x12) { atten_level = 2; } else if (replystr[p+5] == 0x18) { atten_level = 3; } else if (replystr[p+5] == 0x00) { atten_level = 0; } } } return atten_level; } int RIG_IC756PRO3::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC756PRO3::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char) preamp_level; cmd.append( post ); waitFB("set preamp"); } int RIG_IC756PRO3::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get preamp")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { preamp_level = 1; } else if (replystr[p+6] == 0x02) { preamp_level = 2; } else { preamp_level = 0; } } } return preamp_level; } const char *RIG_IC756PRO3::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_IC756PRO3::ATT_label() { switch (atten_level) { default: case 0: break; case 1: return "6 dB"; break; case 2: return "12 dB"; break; case 3: return "18 dB"; break; } return "ATT"; } void RIG_IC756PRO3::set_modeA(int val) { A.imode = val; bool datamode = false; switch (val) { case 10 : val = 5; datamode = true; break; case 9 : val = 1; datamode = true; break; case 8 : val = 0; datamode = true; break; case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += filA; cmd.append( post ); waitFB("set mode A"); if (datamode) { // LSB / USB ==> use DATA mode cmd = pre_to; cmd.append("\x1A\x06\x01"); cmd.append(post); waitFB("data mode"); } } static const char *szfilter[] = {"1", "2", "3"}; int RIG_IC756PRO3::get_modeA() { int md = 0; std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { md = replystr[p+5]; if (md == -1) { md = filA = 0; } else { if (md > 6) md--; filA = replystr[p+6]; cstr = "\x1A\x06"; resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "data mode?")) { p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6]) { switch (md) { case 0 : md = 8; break; case 1 : md = 9; break; case 5 : md = 10; break; default : break; } } } } } A.imode = md; } } return A.imode; } void RIG_IC756PRO3::set_modeB(int val) { B.imode = val; bool datamode = false; switch (val) { case 10 : val = 5; datamode = true; break; case 9 : val = 1; datamode = true; break; case 8 : val = 0; datamode = true; break; case 7 : val = 8; break; case 6 : val = 7; break; default: break; } cmd = pre_to; cmd += '\x06'; cmd += val; cmd += filB; cmd.append( post ); waitFB("set mode B"); if (datamode) { // LSB / USB ==> use DATA mode cmd = pre_to; cmd.append("\x1A\x06\x01"); cmd.append(post); waitFB("data mode"); } } int RIG_IC756PRO3::get_modeB() { int md = 0; std::string cstr = "\x04"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get mode B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { md = replystr[p+5]; if (md == -1) { md = filB = 0; } else { if (md > 6) md--; filB = replystr[p+6]; cstr = "\x1A\x06"; resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "data mode?")) { p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6]) { switch (md) { case 0 : md = 8; break; case 1 : md = 9; break; case 5 : md = 10; break; default : break; } } } } } B.imode = md; } } return B.imode; } void RIG_IC756PRO3::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += val ? 0x01 : 0x00; cmd.append( post ); waitFB("set AN"); } int RIG_IC756PRO3::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get AN")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } const char *RIG_IC756PRO3::FILT(int &val) { if (inuse == onB) { val = filB; return(szfilter[filB - 1]); } else { val = filA; return (szfilter[filA - 1]); } } const char *RIG_IC756PRO3::nextFILT() { if (inuse == onB) { filB++; if (filB > 3) filB = 1; set_modeB(B.imode); return(szfilter[filB - 1]); } else { filA++; if (filA > 3) filA = 1; set_modeA(A.imode); return(szfilter[filA - 1]); } } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC756PRO3::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; if ((bandmode == 0 || bandmode == 1) && banddata) bandmode += 7; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC756PRO3::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; if (mode >= 7) cmd += '\x10'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } flrig-2.0.04/src/rigs/icom/IC7700.cxx0000664000175000017500000006060214502720327013650 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC7700.h" #include "debug.h" #include "status.h" #include "support.h" //============================================================================= // IC-7700 const char IC7700name_[] = "IC-7700"; static std::vectorIC7700modes_; static const char *vIC7700modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "PSK", "PSK-R", "LSB-D", "USB-D", "AM-D", "FM-D"}; enum { LSB7700, USB7700, AM7700, CW7700, RTTY7700, FM7700, CWR7700, RTTYR7700, PSK7700, PSKR7700, LSBD7700, USBD7700, AMD7700, FMD7700 }; static const char IC7700_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U', 'L', 'U', 'U', 'L', 'L', 'U', 'U', 'U' }; static const char IC7700_mode_nbr[] = { 0x00, // Select the LSB mode 0x01, // Select the USB mode 0x02, // Select the AM mode 0x03, // Select the CW mode 0x04, // Select the RTTY mode 0x05, // Select the FM mode 0x07, // Select the CW-R mode 0x08, // Select the RTTY-R mode 0x12, // select PSK mode 0x13, // select PSK-R mode 0x00, // LSBD 0x01, // USBD 0x02, // AMD 0x05 // FMD }; static std::vectorIC7700_ssb_bws; static const char *vIC7700_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static std::vectorIC7700_rtty_bws; static const char *vIC7700_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static std::vectorIC7700_am_bws; static const char *vIC7700_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7200", "7400", "7700", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000"}; static std::vectorIC7700_fm_bws; static const char *vIC7700_fm_bws[] = { "FIXED" }; static GUI IC7700_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7700::initialize() { VECTOR (IC7700modes_, vIC7700modes_); VECTOR (IC7700_ssb_bws, vIC7700_ssb_bws); VECTOR (IC7700_rtty_bws, vIC7700_rtty_bws); VECTOR (IC7700_am_bws, vIC7700_am_bws); VECTOR (IC7700_fm_bws, vIC7700_fm_bws); modes_ = IC7700modes_; bandwidths_ = IC7700_ssb_bws; _mode_type = IC7700_mode_type; IC7700_widgets[0].W = btnVol; IC7700_widgets[1].W = sldrVOLUME; IC7700_widgets[2].W = btnAGC; IC7700_widgets[3].W = sldrRFGAIN; IC7700_widgets[4].W = sldrSQUELCH; IC7700_widgets[5].W = btnNR; IC7700_widgets[6].W = sldrNR; IC7700_widgets[7].W = btnLOCK; IC7700_widgets[8].W = sldrINNER; IC7700_widgets[9].W = btnCLRPBT; IC7700_widgets[10].W = sldrOUTER; IC7700_widgets[11].W = btnNotch; IC7700_widgets[12].W = sldrNOTCH; IC7700_widgets[13].W = sldrMICGAIN; IC7700_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC7700::RIG_IC7700() { defaultCIV = 0x74; name_ = IC7700name_; modes_ = IC7700modes_; bandwidths_ = IC7700_ssb_bws; _mode_type = IC7700_mode_type; adjustCIV(defaultCIV); serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = IC7700_widgets; has_pbt_controls = true; has_FILTER = true; has_extras = has_voltmeter = has_idd_control = has_cw_wpm = has_cw_spot_tone = has_cw_qsk = has_cw_vol = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_compON = has_compression = has_micgain_control = has_bandwidth_control = true; has_band_selection = true; can_synch_clock = true; precision = 1; ndigits = 9; filA = filB = 1; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 1; def_bw = A.iBW = 34; B.freq = 7070000ULL; B.imode = 1; B.iBW = 34; }; //====================================================================== // IC7700 unique commands //====================================================================== void RIG_IC7700::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); waitFB("select A"); isett("selectA"); inuse = onA; } void RIG_IC7700::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); waitFB("select B"); isett("selectB"); inuse = onB; } void RIG_IC7700::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7700_mode_nbr[val]; cmd += filA; cmd.append( post ); waitFB("set mode A"); isett("set mode A"); // digital set / clear if (val == LSBD7700 || val == USBD7700 || val == AMD7700 || val == FMD7700) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += filA; cmd.append( post); waitFB("set digital"); isett("set digital"); } } static const char *szfilter[] = {"1", "2", "3"}; int RIG_IC7700::get_modeA() { int md = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get mode A")) { igett("get mode A"); size_t p = replystr.rfind(resp); if (replystr[p+5] == -1) { A.imode = filA = 0; return A.imode; } for (md = LSB7700; md <= PSKR7700; md++) if (replystr[p+5] == IC7700_mode_nbr[md]) break; filA = replystr[p+6]; if (md == LSB7700 || md == USB7700 || md == AM7700 || md == FM7700) { cmd = pre_to; cmd.append("\x1a\x06"); cmd.append(post); resp = pre_fm; resp.append("\x1a\x06"); if (waitFOR(9, "get digital setting")) { igett("get digital setting"); size_t p = replystr.rfind(resp); if (replystr[p+6] == 0x01) { if (md == LSB7700) md = LSBD7700; else if (md == USB7700) md = USBD7700; else if (md == AM7700) md = AMD7700; else if (md == FM7700) md = FMD7700; } if (replystr[p+7]) filA = replystr[p+7]; } } A.imode = md; } return A.imode; } void RIG_IC7700::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC7700_mode_nbr[val]; cmd += filB; cmd.append( post ); waitFB("set mode B"); isett("set mode B"); if (val == LSBD7700 || val == USBD7700 || val == AMD7700 || val == FMD7700) { cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; cmd += '\x01'; cmd += filB; cmd.append( post); waitFB("set digital"); isett("set digital"); } } int RIG_IC7700::get_modeB() { int md = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get mode B")) { igett("get mode B"); size_t p = replystr.rfind(resp); if (replystr[p+5] == -1) { B.imode = filB = 0; return B.imode; } for (md = LSB7700; md <= PSKR7700; md++) if (replystr[p+5] == IC7700_mode_nbr[md]) break; filA = replystr[p+6]; if (md == LSB7700 || md == USB7700 || md == AM7700 || md == FM7700) { cmd = pre_to; cmd.append("\x1a\x06"); cmd.append(post); resp = pre_fm; resp.append("\x1a\x06"); if (waitFOR(9, "get digital")) { igett("get digital"); size_t p = replystr.rfind(resp); if (replystr[p+6] == 0x01) { if (md == LSB7700) md = LSBD7700; else if (md == USB7700) md = USBD7700; else if (md == AM7700) md = AMD7700; else if (md == FM7700) md = FMD7700; } if (replystr[p+7]) filB = replystr[p+7]; } } B.imode = md; } return B.imode; } int RIG_IC7700::get_bwA() { cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); if (waitFOR(8, "get bw A")) { igett("get bw A"); size_t p = replystr.rfind(resp); A.iBW = fm_bcd(replystr.substr(p+6), 2); } return A.iBW; } void RIG_IC7700::set_bwA(int val) { if (A.imode == FM7700 || A.imode == FMD7700) return; A.iBW = val; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bw A"); isett("set bw A"); } int RIG_IC7700::get_bwB() { cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); if (waitFOR(8, "get bw B")) { igett("get bw B"); size_t p = replystr.rfind(resp); B.iBW = fm_bcd(replystr.substr(p+6), 2); } return B.iBW; } void RIG_IC7700::set_bwB(int val) { if (B.imode == FM7700 || B.imode == FMD7700) return; B.iBW = val; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); waitFB("set bw A"); isett("set bw A"); } int RIG_IC7700::adjust_bandwidth(int m) { switch (m) { case USB7700: case LSB7700: case LSBD7700 : case USBD7700: bandwidths_ = IC7700_ssb_bws; return 34; case AM7700: bandwidths_ = IC7700_am_bws; return 29; break; case FM7700: case FMD7700: bandwidths_ = IC7700_fm_bws; return 0; break; case RTTY7700: case RTTYR7700: bandwidths_ = IC7700_rtty_bws; return 12; break; case CW7700: case CWR7700: bandwidths_ = IC7700_ssb_bws; return 10; break; default: bandwidths_ = IC7700_ssb_bws; return 34; } return 0; } std::vector& RIG_IC7700::bwtable(int m) { switch (m) { case AM7700: return IC7700_am_bws; break; case FM7700: case FMD7700: return IC7700_fm_bws; break; case RTTY7700: case RTTYR7700: return IC7700_rtty_bws; break; case CW7700: case CWR7700: case USB7700: case LSB7700: case LSBD7700 : case USBD7700: default: return IC7700_ssb_bws; } return IC7700_ssb_bws; } int RIG_IC7700::def_bandwidth(int m) { return adjust_bandwidth(m); } void RIG_IC7700::set_mic_gain(int v) { ICvol = (int)(v * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set mic gain"); isett("set mic gain"); } void RIG_IC7700::set_attenuator(int val) { int cmdval = 0; if (atten_level == 0) { atten_level = 1; cmdval = 0x20; } else if (atten_level == 1) { atten_level = 0; cmdval = 0x00; } cmd = pre_to; cmd += '\x11'; cmd += cmdval; cmd.append( post ); waitFB("set attenuator"); isett("set attenuator"); } int RIG_IC7700::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; if (waitFOR(7, "get attenuator")) { igett("get attenuator"); size_t p = replystr.rfind(resp); if (replystr[p+6] == 0x20) { atten_level = 1; } else { atten_level = 0; } } return atten_level; } const char *RIG_IC7700::ATT_label() { if (atten_level == 1) return "12 dB"; return "ATT"; } void RIG_IC7700::set_compression(int on, int val) { if (on) { cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append( post ); waitFB("set comp"); isett("set comp"); cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); isett("set comp ON"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); isett("set comp OFF"); } } void RIG_IC7700::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); isett("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; cmd.append( post ); waitFB("set vox OFF"); isett("set vox OFF"); } } void RIG_IC7700::set_vox_gain() { cmd.assign(pre_to).append("\x1A\x05"); // values 0-255 = 0 - 100% cmd +='\x00'; cmd +='\x87'; cmd.append(to_bcd((int)(progStatus.vox_gain * 2.55), 3)); cmd.append( post ); waitFB("SET vox gain"); isett("set vox gain"); } void RIG_IC7700::set_vox_anti() { cmd.assign(pre_to).append("\x1A\x05"); // values 0-255 = 0 - 100% cmd +='\x00'; cmd +='\x88'; cmd.append(to_bcd((int)(progStatus.vox_anti * 2.55), 3)); cmd.append( post ); waitFB("SET anti-vox"); isett("set anti vox"); } void RIG_IC7700::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05"); // values 00-20 = 0.0 - 2.0 sec cmd +='\x00'; cmd +='\x89'; cmd.append(to_bcd((int)(progStatus.vox_hang / 10 ), 2)); cmd.append( post ); waitFB("SET vox hang"); isett("set vox hang"); } // CW controls void RIG_IC7700::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); // values 0-255 = 6 to 48 WPM cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (48 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); isett("set cw wpm"); } void RIG_IC7700::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); // values 0-255 cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); isett("set cw qsk delay"); } void RIG_IC7700::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); isett("set cw spot tone"); } void RIG_IC7700::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x14\x15"); cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); isett("set cw sidetone volume"); } // Tranceiver PTT on/off void RIG_IC7700::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); isett("set ptt"); ptt_ = val; } int RIG_IC7700::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { igett("get ptt"); size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } void RIG_IC7700::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); isett("set pbt inner"); } void RIG_IC7700::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); isett("set pbt outer"); } int RIG_IC7700::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { igett("get pbt inner"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } return val; } int RIG_IC7700::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { igett("get pbt inner"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } return val; } const char *RIG_IC7700::FILT(int &val) { if (inuse == onB) { if (filB < 0) filB = 0; if (filB > 3) filB = 3; val = filB; return(szfilter[filB - 1]); } else { if (filA < 0) filA = 0; if (filA > 3) filA = 3; val = filA; return (szfilter[filA - 1]); } } const char *RIG_IC7700::nextFILT() { if (inuse == onB) { filB++; if (filB > 3) filB = 1; set_modeB(B.imode); return(szfilter[filB - 1]); } else { filA++; if (filA > 3) filA = 1; set_modeA(A.imode); return(szfilter[filA - 1]); } } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC7700::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { igett("get band stack"); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if ((bandmode == 0) && banddata) bandmode = 10; if ((bandmode == 1) && banddata) bandmode = 11; if ((bandmode == 2) && banddata) bandmode = 12; if ((bandmode == 3) && banddata) bandmode = 13; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else isett("get band stack"); } void RIG_IC7700::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int fil = (inuse == onB ? filB : filA); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += fil; if (mode == LSBD7700 || mode == USBD7700 || mode == AMD7700 || mode == FMD7700) cmd += '\x10'; else cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); isett("set band selection"); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); 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; std::string cstr = "\x16\x48"; std::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 != std::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 != std::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; } } // --------------------------------------------------------------------- // set date and time // 1A 05 00 95 HH MM : set time // 1A 05 00 94 YY YY MM DD : set date // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_IC7700::sync_date(char *dt) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x58'; unsigned char val; val = ((dt[0] - '0') << 4) + (dt[1] - '0'); cmd += (val & 0xFF); val = ((dt[2] - '0') << 4) + (dt[3] - '0'); cmd += (val & 0xFF); val = ((dt[4] - '0') << 4) + (dt[5] - '0'); cmd += (val & 0xFF); val = ((dt[6] - '0') << 4) + (dt[7] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_IC7700::sync_clock(char *tm) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x59'; unsigned char val; val = ((tm[0] - '0') << 4) + (tm[1] - '0'); cmd += (val & 0xFF); val = ((tm[3] - '0') << 4) + (tm[4] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } double RIG_IC7700::get_idd(void) { get_trace(1, "get_idd()"); std::string cstr = "\x15\x16"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); double mtr= 0; int ret = waitFOR(9, "get idd"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = 25.0 * mtr / 241.0; if (mtr > 25) mtr = 25; } } return mtr; } double RIG_IC7700::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; int ret = waitFOR(9, "get voltmeter"); igett("voltmeter"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 0.026 * mtr + 9.782; return val; } } return -1; } flrig-2.0.04/src/rigs/icom/IC9100.cxx0000664000175000017500000012307214502720327013645 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "icom/IC9100.h" #include "support.h" //============================================================================= // IC-9100 const char IC9100name_[] = "IC-9100"; static int nummodes = 9; static std::vectorIC9100modes_; static const char *vIC9100modes_[] = { "LSB", "USB", "AM", "FM", "DV", "CW", "CW-R", "RTTY", "RTTY-R", "LSB-D", "USB-D", "AM-D", "FM-D", "DV-R"}; enum { LSB9100, USB9100, AM9100, FM9100, DV9100, CW9100, CW9100R, RTTY9100, RTTY9100R, LSB9100D, USB9100D, AM9100D, FM9100D, DVR9100 }; static const char IC9100_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'L', 'U', 'U', 'U' }; static const char IC9100_mode_nbr[] = { 0x00, 0x01, 0x02, 0x05, 0x17, 0x03, 0x07, 0x04, 0x08, 0x00, 0x01, 0x02, 0x05, 0x17 }; static std::vectorIC9100_ssb_bws; static const char *vIC9100_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static int IC9100_bw_vals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41, WVALS_LIMIT}; static std::vectorIC9100_am_bws; static const char *vIC9100_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "7200", "7400", "9100", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000"}; static int IC9100_bw_vals_AM[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50, WVALS_LIMIT}; static std::vectorIC9100_rtty_bws; static const char *vIC9100_rtty_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static int IC9100_bw_vals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32, WVALS_LIMIT}; static std::vectorIC9100_fixed_bws; static const char *vIC9100_fixed_bws[] = { "FIXED" }; static int IC9100_bw_vals_fixed[] = { 1, WVALS_LIMIT}; static GUI IC9100_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC9100::initialize() { VECTOR (IC9100modes_, vIC9100modes_); VECTOR (IC9100_ssb_bws, vIC9100_ssb_bws); VECTOR (IC9100_am_bws, vIC9100_am_bws); VECTOR (IC9100_rtty_bws, vIC9100_rtty_bws); VECTOR (IC9100_fixed_bws, vIC9100_fixed_bws); modes_ = IC9100modes_; bandwidths_ = IC9100_ssb_bws; bw_vals_ = IC9100_bw_vals_SSB; _mode_type = IC9100_mode_type; IC9100_widgets[0].W = btnVol; IC9100_widgets[1].W = sldrVOLUME; IC9100_widgets[2].W = btnAGC; IC9100_widgets[3].W = sldrRFGAIN; IC9100_widgets[4].W = sldrSQUELCH; IC9100_widgets[5].W = btnNR; IC9100_widgets[6].W = sldrNR; IC9100_widgets[7].W = btnLOCK; IC9100_widgets[8].W = sldrINNER; IC9100_widgets[9].W = btnCLRPBT; IC9100_widgets[10].W = sldrOUTER; IC9100_widgets[11].W = btnNotch; IC9100_widgets[12].W = sldrNOTCH; IC9100_widgets[13].W = sldrMICGAIN; IC9100_widgets[14].W = sldrPOWER; btn_icom_select_11->activate(); btn_icom_select_12->activate(); btn_icom_select_13->activate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC9100::RIG_IC9100() { defaultCIV = 0x7C; adjustCIV(defaultCIV); name_ = IC9100name_; modes_ = IC9100modes_; bandwidths_ = IC9100_ssb_bws; bw_vals_ = IC9100_bw_vals_SSB; _mode_type = IC9100_mode_type; serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.freq = 14070000ULL; A.imode = USB9100D; A.iBW = 34; B.freq = 7070000ULL; B.imode = USB9100D; B.iBW = 34; def_freq = 14070000ULL; def_mode = USB9100D; def_bw = 34; widgets = IC9100_widgets; has_extras = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_cw_break_in = true; has_vox_onoff = true; has_vox_gain = true; has_vox_anti = true; has_vox_hang = true; has_compON = true; has_compression = true; has_split = true; has_split_AB = true; has_micgain_control = true; has_bandwidth_control = true; has_smeter = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_sql_control = true; has_agc_control = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_attenuator_control = true; has_preamp_control = true; has_noise_control = true; has_nb_level = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_pbt_controls = true; has_rf_control = true; has_ptt_control = true; has_tune_control = true; ICOMmainsub = true; has_band_selection = true; precision = 1; ndigits = 10; }; //====================================================================== // IC9100 unique commands //====================================================================== void RIG_IC9100::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\xD0'; cmd.append(post); waitFB("select A"); set_trace(2, "selectA()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\xD1'; cmd.append(post); waitFB("select B"); set_trace(2, "selectB()", str2hex(replystr.c_str(), replystr.length())); } bool RIG_IC9100::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); get_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC9100::get_vfoA () { if (inuse == onB) return A.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } get_trace(2, "get_vfoA()", str2hex(replystr.c_str(), replystr.length())); return A.freq; } void RIG_IC9100::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); set_trace(2, "set_vfoA()", str2hex(replystr.c_str(), replystr.length())); } unsigned long long RIG_IC9100::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } get_trace(2, "get_vfoB()", str2hex(replystr.c_str(), replystr.length())); return B.freq; } void RIG_IC9100::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo B"); set_trace(2, "set_vfoB()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC9100_mode_nbr[val]; cmd.append( post ); waitFB("set mode A"); std::stringstream ss; ss << "set_modeA(" << val << ") [" << IC9100modes_[val].c_str() << "] " << str2hex(replystr.c_str(), replystr.length()); set_trace(1, ss.str().c_str()); cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; if (A.imode > RTTY9100R) cmd += '\x01'; else cmd += '\x00'; cmd.append( post); waitFB("data mode"); set_trace(2, "set_data_modeA()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9100::get_modeA() { int md = A.imode; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; int ret = waitFOR(8, "get mode/bw A"); std::stringstream ss; ss << "get_modeA() " << str2hex(replystr.c_str(), replystr.length()); get_trace(2, "get_modeA()", ss.str().c_str()); if (ret) { size_t p = replystr.find(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { A.imode = 0; return A.imode; } for (md = 0; md < nummodes; md++) if (replystr[p+5] == IC9100_mode_nbr[md]) break; if (md == nummodes) { checkresponse(); return A.imode; } } } else { checkresponse(); return A.imode; } if (md < CW9100) { // check for DATA / DVR cmd = pre_to; cmd += "\x1A\x06"; cmd.append(post); resp = pre_fm; resp += "\x1A\x06"; if (waitFOR(9, "data mode?")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if ((replystr[p+6] & 0x01) == 0x01) { if (md == LSB9100) md = LSB9100D; if (md == USB9100) md = USB9100D; if (md == AM9100) md = AM9100D; if (md == FM9100) md = FM9100D; if (md == DV9100) md = DVR9100; } } } get_trace(2,"get_data_modeA", str2hex(replystr.c_str(), replystr.length())); } A.imode = md; return A.imode; } void RIG_IC9100::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += IC9100_mode_nbr[val]; cmd.append( post ); waitFB("set mode B"); std::stringstream ss; ss << "set_modeB(" << val << ") [" << IC9100modes_[val].c_str() << "] " << str2hex(replystr.c_str(), replystr.length()); set_trace(1, ss.str().c_str()); cmd = pre_to; cmd += '\x1A'; cmd += '\x06'; if (B.imode > RTTY9100R) cmd += '\x01'; else cmd += '\x00'; cmd.append( post); waitFB("data mode"); set_trace(2, "set_data_modeB()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9100::get_modeB() { int md = B.imode; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; int ret = waitFOR(8, "get mode/bw B"); std::stringstream ss; ss << "get_modeA() " << str2hex(replystr.c_str(), replystr.length()); get_trace(1, ss.str().c_str()); if (ret) { size_t p = replystr.find(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { B.imode = 0; return B.imode; } for (md = 0; md < nummodes; md++) if (replystr[p+5] == IC9100_mode_nbr[md]) break; if (md == nummodes) { checkresponse(); return B.imode; } } } else { checkresponse(); return B.imode; } if (md < CW9100) { // check for DATA / DVR cmd = pre_to; cmd += "\x1A\x06"; cmd.append(post); resp = pre_fm; resp += "\x1A\x06"; if (waitFOR(9, "data mode?")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if ((replystr[p+6] & 0x01) == 0x01) { if (md == LSB9100) md = LSB9100D; if (md == USB9100) md = USB9100D; if (md == AM9100) md = AM9100D; if (md == FM9100) md = FM9100D; if (md == DV9100) md = DVR9100; } } } get_trace(2,"get_data_modeB", str2hex(replystr.c_str(), replystr.length())); } B.imode = md; return B.imode; } int RIG_IC9100::get_bwA() { if (A.imode == DV9100 || A.imode == DVR9100 || A.imode == FM9100 || A.imode == FM9100D) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); int ret = waitFOR(8, "get_bw A"); get_trace(2, "get_bwA()", str2hex(replystr.c_str(), replystr.length())); if (ret) { size_t p = replystr.rfind(resp); A.iBW = fm_bcd(replystr.substr(p+6), 2); } return A.iBW; } void RIG_IC9100::set_bwA(int val) { A.iBW = val; if (A.imode == DV9100 || A.imode == DVR9100 || A.imode == FM9100 || A.imode == FM9100D) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); waitFB("set bw A"); std::stringstream ss; const char *bwstr = IC9100_ssb_bws[val].c_str(); if ((A.imode == AM9100) || (A.imode == AM9100D)) bwstr = IC9100_am_bws[val].c_str(); if ((A.imode == RTTY9100) || (A.imode == RTTY9100R)) bwstr = IC9100_rtty_bws[val].c_str(); ss << "set_bwA(" << val << ") [" << bwstr << "] " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); } int RIG_IC9100::get_bwB() { if (B.imode == DV9100 || B.imode == DVR9100 || B.imode == FM9100 || B.imode == FM9100D) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); std::string resp = pre_fm; resp.append("\x1a\x03"); int ret = waitFOR(8, "get_bw B"); get_trace(2, "get_bwB()", str2hex(replystr.c_str(), replystr.length())); if (ret) { size_t p = replystr.rfind(resp); B.iBW = fm_bcd(replystr.substr(p+6), 2); } return B.iBW; } void RIG_IC9100::set_bwB(int val) { B.iBW = val; if (B.imode == DV9100 || B.imode == DVR9100 || B.imode == FM9100 || B.imode == FM9100D) return; if (B.imode == 5) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(B.iBW, 2)); cmd.append(post); waitFB("set bw B"); std::stringstream ss; const char *bwstr = IC9100_ssb_bws[val].c_str(); if ((B.imode == AM9100) || (B.imode == AM9100D)) bwstr = IC9100_am_bws[val].c_str(); if ((B.imode == RTTY9100) || (B.imode == RTTY9100R)) bwstr = IC9100_rtty_bws[val].c_str(); ss << "set_bwB(" << val << ") [" << bwstr << "] " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); } int RIG_IC9100::adjust_bandwidth(int m) { int bw = 0; switch (m) { case AM9100: case AM9100D: bandwidths_ = IC9100_am_bws; bw_vals_ = IC9100_bw_vals_AM; bw = 19; break; case CW9100: case CW9100R: bandwidths_ = IC9100_ssb_bws; bw_vals_ = IC9100_bw_vals_SSB; bw = 12; break; case RTTY9100: case RTTY9100R: bandwidths_ = IC9100_ssb_bws; bw_vals_ = IC9100_bw_vals_RTTY; bw = 12; break; case FM9100: case FM9100D : case DV9100: case DVR9100 : bandwidths_ = IC9100_fixed_bws; bw_vals_ = IC9100_bw_vals_fixed; bw = 0; break; case LSB9100: case USB9100: case LSB9100D: case USB9100D: default: bandwidths_ = IC9100_ssb_bws; bw_vals_ = IC9100_bw_vals_SSB; bw = 34; } return bw; } std::vector& RIG_IC9100::bwtable(int m) { switch (m) { case AM9100: case AM9100D: return IC9100_am_bws; break; case FM9100: case FM9100D : case DV9100: case DVR9100 : return IC9100_fixed_bws; break; case CW9100: case CW9100R: case RTTY9100: case RTTY9100R: case LSB9100: case USB9100: case LSB9100D: case USB9100D: default: return IC9100_ssb_bws; } return IC9100_ssb_bws; } int RIG_IC9100::def_bandwidth(int m) { int bw = 0; switch (m) { case AM9100: case AM9100D: bw = 19; break; case DV9100: case DVR9100: case FM9100: case FM9100D: bw = 0; break; case RTTY9100: case RTTY9100R: bw = 12; break; case CW9100: case CW9100R: bw = 12; break; case LSB9100: case USB9100: case LSB9100D: case USB9100D: default: bw = 34; } return bw; } void RIG_IC9100::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set mic gain"); set_trace(2, "set_mic_gain()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9100::get_mic_gain() { int val = 0; std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_mic_gain()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC9100::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } static int comp_level[] = {11,34,58,81,104,128,151,174,197,221,244}; void RIG_IC9100::set_compression(int on, int val) { cmd = pre_to; cmd.append("\x16\x44"); if (on) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); waitFB("set Comp ON/OFF"); set_trace(2, "set Comp ON/OFF", str2hex(cmd.c_str(), cmd.length())); if (val < 0) return; if (val > 10) return; cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(comp_level[val], 3)); cmd.append( post ); waitFB("set comp"); set_trace(2, "set Comp", str2hex(cmd.c_str(), cmd.length())); } void RIG_IC9100::get_compression(int &on, int &val) { std::string resp; cmd.assign(pre_to).append("\x16\x44").append(post); resp.assign(pre_fm).append("\x16\x44"); if (waitFOR(8, "get comp on/off")) { size_t p = replystr.find(resp); if (p != std::string::npos) on = (replystr[p+6] == 0x01); } get_trace(2, "get comp on/off", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to).append("\x14\x0E").append(post); resp.assign(pre_fm).append("\x14\x0E"); if (waitFOR(9, "get comp level")) { size_t p = replystr.find(resp); int level = 0; if (p != std::string::npos) { level = fm_bcd(replystr.substr(p+6), 3); for (val = 0; val < 11; val++) if (level <= comp_level[val]) break; } get_trace(2, "get comp level", str2hex(replystr.c_str(), replystr.length())); } } void RIG_IC9100::set_vox_onoff() { cmd.assign(pre_to).append("\x16\x46"); if (progStatus.vox_onoff) { cmd += '\x01'; cmd.append( post ); waitFB("set vox ON"); } else { cmd += '\x00'; cmd.append( post ); waitFB("set vox OFF"); } set_trace(2, "set_vox_onoff()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_vox_gain() { cmd.assign(pre_to).append("\x1A\x05"); cmd +='\x01'; cmd +='\x25'; cmd.append(bcd255(progStatus.vox_gain)); cmd.append( post ); waitFB("SET vox gain"); set_trace(2, "set_vox_gain()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_vox_anti() { cmd.assign(pre_to).append("\x1A\x05"); cmd +='\x01'; cmd +='\x26'; cmd.append(bcd255(progStatus.vox_anti)); cmd.append( post ); waitFB("SET anti-vox"); set_trace(2, "set_vox_anti()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05"); //values 00-20 = 0.0 - 2.0 sec cmd +='\x01'; cmd +='\x27'; cmd.append(to_bcd((int)(progStatus.vox_hang / 10 ), 2)); cmd.append( post ); waitFB("SET vox hang"); set_trace(2, "set_vox_hang()", str2hex(replystr.c_str(), replystr.length())); } // these need to be written and tested void RIG_IC9100::get_vox_onoff() { } void RIG_IC9100::get_vox_gain() { } void RIG_IC9100::get_vox_anti() { } void RIG_IC9100::get_vox_hang() { } // CW controls void RIG_IC9100::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); // values 0-255 cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (60 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); set_trace(2, "set_cw_wpm()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); // values 0-255 cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); set_trace(2, "set_cw_qsk()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); set_trace(2, "set_cw_spot_tone()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x05"); cmd += '\x00'; cmd += '\x24'; cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); set_trace(2, "set_cw_vol()", str2hex(replystr.c_str(), replystr.length())); } // Volume control val 0 ... 100 void RIG_IC9100::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set vol"); set_trace(2, "set_volume_control()", str2hex(replystr.c_str(), replystr.length())); } /* I:12:20:22: get vol ans in 0 ms, OK cmd FE FE 7A E0 14 01 FD ans FE FE 7A E0 14 01 FD FE FE E0 7A 14 01 00 65 FD 0 1 2 3 4 5 6 7 8 */ int RIG_IC9100::get_volume_control() { int val = 0; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_volume_control()", str2hex(replystr.c_str(), replystr.length())); return (val); } void RIG_IC9100::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC9100::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set power"); set_trace(2, "set_power_control()", str2hex(replystr.c_str(), replystr.length())); } double RIG_IC9100::get_power_control() { int val = progStatus.power_level; std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_power_control()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC9100::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; pmax = max = 100; step = 1; } void RIG_IC9100::set_rf_gain(int val) { cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set RF"); set_trace(2, "set_rf_gain()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9100::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get RF")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } get_trace(2, "get_rf_gain()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_IC9100::get_rf_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } int RIG_IC9100::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.40); if (mtr > 100) mtr = 100; } } get_trace(2, "get_smeter()", str2hex(replystr.c_str(), replystr.length())); return mtr; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { {0, 0.0}, {21, 5.0}, {43,10.0}, {65, 15.0}, {83, 20.0}, {95, 25.0}, {105, 30.0}, {114, 35.0}, {124, 40.0}, {143, 50.0}, {183, 75.0}, {213, 100.0}, {255, 120.0 } }; int RIG_IC9100::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= 0; if (waitFOR(9, "get power out")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } struct swrpair {int mtr; float swr;}; // Table entries below correspond to SWR readings of 1.1, 1.5, 2.0, 2.5, 3.0 and infinity. // Values are also tweaked to fit the display of the SWR meter. static swrpair swrtbl[] = { {0, 0.0}, {48, 10.5}, {80, 23.0}, {103, 35.0}, {120, 48.0}, {255, 100.0 } }; int RIG_IC9100::get_swr(void) { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(swrtbl) / sizeof(swrpair) - 1; i++) if (mtr >= swrtbl[i].mtr && mtr < swrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(swrtbl[i].swr + (swrtbl[i+1].swr - swrtbl[i].swr)*(mtr - swrtbl[i].mtr)/(swrtbl[i+1].mtr - swrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC9100::get_alc() { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } get_trace(2, "get_alc()", str2hex(replystr.c_str(), replystr.length())); return mtr; } void RIG_IC9100::set_notch(bool on, int val) { int notch = (int)(val * 256.0 / 3000.0); 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(post); waitFB("set notch val"); std::stringstream ss; ss << "set_notch(" << on << ", " << val << ") " << str2hex(replystr.data(), replystr.length()); set_trace(2, "set_notch()", ss.str().c_str()); } bool RIG_IC9100::get_notch(int &val) { bool on = false; val = 0; std::string cstr = "\x16\x48"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; 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 != std::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")) { get_trace(2, "get_notch_val()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) val = (int)ceil(fm_bcd(replystr.substr(p+6),3) * 3000.0 / 255.0); } } return on; } void RIG_IC9100::get_notch_min_max_step(int &min, int &max, int &step) { min = 0; max = 3000; step = 20; } void RIG_IC9100::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += val ? 0x01 : 0x00; cmd.append( post ); waitFB("set AN"); set_trace(2, "set_auto_notch()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9100::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get AN")) { get_trace(2, "get_auto_notch()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); return true; } else { auto_notch_label("AN", false); return false; } } } return progStatus.auto_notch; } void RIG_IC9100::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); set_trace(2, "set_split()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9100::get_split() { return split; } static int agcval = 1; int RIG_IC9100::get_agc() { cmd = pre_to; cmd.append("\x16\x12"); cmd.append(post); if (waitFOR(8, "get AGC")) { size_t p = replystr.find(pre_fm); if (p == std::string::npos) return agcval; return (agcval = replystr[p+6]); // 1 = FAST, 2 = MID, 3 = SLOW } get_trace(2, "get_agc()", str2hex(replystr.c_str(), replystr.length())); return agcval; } int RIG_IC9100::incr_agc() { agcval++; if (agcval == 4) agcval = 1; cmd = pre_to; cmd.append("\x16\x12"); cmd += agcval; cmd.append(post); waitFB("set AGC"); set_trace(2, "incr_agc()", str2hex(replystr.c_str(), replystr.length())); return agcval; } static const char *agcstrs[] = {"FST", "MID", "SLO"}; const char *RIG_IC9100::agc_label() { return agcstrs[agcval - 1]; } int RIG_IC9100::agc_val() { return (agcval); } void RIG_IC9100::set_attenuator(int val) { if (val) { atten_level = 1; set_preamp(0); } else { atten_level = 0; } cmd = pre_to; cmd += '\x11'; cmd += atten_level ? '\x20' : '\x00'; cmd.append( post ); waitFB("set att"); std::stringstream ss; ss << "set_attenuator(" << val << ") " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); } int RIG_IC9100::next_attenuator() { if (atten_level) return 0; return 1; } int RIG_IC9100::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; if (waitFOR(7, "get ATT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (!replystr[p+5]) { atten_level = 0; return 0; } else { atten_level = 1; return 1; } } } get_trace(2, "get_attenuator()", str2hex(replystr.data(), replystr.length())); return 0; } int RIG_IC9100::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; default: case 2: return 0; } return 0; } void RIG_IC9100::set_preamp(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; if (val == 0) { preamp_level = 0; } else if (val == 1) { preamp_level = 1; } else { preamp_level = 2; } cmd += preamp_level; cmd.append( post ); waitFB("set Pre"); std::stringstream ss; ss << "set_preamp(" << val << ") " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); if (val) set_attenuator(0); } int RIG_IC9100::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(8, "get Pre")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { preamp_level = 1; } else if (replystr[p+6] == 0x02) { preamp_level = 2; } else { preamp_level = 0; } } } get_trace(2, "get_preamp()", str2hex(replystr.c_str(), replystr.length())); return preamp_level; } const char *RIG_IC9100::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Amp 1"; break; case 2: return "Amp 2"; break; } return "PRE"; } const char *RIG_IC9100::ATT_label() { if (atten_level == 0x06) return("6 dB"); if (atten_level == 0x12) return("12 dB"); if (atten_level == 0x18) return("18 dB"); return "ATT"; } // Tranceiver PTT on/off void RIG_IC9100::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); std::stringstream ss; ss << "set_PTT_control(" << val << ") " << str2hex(replystr.data(), replystr.length()); set_trace(1, ss.str().c_str()); ptt_ = val; } int RIG_IC9100::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } get_trace(2, "get_PTT()", str2hex(replystr.data(), replystr.length())); return ptt_; } void RIG_IC9100::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); set_trace(2, "set_noise()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9100::get_noise() { int val = progStatus.noise; std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+6]; } } get_trace(2, "get_noise()", str2hex(replystr.data(), replystr.length())); return val; } void RIG_IC9100::set_nb_level(int val) { cmd = pre_to; cmd.append("\x14\x12"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set NB level"); set_trace(2, "set_nb_level()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9100::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x14\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NB level")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_nb_level()", str2hex(replystr.data(), replystr.length())); return val; } void RIG_IC9100::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); get_trace(2, "get_noise_reduction()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9100::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } get_trace(2, "get_noise_reduction()", str2hex(replystr.data(), replystr.length())); return progStatus.noise_reduction; } /* I:12:06:50: get NR ans in 0 ms, OK cmd FE FE 7A E0 16 40 FD ans FE FE 7A E0 16 40 FD FE FE E0 7A 16 40 01 FD 0 1 2 3 4 5 6 7 I:12:06:50: get NRval ans in 0 ms, OK cmd FE FE 7A E0 14 06 FD ans FE FE 7A E0 14 06 FD FE FE E0 7A 14 06 00 24 FD 0 1 2 3 4 5 6 7 8 */ void RIG_IC9100::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val *= 16; val += 8; cmd.append(to_bcd(val, 3)); cmd.append(post); waitFB("set NRval"); set_trace(2, "set_noise_reduction_val()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9100::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6),3); val -= 8; val /= 16; } } get_trace(2, "get_noise_reduction_val()", str2hex(replystr.data(), replystr.length())); return val; } void RIG_IC9100::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set Sqlch"); set_trace(2, "set_squelch()", str2hex(replystr.data(), replystr.length())); } int RIG_IC9100::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get squelch")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } get_trace(2, "get_squelch()", str2hex(replystr.data(), replystr.length())); return val; } void RIG_IC9100::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF on/off"); set_trace(2, "set_if_shift()", str2hex(replystr.data(), replystr.length())); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set IF val"); set_trace(2, "set_if_shift_val()", str2hex(replystr.data(), replystr.length())); } bool RIG_IC9100::get_if_shift(int &val) { val = sh_; return sh_on_; } void RIG_IC9100::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC9100::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); set_trace(2, "set_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); set_trace(2, "set_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); } int RIG_IC9100::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } get_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC9100::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } get_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC9100::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if ((bandmode == 0) && banddata) bandmode = 9; if ((bandmode == 1) && banddata) bandmode = 10; if ((bandmode == 2) && banddata) bandmode = 11; if ((bandmode == 3) && banddata) bandmode = 12; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC9100::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += '\x01'; cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } flrig-2.0.04/src/rigs/icom/IC7200.cxx0000664000175000017500000012050314502720327013640 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "icom/IC7200.h" #include "status.h" #include "trace.h" #include "support.h" //============================================================================= // IC-7200 const char IC7200name_[] = "IC-7200"; // these are only defined in this file // undef'd at end of file #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}; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,}; static std::vectorszfilter; static const char *vszfilter[] = {"W", "M", "N"}; static std::vectorIC7200modes_; static const char *vIC7200modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "CW-R", "RTTY-R", "LSB-D", "USB-D"}; const char mdval[] = { 0, 1, 2, 3, 4, 7, 8, 0, 1}; static char IC7200_mode_type[] = { 'L', 'U', 'U', 'L', 'L', 'U', 'U', 'L', 'U' }; static std::vectorIC7200_SSBwidths; static const char *vIC7200_SSBwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600"}; static int IC7200_bw_vals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41, WVALS_LIMIT}; static std::vectorIC7200_RTTYwidths; static const char *vIC7200_RTTYwidths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700"}; static int IC7200_bw_vals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32, WVALS_LIMIT}; static std::vectorIC7200_AMwidths; static const char *vIC7200_AMwidths[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "5000", "6200", "6400", "6600", "6800", "7000", "7200", "7400", "7600", "7800", "8000"}; static int IC7200_bw_vals_AM[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, WVALS_LIMIT}; //====================================================================== // IC7200 unique commands //====================================================================== static GUI IC7200_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7200::initialize() { VECTOR (szfilter, vszfilter); VECTOR (IC7200modes_, vIC7200modes_); VECTOR (IC7200_SSBwidths, vIC7200_SSBwidths); VECTOR (IC7200_RTTYwidths, vIC7200_RTTYwidths); VECTOR (IC7200_AMwidths, vIC7200_AMwidths); modes_ = IC7200modes_; _mode_type = IC7200_mode_type; bandwidths_ = IC7200_SSBwidths; bw_vals_ = IC7200_bw_vals_SSB; IC7200_widgets[0].W = btnVol; IC7200_widgets[1].W = sldrVOLUME; IC7200_widgets[2].W = btnAGC; IC7200_widgets[3].W = sldrRFGAIN; IC7200_widgets[4].W = sldrSQUELCH; IC7200_widgets[5].W = btnNR; IC7200_widgets[6].W = sldrNR; IC7200_widgets[7].W = btnLOCK; IC7200_widgets[8].W = sldrINNER; IC7200_widgets[9].W = btnCLRPBT; IC7200_widgets[10].W = sldrOUTER; IC7200_widgets[11].W = btnNotch; IC7200_widgets[12].W = sldrNOTCH; IC7200_widgets[13].W = sldrMICGAIN; IC7200_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->deactivate(); choice_tTONE->deactivate(); } RIG_IC7200::RIG_IC7200() { name_ = IC7200name_; modes_ = IC7200modes_; _mode_type = IC7200_mode_type; bandwidths_ = IC7200_SSBwidths; bw_vals_ = IC7200_bw_vals_SSB; widgets = IC7200_widgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 1; def_bw = A.iBW = 32; A.filter = 1; B.freq = 7070000ULL; B.imode = 1; B.iBW = 32; B.filter = 1; has_extras = true; has_smeter = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_agc_control = true; has_sql_control = true; has_power_control = true; has_volume_control = true; has_mode_control = true; has_bandwidth_control = true; has_micgain_control = true; has_attenuator_control = true; has_preamp_control = true; has_noise_control = true; has_nb_level = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_pbt_controls = true; has_FILTER = true; has_rf_control = true; has_compON = true; has_compression = true; has_vox_onoff = true; has_ptt_control = true; has_tune_control = true; has_split_AB = true; has_vfo_adj = true; has_a2b = true; has_band_selection = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_cw_break_in = true; defaultCIV = 0x76; adjustCIV(defaultCIV); precision = 1; ndigits = 8; CW_sense = 0; // normal // progStatus.gettrace = // progStatus.settrace = // progStatus.serialtrace = // progStatus.rigtrace = // progStatus.xmltrace = // progStatus.trace = false; // progStatus.gettrace = true; // progStatus.settrace = true; // progStatus.serialtrace = true; // progStatus.rigtrace = true; // progStatus.xmltrace = true; // progStatus.trace = true; }; static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } //====================================================================== void RIG_IC7200::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); set_trace(1, "selectA()"); waitFB("select A"); seth(); inuse = onA; } void RIG_IC7200::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); set_trace(1, "selectB()"); waitFB("select B"); seth(); inuse = onB; } bool RIG_IC7200::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); cmd = pre_to; cmd += '\x19'; cmd += '\x00'; cmd.append(post); get_trace(1, "get ID"); bool ok = waitFOR(8, "get ID"); geth(); #if 1 ok = true; #endif return ok; } unsigned long long RIG_IC7200::get_vfoA () { if (inuse == onB) return A.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "get vfo A"); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } geth(); return A.freq; } void RIG_IC7200::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "set_vfoA()"); waitFB("set vfo A"); seth(); } unsigned long long RIG_IC7200::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "get vfo B"); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+5), 10); } } geth(); return B.freq; } void RIG_IC7200::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(2, "set_vfoB()", str2hex(cmd.c_str(), cmd.length())); waitFB("set vfo B"); seth(); } bool RIG_IC7200::can_split() { return true; } void RIG_IC7200::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); set_trace(1, "set split"); waitFB(val ? "set split ON" : "set split OFF"); seth(); } // 7200 does not respond to get split CAT command int RIG_IC7200::get_split() { return split; } // Tranceiver PTT on/off void RIG_IC7200::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (val ? '\x01' : '\x00'); cmd.append( post ); set_trace(1,"set PTT"); if (val) waitFB("set ptt ON"); else waitFB("set ptt OFF"); ptt_ = val; seth(); } int RIG_IC7200::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); get_trace(1, "get PTT"); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } geth(); return ptt_; } // Volume control val 0 ... 100 void RIG_IC7200::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set vol"); waitFB("set vol"); seth(); } int RIG_IC7200::get_volume_control() { int val = progStatus.volume; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get volume control"); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } geth(); return val; } void RIG_IC7200::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int RIG_IC7200::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; get_trace(1, "get smeter"); if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } geth(); return mtr; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { {0, 0.0}, {40, 10.0}, {76, 20.0}, {92, 25.0}, {103, 30.0}, {124, 40.0}, {143, 50.0}, {183, 75.0}, {213, 100.0}, {255, 140.0} }; int RIG_IC7200::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= 0; get_trace(1, "get power out"); if (waitFOR(9, "get power out")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 255) mtr = 255; mtr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } geth(); return mtr; } int RIG_IC7200::get_swr(void) { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; get_trace(1, "get swr"); if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } geth(); return mtr; } int RIG_IC7200::get_alc(void) { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; get_trace(1, "get alc"); if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } geth(); return mtr; } void RIG_IC7200::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); set_trace(1, "set noise"); waitFB("set noise"); seth(); } int RIG_IC7200::get_noise() { int val = progStatus.noise; std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get noise"); if (waitFOR(8, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+6]; } } geth(); return val; } void RIG_IC7200::set_nb_level(int val) { cmd = pre_to; cmd.append("\x14\x12"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set NB level"); waitFB("set NB level"); seth(); } int RIG_IC7200::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x14\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get nb level"); if (waitFOR(9, "get NB level")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } geth(); return val; } void RIG_IC7200::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); set_trace(1, "set NR"); waitFB("set NR"); seth(); } int RIG_IC7200::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get noise reduction"); if (waitFOR(8, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } geth(); return progStatus.noise_reduction; } // 0 < val < 100 void RIG_IC7200::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); val = val * 16 + 8; cmd.append(to_bcd(val, 3)); cmd.append(post); set_trace(1, "set NRval"); waitFB("set NRval"); seth(); } int RIG_IC7200::get_noise_reduction_val() { int val = progStatus.noise_reduction_val; std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get noise reduction val"); if (waitFOR(9, "get NRval")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = fm_bcd(replystr.substr(p+6), 3); val = (val - 8) / 16; } } geth(); return val; } void RIG_IC7200::set_attenuator(int val) { if (val) { atten_level = 1; } else { atten_level = 0; } cmd = pre_to; cmd += '\x11'; cmd += atten_level ? '\x20' : '\x00'; cmd.append( post ); set_trace(1, "set att"); waitFB("set att"); seth(); } int RIG_IC7200::next_attenuator() { if (atten_level) atten_level = 0; return atten_level; } int RIG_IC7200::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; get_trace(1, "get attenuator"); if (waitFOR(7, "get ATT")) { get_trace(1, str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (!replystr[p+5]) { atten_level = 0; } else { atten_level = 1; } } geth(); } return atten_level; } int RIG_IC7200::next_preamp() { if (preamp_level) return 0; return 1; } void RIG_IC7200::set_preamp(int val) { if (val) { preamp_level = 1; } else { preamp_level = 0; } cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += preamp_level ? 0x01 : 0x00; cmd.append( post ); set_trace(1, "set Pre"); waitFB("set Pre"); seth(); } int RIG_IC7200::get_preamp() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get preamp"); if (waitFOR(8, "get Pre")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { preamp_level = replystr[p+6]; } } } geth(); return preamp_level; //progStatus.preamp; } const char *RIG_IC7200::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "P ON"; break; } return "PRE"; } const char *RIG_IC7200::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } void RIG_IC7200::set_rf_gain(int val) { cmd = pre_to; cmd.append("\x14\x02"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set RF"); waitFB("set RF"); seth(); } int RIG_IC7200::get_rf_gain() { int val = progStatus.rfgain; std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); get_trace(1, "get rf gain"); if (waitFOR(9, "get RF")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p + 6)); } geth(); return val; } void RIG_IC7200::set_squelch(int val) { cmd = pre_to; cmd.append("\x14\x03"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set Sqlch"); waitFB("set Sqlch"); seth(); } int RIG_IC7200::get_squelch() { int val = progStatus.squelch; std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get squelch"); if (waitFOR(9, "get squelch")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } geth(); return val; } void RIG_IC7200::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(bcd255(val)); cmd.append( post ); set_trace(1, "set power"); waitFB("set power"); seth(); } double RIG_IC7200::get_power_control() { std::string cstr = "\x14\x0A"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); int val = progStatus.power_level; std::string retstr = "ret str"; get_trace(1, "get power control"); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); retstr = str2hex(replystr.substr(p).c_str(), 9); } } geth(); return val; } void RIG_IC7200::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int RIG_IC7200::get_mic_gain() { std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); get_trace(1, "get mic gain"); if (waitFOR(9, "get mic")) { get_trace(1, str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { return num100(replystr.substr(p + 6)); } } geth(); return 0; } void RIG_IC7200::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(bcd255(val)); cmd.append(post); set_trace(1, "set mic"); waitFB("set mic"); seth(); } int RIG_IC7200::get_modeA() { int md = A.imode; size_t p = 0; std::string resp = pre_fm; resp += '\x04'; cmd = pre_to; cmd += '\x04'; cmd.append(post); get_trace(1, "get mode A"); if (waitFOR(8, "get mode A")) { p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { md = A.filter = 0; } else { md = replystr[p + 5]; if (md > 6) md -= 2; A.filter = replystr[p+6]; } } } geth(); cmd = pre_to; cmd += "\x1A\x04"; cmd.append(post); resp = pre_fm; resp += "\x1A\x04"; get_trace(1, "get data modeA"); if (waitFOR(9, "data mode?")) { p = replystr.rfind(resp); if (p != std::string::npos) { if ((replystr[p+6] & 0x01) == 0x01) { if (md == 0) md = 7; if (md == 1) md = 8; } } } geth(); if (A.filter > 0 && A.filter < 4) mode_filterA[A.imode] = A.filter; if (A.imode == CW7200 || A.imode == CWR7200) { cmd.assign(pre_to).append("\x1A\x03\x37").append(post); resp.assign(pre_fm).append("\x1A\x03\x37"); get_trace(1, "get CW sideband"); if (waitFOR(9, "get CW sideband")) { p = replystr.rfind(resp); CW_sense = replystr[p + 7]; if (CW_sense) { IC7200_mode_type[CW7200] = 'U'; IC7200_mode_type[CWR7200] = 'L'; } else { IC7200_mode_type[CW7200] = 'L'; IC7200_mode_type[CWR7200] = 'U'; } } geth(); } return (A.imode = md); } void RIG_IC7200::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd += '\x06'; cmd += mdval[A.imode]; cmd += mode_filterA[A.imode]; cmd.append( post ); set_trace(1, "set mode A, default filter"); waitFB("set mode A, default filter"); seth(); if (val < 7) return; cmd = pre_to; cmd += '\x1A'; cmd += '\x04'; cmd += '\x01'; cmd += mode_filterA[A.imode]; cmd.append( post); set_trace(1, "set data mode A"); waitFB("set data mode A"); seth(); } int RIG_IC7200::get_modeB() { int md = B.imode; size_t p = 0; cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; get_trace(1, "get mode B"); if (waitFOR(8, "get mode B")) { p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) { md = B.filter = 0; } else { md = replystr[p+5]; if (md > 6) md -= 2; B.filter = replystr[p+6]; } } } geth(); cmd = pre_to; cmd += "\x1A\x04"; cmd.append(post); resp = pre_fm; resp += "\x1A\x04"; get_trace(1, "get data B"); if (waitFOR(9, "get data B")) { p = replystr.rfind(resp); if (p != std::string::npos) { if ((replystr[p+6] & 0x01) == 0x01) { if (md == 0) md = 7; if (md == 1) md = 8; } } } geth(); if (B.filter > 0 && B.filter < 4) mode_filterB[B.imode] = B.filter; if (B.imode == CW7200 || B.imode == CWR7200) { cmd.assign(pre_to).append("\x1A\x03\x37").append(post); resp.assign(pre_fm).append("\x1A\x03\x37"); get_trace(1, "get CW sideband"); if (waitFOR(9, "get CW sideband")) { p = replystr.rfind(resp); CW_sense = replystr[p + 7]; if (CW_sense) { IC7200_mode_type[CW7200] = 'U'; IC7200_mode_type[CWR7200] = 'L'; } else { IC7200_mode_type[CW7200] = 'L'; IC7200_mode_type[CWR7200] = 'U'; } } geth(); } return (B.imode = md); } void RIG_IC7200::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd += '\x06'; cmd += mdval[B.imode]; cmd += mode_filterB[B.imode]; cmd.append( post ); set_trace(1, "set mode B, default filter"); waitFB("set mode B, default filter"); seth(); if (val < 7) return; cmd = pre_to; cmd += '\x1A'; cmd += '\x04'; cmd += '\x01'; cmd += mode_filterB[B.imode]; cmd.append( post); set_trace(1, "set data mode B"); waitFB("set data mode B"); seth(); } int RIG_IC7200::get_modetype(int n) { return _mode_type[n]; } int RIG_IC7200::get_FILT(int mode) { if (inuse == onB) return mode_filterB[mode]; return mode_filterA[mode]; } void RIG_IC7200::set_FILT(int filter) { if (filter < 1 || filter > 3) return; if (inuse == onB) { B.filter = filter; mode_filterB[B.imode] = filter; cmd = pre_to; cmd += '\x06'; cmd += mdval[B.imode]; cmd += filter; cmd.append( post ); set_trace(1, "set mode/filter B"); waitFB("set mode/filter B"); seth(); if (B.imode < 7) return; cmd = pre_to; cmd += '\x1A'; cmd += '\x04'; cmd += '\x01'; cmd += filter; cmd.append( post); set_trace(1, "set data mode/filter B"); waitFB("set data mode/filter B"); seth(); } else { A.filter = filter; mode_filterA[A.imode] = filter; cmd = pre_to; cmd += '\x06'; cmd += mdval[A.imode]; cmd += filter; cmd.append( post ); set_trace(1, "set filter A "); waitFB("set filter A "); seth(); if (A.imode < 7) return; cmd = pre_to; cmd += '\x1A'; cmd += '\x04'; cmd += '\x01'; cmd += mode_filterA[A.imode]; cmd.append( post); set_trace(1, "set data filter A"); waitFB("set data filter A"); seth(); } } const char *RIG_IC7200::FILT(int val) { if (val < 1) val = 1; if (val > 3) val = 3; return szfilter[val - 1].c_str(); } const char *RIG_IC7200::nextFILT() { int val = A.filter; if (inuse == onB) val = B.filter; val++; if (val > 3) val = 1; set_FILT(val); return szfilter[val - 1].c_str(); } void RIG_IC7200::set_FILTERS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_filterB[i]; for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } } std::string RIG_IC7200::get_FILTERS() { for (int i = 0; i < NUM_MODES; i++) { if (mode_filterA[i] < 1) mode_filterA[i] = 1; if (mode_filterA[i] > 3) mode_filterA[i] = 3; if (mode_filterB[i] < 1) mode_filterB[i] = 1; if (mode_filterB[i] > 3) mode_filterB[i] = 3; } std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_filterA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_filterB[i] << " "; return s.str(); } std::string RIG_IC7200::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_IC7200::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_IC7200::adjust_bandwidth(int m) { switch (m) { case 2: // AM bandwidths_ = IC7200_AMwidths; bw_vals_ = IC7200_bw_vals_AM; bwA = 30; break; case 3: case 5: // CW bandwidths_ = IC7200_SSBwidths; bw_vals_ = IC7200_bw_vals_SSB; bwA = 14; break; case 4: case 6: // RTTY bandwidths_ = IC7200_RTTYwidths; bw_vals_ = IC7200_bw_vals_RTTY; bwA = 28; break; case 0: case 1: case 7: case 8: default: // SSB bandwidths_ = IC7200_SSBwidths; bw_vals_ = IC7200_bw_vals_SSB; bwA = 32; } return bwA; } int RIG_IC7200::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_IC7200::bwtable(int m) { switch (m) { case 2: // AM return IC7200_AMwidths; break; case 3: case 5: // CW return IC7200_SSBwidths; break; case 4: case 6: // RTTY return IC7200_RTTYwidths; break; case 0: case 1: case 7: case 8: default: // SSB return IC7200_SSBwidths; } return IC7200_SSBwidths; } void RIG_IC7200::set_bwA(int val) { A.iBW = val; cmd = pre_to; cmd.append("\x1A\x02"); cmd.append(to_bcd(val, 2)); cmd.append( post ); set_trace(1, "set BW A"); waitFB("set BW A"); seth(); mode_bwA[A.imode] = val; } int RIG_IC7200::get_bwA() { cmd = pre_to; cmd += "\x1A\x02"; cmd.append( post ); std::string resp = pre_fm; resp += "\x1A\x02"; int bwval = A.iBW; get_trace(1, "get BW A"); if (waitFOR(8, "get BW A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) bwval = (fm_bcd(replystr.substr(p+6),2)); } if (bwval != A.iBW) { A.iBW = bwval; } geth(); mode_bwA[A.imode] = A.iBW; return A.iBW; } void RIG_IC7200::set_bwB(int val) { B.iBW = val; cmd = pre_to; cmd.append("\x1A\x02"); cmd.append(to_bcd(val, 2)); cmd.append( post ); set_trace(1, "set BW B"); waitFB("set BW B"); seth(); mode_bwB[B.imode] = val; } int RIG_IC7200::get_bwB() { cmd = pre_to; cmd += "\x1A\x02"; cmd.append( post ); std::string resp = pre_fm; resp += "\x1A\x02"; int bwval = B.iBW; get_trace(1, "get BW B"); if (waitFOR(8, "get BW B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) bwval = (fm_bcd(replystr.substr(p+6),2)); } if (bwval != B.iBW) { B.iBW = bwval; } geth(); mode_bwB[B.imode] = B.iBW; return B.iBW; } void RIG_IC7200::set_auto_notch(int val) { cmd = pre_to; cmd += '\x16'; cmd += '\x41'; cmd += (unsigned char)val; cmd.append( post ); set_trace(1, "set AN"); waitFB("set AN"); seth(); } int RIG_IC7200::get_auto_notch() { std::string cstr = "\x16\x41"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get AN"); if (waitFOR(8, "get AN")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == 0x01) { auto_notch_label("AN", true); geth(); return true; } else { auto_notch_label("AN", false); geth(); return false; } } } geth(); return progStatus.auto_notch; } static int comp_level[] = {11,34,58,81,104,128,151,174,197,221,244}; void RIG_IC7200::set_compression(int on, int val) { cmd = pre_to; cmd.append("\x16\x44"); if (on) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); set_trace(1, "set Comp ON/OFF"); waitFB("set Comp ON/OFF"); seth(); if (val < 0) return; if (val > 10) return; cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(comp_level[val], 3)); cmd.append( post ); set_trace(1, "set comp"); waitFB("set comp"); seth(); } void RIG_IC7200::get_compression(int &on, int &val) { std::string resp; cmd.assign(pre_to).append("\x16\x44").append(post); resp.assign(pre_fm).append("\x16\x44"); get_trace(1, "get comp on/off"); if (waitFOR(8, "get comp on/off")) { size_t p = replystr.find(resp); if (p != std::string::npos) on = (replystr[p+6] == 0x01); } geth(); cmd.assign(pre_to).append("\x14\x0E").append(post); resp.assign(pre_fm).append("\x14\x0E"); get_trace(1, "get comp level"); if (waitFOR(9, "get comp level")) { size_t p = replystr.find(resp); int level = 0; if (p != std::string::npos) { level = fm_bcd(replystr.substr(p+6), 3); for (val = 0; val < 11; val++) if (level <= comp_level[val]) break; } } geth(); } void RIG_IC7200::set_vox_onoff() { if (progStatus.vox_onoff) { cmd = pre_to; cmd.append("\x16\x46"); cmd += '\x01'; cmd.append(post); set_trace(1, "set Vox ON"); waitFB("set Vox ON"); seth(); } else { cmd = pre_to; cmd.append("\x16\x46"); cmd += '\x00'; cmd.append(post); set_trace(1, "set Vox OFF"); waitFB("set Vox OFF"); seth(); } } void RIG_IC7200::set_notch(bool on, int freq) { 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: if (CW_sense) hexval = freq - progStatus.cw_spot_tone; else hexval = progStatus.cw_spot_tone - freq; break; case CWR7200: if (CW_sense) hexval = progStatus.cw_spot_tone - freq; else 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); set_trace(1, "set notch"); waitFB("set notch"); seth(); cmd = pre_to; cmd.append("\x14\x0D"); cmd.append(to_bcd(hexval,3)); cmd.append(post); set_trace(1, "set notch val"); waitFB("set notch val"); seth(); } bool RIG_IC7200::get_notch(int &val) { bool on = false; val = 1500; std::string cstr = "\x16\x48"; std::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 != std::string::npos) on = replystr[p + 6]; cmd = pre_to; resp = pre_fm; cstr = "\x14\x0D"; cmd.append(cstr); resp.append(cstr); cmd.append(post); get_trace(1, "notch val"); if (waitFOR(9, "notch val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { 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: if (CW_sense) val = progStatus.cw_spot_tone + val; else val = progStatus.cw_spot_tone - val; break; case CWR7200: if (CW_sense) val = progStatus.cw_spot_tone - val; else val = progStatus.cw_spot_tone + val; break; } } } geth(); } return on; } void RIG_IC7200::get_notch_min_max_step(int &min, int &max, int &step) { 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; int RIG_IC7200::get_agc() { cmd = pre_to; cmd.append("\x16\x12"); cmd.append(post); get_trace(1, "get AGC"); if (waitFOR(8, "get AGC")) { size_t p = replystr.find(pre_fm); if (p == std::string::npos) return agcval; return (agcval = replystr[p+6]); // 1 = off, 2 = FAST, 3 = SLOW } geth(); return agcval; } int RIG_IC7200::incr_agc() { agcval++; if (agcval == 3) agcval = 0; cmd = pre_to; cmd.append("\x16\x12"); cmd += agcval; cmd.append(post); set_trace(1, "set AGC"); waitFB("set AGC"); seth(); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "SLO"}; const char *RIG_IC7200::agc_label() { return agcstrs[agcval]; } int RIG_IC7200::agc_val() { return (agcval); } void RIG_IC7200::set_if_shift(int val) { int shift; sh_ = val; if (val == 0) sh_on_ = false; else sh_on_ = true; shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); set_trace(1, "set IF on/off"); waitFB("set IF on/off"); seth(); cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); set_trace(1, "set IF val"); waitFB("set IF val"); seth(); } bool RIG_IC7200::get_if_shift(int &val) { val = sh_; return sh_on_; } void RIG_IC7200::get_if_min_max_step(int &min, int &max, int &step) { min = -50; max = +50; step = 1; } void RIG_IC7200::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); set_trace(1, "set PBT inner"); waitFB("set PBT inner"); seth(); } void RIG_IC7200::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); set_trace(1, "set PBT outer"); waitFB("set PBT outer"); seth(); } int RIG_IC7200::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get pbt inner"); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } geth(); return val; } int RIG_IC7200::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); get_trace(1, "get pbt outer"); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } geth(); return val; } // CW methods void RIG_IC7200::get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void RIG_IC7200::set_cw_wpm() { int iwpm = round((progStatus.cw_wpm - 6) * 255 / 42 + 0.5); minmax(0, 255, iwpm); cmd.assign(pre_to).append("\x14\x0C"); cmd.append(to_bcd(iwpm, 3)); cmd.append( post ); set_trace(1, "SET cw wpm"); waitFB("SET cw wpm"); seth(); } void RIG_IC7200::set_break_in() { // 16 47 00 break-in off // 16 47 01 break-in semi // 16 47 02 break-in full cmd.assign(pre_to).append("\x16\x47"); switch (progStatus.break_in) { case 2: cmd += '\x02'; break_in_label("FULL"); break; case 1: cmd += '\x01'; break_in_label("SEMI"); break; case 0: default: cmd += '\x00'; break_in_label("BK-IN"); } cmd.append(post); set_trace(1, "SET break-in"); waitFB("SET break-in"); seth(); } void RIG_IC7200::get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void RIG_IC7200::set_cw_qsk() { int qsk = round ((progStatus.cw_qsk - 2.0) * 255.0 / 11.0 + 0.5); minmax(0, 255, qsk); cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(qsk, 3)); cmd.append(post); set_trace(1, "Set cw qsk delay"); waitFB("Set cw qsk delay"); seth(); } void RIG_IC7200::get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void RIG_IC7200::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0 + 0.5); minmax(0, 255, n); cmd.append(to_bcd(n, 3)); cmd.append( post ); set_trace(1, "SET cw spot tone"); waitFB("SET cw spot tone"); seth(); } void RIG_IC7200::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x1A\x03\x06"); cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); set_trace(1, "SET cw sidetone volume"); waitFB("SET cw sidetone volume"); seth(); } void RIG_IC7200::setVfoAdj(double v) { vfo_ = v; cmd.assign(pre_to); cmd.append("\x1A\x03\x49"); cmd.append(bcd255(int(v))); cmd.append(post); waitFB("SET vfo adjust"); seth(); } double RIG_IC7200::getVfoAdj() { cmd.assign(pre_to); cmd.append("\x1A\x03\x49"); cmd.append(post); get_trace(1, "get vfo adj"); if (waitFOR(10, "get vfo adj")) { size_t p = replystr.find(pre_fm); if (p != std::string::npos) { vfo_ = num100(replystr.substr(p+7)); } } geth(); return vfo_; } void RIG_IC7200::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); get_trace(1, "get band"); if (waitFOR(17, "get band")) { std::string ans = replystr; size_t p = ans.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(ans.substr(p+8, 5), 10); int bandmode = ans[p+13]; int bandfilter = ans[p+14]; int banddata = ans[p+15] & 0x10; if ((bandmode == 0 || bandmode == 1) && banddata) bandmode += 7; if (inuse == onB) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } geth(); } void RIG_IC7200::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int mode = (inuse == onB ? B.imode : A.imode); int fil = (inuse == onB ? B.filter : A.filter); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mdval[mode]; cmd += fil; if (mode >= 7) cmd += '\x10'; else cmd += '\x00'; cmd.append(post); set_trace(1, "set band_selection"); waitFB("set band"); seth(); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); get_trace(1, "get band stack"); waitFOR(17, "get band stack"); geth(); } flrig-2.0.04/src/rigs/icom/IC910.cxx0000664000175000017500000001651514502720327013570 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC910.h" #include "support.h" const char IC910Hname_[] = "IC-910H"; static std::vectorIC910Hmodes_; static const char *vIC910Hmodes_[] = { "LSB", "USB", "AM", "CW", "FM"}; // mode values are 0, 1, 2, 3, 4, 5, 7, 8 const char IC910H_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U'}; static std::vectorIC910H_widths; static const char *vIC910H_widths[] = {"none"}; static int IC910H_bw_val[] = {1, WVALS_LIMIT}; static GUI IC910_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 125, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 125, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 145, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 145, 156 }, //10 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //11 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //12 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC910H::initialize() { VECTOR (IC910Hmodes_, vIC910Hmodes_); VECTOR (IC910H_widths, vIC910H_widths); modes_ = IC910Hmodes_; _mode_type = IC910H_mode_type; bandwidths_ = IC910H_widths; bw_vals_ = IC910H_bw_val; IC910_widgets[0].W = btnVol; IC910_widgets[1].W = sldrVOLUME; IC910_widgets[2].W = btnAGC; IC910_widgets[3].W = sldrRFGAIN; IC910_widgets[4].W = sldrSQUELCH; IC910_widgets[5].W = btnNR; IC910_widgets[6].W = sldrNR; IC910_widgets[7].W = btnLOCK; IC910_widgets[8].W = sldrINNER; IC910_widgets[9].W = btnCLRPBT; IC910_widgets[10].W = sldrOUTER; IC910_widgets[11].W = sldrMICGAIN; IC910_widgets[12].W = sldrPOWER; } RIG_IC910H::RIG_IC910H() { defaultCIV = 0x60; name_ = IC910Hname_; modes_ = IC910Hmodes_; _mode_type = IC910H_mode_type; bandwidths_ = IC910H_widths; bw_vals_ = IC910H_bw_val; // serial_write_delay = 0; // serial_post_write_delay = 0; widgets = IC910_widgets; def_freq = 1296070000L; def_mode = 1; has_notch_control = has_tune_control = has_alc_control = has_bandwidth_control = false; has_smeter = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_compON = has_compression = has_ptt_control = has_power_control = has_volume_control = has_mode_control = has_micgain_control = has_attenuator_control = has_preamp_control = has_pbt_controls = has_swr_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_rf_control = has_sql_control = restore_mbw = true; comp_is_on = !progStatus.compON; adjustCIV(defaultCIV); precision = 10; ndigits = 9; }; // this looks like trouble void RIG_IC910H::set_vfoA (unsigned long long freq) { unsigned long long nufreq; if (freq > 1300000000ULL) nufreq = 1300000000ULL; else if (freq > 450000000ULL && freq < 1240000000ULL && freqA <= 450000000ULL) nufreq = 1240000000ULL; else if (freq > 450000000ULL && freq < 1240000000ULL && freqA >= 1240000000ULL) nufreq = 450000000ULL; else if (freq > 148000000ULL && freq < 430000000ULL && freqA <= 148000000ULL) nufreq = 430000000ULL; else if (freq > 148000000ULL && freq < 430000000ULL && freqA >= 430000000ULL) nufreq = 148000000ULL; else if (freq < 144000000ULL) nufreq = 144000000ULL; else nufreq = freq; freqA = nufreq; if (freqA != freq) { vfoA.freq = freqA; setFreqDispA((void*)0); } A.freq = freqA; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freqA, 10 ) ); cmd.append( post ); waitFB("set vfo A");} void RIG_IC910H::set_compression(int on, int val) { if (on) { cmd = pre_to; cmd.append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append( post ); waitFB("set comp"); if (comp_is_on != on) { comp_is_on = on; cmd = pre_to; cmd.append("\x16\01"); cmd.append( post ); waitFB("set comp val"); } } else if (comp_is_on != on) { comp_is_on = on; cmd = pre_to; cmd.append("\x16\00"); cmd.append( post ); waitFB("set comp"); } } void RIG_IC910H::set_vox_onoff() { cmd = pre_to; cmd.append("\x16\x46"); cmd += progStatus.vox_onoff ? 1 : 0; cmd.append(post); waitFB("set vox"); } void RIG_IC910H::set_vox_gain() { cmd = pre_to; cmd.append("\x1A\x02"); cmd.append(to_bcd(progStatus.vox_gain * 255 / 100, 3)); cmd.append(post); waitFB("set vox gain"); } void RIG_IC910H::set_vox_anti() { cmd = pre_to; cmd.append("\x1A\x04"); cmd.append(to_bcd(progStatus.vox_anti * 255 / 100, 3)); cmd.append(post); waitFB("set antivox"); } void RIG_IC910H::set_vox_hang() { cmd = pre_to; cmd.append("\x1A\x03"); cmd.append(to_bcd(progStatus.vox_hang * 255 / 100, 3)); cmd.append(post); waitFB("set vox hang"); } int RIG_IC910H::get_smeter() { std::string cstr = "\x16\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } void RIG_IC910H::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC910H::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC910H::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC910H::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } flrig-2.0.04/src/rigs/icom/IC7851.cxx0000664000175000017500000010252514502720327013660 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2018 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC7851.h" #include "support.h" bool IC7851_DEBUG = true; //============================================================================= // IC-_7851 const char IC7851name_[] = "IC-7851"; #define NUM_FILTERS 3 #define NUM_MODES 16 enum { LSB_7851, USB_7851, AM_7851, CW_7851, RTTY_7851, FM_7851, CWR_7851, RTTYR_7851, PSK_7851, PSKR_7851, LSBD1_7851, LSBD2_7851, LSBD3_7851, USBD1_7851, USBD2_7851, USBD3_7851 }; static int mode_filterA[NUM_MODES] = { 1,1,1,1,1, 1,1,1,1,1, 1,1,1, 1,1,1}; static int mode_filterB[NUM_MODES] = { 1,1,1,1,1, 1,1,1,1,1, 1,1,1, 1,1,1}; static std::vectorIC7851modes_; static const char *vIC7851modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "PSK", "PSK-R", "LSB-D1", "LSB-D2", "LSB-D3", "USB-D1", "USB-D2", "USB-D3"}; const char IC7851_mode_type[] = { 'L', 'U', 'U', 'U', 'L', 'U', 'L', 'U', 'U', 'L', 'L', 'L', 'L', 'U', 'U', 'U' }; const char IC7851_mode_nbr[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x07, 0x08, 0x12, 0x13, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01 }; static std::vectorIC7851_ssb_bws; static const char *vIC7851_ssb_bws[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600" }; static int IC7851_bw_vals_SSB[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40, WVALS_LIMIT}; static std::vectorIC7851_am_bws; static const char *vIC7851_am_bws[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000", "6200", "6400", "6600", "6800", "7000", "_7851", "7400", "_7851", "_7851", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000" }; static int IC7851_bw_vals_AM[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49, WVALS_LIMIT}; static std::vectorIC7851_fm_bws; static const char *vIC7851_fm_bws[] = { "FIXED" }; static int IC7851_bw_vals_FM[] = { 1, WVALS_LIMIT}; static GUI IC7851_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //13 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //14 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC7851::initialize() { VECTOR (IC7851modes_, vIC7851modes_); VECTOR (IC7851_ssb_bws, vIC7851_ssb_bws); VECTOR (IC7851_am_bws, vIC7851_am_bws); VECTOR (IC7851_fm_bws, vIC7851_fm_bws); modes_ = IC7851modes_; bandwidths_ = IC7851_ssb_bws; bw_vals_ = IC7851_bw_vals_SSB; _mode_type = IC7851_mode_type; IC7851_widgets[0].W = btnVol; IC7851_widgets[1].W = sldrVOLUME; IC7851_widgets[2].W = btnAGC; IC7851_widgets[3].W = sldrRFGAIN; IC7851_widgets[4].W = sldrSQUELCH; IC7851_widgets[5].W = btnNR; IC7851_widgets[6].W = sldrNR; IC7851_widgets[7].W = btnLOCK; IC7851_widgets[8].W = sldrINNER; IC7851_widgets[9].W = btnCLRPBT; IC7851_widgets[10].W = sldrOUTER; IC7851_widgets[11].W = btnNotch; IC7851_widgets[12].W = sldrNOTCH; IC7851_widgets[13].W = sldrMICGAIN; IC7851_widgets[14].W = sldrPOWER; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->activate(); choice_tTONE->activate(); } RIG_IC7851::RIG_IC7851() { defaultCIV = 0x8E; name_ = IC7851name_; modes_ = IC7851modes_; bandwidths_ = IC7851_ssb_bws; bw_vals_ = IC7851_bw_vals_SSB; _mode_type = IC7851_mode_type; adjustCIV(defaultCIV); serial_baudrate = BR19200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; widgets = IC7851_widgets; has_extras = has_cw_wpm = has_cw_spot_tone = has_cw_qsk = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_compON = has_compression = has_voltmeter = has_idd_control = has_micgain_control = has_bandwidth_control = has_smeter = has_power_control = has_volume_control = has_mode_control = has_notch_control = has_attenuator_control = has_preamp_control = has_pbt_controls = has_ptt_control = has_tune_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_rf_control = has_sql_control = has_split_AB = has_split = true; ICOMmainsub = true; has_band_selection = true; has_xcvr_auto_on_off = true; can_synch_clock = true; can_change_alt_vfo = true; has_a2b = true; precision = 1; ndigits = 8; }; //====================================================================== // IC7851 unique commands //====================================================================== void RIG_IC7851::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\xD2'; cmd += '\x00'; cmd.append(post); sendICcommand(cmd, 6); waitFB("Select A"); inuse = onA; } void RIG_IC7851::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\xD2'; cmd += '\x01'; cmd.append(post); sendICcommand(cmd, 6); waitFB("Select B"); inuse = onB; } void RIG_IC7851::set_xcvr_auto_on() { cmd = pre_to; cmd += '\x19'; cmd += '\x00'; cmd.append(post); if (waitFOR(8, "get ID", 100) == false) { cmd.clear(); int fes[] = { 2, 2, 2, 3, 7, 13, 25, 50, 75, 150, 150, 150 }; if (progStatus.serial_baudrate >= 0 && progStatus.serial_baudrate <= 11) { cmd.append( fes[progStatus.serial_baudrate], '\xFE'); } cmd.append(pre_to); cmd += '\x18'; cmd += '\x01'; cmd.append(post); waitFB("Power ON", 200); for (int i = 0; i < 5000; i += 100) { MilliSleep(100); update_progress(100 * i / 5000); Fl::awake(); } } } void RIG_IC7851::set_xcvr_auto_off() { cmd.clear(); cmd.append(pre_to); cmd += '\x18'; cmd += '\x00'; cmd.append(post); waitFB("Power OFF", 200); } bool RIG_IC7851::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } static int ret = 0; unsigned long long RIG_IC7851::get_vfoA () { std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); cmd += '\x00'; resp += '\x00'; cmd.append(post); get_trace(1, "get_vfoA()"); ret = waitFOR(12, "get vfo A"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+6), 10); } } return A.freq; } void RIG_IC7851::set_vfoA (unsigned long long freq) { A.freq = freq; cmd.assign(pre_to).append("\x25"); if (inuse == onA) cmd += '\x00'; else cmd += '\x01'; cmd.append( to_bcd_be( freq, 10) ); cmd.append( post ); set_trace(1, "set_vfoA"); waitFB("set vfo A"); seth(); } unsigned long long RIG_IC7851::get_vfoB () { std::string resp; cmd.assign(pre_to).append("\x25"); resp.assign(pre_fm).append("\x25"); cmd += '\x01'; resp += '\x01'; cmd.append(post); get_trace(1, "get_vfoB()"); ret = waitFOR(12, "get vfo B"); geth(); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+6] == -1) A.freq = 0; else B.freq = fm_bcd_be(replystr.substr(p+6), 10); } } return B.freq; } void RIG_IC7851::set_vfoB (unsigned long long freq) { B.freq = freq; cmd.assign(pre_to).append("\x25"); if (inuse == onA) cmd += '\x01'; else cmd += '\x00'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "set_vfoB"); waitFB("set vfo B"); seth(); } bool RIG_IC7851::can_split() { return true; } void RIG_IC7851::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); } int RIG_IC7851::get_split() { int read_split = 0; cmd.assign(pre_to); cmd.append("\x0F"); cmd.append( post ); if (waitFOR(7, "get split")) { std::string resp = pre_fm; resp.append("\x0F"); size_t p = replystr.find(resp); if (p != std::string::npos) read_split = replystr[p+5]; if (read_split != 0xFA) // fail byte split = read_split; } return split; } void RIG_IC7851::set_modeA(int val) { A.imode = val; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; cmd += IC7851_mode_nbr[A.imode]; // operating mode if (A.imode >= USBD3_7851) { set_trace(1, "USB D3 "); cmd += '\x03'; } else if (A.imode >= USBD2_7851) { set_trace(1, "USB D2 "); cmd += '\x02'; } else if (A.imode >= USBD1_7851) { set_trace(1, "USB D1 "); cmd += '\x01'; } else if (A.imode >= LSBD3_7851) { set_trace(1, "LSB D3 "); cmd += '\x03'; // data mode D3 } else if (A.imode >= LSBD2_7851) { set_trace(1, "LSB D2 "); cmd += '\x02'; // data mode D2 } else if (A.imode >= LSBD1_7851) { set_trace(1, "LSB D1 "); cmd += '\x01'; // data mode D1 } else { cmd += '\x00'; A.filter = 0; } cmd += A.filter; cmd.append( post ); waitFB("set mode A"); set_trace(4, "set mode A[", IC7851modes_[A.imode].c_str(), "] ", str2hex(cmd.c_str(), cmd.length())); } // 0 1 2 3 4 5 6 7 8 9 // FE FE E0 94 26 NN NN NN NN FD // | | | | // | | | |__filter setting, 01, 02, 03 // | | |_____data mode, 00 - off, 01 - data mode 1 // | | |_____02 - data mode 2, 03 - data mode 3 // | |________Mode 00 - LSB // | 01 - USB // | 02 - AM // | 03 - CW // | 04 - RTTY // | 05 - FM // | 07 - CW-R // | 08 - RTTY-R // |___________selected vfo, 00 - active, 01 - inactive int RIG_IC7851::get_modeA() { int md = 0; size_t p; std::string resp; resp.assign(pre_fm).append("\x26"); cmd.assign(pre_to).append("\x26"); cmd += '\x00'; resp += '\x00'; cmd.append(post); if (waitFOR(10, "get mode A")) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeA; // fe fe e0 8e 26 00 01 01 03 fd - USB D1 FIL3 // 0 1 2 3 4 5 6 7 8 9 // AB MD DM FL // fe fe e0 8e 26 00 00 03 01 fda - LSB D3 FIL1 for (md = 0; md < LSBD1_7851; md++) { if (replystr[p+6] == IC7851_mode_nbr[md]) { A.imode = md; char traceinfo[256]; snprintf(traceinfo, sizeof(traceinfo), "MDB1 A.imode=%d, p+6=%d, p+7=%d\n", A.imode, replystr[p+6], replystr[p+7]); get_trace(1, traceinfo); if (replystr[p+7] != 0) { if (replystr[p+6]==0) A.imode += 9 + replystr[p+7]; else A.imode += 11 + replystr[p+7]; snprintf(traceinfo, sizeof(traceinfo), "MDB2 A.imode=%d, p+6=%d, p+7=%d\n", A.imode, replystr[p+6], replystr[p+7]); } get_trace(1, traceinfo); if (A.imode > 16) A.imode = 1; break; A.filter = replystr[p+8]; } } } end_wait_modeA: char traceinfo[256]; snprintf(traceinfo, sizeof(traceinfo), "A.imode=%d", A.imode); get_trace(1, traceinfo); get_trace(4, "get mode A[", IC7851modes_[A.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); mode_filterA[A.imode] = A.filter; return A.imode; } void RIG_IC7851::set_modeB(int val) { B.imode = val; cmd.assign(pre_to); cmd += '\x26'; cmd += '\x00'; cmd += IC7851_mode_nbr[B.imode]; // operating mode if (B.imode >= USBD3_7851) { set_trace(1, "USB D3 "); cmd += '\x03'; } else if (B.imode >= USBD2_7851) { set_trace(1, "USB D2 "); cmd += '\x02'; } else if (B.imode >= USBD1_7851) { set_trace(1, "USB D1 "); cmd += '\x01'; } else if (B.imode >= LSBD3_7851) { set_trace(1, "LSB D3 "); cmd += '\x03'; // data mode D3 } else if (B.imode >= LSBD2_7851) { set_trace(1, "LSB D2 "); cmd += '\x02'; // data mode D2 } else if (B.imode >= LSBD1_7851) { set_trace(1, "LSB D1 "); cmd += '\x01'; // data mode D1 } else { cmd += '\x00'; B.filter = 0; } cmd += B.filter; cmd.append( post ); waitFB("set mode B"); set_trace(4, "set mode B[", IC7851modes_[B.imode].c_str(), "] ", str2hex(cmd.c_str(), cmd.length())); } int RIG_IC7851::get_modeB() { int md = 0; size_t p; std::string resp; resp.assign(pre_fm).append("\x26"); cmd.assign(pre_to).append("\x26"); cmd += '\x01'; resp += '\x01'; cmd.append(post); if (waitFOR(10, "get mode B")) { p = replystr.rfind(resp); if (p == std::string::npos) goto end_wait_modeB; for (md = 0; md < LSBD1_7851; md++) { if (replystr[p+6] == IC7851_mode_nbr[md]) { B.imode = md; if (B.imode < 2) B.imode += 10 + replystr[p+6]*3 + replystr[p+7]; if (B.imode > 15) B.imode = 1; B.filter = replystr[p+8]; break; } } } end_wait_modeB: get_trace(4, "get mode B[", IC7851modes_[B.imode].c_str(), "] ", str2hex(replystr.c_str(), replystr.length())); mode_filterB[B.imode] = B.filter; return B.imode; } int RIG_IC7851::get_bwA() { if (A.imode == 5) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); if (waitFOR(8, "get bwA")) { A.iBW = fm_bcd(replystr.substr(6), 2); } return A.iBW; } void RIG_IC7851::set_bwA(int val) { A.iBW = val; if (A.imode == 5) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); if (IC7851_DEBUG) LOG_INFO("%s", str2hex(cmd.data(), cmd.length())); waitFB("set bwA"); } int RIG_IC7851::get_bwB() { if (B.imode == 5) return 0; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(post); if (waitFOR(8, "get bwB")) { B.iBW = fm_bcd(replystr.substr(6), 2); } return B.iBW; } void RIG_IC7851::set_bwB(int val) { B.iBW = val; if (B.imode == 5) return; cmd = pre_to; cmd.append("\x1a\x03"); cmd.append(to_bcd(A.iBW, 2)); cmd.append(post); if (IC7851_DEBUG) LOG_INFO("%s", str2hex(cmd.data(), cmd.length())); waitFB("set bwB"); } int RIG_IC7851::adjust_bandwidth(int m) { int bw = 0; switch (m) { case 2: // AM bandwidths_ = IC7851_am_bws; bw_vals_ = IC7851_bw_vals_AM; bw = 19; break; case 5: // FM bandwidths_ = IC7851_fm_bws; bw_vals_ = IC7851_bw_vals_FM; bw = 0; break; case 3: case 7: // CW bandwidths_ = IC7851_ssb_bws; bw_vals_ = IC7851_bw_vals_SSB; bw = 12; break; case 4: case 8: // RTTY bandwidths_ = IC7851_ssb_bws; bw_vals_ = IC7851_bw_vals_SSB; bw = 12; break; case 0: case 1: // SSB case 12: case 13: // PKT default: bandwidths_ = IC7851_ssb_bws; bw_vals_ = IC7851_bw_vals_SSB; bw = 34; break; } return bw; } std::vector& RIG_IC7851::bwtable(int m) { switch (m) { case 2: // AM return IC7851_am_bws; break; case 5: // FM return IC7851_fm_bws; break; case 3: case 7: // CW case 4: case 8: // RTTY case 0: case 1: // SSB case 12: case 13: // PKT default: return IC7851_ssb_bws; break; } return IC7851_ssb_bws; } int RIG_IC7851::def_bandwidth(int m) { int bw = 0; switch (m) { case 2: // AM bw = 19; break; case 5: // FM bw = 0; break; case 4: case 8: // RTTY bw = 12; break; case 3: case 7: // CW bw = 12; break; case 0: case 1: // SSB case 12: case 13: // PKT default: bw = 34; } return bw; } void RIG_IC7851::set_mic_gain(int v) { if (progStatus.USBaudio) return; int ICvol = (int)(v * 255 / 100); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set mic gain"); } static const char *atten_labels[] = { "ATT", "3 dB", "6 dB", "9 dB", "12 dB", "15 dB", "18 dB", "21 dB"}; int RIG_IC7851::next_attenuator() { if (atten_level >= 7) return 0; else return (atten_level + 1); } void RIG_IC7851::set_attenuator(int val) { atten_level = val; int cmdval = atten_level; cmd = pre_to; cmd += '\x11'; cmd += cmdval; cmd.append( post ); sendICcommand(cmd,6); checkresponse(); } int RIG_IC7851::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); if (sendICcommand(cmd,7)) { if (replystr[4] == 0x06) atten_level = replystr[5]; } return atten_level; } const char *RIG_IC7851::ATT_label() { if (atten_level >= 0 && atten_level <= 7) return atten_labels[atten_level]; return atten_labels[0]; } void RIG_IC7851::set_compression(int on, int val) { if (on) { cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append( post ); waitFB("set comp"); cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); } } void RIG_IC7851::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01"); cmd.append( post ); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46"); cmd += '\x00'; // ALH cmd.append( post ); waitFB("set vox OFF"); } } void RIG_IC7851::set_vox_gain() { cmd.assign(pre_to).append("\x14\x16"); cmd.append(to_bcd((int)(progStatus.vox_gain * 2.55), 3)); cmd.append( post ); waitFB("SET vox gain"); } void RIG_IC7851::set_vox_anti() { cmd.assign(pre_to).append("\x14\x17"); cmd.append(to_bcd((int)(progStatus.vox_anti * 2.55), 3)); cmd.append( post ); waitFB("SET anti-vox"); } void RIG_IC7851::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x05\0x01\0x83"); cmd.append(to_bcd((int)(progStatus.vox_hang / 10 ), 2)); cmd.append( post ); waitFB("SET vox hang"); } void RIG_IC7851::get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 200; step = 10; } // CW controls void RIG_IC7851::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (48 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); } // not implemented -- work in progress //int RIG_IC7851::get_cw_wpm() //{ // int wpm = progStatus.cw_wpm; // cmd = pre_to; // cmd.append("\x14\x0C"); // cmd.append(post); // resp = pre_fm; // cmd.append("\x14\x0C"); // if (waitFOR(9, "get WPM")) { // size_t p = replystr.rfind(resp); // if (p != std::string::npos) { // wpm = replystr[p + 6]; // // } //} void RIG_IC7851::get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void RIG_IC7851::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); } void RIG_IC7851::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09"); // values 0=300Hz 255=900Hz int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)); cmd.append( post ); waitFB("SET cw spot tone"); } void RIG_IC7851::set_cw_vol() { cmd.assign(pre_to); cmd.append("\x14\x15"); cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); } void RIG_IC7851::get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void RIG_IC7851::get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } // Tranceiver PTT on/off void RIG_IC7851::set_PTT_control(int val) { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; cmd += (unsigned char) val; cmd.append( post ); waitFB("set ptt"); ptt_ = val; } int RIG_IC7851::get_PTT() { cmd = pre_to; cmd += '\x1c'; cmd += '\x00'; std::string resp = pre_fm; resp += '\x1c'; resp += '\x00'; cmd.append(post); if (waitFOR(8, "get PTT")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = replystr[p + 6]; } return ptt_; } void RIG_IC7851::get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 200; step = 1; } // Volume control val 0 ... 100 void RIG_IC7851::set_volume_control(int val) { cmd = pre_to; cmd.append("\x14\x01"); cmd.append(bcd255(val)); cmd.append( post ); waitFB("set vol"); } int RIG_IC7851::get_volume_control() { int val = progStatus.volume; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = num100(replystr.substr(p+6)); } return val; } void RIG_IC7851::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int RIG_IC7851::get_smeter() { std::string cstr = "\x15\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { {0, 0.0}, {40, 20.0}, {76, 40.0}, {92, 50.0}, {103, 60.0}, {124, 80.0}, {143, 100.0}, {183, 150.0}, {213, 200.0}, {255, 300.0} }; int RIG_IC7851::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= 0; if (waitFOR(9, "get power out")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 213) mtr = 213; mtr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr)/(pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7851::get_swr(void) { std::string cstr = "\x15\x12"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } int RIG_IC7851::get_alc(void) { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } void RIG_IC7851::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC7851::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC7851::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC7851::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } // Read/Write band stack registers // // Read 23 bytes // // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // FE FE nn E0 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // Write 23 bytes // // FE FE E0 nn 1A 01 bd rn f5 f4 f3 f2 f1 mo fi fg t1 t2 t3 r1 r2 r3 FD // // nn - CI-V address // bd - band selection 1/2/3 // rn - register number 1/2/3 // f5..f1 - frequency BCD reverse // mo - mode // fi - filter # // fg flags: x01 use Tx tone, x02 use Rx tone, x10 data mode // t1..t3 - tx tone BCD fwd // r1..r3 - rx tone BCD fwd // // FE FE E0 94 1A 01 06 01 70 99 08 18 00 01 03 10 00 08 85 00 08 85 FD // // band 6; freq 0018,089,970; USB; data mode; t 88.5; r 88.5 void RIG_IC7851::get_band_selection(int v) { cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); if (waitFOR(23, "get band stack")) { set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(pre_fm); if (p != std::string::npos) { unsigned long long bandfreq = fm_bcd_be(replystr.substr(p+8, 5), 10); int bandmode = replystr[p+13]; int bandfilter = replystr[p+14]; int banddata = replystr[p+15] & 0x10; int tone = fm_bcd(replystr.substr(p+16, 3), 6); size_t index = 0; for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; tTONE = index; tone = fm_bcd(replystr.substr(p+19, 3), 6); for (index = 0; index < sizeof(PL_tones) / sizeof(*PL_tones); index++) if (tone == PL_tones[index]) break; rTONE = index; if ((bandmode == 0) && banddata) bandmode = ((banddata == 0x10) ? 10 : (banddata == 0x20) ? 11 : (banddata == 0x30) ? 12 : 0); if ((bandmode == 1) && banddata) bandmode = ((banddata == 0x10) ? 13 : (banddata == 0x20) ? 14 : (banddata == 0x30) ? 15 : 1); if (inuse == onA) { set_vfoB(bandfreq); set_modeB(bandmode); set_FILT(bandfilter); } else { set_vfoA(bandfreq); set_modeA(bandmode); set_FILT(bandfilter); } } } else set_trace(2, "get band stack", str2hex(replystr.c_str(), replystr.length())); } void RIG_IC7851::set_band_selection(int v) { unsigned long long freq = (inuse == onB ? B.freq : A.freq); int mode = (inuse == onB ? B.imode : A.imode); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( to_bcd_be( freq, 10 ) ); cmd += mode; cmd += '\x01'; cmd += '\x00'; cmd.append(to_bcd(PL_tones[tTONE], 6)); cmd.append(to_bcd(PL_tones[rTONE], 6)); cmd.append(post); waitFB("set_band_selection"); set_trace(2, "set_band_selection()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to); cmd.append("\x1A\x01"); cmd += to_bcd_be( v, 2 ); cmd += '\x01'; cmd.append( post ); waitFOR(23, "get band stack"); } void RIG_IC7851::set_notch(bool on, int freq) { int hexval; switch (vfo->imode) { default: case USB_7851: case USBD1_7851: case USBD2_7851: case USBD3_7851: case RTTYR_7851: hexval = freq - 1500; break; case LSB_7851: case LSBD1_7851: case LSBD2_7851: case LSBD3_7851: case RTTY_7851: hexval = 1500 - freq; break; case CW_7851: hexval = progStatus.cw_spot_tone - freq; break; case CWR_7851: 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; std::string cstr = "\x16\x48"; std::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 != std::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 != std::string::npos) { val = (int)ceil(fm_bcd(replystr.substr(p+6),3)); val -= 128; val *= 20; switch (vfo->imode) { default: case USB_7851: case USBD1_7851: case USBD2_7851: case USBD3_7851: case RTTYR_7851: val = 1500 + val; break; case LSB: case LSBD1_7851: case LSBD2_7851: case LSBD3_7851: case RTTY_7851: val = 1500 - val; break; case CW_7851: val = progStatus.cw_spot_tone - val; break; case CWR_7851: 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 USB_7851: case USBD1_7851: case USBD2_7851: case USBD3_7851: case RTTYR_7851: case LSB_7851: case LSBD1_7851: case LSBD2_7851: case LSBD3_7851: case RTTY_7851: min = 0; max = 3000; step = 20; break; case CW_7851: case CWR_7851: min = progStatus.cw_spot_tone - 500; max = progStatus.cw_spot_tone + 500; step = 20; break; } } // --------------------------------------------------------------------- // set date and time // 1A 05 00 95 HH MM : set time // 1A 05 00 94 YY YY MM DD : set date // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_IC7851::sync_date(char *dt) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x95'; unsigned char val; val = ((dt[0] - '0') << 4) + (dt[1] - '0'); cmd += (val & 0xFF); val = ((dt[2] - '0') << 4) + (dt[3] - '0'); cmd += (val & 0xFF); val = ((dt[4] - '0') << 4) + (dt[5] - '0'); cmd += (val & 0xFF); val = ((dt[6] - '0') << 4) + (dt[7] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_IC7851::sync_clock(char *tm) { cmd.clear(); cmd.append(pre_to); cmd += '\x1A'; cmd += '\x05'; cmd += '\x00'; cmd += '\x96'; unsigned char val; val = ((tm[0] - '0') << 4) + (tm[1] - '0'); cmd += (val & 0xFF); val = ((tm[3] - '0') << 4) + (tm[4] - '0'); cmd += (val & 0xFF); cmd.append(post); set_trace(1, "set xcvr clock"); waitFB("set xcvr clock", 200); seth(); } double RIG_IC7851::get_idd(void) { get_trace(1, "get_idd()"); std::string cstr = "\x15\x16"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); double mtr= 0; ret = waitFOR(9, "get idd"); igett(""); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = 25.0 * mtr / 241.0; if (mtr > 25) mtr = 25; } } return mtr; } double RIG_IC7851::get_voltmeter() { std::string cstr = "\x15\x15"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; double val = 0; ret = waitFOR(9, "get voltmeter"); igett("voltmeter"); if (ret) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); val = 52.0 * mtr + 211.0; if (val > 52) val = 52; return val; } } return -1; } #undef NUM_FILTERS #undef NUM_MODES flrig-2.0.04/src/rigs/icom/ICF8101.cxx0000664000175000017500000007474614502720327013770 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "icom/ICF8101.h" #include "status.h" #include "trace.h" #include "support.h" //============================================================================= // IC-F8101 const char ICF8101name_[] = "IC-F8101"; #define NUM_MODES 11 enum F81_modes { F81_LSB, F81_USB, F81_AM, F81_CW, F81_RTTY, F81_LSBD1, F81_USBD1, F81_LSBD2, F81_USBD2, F81_LSBD3, F81_USBD3 }; static std::vectorICF8101modes_; static const char *vICF8101modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "LSB-D1", "USB-D1", "LSB-D2", "USB-D2", "LSB-D3", "USB-D3"}; const char mdval[NUM_MODES] = { 0X00, 0X01, 0X02, 0X03, 0X04, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23}; const char ICF8101_mode_type[NUM_MODES] = { 'L', 'U', 'U', 'L', 'L', 'L', 'U', 'L', 'U', 'L', 'U' }; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorICF8101_CW_SSB_widths; static const char *vICF8101_CW_SSB_widths[] = { "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000"}; static const char ICF8101_CW_SSB_width_vals[] = { '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x09', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x20', '\x21', '\x22', '\x23', '\x24', '\x25', '\x26', '\x27', '\x28', '\x29', '\x30', }; #define NUM_CW_SSB_WIDTHS 30 static std::vectorICF8101_RTTY_widths; static const char *vICF8101_RTTY_widths[] = { "NONE"}; static std::vectorICF8101_AM_widths; static const char *vICF8101_AM_widths[] = { "200", "400", "600", "800", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "5000", "6200", "6400", "6600", "6800", "7000", "7200", "7400", "7600", "7800", "8000", "8200", "8400", "8600", "8800", "9000", "9200", "9400", "9600", "9800", "10000"}; static const char ICF8101_bw_vals_AM[] = { '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x09', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x20', '\x21', '\x22', '\x23', '\x24', '\x25', '\x26', '\x27', '\x28', '\x29', '\x30', '\x31', '\x32', '\x33', '\x34', '\x35', '\x36', '\x37', '\x38', '\x39', '\x40', '\x41', '\x42', '\x43', '\x44', '\x45', '\x46', '\x47', '\x48', '\x49', '\x50', }; #define NUM_AM_WIDTHS 50 //====================================================================== // ICF8101 unique commands //====================================================================== static GUI ICF8101_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 214, 125, 50 }, //2 { (Fl_Widget *)sldrPOWER, 54, 145, 156 }, //3 { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, //4 { (Fl_Widget *)NULL, 0, 0, 0 } }; /* { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 105, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 105, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 125, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 125, 156 }, //10 { (Fl_Widget *)btnNotch, 214, 145, 50 }, //11 { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, //12 }; */ void RIG_ICF8101::initialize() { VECTOR (ICF8101modes_, vICF8101modes_); VECTOR (ICF8101_CW_SSB_widths, vICF8101_CW_SSB_widths); VECTOR (ICF8101_RTTY_widths, vICF8101_RTTY_widths); VECTOR (ICF8101_AM_widths, vICF8101_AM_widths); modes_ = ICF8101modes_; _mode_type = ICF8101_mode_type; bandwidths_ = ICF8101_CW_SSB_widths; ICF8101_widgets[0].W = btnVol; ICF8101_widgets[1].W = sldrVOLUME; ICF8101_widgets[2].W = btnAGC; ICF8101_widgets[3].W = sldrPOWER; ICF8101_widgets[4].W = sldrMICGAIN; /* ICF8101_widgets[3].W = sldrRFGAIN; ICF8101_widgets[4].W = sldrSQUELCH; ICF8101_widgets[5].W = btnNR; ICF8101_widgets[6].W = sldrNR; ICF8101_widgets[7].W = btnLOCK; ICF8101_widgets[8].W = sldrINNER; ICF8101_widgets[9].W = btnCLRPBT; ICF8101_widgets[10].W = sldrOUTER; ICF8101_widgets[11].W = btnNotch; ICF8101_widgets[12].W = sldrNOTCH; btn_icom_select_11->deactivate(); btn_icom_select_12->deactivate(); btn_icom_select_13->deactivate(); choice_rTONE->deactivate(); choice_tTONE->deactivate(); */ } void RIG_ICF8101::shutdown() { cmd = pre_to; cmd += '\x08'; cmd.append(post); set_trace(2, "set memory mode", str2hex(cmd.c_str(), cmd.length())); waitFB("set memory mode"); cmd = pre_to; cmd.append("\x0E\x01"); cmd.append(post); set_trace(2, "set scan mode", str2hex(cmd.c_str(), cmd.length())); waitFB("set scan mode"); } RIG_ICF8101::RIG_ICF8101() { name_ = ICF8101name_; modes_ = ICF8101modes_; _mode_type = ICF8101_mode_type; bandwidths_ = ICF8101_CW_SSB_widths; widgets = ICF8101_widgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 1; // def_bw = A.iBW = 29; B.freq = 7070000ULL; B.imode = 1; // B.iBW = 29; has_smeter = true; has_mode_control = true; has_volume_control = true; has_rf_control = true; has_micgain_control = true; has_power_control = true; has_ptt_control = true; has_tune_control = true; has_agc_control = true; has_split_AB = true; has_noise_control = true; has_nb_level = true; has_preamp_control = true; has_compON = true; has_compression = true; /* has_extras = true; has_power_out = true; has_swr_control = true; has_alc_control = true; has_sql_control = true; has_attenuator_control = true; has_noise_reduction = true; has_noise_reduction_control = true; has_auto_notch = true; has_notch_control = true; has_pbt_controls = true; has_FILTER = true; has_vox_onoff = true; has_vfo_adj = true; has_a2b = true; has_band_selection = true; has_cw_wpm = true; has_cw_spot_tone = true; has_cw_qsk = true; has_cw_break_in = true; */ defaultCIV = 0x8A; adjustCIV(defaultCIV); precision = 10; ndigits = 8; }; static inline void minmax(int min, int max, int &val) { if (val > max) val = max; if (val < min) val = min; } //====================================================================== void RIG_ICF8101::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); set_trace(1, "SELECT"); waitFB("select A"); setthex("select A"); inuse = onA; } void RIG_ICF8101::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); set_trace(1, "SELECT"); waitFB("select B"); setthex("select B"); inuse = onB; } bool RIG_ICF8101::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1,"CHECK"); bool ok = waitFOR(11, "check vfo"); getthex("check"); return ok; } unsigned long long RIG_ICF8101::get_vfoA () { if (inuse == onB) return A.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "GET VFO"); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) A.freq = fm_bcd_be(replystr.substr(p+5), 10); } getthex("get vfoA"); return A.freq; } void RIG_ICF8101::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x1A'; cmd += '\x35'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1, "SET VFO"); waitFB("set vfo A"); setthex("set vfoA"); } unsigned long long RIG_ICF8101::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); get_trace(1, "GET VFO"); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) B.freq = fm_bcd_be(replystr.substr(p+5), 10); } getthex("get vfoB"); return B.freq; } void RIG_ICF8101::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x1A'; cmd += '\x35'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(1,"SET VFO"); waitFB("set vfo B"); setthex("set vfoB"); } // Tranceiver PTT on/off // ON 1A 37 00 02 // OFF 1A 37 00 00 void RIG_ICF8101::set_PTT_control(int val) { cmd = pre_to; cmd.append("\x1A\x37"); cmd += '\x00'; cmd += (val ? '\x02' : '\x00'); cmd.append( post ); set_trace(1, "SET PTT"); if (val) { waitFB("set ptt ON"); setthex("set PTT ON"); } else { waitFB("set ptt OFF"); setthex("set_PTT OFF"); } ptt_ = val; } int RIG_ICF8101::get_PTT() { cmd = pre_to; cmd.append("\x1A\x37"); std::string resp = pre_fm; resp.append("\x1A\x37"); cmd.append(post); get_trace(1, "GET PTT"); if (waitFOR(9, "get PTT")) { getthex("get PTT"); size_t p = replystr.rfind(resp); if (p != std::string::npos) ptt_ = (replystr[p + 7] == 0x02); } return ptt_; } // Volume control val 0 ... 100 struct VOL_TBL { std::string catval; int vol; } vol_tbl[] = { {"\x00\x00", 0}, {"\x01\x39", 1}, {"\x01\x43", 2}, {"\x01\x47", 3}, {"\x01\x51", 4}, {"\x01\x55", 5}, {"\x01\x59", 6}, {"\x01\x63", 7}, {"\x01\x67", 8}, {"\x01\x71", 9}, {"\x01\x75", 10}, {"\x01\x77", 11}, {"\x01\x79", 12}, {"\x01\x81", 13}, {"\x01\x83", 14}, {"\x01\x85", 15}, {"\x01\x87", 16}, {"\x01\x89", 17}, {"\x01\x91", 18}, {"\x01\x93", 19}, {"\x01\x95", 20}, {"\x01\x97", 21}, {"\x01\x99", 22}, {"\x02\x01", 23}, {"\x02\x03", 24}, {"\x02\x05", 25}, {"\x02\x07", 26}, {"\x02\x09", 27}, {"\x02\x11", 28}, {"\x02\x13", 29}, {"\x02\x15", 30}, {"\x02\x17", 31}, {"\x02\x19", 32}, {"\x02\x21", 33}, {"\x02\x23", 34}, {"\x02\x25", 35}, {"\x02\x27", 36}, {"\x02\x29", 37}, {"\x02\x31", 38}, {"\x02\x33", 39}, {"\x02\x35", 40}, {"\x02\x37", 41}, {"\x02\x39", 42}, {"\x02\x41", 43}, {"\x02\x43", 44}, {"\x02\x45", 45}, {"\x02\x47", 46}, {"\x02\x49", 47}, {"\x02\x51", 48}, {"\x02\x53", 49}, {"\x02\x55", 50} }; void RIG_ICF8101::set_volume_control(int val) { if (val < 0) val = 0; if (val > 50) val = 50; cmd = pre_to; cmd.append("\x14\x01"); if (val == 0) { cmd += '\x00'; cmd += '\x00'; } else cmd.append(vol_tbl[val].catval); cmd.append( post ); waitFB("set vol"); setthex("set vol"); } int RIG_ICF8101::get_volume_control() { int val = progStatus.volume; std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { resp = resp.substr(6, 2); if (resp[0] == '\x00' && resp[1] == '\x00') { val = 0; } else { for (int i = 1; i <= 50; i++) { if (resp == vol_tbl[i].catval) { val = vol_tbl[i].vol; break; } } } } } getthex("get vol"); return val; } void RIG_ICF8101::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 50; step = 1; } struct smtr_map {float meter; int sig[3];}; // sig[PRE/OFF/ATT] static smtr_map sm_map[] = { { 0.0, { 56, 12, 0}}, // S0 { 11.0, { 60, 25, 0}}, // S2 { 17.0, { 62, 37, 0}}, // S3 { 22.0, { 72, 49, 15}}, // S4 { 28.0, { 83, 61, 25}}, // S5 { 33.0, { 95, 73, 40}}, // S6 { 39.0, {108, 85, 55}}, // S7 { 45.0, {115, 97, 71}}, // S8 { 50.0, {166, 110, 85}}, // S9 { 58.0, {231, 167, 107}}, // +10 { 67.0, {273, 223, 141}}, // +20 { 74.0, {315, 268, 212}}, // +30 { 84.0, {356, 310, 256}}, // +40 {100.0, {400, 356, 300}} // +60 }; int RIG_ICF8101::get_smeter() { std::string cstr = "\x1A\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; int n = preamp_level; if (n == 0) n = 1; else if (n == 1) n = 0; if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { int val = fm_bcd(replystr.substr(p+6), 3); if (val <= sm_map[0].sig[n]) mtr = 0; else { int i = 0; int i_max = sizeof(sm_map) / sizeof(smtr_map) - 1; if (val > sm_map[i_max].sig[n]) val = sm_map[i_max].sig[n]; for (i = 0; i < i_max; i++) if (val >= sm_map[i].sig[n] && val < sm_map[i+1].sig[n]) break; mtr = (int)ceil(sm_map[i].meter + (sm_map[i+1].meter - sm_map[i].meter)*(val - sm_map[i].sig[n]) / (sm_map[i+1].sig[n] - sm_map[i].sig[n]) ); } } } return mtr; } struct mtr_map {int mtr; float pwr;}; static mtr_map pwr_map[] = { {0, 0.0}, {51, 10.0}, {102, 20.0}, {153, 30.0}, {204, 40.0}, {255, 50.0} }; int RIG_ICF8101::get_power_out(void) { std::string cstr = "\x15\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr = 0; if (waitFOR(9, "get power out")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { int val = fm_bcd(replystr.substr(p+6), 3); size_t i = 0; if (val < 0) val = 0; if (val > 255) val = 255; for (i = 0; i < sizeof(pwr_map) / sizeof(mtr_map) - 1; i++) if (val >= pwr_map[i].mtr && val < pwr_map[i+1].mtr) break; mtr = (int)ceil(pwr_map[i].pwr + (pwr_map[i+1].pwr - pwr_map[i].pwr)*(val - pwr_map[i].mtr)/(pwr_map[i+1].mtr - pwr_map[i].mtr)); } } return mtr; } static int agcval = 0; int RIG_ICF8101::get_agc() { cmd = pre_to; cmd.append("\x1A\x05\x03\x06"); cmd.append(post); if (waitFOR(11, "get AGC")) { size_t p = replystr.find(pre_fm); if (p == std::string::npos) return agcval; return (agcval = replystr[p+9]); // 0 = off, 1 = FAST, 2 = SLOW, 3 = AUTO } return agcval; } int RIG_ICF8101::incr_agc() { agcval++; if (agcval == 4) agcval = 0; cmd = pre_to; cmd.append("\x1A\x05\x03\x06"); cmd += '\x00'; cmd += agcval; cmd.append(post); waitFB("set AGC"); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "SLO", "AUT"}; const char *RIG_ICF8101::agc_label() { return agcstrs[agcval]; } int RIG_ICF8101::agc_val() { return (agcval); } // FE FE 8A E0 1A 05 03 07 00 00/01/02 FD (00=LOW, 01=MID, 02=HIGH) void RIG_ICF8101::set_power_control(double val) { cmd = pre_to; cmd.append("\x1A\x05\x03\x07"); cmd += '\x00'; cmd += val; cmd.append( post ); waitFB("set power"); set_trace(2, "set_power()", str2hex(cmd.c_str(), cmd.length())); } // reply FE FE E0 8A 1A 05 03 07 00 XX FD double RIG_ICF8101::get_power_control() { std::string cstr = "\x1A\x05\x03\x07"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); int val = progStatus.power_level; if (waitFOR(11, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) val = replystr[p+9]; } return (progStatus.power_level = val); } int RIG_ICF8101::get_mic_gain() { std::string cstr = "\x1A\x05\x03\x11"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); int val = progStatus.mic_gain; if (waitFOR(11, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+9]; if (val == '\x0A') val = 10; } } return val; } void RIG_ICF8101::set_mic_gain(int val) { cmd = pre_to; cmd.append("\x1A\x05\x03\x11"); cmd += '\x00'; if (val < 10) cmd += val; else cmd += '\x10'; cmd.append(post); waitFB("set mic"); set_trace(2, "set_mic_gain()", str2hex(cmd.c_str(), cmd.length())); } int RIG_ICF8101::get_modeA() { int md = A.imode; int val = 0; std::string resp = pre_fm; resp.append("\x1A\x34"); cmd = pre_to; cmd.append("\x1A\x34"); cmd.append(post); if (waitFOR(9, "get mode A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p + 7]; for (int i = 0; i < NUM_MODES; i++) if (val == mdval[i]) { md = i; break; } } } get_trace(2, "get_modeA()", str2hex(replystr.c_str(), replystr.length())); return (A.imode = md); } void RIG_ICF8101::set_modeA(int val) { A.imode = val; cmd = pre_to; cmd.append("\x1A\x36"); cmd += '\x00'; cmd += mdval[A.imode]; cmd.append( post ); waitFB("set mode A"); set_trace(2, "set_modeA()", str2hex(cmd.c_str(), cmd.length())); } int RIG_ICF8101::get_modeB() { int md = B.imode; int val = 0; std::string resp = pre_fm; resp.append("\x1A\x34"); cmd = pre_to; cmd.append("\x1A\x34"); cmd.append(post); if (waitFOR(9, "get mode B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p + 7]; for (int i = 0; i < NUM_MODES; i++) if (val == mdval[i]) { md = i; break; } } } get_trace(2, "get_modeB()", str2hex(replystr.c_str(), replystr.length())); return (B.imode = md); } void RIG_ICF8101::set_modeB(int val) { B.imode = val; cmd = pre_to; cmd.append("\x1A\x36"); cmd += '\x00'; cmd += mdval[B.imode]; cmd.append( post ); waitFB("set mode B"); set_trace(2, "set_modeB()", str2hex(cmd.c_str(), cmd.length())); } int RIG_ICF8101::get_modetype(int n) { return _mode_type[n]; } bool RIG_ICF8101::can_split() { return true; } // 1A 05 03 17 00 [01|00] void RIG_ICF8101::set_split(bool val) { split = val; cmd = pre_to; cmd.append("\x1A\x05\x03\x17"); cmd += '\x00'; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set split ON" : "set split OFF"); set_trace(2, (val ? "set split ON" : "set split OFF"), str2hex(cmd.c_str(), cmd.length())); } // F8101 does not respond to get split CAT command int RIG_ICF8101::get_split() { std::string cstr = "\x1A\x05\x03\x17"; cstr += '\x00'; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(11, "get split")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = replystr[p+9]; if (mtr == 0x01) split = 1; } } get_trace(2, "get_split()", str2hex(replystr.c_str(), replystr.length())); return split; } void RIG_ICF8101::set_noise(bool val) { cmd = pre_to; cmd.append("\x1A\x05\x03\x01"); cmd += '\x00'; cmd += val ? '\x01' : '\x00'; cmd.append(post); waitFB("set noise blanker"); set_trace(2, "set_noise_blanker() ", str2hex(replystr.c_str(), replystr.length())); } int RIG_ICF8101::get_noise() { int val = progStatus.noise; std::string cstr = "\x1A\x05\x03\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get noise blanker")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = replystr[p+9]; } } get_trace(2, "get_noise_blanker()", str2hex(replystr.c_str(), replystr.length())); return val; } void RIG_ICF8101::set_nb_level(int val) { cmd = pre_to; cmd.append("\x1A\x05\x03\x02"); cmd += '\x00'; cmd += bcdval[val]; cmd.append(post); waitFB("set NB level"); set_trace(2, "set_nb_level() ", str2hex(replystr.c_str(), replystr.length())); } int RIG_ICF8101::get_nb_level() { int val = progStatus.nb_level; std::string cstr = "\x1A\x05\x03\x02"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(11, "get NB level")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { for (int i = 0; i < 16; i++) { if (replystr[p+9] == bcdval[i]) { val = i; break; } } } } progStatus.nb_level = val; get_trace(2, "get_nb_level()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_ICF8101::next_preamp() { preamp_level++; if (preamp_level == 3) preamp_level = 0; return preamp_level; } void RIG_ICF8101::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd.append("\x1A\x05\x03\x05"); cmd += '\x00'; switch (val) { case 0: cmd += '\x01'; break; case 1: cmd += '\x00'; break; case 2: cmd += '\x02'; } cmd.append( post ); waitFB("set Pre/Att"); set_trace(2, "set_preamp_att() ", str2hex(replystr.c_str(), replystr.length())); } int RIG_ICF8101::get_preamp() { std::string cstr = "\x1A\x05\x03\x05"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(11, "get Pre")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { switch (replystr[p+9]) { case 0: preamp_level = 1; break; case 1: preamp_level = 0; break; case 2: preamp_level = 2; } } } get_trace(2, "get_preamp_attenuator()", str2hex(replystr.c_str(), replystr.length())); return preamp_level; } const char *RIG_ICF8101::PRE_label() { switch (preamp_level) { case 0: default: return "OFF"; break; case 1: return "PRE"; break; case 2: return "ATT"; break; } return "PRE"; } void RIG_ICF8101::set_compression(int on, int val) { std::string onoff = "\x1A\x05\x03\x09"; std::string level = "\x1A\x05\x03\x10"; cmd = pre_to; cmd.append(onoff); cmd += '\x00'; if (on) cmd += '\x01'; else cmd += '\x00'; cmd.append(post); waitFB("set Comp ON/OFF"); set_trace(2, "set_speech_proc() ", str2hex(replystr.c_str(), replystr.length())); if (val < 0) val = 0; if (val > 10) val = 10; cmd.assign(pre_to).append(level); cmd += '\x00'; cmd += bcdval[val]; cmd.append(post); waitFB("set comp"); set_trace(2, "set_speech_proc_level() ", str2hex(replystr.c_str(), replystr.length())); } void RIG_ICF8101::get_compression(int &on, int &val) { std::string onoff = "\x1A\x05\x03\x09"; std::string level = "\x1A\x05\x03\x10"; std::string resp = pre_fm; resp.append(onoff); cmd.assign(pre_to).append(onoff); cmd.append(post); if (waitFOR(11, "get comp on/off")) { size_t p = replystr.find(resp); if (p != std::string::npos) on = (replystr[p+9] == 0x01); } get_trace(2, "get_speech_comp_on_off()", str2hex(replystr.c_str(), replystr.length())); cmd.assign(pre_to).append(level).append(post); resp.assign(pre_fm).append(level); if (waitFOR(11, "get compression level")) { size_t p = replystr.find(resp); if (p != std::string::npos) { for (int i = 0; i < 11; i++) { if (replystr[p+9] == bcdval[i]) { val = i; break; } } get_trace(2, "get_comp_level()", str2hex(replystr.c_str(), replystr.length())); } } } // LSB: // offset: 1A 05 07 01 [00 00]...[15 00] // width: 1A 05 07 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps // USB: // offset: 1A 05 08 01 [00 00]...[15 00] // width: 1A 05 08 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps // CW: // offset: 1A 05 09 01 [00 00]...[08 00] // width: 1A 05 09 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps // AM: // offset: 1A 05 10 01 [00 00]...[00 00] // width: 1A 05 10 02 [00 01]...[00 50], 200 TO 10000 Hz in 200 Hz steps // RTTY: // offset: 1A 05 11 01 [00 00] = 1200.0 Hz (mark frequency) // [00 01] = 1275.0 Hz // [00 02] = 1487.5 Hz // [00 03] = 1615.0 Hz // [00 04] = 1700.0 Hz // [00 05] = 2100.0 Hz // [00 05] = 2125.0 Hz // shift: 1A 05 11 02 [00 00] = 170 Hz // [00 01] = 200 Hz // [00 01] = 425 Hz // [00 01] = 850 Hz // polarity: 1A 05 11 02 [00 00] = NORMAL // [00 01] = REVERSE // LSBD1 // offset: 1A 05 12 01 [00 00] = 1500 Hz // [00 01] = 1650 Hz // [00 02] = 1800 Hz // width: 1A 05 12 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps // USBD1 // offset: 1A 05 13 01 [00 00] = 1500 Hz // [00 01] = 1650 Hz // [00 02] = 1800 Hz // width: 1A 05 13 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps // LSBD2 // offset: 1A 05 14 01 [00 00] = 1500 Hz // [00 01] = 1650 Hz // [00 02] = 1800 Hz // width: 1A 05 14 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps // USBD2 // offset: 1A 05 15 01 [00 00] = 1500 Hz // [00 01] = 1650 Hz // [00 02] = 1800 Hz // width: 1A 05 15 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps // LSBD3 // offset: 1A 05 16 01 [00 00] = 1500 Hz // [00 01] = 1650 Hz // [00 02] = 1800 Hz // width: 1A 05 16 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps // USBD3 // offset: 1A 05 17 01 [00 00] = 1500 Hz // [00 01] = 1650 Hz // [00 02] = 1800 Hz // width: 1A 05 17 02 [00 01]...[00 30], 100 TO 3000 Hz in 100 Hz steps std::string RIG_ICF8101::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_ICF8101::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_ICF8101::adjust_bandwidth(int m) { int iBW; switch (m) { case F81_AM: bandwidths_ = ICF8101_AM_widths; iBW = 29; break; case F81_CW: bandwidths_ = ICF8101_CW_SSB_widths; iBW = 9; break; case F81_RTTY: bandwidths_ = ICF8101_RTTY_widths; iBW = 0; break; case F81_LSB: case F81_USB: case F81_LSBD1: case F81_USBD1: case F81_LSBD2: case F81_USBD2: case F81_LSBD3: case F81_USBD3: default: bandwidths_ = ICF8101_CW_SSB_widths; iBW = 29; } return iBW; } int RIG_ICF8101::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_ICF8101::bwtable(int m) { switch (m) { case F81_AM: return ICF8101_AM_widths; break; case F81_RTTY: return ICF8101_RTTY_widths; break; case F81_CW: case F81_LSB: case F81_USB: case F81_LSBD1: case F81_USBD1: case F81_LSBD2: case F81_USBD2: case F81_LSBD3: case F81_USBD3: default: return ICF8101_CW_SSB_widths; } return ICF8101_CW_SSB_widths; } void RIG_ICF8101::set_BW(int m) { cmd = pre_to; switch (m) { case F81_AM: cmd.append("\x1A\x05\x10\x02"); cmd += '\x00'; cmd += ICF8101_bw_vals_AM[m]; break; case F81_RTTY: return; break; case F81_CW: cmd.append("\x1A\x05\x09\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; case F81_LSB: cmd.append("\x1A\x05\x07\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; case F81_USB: cmd.append("\x1A\x05\x08\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; case F81_LSBD1: cmd.append("\x1A\x05\x12\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; case F81_USBD1: cmd.append("\x1A\x05\x13\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; case F81_LSBD2: cmd.append("\x1A\x05\x14\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; case F81_USBD2: cmd.append("\x1A\x05\x15\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; case F81_LSBD3: cmd.append("\x1A\x05\x15\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; case F81_USBD3: cmd.append("\x1A\x05\x16\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; default: cmd.append("\x1A\x05\x08\x02"); cmd += '\x00'; cmd += ICF8101_CW_SSB_width_vals[m]; break; } cmd.append( post ); } void RIG_ICF8101::set_bwA(int val) { A.iBW = val; set_BW(val); waitFB("set BW A"); mode_bwA[A.imode] = val; set_trace(4, "set_bwA() ", bwtable(A.imode)[val].c_str(), ": ", str2hex(replystr.c_str(), replystr.length())); } void RIG_ICF8101::set_bwB(int val) { B.iBW = val; set_BW(val); waitFB("set BW B"); mode_bwB[B.imode] = val; set_trace(4, "set_bwB() ", bwtable(B.imode)[val].c_str(), ": ", str2hex(replystr.c_str(), replystr.length())); } int RIG_ICF8101::get_BW(int m) { cmd = pre_to; std::string resp = pre_fm; switch (m) { case F81_AM: cmd.append("\x1A\x05\x10\x02"); resp.append("\x1A\x05\x10\x02"); break; case F81_RTTY: return 0; case F81_CW: cmd.append("\x1A\x05\x09\x02"); resp.append("\x1A\x05\x09\x02"); break; case F81_LSB: cmd.append("\x1A\x05\x07\x02"); resp.append("\x1A\x05\x07\x02"); break; case F81_USB: cmd.append("\x1A\x05\x08\x02"); resp.append("\x1A\x05\x08\x02"); break; case F81_LSBD1: cmd.append("\x1A\x05\x12\x02"); resp.append("\x1A\x05\x12\x02"); break; case F81_USBD1: cmd.append("\x1A\x05\x13\x02"); resp.append("\x1A\x05\x13\x02"); break; case F81_LSBD2: cmd.append("\x1A\x05\x14\x02"); resp.append("\x1A\x05\x14\x02"); break; case F81_USBD2: cmd.append("\x1A\x05\x15\x02"); resp.append("\x1A\x05\x15\x02"); break; case F81_LSBD3: cmd.append("\x1A\x05\x15\x02"); resp.append("\x1A\x05\x15\x02"); break; case F81_USBD3: cmd.append("\x1A\x05\x16\x02"); resp.append("\x1A\x05\x16\x02"); break; default: cmd.append("\x1A\x05\x08\x02"); resp.append("\x1A\x05\x08\x02"); } int bwval = 0; if (waitFOR(11, "get BW")) { get_trace(2, "get_bwA()", str2hex(replystr.c_str(), replystr.length())); size_t p = replystr.rfind(resp); if (p != std::string::npos) { bwval = replystr[p+9]; const char *vals = ICF8101_CW_SSB_width_vals; int n = NUM_CW_SSB_WIDTHS; if (m == F81_AM) { vals = ICF8101_bw_vals_AM; n = NUM_AM_WIDTHS; } for (int i = 0; i < n; n++) { if (bwval == vals[i]) { return i; } } } } get_trace(2, "get_bwA()", str2hex(replystr.c_str(), replystr.length())); return 0; } int RIG_ICF8101::get_bwA() { int bw = get_BW(A.imode); if (bw) { A.iBW = bw; mode_bwA[A.imode] = A.iBW; } return A.iBW; } int RIG_ICF8101::get_bwB() { int bw = get_BW(B.imode); if (bw) { B.iBW = bw; mode_bwB[B.imode] = B.iBW; } return B.iBW; } flrig-2.0.04/src/rigs/icom/IC703.cxx0000664000175000017500000004176514502720327013575 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "icom/IC703.h" #include "support.h" //============================================================================= // IC-703 // const char IC703name_[] = "IC-703"; static std::vectorIC703modes_; static const char *vIC703modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM", "CW-R", "RTTY-R", "D-LSB", "D-USB"}; const char IC703_mode_type[] = {'L', 'U', 'U', 'L', 'L', 'U', 'U', 'U', 'L', 'U' }; static std::vectorIC703_widths; static const char *vIC703_widths[] = { "NARR", "MED", "WIDE"}; static int IC703_bw_vals[] = {1,2,3, WVALS_LIMIT}; static GUI IC703_widgetsdgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, //0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, //1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, //2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, //3 { (Fl_Widget *)sldrSQUELCH, 54, 165, 156 }, //4 { (Fl_Widget *)btnNR, 2, 185, 50 }, //5 { (Fl_Widget *)sldrNR, 54, 185, 156 }, //6 { (Fl_Widget *)btnLOCK, 214, 125, 50 }, //7 { (Fl_Widget *)sldrINNER, 266, 125, 156 }, //8 { (Fl_Widget *)btnCLRPBT, 214, 145, 50 }, //9 { (Fl_Widget *)sldrOUTER, 266, 145, 156 }, //10 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, //11 { (Fl_Widget *)sldrPOWER, 266, 185, 156 }, //12 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_IC703::initialize() { VECTOR (IC703modes_, vIC703modes_); VECTOR (IC703_widths, vIC703_widths); modes_ = IC703modes_; _mode_type = IC703_mode_type; bandwidths_ = IC703_widths; bw_vals_ = IC703_bw_vals; IC703_widgetsdgets[0].W = btnVol; IC703_widgetsdgets[1].W = sldrVOLUME; IC703_widgetsdgets[2].W = btnAGC; IC703_widgetsdgets[3].W = sldrRFGAIN; IC703_widgetsdgets[4].W = sldrSQUELCH; IC703_widgetsdgets[5].W = btnNR; IC703_widgetsdgets[6].W = sldrNR; IC703_widgetsdgets[7].W = btnLOCK; IC703_widgetsdgets[8].W = sldrINNER; IC703_widgetsdgets[9].W = btnCLRPBT; IC703_widgetsdgets[10].W = sldrOUTER; IC703_widgetsdgets[11].W = sldrMICGAIN; IC703_widgetsdgets[12].W = sldrPOWER; } RIG_IC703::RIG_IC703() { name_ = IC703name_; modes_ = IC703modes_; _mode_type = IC703_mode_type; bandwidths_ = IC703_widths; bw_vals_ = IC703_bw_vals; serial_baudrate = BR9600; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; widgets = IC703_widgetsdgets; has_smeter = has_power_out = has_swr_control = has_alc_control = has_volume_control = has_rf_control = has_sql_control = has_noise_reduction = has_noise_reduction_control = has_noise_control = has_pbt_controls = has_micgain_control = has_power_control = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_cw_wpm = // has_cw_keyer = // has_cw_spot = has_cw_spot_tone = has_cw_qsk = // has_cw_weight = has_tune_control = has_ptt_control = has_mode_control = has_bandwidth_control = has_extras = has_compON = has_compression = has_preamp_control = has_attenuator_control = true; defaultCIV = 0x68; adjustCIV(defaultCIV); precision = 1; ndigits = 8; }; //============================================================================= bool RIG_IC703::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); rig_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_IC703::get_vfoA () { cmd = pre_to; cmd += '\x03'; cmd.append( post ); std::string resp = pre_fm; resp += '\x03'; if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { if (replystr[p+5] == -1) A.freq = 0; else A.freq = fm_bcd_be(replystr.substr(p+5), 10); } } return A.freq; } void RIG_IC703::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); waitFB("set vfo A"); } void RIG_IC703::set_modeA(int val) { bool data_mode = val > 7 ? true : false; modeA = val; cmd = pre_to; cmd += '\x06'; if (val > 7) val -= 8; else if (val > 5) val++; cmd += val; cmd += bwA + 1; cmd.append( post ); waitFB("set mode A"); if (val < 2) { cmd = pre_to; cmd.append("\x1A\x04"); cmd += data_mode ? 0x01 : 0x00; cmd.append( post ); waitFB("data mode"); } } int RIG_IC703::get_modeA() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(8, "get mode A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { modeA = replystr[p+5]; if (modeA == -1) { modeA = 0; return modeA; } if (modeA > 6) modeA--; bwA = replystr[p+6] - 1; if (modeA < 2) { cmd = pre_to; cmd.append("\x1A\x04"); cmd.append(post); resp = pre_fm; resp.append("\x1A\x04"); if (waitFOR(8, "data mode?")) { p = replystr.rfind(resp); if (p != std::string::npos) if (replystr[p+6]) modeA += 8; } } } } return modeA; } void RIG_IC703::set_bwA(int val) { bwA = val; set_modeA(modeA); } int RIG_IC703::get_modetype(int n) { return _mode_type[n]; } int RIG_IC703::get_bwA() { return bwA; } void RIG_IC703::set_attenuator(int val) { cmd = pre_to; cmd += '\x11'; cmd += val ? '\x20' : '\x00'; cmd.append( post ); waitFB("set att"); } int RIG_IC703::get_attenuator() { cmd = pre_to; cmd += '\x11'; cmd.append( post ); std::string resp = pre_fm; resp += '\x11'; if (waitFOR(7, "get att")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return replystr[p+6] == '\x20' ? 1 : 0; } return 0; } int RIG_IC703::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_IC703::set_preamp(int val) { preamp_level = val; cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd += (unsigned char) preamp_level; cmd.append( post ); waitFB("set preamp"); } int RIG_IC703::get_preamp() { cmd = pre_to; cmd += '\x16'; cmd += '\x02'; cmd.append( post ); std::string resp = pre_fm; resp += '\x16'; resp += '\x02'; if (waitFOR(8, "get preamp")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { preamp_level = replystr[p+6]; } } return preamp_level; } const char *RIG_IC703::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } const char *RIG_IC703::ATT_label() { if (atten_level == 1) return "20 dB"; return "ATT"; } int RIG_IC703::get_smeter() { cmd = pre_to; cmd.append("\x15\x02").append(post); std::string resp = pre_fm; resp.append("\x15\x02"); if (waitFOR(9, "get smeter")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) * 100 / 255); } return -1; } int RIG_IC703::get_power_out() { cmd = pre_to; cmd.append("\x15\x11").append(post); std::string resp = pre_fm; resp.append("\x15\x11"); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) * 100 / 255); } return 0; } int RIG_IC703::get_swr() { cmd = pre_to; cmd.append("\x15\x12").append(post); std::string resp = pre_fm; resp.append("\x15\x12"); if (waitFOR(9, "get swr")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) * 100 / 255); } return -1; } int RIG_IC703::get_alc() { std::string cstr = "\x15\x13"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); int mtr= -1; if (waitFOR(9, "get alc")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = fm_bcd(replystr.substr(p+6), 3); mtr = (int)ceil(mtr /2.55); if (mtr > 100) mtr = 100; } } return mtr; } // Tranceiver PTT on/off void RIG_IC703::set_PTT_control(int val) { cmd.assign(pre_to); cmd += '\x1c'; cmd += '\x00'; cmd += (val ? '\x01' : '\x00'); cmd.append( post ); waitFB("set PTT"); } // Volume control val 0 ... 100 void RIG_IC703::set_volume_control(int val) { int ICvol = val * 255 / 100; cmd = pre_to; cmd.append("\x14\x01"); cmd.append(to_bcd(ICvol, 3)); cmd.append( post ); waitFB("set vol"); } int RIG_IC703::get_volume_control() { std::string cstr = "\x14\x01"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get vol")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) * 100 / 255); } return progStatus.volume; } void RIG_IC703::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // changed noise blanker to noise reduction void RIG_IC703::set_noise(bool val) { cmd = pre_to; cmd.append("\x16\x22"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set noise"); } int RIG_IC703::get_noise() { std::string cstr = "\x16\x22"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get noise")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise; } void RIG_IC703::set_noise_reduction(int val) { cmd = pre_to; cmd.append("\x16\x40"); cmd += val ? 1 : 0; cmd.append(post); waitFB("set NR"); } int RIG_IC703::get_noise_reduction() { std::string cstr = "\x16\x40"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NR")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (replystr[p+6] ? 1 : 0); } return progStatus.noise_reduction; } // 0 < val < 100 void RIG_IC703::set_noise_reduction_val(int val) { cmd = pre_to; cmd.append("\x14\x06"); cmd.append(to_bcd(val * 2.55, 3)); cmd.append(post); waitFB("set NR val"); } int RIG_IC703::get_noise_reduction_val() { std::string cstr = "\x14\x06"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get NR val")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return progStatus.noise_reduction_val; } int RIG_IC703::get_mic_gain() { std::string cstr = "\x14\x0B"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get mic")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6),3) / 2.55); } return 0; } void RIG_IC703::set_mic_gain(int val) { val = (int)(val * 2.55); cmd = pre_to; cmd.append("\x14\x0B"); cmd.append(to_bcd(val,3)); cmd.append(post); waitFB("set mic"); } void RIG_IC703::get_mic_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_IC703::set_squelch(int val) { int IC703sql = (int)(val * 2.55); cmd = pre_to; cmd.append("\x14\x03"); cmd.append(to_bcd(IC703sql, 3)); cmd.append( post ); waitFB("set sql"); } int RIG_IC703::get_squelch() { std::string cstr = "\x14\x03"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append(post); if (waitFOR(9, "get sql")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p+6), 3) / 2.55); } return progStatus.squelch; } void RIG_IC703::set_rf_gain(int val) { int IC703rfg = (int)(val * 2.55); cmd = pre_to; cmd.append("\x14\x02"); cmd.append(to_bcd(IC703rfg, 3)); cmd.append( post ); waitFB("set rf gain"); } int RIG_IC703::get_rf_gain() { std::string cstr = "\x14\x02"; std::string resp = pre_fm; cmd = pre_to; cmd.append(cstr).append(post); resp.append(cstr); if (waitFOR(9, "get rfgain")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55); } return progStatus.rfgain; } void RIG_IC703::set_power_control(double val) { cmd = pre_to; cmd.append("\x14\x0A"); cmd.append(to_bcd((int)(val * 2.55), 3)); cmd.append( post ); waitFB("set power"); } double RIG_IC703::get_power_control() { std::string cstr = "\x14\x0A"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr).append(post); if (waitFOR(9, "get power")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) return (int)ceil(fm_bcd(replystr.substr(p + 6),3) / 2.55); } return progStatus.power_level; } void RIG_IC703::set_split(bool val) { cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB("set split"); } int RIG_IC703::get_split() { LOG_WARN("%s", "get split - not implemented"); return progStatus.split; } void RIG_IC703::set_compression(int on, int val) { if (on) { cmd.assign(pre_to).append("\x14\x0E"); cmd.append(to_bcd(val * 255 / 100, 3)); cmd.append( post ); waitFB("set comp"); cmd = pre_to; cmd.append("\x16\x44"); cmd += '\x01'; cmd.append(post); waitFB("set Comp ON"); } else{ cmd.assign(pre_to).append("\x16\x44"); cmd += '\x00'; cmd.append(post); waitFB("set Comp OFF"); } } void RIG_IC703::set_vox_onoff() { if (progStatus.vox_onoff) { cmd.assign(pre_to).append("\x16\x46\x01").append(post); waitFB("set vox ON"); } else { cmd.assign(pre_to).append("\x16\x46\x00").append(post); waitFB("set vox OFF"); } } void RIG_IC703::set_vox_gain() { cmd.assign(pre_to).append("\x1A\x03\x09"); cmd.append(to_bcd((int)(progStatus.vox_gain * 2.55), 3)); cmd.append( post ); waitFB("SET vox gain"); } void RIG_IC703::set_vox_anti() { cmd.assign(pre_to).append("\x1A\x03\x10"); cmd.append(to_bcd((int)(progStatus.vox_anti * 2.55), 3)); cmd.append( post ); waitFB("SET anti-vox"); } void RIG_IC703::set_vox_hang() { cmd.assign(pre_to).append("\x1A\x03\x11"); cmd.append(to_bcd((int)(progStatus.vox_hang * 2.55), 3)); cmd.append( post ); waitFB("SET vox hang"); } // CW controls void RIG_IC703::set_cw_wpm() { cmd.assign(pre_to).append("\x14\x0C"); cmd.append(to_bcd(round((progStatus.cw_wpm - 6) * 255 / (60 - 6)), 3)); cmd.append( post ); waitFB("SET cw wpm"); } void RIG_IC703::set_cw_qsk() { int n = round(progStatus.cw_qsk * 10); cmd.assign(pre_to).append("\x14\x0F"); cmd.append(to_bcd(n, 3)); cmd.append(post); waitFB("Set cw qsk delay"); } void RIG_IC703::set_cw_spot_tone() { cmd.assign(pre_to).append("\x14\x09 "); int n = round((progStatus.cw_spot_tone - 300) * 255.0 / 600.0); if (n > 255) n = 255; if (n < 0) n = 0; cmd.append(to_bcd(n, 3)).append(post); waitFB("SET cw spot tone"); } void RIG_IC703::set_cw_vol() { cmd.assign(pre_to).append("\x1A\x03\0x06"); cmd.append(to_bcd((int)(progStatus.cw_vol * 2.55), 3)); cmd.append( post ); waitFB("SET cw sidetone volume"); } void RIG_IC703::set_pbt_inner(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x07"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT inner"); } void RIG_IC703::set_pbt_outer(int val) { int shift = 128 + val * 128 / 50; if (shift < 0) shift = 0; if (shift > 255) shift = 255; cmd = pre_to; cmd.append("\x14\x08"); cmd.append(to_bcd(shift, 3)); cmd.append(post); waitFB("set PBT outer"); } int RIG_IC703::get_pbt_inner() { int val = 0; std::string cstr = "\x14\x07"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt inner")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_inner()", str2hex(replystr.c_str(), replystr.length())); return val; } int RIG_IC703::get_pbt_outer() { int val = 0; std::string cstr = "\x14\x08"; std::string resp = pre_fm; resp.append(cstr); cmd = pre_to; cmd.append(cstr); cmd.append( post ); if (waitFOR(9, "get pbt outer")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { val = num100(replystr.substr(p+6)); val -= 50; } } rig_trace(2, "get_pbt_outer()", str2hex(replystr.c_str(), replystr.length())); return val; } flrig-2.0.04/src/rigs/rigs.cxx0000664000175000017500000001375014502041135013047 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014, 2020 // David Freese, W1HKJ // Michael Black W9MDB // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- //============================================================================= // Reference Transceiver unique drivers #include "rigs.h" #include "util.h" #include "debug.h" #include "rig_io.h" rigbase rig_null; RIG_AOR5K rig_AOR5K; RIG_FDMDUO rig_FDMDUO; RIG_FT100D rig_FT100D; RIG_FT450 rig_FT450; RIG_FT450D rig_FT450D; RIG_FT710 rig_FT710; RIG_FT736R rig_FT736R; RIG_FT747 rig_FT747; RIG_FT757GX2 rig_FT757GX2; RIG_FT767 rig_FT767; RIG_FT817 rig_FT817; RIG_FT817BB rig_FT817BB; RIG_FT818ND rig_FT818ND; RIG_FT847 rig_FT847; RIG_FT857D rig_FT857D; RIG_FT890 rig_FT890; RIG_FT897D rig_FT897D; RIG_FT891 rig_FT891; RIG_FT900 rig_FT900; RIG_FT920 rig_FT920; RIG_FT950 rig_FT950; RIG_FT990 rig_FT990; RIG_FT990A rig_FT990A; RIG_FT991 rig_FT991; RIG_FT991A rig_FT991A; RIG_FT1000 rig_FT1000; RIG_FT1000MP rig_FT1000MP; RIG_FT1000MP_A rig_FT1000MP_A; RIG_FT2000 rig_FT2000; RIG_FTdx10 rig_FTdx10; RIG_FTdx101D rig_FTdx101D; RIG_FTdx101MP rig_FTdx101MP; RIG_FTdx1200 rig_FTdx1200; RIG_FTdx3000 rig_FTdx3000; RIG_FT5000 rig_FT5000; RIG_FTdx9000 rig_FTdx9000; RIG_IC703 rig_IC703; RIG_IC705 rig_IC705; RIG_IC706MKIIG rig_IC706MKIIG; RIG_IC718 rig_IC718; RIG_IC728 rig_IC728; RIG_IC735 rig_IC735; RIG_IC746 rig_IC746; RIG_IC746PRO rig_IC746PRO; RIG_IC751 rig_IC751; RIG_IC756 rig_IC756; RIG_IC756PRO rig_IC756PRO; RIG_IC756PRO2 rig_IC756PRO2; RIG_IC756PRO3 rig_IC756PRO3; RIG_IC7000 rig_IC7000; RIG_IC7100 rig_IC7100; RIG_IC7410 rig_IC7410; RIG_IC7200 rig_IC7200; RIG_IC7300 rig_IC7300; RIG_IC7600 rig_IC7600; RIG_IC7610 rig_IC7610; RIG_IC7700 rig_IC7700; RIG_IC7800 rig_IC7800; RIG_IC7851 rig_IC7851; RIG_IC9100 rig_IC9100; RIG_IC9700 rig_IC9700; RIG_IC910H rig_IC910H; RIG_ICF8101 rig_ICF8101; RIG_ICR71 rig_ICR71; RIG_K2 rig_K2; RIG_K3 rig_K3; RIG_KX3 rig_KX3; RIG_KX2 rig_KX2; RIG_K4 rig_K4; RIG_PCR1000 rig_PCR1000; RIG_RAY152 rig_RAY152; RIG_TMD710 rig_TMD710; RIG_TS140 rig_TS140; RIG_TS440 rig_TS440; RIG_TS450S rig_TS450S; RIG_TS480HX rig_TS480HX; RIG_TS480SAT rig_TS480SAT; RIG_TS570 rig_TS570; RIG_TS590S rig_TS590S; RIG_TS590SG rig_TS590SG; RIG_TS790 rig_TS790; RIG_TS850 rig_TS850; RIG_TS890S rig_TS890S; RIG_TS950 rig_TS950; RIG_TS870S rig_TS870S; RIG_TS940S rig_TS940S; RIG_TS990 rig_TS990; RIG_TS2000 rig_TS2000; RIG_TT516 rig_TT516; RIG_TT535 rig_TT535; RIG_TT538 rig_TT538; RIG_TT550 rig_TT550; RIG_TT563 rig_TT563; RIG_TT566 rig_TT566; RIG_TT588 rig_TT588; RIG_TT599 rig_TT599; RIG_XI5105 rig_XI5105; RIG_Xiegu_G90 rig_XIG90; RIG_X6100 rig_X6100; RIG_PowerSDR rig_PowerSDR; RIG_FLEX1500 rig_FLEX1500; RIG_TX500 rig_TX500; RIG_QCXP rig_QCXP; RIG_QDX rig_qdx; RIG_QMX rig_qmx; RIG_SDR2_PRO rig_sdr2; RIG_TCI_SUNDX rig_tci_sundx; RIG_TCI_SUNPRO rig_tci_sunpro; RIG_TRUSDX rig_trusdx; RIG_SmartSDR rig_smartsdr; rigbase *rigs[] = { &rig_null, // 0 &rig_FDMDUO, // 1 &rig_FT100D, // 2 &rig_FT450, // 3 &rig_FT450D, // 4 &rig_FT710, // 5 &rig_FT736R, // 6 &rig_FT747, // 7 &rig_FT757GX2, // 8 &rig_FT767, // 9 &rig_FT817, // 10 &rig_FT817BB, // 11 &rig_FT818ND, // 12 &rig_FT847, // 13 &rig_FT857D, // 14 &rig_FT890, // 15 &rig_FT897D, // 16 &rig_FT891, // 17 &rig_FT900, // 18 &rig_FT920, // 19 &rig_FT950, // 20 &rig_FT990, // 21 &rig_FT990A, // 22 &rig_FT991, // 23 &rig_FT991A, // 24 &rig_FT1000, // 25 &rig_FT1000MP, // 26 &rig_FT1000MP_A,// 27 &rig_FT2000, // 28 &rig_FTdx10, // 29 &rig_FTdx101D, // 30 &rig_FTdx101MP, // 31 &rig_FTdx1200, // 32 &rig_FTdx3000, // 33 &rig_FT5000, // 34 &rig_FTdx9000, // 35 &rig_IC703, // 36 &rig_IC705, // 37 &rig_IC706MKIIG,// 38 &rig_IC718, // 39 &rig_IC728, // 40 &rig_IC735, // 41 &rig_IC746, // 42 &rig_IC746PRO, // 43 &rig_IC751, // 44 &rig_IC756, // 45 &rig_IC756PRO, // 46 &rig_IC756PRO2, // 47 &rig_IC756PRO3, // 48 &rig_IC7000, // 49 &rig_IC7100, // 50 &rig_IC7200, // 51 &rig_IC7300, // 52 &rig_IC7410, // 53 &rig_IC7600, // 54 &rig_IC7610, // 55 &rig_IC7700, // 56 &rig_IC7800, // 57 &rig_IC7851, // 58 &rig_IC9100, // 59 &rig_IC9700, // 60 &rig_IC910H, // 61 &rig_ICF8101, // 62 &rig_ICR71, // 63 &rig_K2, // 64 &rig_K3, // 65 &rig_KX3, // 66 &rig_KX2, // 67 &rig_K4, // 68 &rig_PCR1000, // 69 &rig_RAY152, // 70 &rig_TMD710, // 71 &rig_TS140, // 72 &rig_TS440, // 73 &rig_TS450S, // 74 &rig_TS480HX, // 75 &rig_TS480SAT, // 76 &rig_TS570, // 77 &rig_TS590S, // 78 &rig_TS590SG, // 79 &rig_TS790, // 80 &rig_TS850, // 81 &rig_TS870S, // 82 &rig_TS890S, // 83 &rig_TS940S, // 84 &rig_TS950, // 85 &rig_TS990, // 86 &rig_TS2000, // 87 &rig_TT516, // 88 &rig_TT535, // 89 &rig_TT538, // 90 &rig_TT550, // 91 &rig_TT563, // 92 &rig_TT566, // 93 &rig_TT588, // 94 &rig_TT599, // 95 &rig_AOR5K, // 96 &rig_XI5105, // 97 &rig_XIG90, // 98 &rig_X6100, // 99 &rig_PowerSDR, // 100 &rig_FLEX1500, // 101 &rig_TX500, // 102 &rig_QCXP, // 103 &rig_qdx, // 104 &rig_qmx, // 105 &rig_sdr2, // 106 &rig_tci_sundx, // 107 &rig_tci_sunpro,// 108 &rig_trusdx, // 109 &rig_smartsdr, // 110 NULL }; //============================================================================= flrig-2.0.04/src/rigs/other/0000775000175000017500000000000014511461606012563 500000000000000flrig-2.0.04/src/rigs/other/PowerSDR.cxx0000664000175000017500000007270514505023100014671 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014, 2020 // Michael Black W9MDB // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "other/PowerSDR.h" #include "support.h" #include static const char PowerSDRname_[] = "PowerSDR"; static std::vectorPowerSDRmodes_; static const char *vPowerSDRmodes_[] = { "LSB", "USB", "DSB", "CWL", "CWU", "FM", "AM", "DIGU", "SPEC", "DIGL", "SAM", "DRM"}; static std::vectorPowerSDR_mode_chr; static const char *vPowerSDR_mode_chr[] = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11" }; static const char PowerSDR_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U', 'U', 'L', 'U', 'U' }; static std::vectorPowerSDR_empty; static const char *vPowerSDR_empty[] = { "NONE" }; //------------------------------------------------------------------------ static std::vectorPowerSDR_USBwidths; static const char *vPowerSDR_USBwidths[] = { " 5000", " 4400", " 3800", " 3300", " 2900", " 2700", " 2400", " 2100", " 1800", " 1000", " Var1", " Var2" }; static std::vectorPowerSDR_CAT_USB; static const char *vPowerSDR_CAT_USB[] = { "ZZFI00;", "ZZFI01;", "ZZFI02;", "ZZFI03;", "ZZFI04;", "ZZFI05;", "ZZFI06;", "ZZFI07;", "ZZFI08;", "ZZFI09;", "ZZFI10;", "ZZFI11;" }; //static const char *PowerSDR_SH_tooltip = "hi cut"; //static const char *PowerSDR_SSB_btn_SH_label = "H"; //------------------------------------------------------------------------ static std::vectorPowerSDR_WIDEwidths; static const char *vPowerSDR_WIDEwidths[] = { "Wideband" }; //static std::vectorPowerSDR_CAT_WIDE = { //"ZZFI12;" }; //------------------------------------------------------------------------ static std::vectorPowerSDR_DIGwidths; static const char *vPowerSDR_DIGwidths[] = { " 3000", " 2500", " 2000", " 1500", " 1000", " 800", " 600", " 300", " 150", " 75", " Var1", " Var2" }; static std::vectorPowerSDR_CAT_DIG; static const char *vPowerSDR_CAT_DIG[] = { "ZZFI00;", "ZZFI01;", "ZZFI02;", "ZZFI03;", "ZZFI04;", "ZZFI05;", "ZZFI06;", "ZZFI07;", "ZZFI08;", "ZZFI09;", "ZZFI10;", "ZZFI11;" }; //------------------------------------------------------------------------------ static std::vectorPowerSDR_AMwidths; static const char *vPowerSDR_AMwidths[] = { "16000", "12000", "10000", " 8000", " 6600", " 5200", " 4000", " 3100", " 2900", " 2400", "Var1", "Var2" }; static std::vectorPowerSDR_CAT_AM; static const char *vPowerSDR_CAT_AM[] = { "ZZFI00;", "ZZFI01;", "ZZFI02;", "ZZFI03;", "ZZFI04;", "ZZFI05;", "ZZFI06;", "ZZFI07;", "ZZFI08;", "ZZFI09;", "ZZFI10;", "ZZFI11;" }; //------------------------------------------------------------------------------ static std::vectorPowerSDR_CWwidths; static const char *vPowerSDR_CWwidths[] = { " 1000", " 800", " 750", " 600", " 500", " 400", " 250", " 100", " 50", " 25", " Var1", " Var2"}; static std::vectorPowerSDR_CAT_CW; static const char *vPowerSDR_CAT_CW[] = { "ZZFI00;", "ZZFI01;", "ZZFI02;", "ZZFI03;", "ZZFI04;", "ZZFI05;", "ZZFI06;", "ZZFI07;", "ZZFI08;", "ZZFI09;", "ZZFI10;", "ZZFI11;" }; //------------------------------------------------------------------------------ static std::vectorvarwidths; static const char *vvarwidths[] = { " 5000", " 4400", " 3800", " 3300", " 2900", " 2700", " 2400", " 2100", " 1800", " 1000", " 500", " 200" }; //------------------------------------------------------------------------------ static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)btnAGC, 2, 145, 50 }, // 2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 3 { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 4 { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 5 { (Fl_Widget *)btnNotch, 214, 125, 50 }, // 6 { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, // 7 { (Fl_Widget *)sldrSQUELCH, 266, 145, 156 }, // 8 { (Fl_Widget *)sldrMICGAIN, 266, 165, 156 }, // 9 { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, // 10 { (Fl_Widget *)NULL, 0, 0, 0 } }; // mid range on loudness static std::string menu012 = "EX01200004"; void RIG_PowerSDR::initialize() { VECTOR (PowerSDRmodes_, vPowerSDRmodes_); VECTOR (PowerSDR_mode_chr, vPowerSDR_mode_chr); VECTOR (PowerSDR_empty, vPowerSDR_empty); VECTOR (PowerSDR_USBwidths, vPowerSDR_USBwidths); VECTOR (PowerSDR_CAT_USB, vPowerSDR_CAT_USB); VECTOR (PowerSDR_WIDEwidths, vPowerSDR_WIDEwidths); VECTOR (PowerSDR_DIGwidths, vPowerSDR_DIGwidths); VECTOR (PowerSDR_CAT_DIG, vPowerSDR_CAT_DIG); VECTOR (PowerSDR_AMwidths, vPowerSDR_AMwidths); VECTOR (PowerSDR_CAT_AM, vPowerSDR_CAT_AM); VECTOR (PowerSDR_CWwidths, vPowerSDR_CWwidths); VECTOR (PowerSDR_CAT_CW, vPowerSDR_CAT_CW); VECTOR (varwidths, vvarwidths); modes_ = PowerSDRmodes_; bandwidths_ = PowerSDR_empty; std::stringstream str; str << "PowerSDR"; trace(2, __func__, str.str().c_str()); rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrSQUELCH; rig_widgets[8].W = sldrMICGAIN; rig_widgets[9].W = sldrPOWER; // varwidths.clear(); // for (int i = 0; i < 12; i++) { // varwidths.push_back(PowerSDR_USBwidths.at(i)); // } // get current noise reduction values for NR1 and NR2 std::string current_nr; cmd = "ZZNR;"; waitN(6, 100, "read current NR", ASC); gett("get ZZNR"); size_t p = replystr.rfind("RL"); if (p != std::string::npos) _nrval1 = atoi(&replystr[p+2]); cmd = "ZZNS;"; waitN(6, 100, "read current NR", ASC); int nrval2=0; if (p != std::string::npos) nrval2 = atoi(&replystr[p+2]); if (nrval2 == 1) _nrval1 = 2; } void RIG_PowerSDR::shutdown() { } static bool is_tuning = false; RIG_PowerSDR::RIG_PowerSDR() { // base class values name_ = PowerSDRname_; modes_ = PowerSDRmodes_; bandwidths_ = PowerSDR_empty; //dsp_SL = PowerSDR_SL; //SL_tooltip = PowerSDR_SL_tooltip; //SL_label = PowerSDR_SSB_btn_SL_label; //dsp_SH = PowerSDR_SH; //SH_tooltip = PowerSDR_SH_tooltip; //SH_label = PowerSDR_SSB_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8803; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; //has_dsp_controls = true; // has_voltmeter = true; // re-enable when Thetis fixes this has_power_out = true; has_swr_control = true; has_alc_control = has_idd_control = has_split = has_split_AB = has_rf_control = has_auto_notch = has_ifshift_control = has_smeter = has_noise_reduction = true; has_noise_reduction_control = has_noise_control = has_micgain_control = has_volume_control = has_power_control = has_tune_control = // has_preamp_control = has_mode_control = has_bandwidth_control = has_sql_control = has_ptt_control = has_agc_control = has_extras = true; rxona = true; precision = 1; ndigits = 9; att_level = 0; // preamp_level = 0; _noise_reduction_level = 0; _nrval1 = 2; _nrval2 = 4; is_tuning = false; } static int ret = 0; const char * RIG_PowerSDR::get_bwname_(int n, int md) { std::stringstream str; str << "n=" << n << ", md=" << md; trace(2, __func__, str.str().c_str()); try { if (md == USB || md == LSB) return PowerSDR_USBwidths.at(n).c_str(); if (md == FM || md == DRM || md == SPEC) { return PowerSDR_WIDEwidths.at(n).c_str(); if (md == DIGU || md == DIGL) return PowerSDR_DIGwidths.at(n).c_str(); if (md == CWU || md == CWL) return PowerSDR_CWwidths.at(n).c_str(); else return PowerSDR_AMwidths.at(n).c_str(); } } catch (const std::exception& e) { std::cout << e.what() << '\n'; } return "UNKNOWN"; } int RIG_PowerSDR::get_smeter() { int smtr = 0; if (rxona) cmd = "ZZSM0;"; else cmd = "ZZSM1;"; get_trace(1, "get_smeter"); ret = waitN(9, 100, "get smeter", ASC); gett(""); //if (ret == 9) { { size_t p = replystr.rfind("SM"); if (p != std::string::npos) { smtr = fm_decimal(replystr.substr(p+3),3); smtr = -54 + smtr/(256.0/100.0); // in S-Units smtr = (smtr + 54); } } return smtr; } // Transceiver power level void RIG_PowerSDR::set_power_control(double val) { int ival = (int)val; cmd = "PC"; cmd.append(to_decimal(ival, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set pwr ctrl", cmd, ""); sett("pwr control"); } int RIG_PowerSDR::get_power_out() { int mtr = 0; cmd = "ZZRM5;"; get_trace(1, "get_power_out"); ret = wait_string("ZZRM5", 11); gett(""); if (ret < 9) return 0; sscanf(&replystr[0],"ZZRM5%d", &mtr); return mtr; } double RIG_PowerSDR::get_power_control() { int pctrl = 0; cmd = "PC;"; get_trace(1, "get_power_control"); ret = wait_string("PC", 6); gett(""); if (ret == 6) { size_t p = replystr.rfind("PC"); if (p != std::string::npos) { pctrl = fm_decimal(replystr.substr(p+2), 3); } } return pctrl; } struct meterpair {float mtr; float val;}; // Table entries below correspond to SWR readings of 1.1, 1.5, 2.0, 2.5, 3.0 and infinity. // Values are also tweaked to fit the display of the SWR meter. static meterpair swr_tbl[] = { {1.0, 0}, {1.5, 10.5 }, {2.0, 23.0 }, {2.5, 35.0 }, {3.0, 48.0 }, {10.0, 100.0 } }; int RIG_PowerSDR::get_swr() { double mtr = 0; cmd = "ZZRM8;"; get_trace(1, "get_swr"); ret = wait_string("ZZRM8", 13); gett(""); // Response is ZZRM86.1 : 1; // What's the 2nd part? if(sscanf(&replystr[0], "ZZRM8%lf", &mtr)!=1) { return 3; } size_t i = 0; for (i = 0; i < sizeof(swr_tbl) / sizeof(meterpair) - 1; i++) if (mtr >= swr_tbl[i].mtr && mtr < swr_tbl[i+1].mtr) break; if (mtr > 19) mtr = 19; mtr = (int)round(swr_tbl[i].val + (swr_tbl[i+1].val - swr_tbl[i].val)*(mtr - swr_tbl[i].mtr)/(swr_tbl[i+1].mtr - swr_tbl[i].mtr)); if (mtr > 100) mtr = 100; std::stringstream str; str << "swr mtr=" << mtr; trace(2, __func__, str.str().c_str()); return mtr; } int RIG_PowerSDR::get_alc() { double alc = 0; cmd = "ZZRM4;"; get_trace(1, "get_alc"); ret = wait_string("ZZRM4", 12); gett("alc"); showresp(WARN, ASC, "get alc", cmd, replystr); if (sscanf(&replystr[0], "ZZRM4%lf", &alc) != 1) alc=0; alc=(alc)*(100.0/40.0); // 0-40dB scale if (alc < 0) alc = 0; else if (alc > 100) alc = 100; return alc; } #if 0 /* disabling this as Thetis ZZPA command is screwy and won't work on all the models Using the selector 0dB = ZZPA1 -10dB = ZZPA2 = -140 -20dB = ZZPA0 = -130 -30dB = ZZPA8 = -120 yet ZZPA8; does nothing If I look at the signal level for what the level is now. ZZPA0 = -130 ZZPA1 = -150 ZZPA2 = -140 -- but ZZPA then reports ZZPA7; ZZPA3 = -130 ZZPA4 = -120 ZZPA5 = -110 ZZPA6 = -100 ZZPA7 does nothing */ int RIG_PowerSDR::next_preamp() { // strange sequence for ANAN 7000DLE MKII switch(preamp_level) { case 0: preamp_level = 1;break; case 1: preamp_level = 2;break; case 7: preamp_level = 3;break; case 3: preamp_level = 4;break; case 4: preamp_level = 5;break; case 5: preamp_level = 6;break; default: case 6: preamp_level = 0;break; } return preamp_level; } void RIG_PowerSDR::set_preamp(int val) { preamp_level = val; cmd = "ZZPA"; cmd.append(to_decimal(val, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set PRE", cmd, ""); sett("preamp"); case 7: preamp_level = 0;break; if (val == 0) { preamp_level = 0; } else if (val == 1) { preamp_level = 1; } else if (val == 7) { preamp_level = 2; } } const char *RIG_PowerSDR::PRE_label() { switch (preamp_level) { case 0: default: return "PRE"; break; case 1: return "Pre 1"; break; case 2: return "Pre 2"; break; } return "PRE"; } int RIG_PowerSDR::get_preamp() { int preamp_level; cmd = "ZZPA;"; std::stringstream str; sendCommand(cmd); get_trace(1, "get_preamp"); ret = wait_string("ZZPA", 6); gett(""); if (ret == 6) { size_t p = replystr.rfind("PA"); str << "ZZPA #2 replystr=" << replystr << ", p=" << p; trace(2, "get_preamp", replystr.c_str()); if (p != std::string::npos && (p+2 < replystr.length())) { preamp_level = fm_decimal(replystr.substr(p+2),1); // need to map 7 to 2 to keep FLRig cbPreamp happy // when ZZPA2; is sent ZZPA7; comes back if (preamp_level == 7) preamp_level = 2; } } else preamp_level = 0; return preamp_level; } #endif int RIG_PowerSDR::set_widths(int val) { int bw = get_bwA(); cmd = "ZZMN"; cmd += PowerSDR_mode_chr[val]; cmd += ';'; set_trace(1, "bandwidths:"); wait_string("ZZMN", 187); sett(""); bool fill_widths = false; switch (val) { case LSB: case USB: bandwidths_ = PowerSDR_USBwidths; dsp_SL = PowerSDR_empty; dsp_SH = PowerSDR_empty; fill_widths = true; break; case DIGU: case DIGL: bandwidths_ = PowerSDR_DIGwidths; dsp_SL = PowerSDR_empty; dsp_SH = PowerSDR_empty; fill_widths = true; break; case FM: case SPEC: case DRM: bandwidths_ = PowerSDR_WIDEwidths; dsp_SL = PowerSDR_empty; dsp_SH = PowerSDR_empty; break; case CWL: case CWU: bandwidths_ = PowerSDR_CWwidths; dsp_SL = PowerSDR_empty; dsp_SH = PowerSDR_empty; fill_widths = true; break; case AM: case SAM: case DSB: default: bandwidths_ = PowerSDR_AMwidths; dsp_SL = PowerSDR_empty; dsp_SH = PowerSDR_empty; fill_widths = true; break; } if (!fill_widths) return bw; size_t p = replystr.rfind("ZZMN"); if (p == std::string::npos) return bw; if (replystr.length() < 187) return bw; varwidths.clear(); static std::string widths; widths = replystr.substr(p + 6); for (int i = 0; i < 12; i++) { widths[i*15 + 6] = 0; varwidths.push_back(&widths[i*15]); } bandwidths_ = varwidths; return bw; } std::vector& RIG_PowerSDR::bwtable(int val) { return bandwidths_; } #if 0 std::vector& RIG_PowerSDR::lotable(int val) { if (val == LSB || val == USB || val == FM || val == DRM || val == SPEC) return PowerSDR_USBwidths; else if (val == DIGU || val == DIGL) return PowerSDR_DIGwidths; else if (val == AM || val == SAM || val == DSB) return PowerSDR_AMwidths; return PowerSDR_USBwidths; } std::vector& RIG_PowerSDR::hitable(int val) { if (val == LSB || val == USB || val == FM || val == DRM || val == SPEC) return PowerSDR_USBwidths; else if (val == DIGU || val == DIGL) return PowerSDR_DIGwidths; else if (val == CWU || val == CWL) return PowerSDR_CWwidths; else if (val == AM || val == SAM || val == DSB) return PowerSDR_AMwidths; return PowerSDR_USBwidths; } #endif void RIG_PowerSDR::set_modeA(int val) { try { _currmode = A.imode = val; cmd = "ZZMD"; cmd += PowerSDR_mode_chr.at(val); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); sett("modeA"); A.iBW = set_widths(val); vfoA.iBW = A.iBW; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_PowerSDR::get_modeA() { if (tuning()) return A.imode; cmd = "ZZMD;"; get_trace(1, "get_modeA"); ret = wait_string("ZZMD", 7); gett(""); if (ret == 7) { size_t p = replystr.rfind("MD"); if (p != std::string::npos) { int md; sscanf(&replystr[p+2],"%d",&md); if (A.imode != md) { A.imode = md; A.iBW = set_widths(A.imode); } } } _currmode = A.imode; return A.imode; } void RIG_PowerSDR::set_modeB(int val) { try { _currmode = B.imode = val; cmd = "MD"; cmd += PowerSDR_mode_chr.at(val); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode B", cmd, ""); sett("modeB"); MilliSleep(100); // give rig a chance to change width B.iBW = set_widths(val); vfoB.iBW = B.iBW; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_PowerSDR::get_modeB() { if (tuning()) return B.imode; cmd = "ZZMD;"; get_trace(1, "get_modeB"); ret = wait_string("ZZMD", 7); gett(""); if (ret == 7) { size_t p = replystr.rfind("MD"); if (p != std::string::npos) { int md=0; sscanf(&replystr[p+2],"%d",&md); if (B.imode != md) { B.imode = md; B.iBW = set_widths(B.imode); } } } _currmode = B.imode; return B.imode; } int RIG_PowerSDR::adjust_bandwidth(int val) { int bw = 0; bw = 0; if (val == CWU || val == CWL) bw = 7; return bw; } int RIG_PowerSDR::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_PowerSDR::set_bwA(int val) { try { if (A.imode == FM || A.imode == DRM || A.imode == SPEC) return; // mode is fixed else if (A.imode == LSB || A.imode == USB) { cmd = PowerSDR_CAT_USB.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA USB", cmd, ""); sett("bwA USB"); A.iBW = val; } else if (A.imode == DIGU || A.imode == DIGL) { cmd = PowerSDR_CAT_DIG.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA DIG", cmd, ""); sett("bwA DIG"); A.iBW = val; } else if (A.imode == CWU || A.imode == CWL) { cmd = PowerSDR_CAT_CW.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA CW", cmd, ""); sett("bwA CW"); A.iBW = val; } else if (A.imode == AM || A.imode == SAM || A.imode == DSB) { cmd = PowerSDR_CAT_AM.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA AM", cmd, ""); sett("bwA AM"); A.iBW = val; } } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_PowerSDR::get_bwA() { size_t i = 0; size_t p; std::stringstream str; str << "get_bwA" ; A.iBW = 0; trace(2, __func__, str.str().c_str()); if (A.imode == FM || A.imode == DRM || A.imode == SPEC) { A.iBW = 0; gett("get_bwA Wideband"); } else if (A.imode == LSB || A.imode == USB) { cmd = "ZZFI;"; get_trace(1, "get_bw SSB"); ret = wait_string("ZZFI", 7); gett(""); if (ret == 7) { p = replystr.rfind("ZZFI"); if (p != std::string::npos) { for (i = 0; i < PowerSDR_CAT_USB.size(); i++) { if (replystr.find(PowerSDR_CAT_USB[i]) == p) { A.iBW = i; break; } } } } } else if (A.imode == CWL || A.imode == CWU) { cmd = "ZZFI;"; get_trace(1, "get_bw CW"); ret = wait_string("ZZFI", 7); gett(""); if (ret == 7) { p = replystr.rfind("ZZFI"); if (p != std::string::npos) { for (i = 0; i < PowerSDR_CAT_CW.size(); i++) { if (replystr.find(PowerSDR_CAT_CW[i]) == p) { A.iBW = i; break; } } } } } else if (A.imode == DIGU || A.imode == DIGL) { cmd = "ZZFI;"; get_trace(1, "get_bw DIGI"); ret = wait_string("ZZFI", 7); gett(""); if (ret == 7) { p = replystr.rfind("ZZFI"); if (p != std::string::npos) { for (i = 0; i < PowerSDR_CAT_DIG.size(); i++) { if (replystr.find(PowerSDR_CAT_DIG[i]) == p) { A.iBW = i; break; } } } } } else if (A.imode == AM || A.imode == SAM || A.imode == DSB) { cmd = "ZZFI;"; get_trace(1, "get_bw AM"); ret = wait_string("ZZFI", 7); gett(""); if (ret == 7) { p = replystr.rfind("ZZFI"); if (p != std::string::npos) { for (i = 0; i < PowerSDR_CAT_AM.size(); i++) { if (replystr.find(PowerSDR_CAT_AM[i]) == p) { A.iBW = i; break; } } } } } vfoA.iBW = A.iBW; progStatus.iBW_A = A.iBW; return A.iBW; } void RIG_PowerSDR::set_bwB(int val) { set_bwA(val); B.iBW = val; std::stringstream str; str << "B.iBW = " << B.iBW; trace(2, __func__, str.str().c_str()); return; } int RIG_PowerSDR::get_bwB() // same as A { B.iBW = get_bwA(); std::stringstream str; str << "B.iBW = " << B.iBW; trace(2, __func__, str.str().c_str()); vfoB.iBW = B.iBW; progStatus.iBW_B = B.iBW; return B.iBW; } int RIG_PowerSDR::get_modetype(int n) { if (n >= (int)(sizeof(PowerSDR_mode_type)/sizeof(*PowerSDR_mode_type))) return 0; return PowerSDR_mode_type[n]; } void RIG_PowerSDR::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = 400; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 700; } void RIG_PowerSDR::set_notch(bool on, int val) { if (on) { cmd = "ZZBC1;"; sendCommand(cmd); showresp(WARN, ASC, "set notch on", cmd, ""); sett("notch ON"); } else { cmd = "ZZBC0;"; // no notch action sendCommand(cmd); showresp(WARN, ASC, "set notch off", cmd, ""); sett("notch OFF"); } } bool RIG_PowerSDR::get_notch(int &val) { bool ison = false; cmd = "BC;"; get_trace(1, "get_notch"); ret = wait_string("BC", 4); gett(""); if (ret == 4) { size_t p = replystr.rfind("BC"); if (p != std::string::npos) { if (replystr[p+2] == '2') { ison = true; cmd = "BP;"; get_trace(1, "get_notch_val"); ret = wait_string("BP", 6); gett(""); if (ret == 6) { p = replystr.rfind("BP"); if (p != std::string::npos) val = 200 + 50 * fm_decimal(replystr.substr(p+2),3); } } } } return (ison); } void RIG_PowerSDR::get_notch_min_max_step(int &min, int &max, int &step) { min = 200; max = 3350; step = 50; } void RIG_PowerSDR::set_auto_notch(int v) { cmd = v ? "NT1;" : "NT0;"; sendCommand(cmd); showresp(WARN, ASC, "set auto notch", cmd, ""); sett("auto notch"); } int RIG_PowerSDR::get_auto_notch() { int anotch = 0; cmd = "NT;"; get_trace(1, "get_auto_notch"); ret = wait_string("NT", 4); gett(""); if (ret == 4) { size_t p = replystr.rfind("NT"); if (p != std::string::npos) { anotch = (replystr[p+2] == '1'); } } return anotch; } void RIG_PowerSDR::set_noise(bool on) { if (on) cmd = "ZZNA1;"; else cmd = "ZZNA0;"; sendCommand (cmd); } int RIG_PowerSDR::get_noise() { cmd = "ZZNA;"; int ret = wait_string("ZZNA", 6); if (ret < 6) return progStatus.noise; size_t p = replystr.rfind("NA"); if (p == std::string::npos) return progStatus.noise; return (replystr[p+2] == '1' ? 1 : 0); } void RIG_PowerSDR::set_noise_reduction(int val) { if (val == -1) { return; } _noise_reduction_level = val; if (_noise_reduction_level == 0) { nr_label("ZZNR0", 0); } else if (_noise_reduction_level == 1) { nr_label("ZZNR1", 1); } else { nr_label("???", 2); return; } cmd.assign("ZZNR"); cmd += '0' + _noise_reduction_level; cmd += ';'; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); sett("noise reduction"); } int RIG_PowerSDR::get_noise_reduction() { cmd = rsp = "ZZNR"; cmd.append(";"); get_trace(1, "get_noise_reduction"); ret = wait_string("ZZNR", 6); gett(""); if (ret == 6) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return _noise_reduction_level; _noise_reduction_level = replystr[p+4] - '0'; } if (_noise_reduction_level == 1) { nr_label("NR", 1); } else if (_noise_reduction_level == 2) { nr_label("NR2", 2); } else { nr_label("NR", 0); } return _noise_reduction_level; } void RIG_PowerSDR::set_noise_reduction_val(int val) { if (_noise_reduction_level == 0) return; if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; cmd.assign("NR").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); sett("noise reduction val"); } int RIG_PowerSDR::get_noise_reduction_val() { int nrval = 0; if (_noise_reduction_level == 0) return 0; int val = progStatus.noise_reduction_val; cmd = rsp = "ZZNR"; cmd.append(";"); get_trace(1, "get_noise_reduction_val"); ret = wait_string("ZZNR", 5); gett(""); if (ret == 5) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) { nrval = (_noise_reduction_level == 1 ? _nrval1 : _nrval2); return nrval; } val = atoi(&replystr[p+2]); } if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; return val; } void RIG_PowerSDR::tune_rig(int val) { std::stringstream str; str << "val=" << val; trace(2, __func__, str.str().c_str()); switch (val) { case 0: cmd = "ZZTU0;"; break; case 1: case 2: cmd = "ZZTU1;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_PowerSDR::get_tune() { cmd = rsp = "ZZTU"; cmd += ';'; get_trace(1, "get_tune"); ret = wait_string("ZZTU", 6); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return (tune_ = val); } void RIG_PowerSDR::set_rf_gain(int val) { cmd = "ZZAR"; if (val < 0) cmd += '-'; else cmd += '+'; cmd.append(to_decimal(abs(val), 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set rf gain", cmd, ""); sett("RFgain"); } int RIG_PowerSDR::get_rf_gain() { cmd = "ZZAR;"; int rfg = 120; char sign; get_trace(1, "get_rf_gain"); ret = wait_string("ZZAR", 9); gett(""); if (ret == 9) { size_t p = replystr.rfind("ZZAR"); if (p != std::string::npos) { sscanf(replystr.c_str(),"ZZAR%c%d", &sign, &rfg); if (sign == '-') rfg *= -1; } } return rfg; } void RIG_PowerSDR::get_rf_min_max_step(int &min, int &max, int &step) { min = -20; max = 120; step = 1; } void RIG_PowerSDR::set_mic_gain(int val) { cmd = "ZZMG"; if (val < 0) cmd += "-"; else cmd += "+"; cmd.append(to_decimal(abs(val),2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic", cmd, ""); sett("MICgain"); } int RIG_PowerSDR::get_mic_gain() { int mgain = 0; cmd = "ZZMG;"; get_trace(1, "get_mic_gain"); ret = wait_string( "ZZMG", 8); gett(""); if (ret == 8) { size_t p = replystr.rfind("MG"); if (p != std::string::npos) { sscanf(replystr.c_str(),"ZZMG%d",&mgain); } } return mgain; } void RIG_PowerSDR::get_mic_min_max_step(int &min, int &max, int &step) { min = -40; max = 10; step = 1; } // Transceiver PTT on/off void RIG_PowerSDR::set_PTT_control(int val) { if (val) sendCommand("ZZTX1;"); else sendCommand("ZZTX0;"); ptt_ = val; } int RIG_PowerSDR::get_PTT() { cmd = "ZZTX;"; get_trace(1, "get_PTT"); ret = wait_string( "ZZTX", 6); gett(""); if (ret < 6) return ptt_; ptt_ = (replystr[4] == '1'); return ptt_; } bool RIG_PowerSDR::tuning() { cmd = "ZZTU;"; if (wait_string( "ZZTU", 6) == 6) { if (replystr[4] == '1') return true; } return false; } void RIG_PowerSDR::set_split(bool val) { if (val) { cmd = "ZZSP1;"; } else { cmd = "ZZSP0;"; } sendCommand(cmd); } int RIG_PowerSDR::get_split() { cmd = "ZZSP;"; get_trace(1, "get_split"); ret = wait_string( "ZZSP", 6); gett(""); if (ret < 6) return split; split = (replystr[4] == '1'); return split; } void RIG_PowerSDR::set_squelch(int val) { cmd = "ZZSQ"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic", cmd, ""); sett("Squelch"); } int RIG_PowerSDR::get_squelch() { int sq = 0; cmd = "ZZSQ;"; get_trace(1, "get_squelch"); ret = waitN(8, 100, "get squelch", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("ZZSQ"); if (p != std::string::npos) { sscanf(replystr.c_str(),"ZZSQ%d",&sq); } } return (-sq); } void RIG_PowerSDR::get_squelch_min_max_step(int &min, int &max, int &step) { min = -160; max = 0; step = 4; } static int agcval = 1; int RIG_PowerSDR::get_agc() { cmd = "GT;"; get_trace(1, "get_agc"); ret = wait_string( "GT", 6); gett(""); size_t p = replystr.rfind("GT"); if (p == std::string::npos) return agcval; if (replystr[4] == ' ') return 0; agcval = replystr[4] - '0' + 1; // '0' == off, '1' = fast, '2' = slow return agcval; } int RIG_PowerSDR::incr_agc() { agcval++; if (agcval > 6) agcval = 1; cmd.assign("GT00"); cmd += (agcval + '0' - 1); cmd += ";"; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); return agcval; } static const char *agcstrs[] = {"AGC", "FIX", "LNG", "SLW", "MED", "FST", "CST"}; const char *RIG_PowerSDR::agc_label() { return agcstrs[agcval]; } int RIG_PowerSDR::agc_val() { return agcval; } double RIG_PowerSDR::get_voltmeter() { static int timedout = 0; double val; trace(1, "get_voltmeter"); ret = 0; if (!timedout) { cmd.assign("ZZRV;"); sendCommand(cmd); get_trace(1, "get_voltmeter"); ret = wait_string( "ZZRV", 8); } if (ret == 8) { sscanf(&replystr[0],"ZZRV%lf", &val); } else { timedout = 1; val = 0; replystr = "No Reply"; mtr_VOLTS->labelcolor(fl_rgb_color(200,200,200)); mtr_VOLTS->redraw(); } showresp(WARN, ASC, "get voltmeter", cmd, replystr); return val; } double RIG_PowerSDR::get_idd() { static int timedout = 0; double val; trace(1, "get_idd"); std::stringstream str; str << "get_idd#2"; trace(2, __func__, str.str().c_str()); ret = 0; if (!timedout) { cmd.assign("ZZRV;"); sendCommand(cmd); get_trace(1, "get_idd"); ret = wait_string( "ZZRV", 8); gett(""); } if (ret == 8) { sscanf(&replystr[0],"ZZRV%lf", &val); } else { timedout = 1; val = 0; mtr_IDD->labelcolor(fl_rgb_color(200,200,200)); mtr_IDD->redraw(); } showresp(WARN, ASC, "get idd", cmd, replystr); return val; } flrig-2.0.04/src/rigs/other/PCR1000.cxx0000664000175000017500000012102714502041135014146 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- /* * Driver for PCR-1000 April 2012, Brian Miezejewski, k5hfi * patched 1/23/2017, Dave, G0WBX */ /* Todo: * * 1) Need on/off button to turn the radio on and off? * 2) Up the baud rate to 37800 after connect * 3) Support for fast mode. * 4) Scan support for scanning between a frequency pair * 5) Scan support for scanning a list of frequencies stored in flrig. * 6) Implement band scope. * 7) BFO support? * */ /* Notes: * The Icom PCR-1000 differs for most of the other rigs controlled by flrig in * that settings do not change at the rig, they are all controlled by flrig. There is * no reason to poll for frequency, volume, mode, etc., they simply can't change on their own. * On the other hand, things like s-meter reading do change, but the PCR-1000 will send these * with no poll needed when the receiver is in "fast" mode. * * Note that while the PCR-1000 does not have a second VFO, we have virtualized a second * vfo in the PCR-1000 flrig implementation. Each VFO stores its frequency, mode, and bandwidth. * The XCVR_STATE variable is used to store the VFO states. */ #include #include "config.h" #include "other/PCR1000.h" #include "support.h" #define PCR_WAIT 100 //---------------------------------------------------------------------- inline std::string str(std::string s) { size_t p; while((p = s.find('\r')) != std::string::npos) s.replace(p, 1, ""); while((p = s.find('\n')) != std::string::npos) s.replace(p, 1, ""); return s; } #define strace(s, s1) set_trace(3, s, str(s1).c_str(), str(replystr).c_str()); #define gtrace(s, s1) get_trace(3, s, str(s1).c_str(), str(replystr).c_str()); //---------------------------------------------------------------------- static const char name[] = "PCR-1000"; // mode array Index Values :- 0 1 2 3 4 5 static std::vectormodes; static const char *vmodes[] = { "LSB", "USB", "AM", "CW", "NFM", "WFM"}; static const char mode_chr[] = { '0', '1', '2', '3', '5', '6' }; static const char mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'U' }; // band width array Index Values :- 0 1 2 3 4 static std::vectorband_widths; static const char *vband_widths[] = { "2.8k","6k","15k","50k","230k"}; static int PCR1000_bw_vals[] = {1,2,3,4,5,WVALS_LIMIT}; //---------------------------------------------------------------------- char RIG_PCR1000::volume_command[] = "J40XX\r\n" ; char RIG_PCR1000::squelch_command[] = "J41XX\r\n" ; char RIG_PCR1000::if_shift_command[] = "J43XX\r\n" ; char RIG_PCR1000::nr_level_command[] = "J8001J820X\r\n" ; const char RIG_PCR1000::noise_off_command[] = "J8001J8100\r\n" ; // PCR-1000 DSP Off const char RIG_PCR1000::noise_on_command[] = "J8001J8101\r\n" ; // PCR-1000 DSP On const char RIG_PCR1000::agcontrol_off_command[]= "J4500\r\n" ; const char RIG_PCR1000::agcontrol_on_command[] = "J4501\r\n" ; const char RIG_PCR1000::an_off_command[] = "J8001J8300\r\n" ; const char RIG_PCR1000::an_on_command[] = "J8001J8301\r\n" ; const char RIG_PCR1000::nr_off_command[] = "J8001J8200\r\n" ; const char RIG_PCR1000::nr_on_command[] = "J8001J8201\r\n" ; const char RIG_PCR1000::att_off_command[] = "J4700\r\n" ; const char RIG_PCR1000::att_on_command[] = "J4701\r\n" ; char RIG_PCR1000::check_power_command[] = "H1?\r\n" ; char RIG_PCR1000::power_on_command[] = "H101\r\n" ; char RIG_PCR1000::power_off_command[] = "H100\r\n" ; const char RIG_PCR1000::get_smeter_command[] = "I1?\r\n" ; //---------------------------------------------------------------------- static GUI rig_widgets[]= { { (Fl_Widget *)sldrSQUELCH, 54, 105, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 368 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; //---------------------------------------------------------------------- RIG_PCR1000::RIG_PCR1000() { name_ = name; modes_ = modes; bandwidths_ = band_widths; pre_to = "\x4A\x38\x30\x30\x31"; pre_fm = ""; post = "\x0D\x0A"; widgets = rig_widgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serloop_timing = 200; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; // Defaults. A.imode = 3; A.freq = 7025000ULL; A.iBW = 0 ; B.imode = 4; // Check Mode definitions - the Mode Array value for NFM doesn't match (see above) B.freq = 162400000ULL; // NOAA Channel 1 on VFO B - Default B.iBW = 2 ; sql = 127 ; // Set squelch to a reasonable value if_shift = 0 ; // IF shift off attenuator = 0 ; // Attenuator is set to off noise = 0 ; // Noise blanker to off current_volume = 10 ; // Set volume to make at least a little noise, otherwise there is no preamp = 0 ; // indication when the radio is switched on. auto_notch = 0 ; noise_reduction = 0 ; nr_level = 0 ; has_micgain_control = has_notch_control = false; has_preamp_control = true; has_swr_control = false; can_change_alt_vfo = true; has_smeter = true; has_bandwidth_control = true; has_volume_control = has_mode_control = true; has_sql_control = true; has_noise_control = true; has_noise_reduction = true; has_noise_reduction_control = true; has_attenuator_control = true; has_ifshift_control = true; has_auto_notch = true; precision = 10 ; ndigits = 9 ; } //---------------------------------------------------------------------- bool RIG_PCR1000::check() { return true; } //---------------------------------------------------------------------- /* * A PCR-1000 will start issuing repeating H100 to indicate its status as * off as soon as you connect to it. It will start at 9600-n-1 and uses rts/cts for * transaction control. */ void RIG_PCR1000::initialize() { VECTOR (modes, vmodes); VECTOR (band_widths, vband_widths); modes_ = modes; bandwidths_ = band_widths; rig_widgets[0].W = sldrSQUELCH; rig_widgets[1].W = btnIFsh; rig_widgets[2].W = sldrIFSHIFT; rig_widgets[3].W = btnVol; rig_widgets[4].W = sldrVOLUME; modes_ = modes; bandwidths_ = band_widths; bw_vals_ = PCR1000_bw_vals; // Lets see if the radio is turned on. get_trace(1, "check_power"); wait_crlf(cmd = check_power_command, "check ON/OFF"); // gett(""); // If the radio is turned off, turn it on. if (replystr.rfind("H100") != std::string::npos) { set_trace(1, "power on"); sendCommand(cmd = power_on_command); sett(""); } // sendCommand("G105\r\n"); // RigSerial->Baud(38400); // MilliSleep(500); selectA(); // Set the radio with the default values set_volume_control(current_volume) ; set_squelch(sql); set_if_shift(if_shift); } /* H101 Turn Radio ON G105 Set Baud rate to 38400 Baud G300 Set Autoupdate to OFF H1? Is radio still ON? Responds H100 for OFF, H101 for ON H101 Radio ON command G4? Possible Inquire Firmware Revision? US and UK version returns G410 G301 Auto Update ON GE? Inquire Country/Region returns GE09 in FCC USA version and GE02 in EUR/AUS version GD? Is DSP Installed? Returns GD00 if NO, GD01 if Yes*/ //---------------------------------------------------------------------- void RIG_PCR1000::shutdown() { // Turn off the radio set_trace(1, "shutdown()"); wait_crlf(cmd = power_off_command, "power OFF"); sett(""); RigSerial->Baud(9600); } //---------------------------------------------------------------------- /* * Set the frequency in the current mode command */ std::string RIG_PCR1000::strFreqModeBW(XCVR_STATE &freqMode) { // 0 1 // 012345678901234567 8 9 std::string freq_cmd = "K00072000000000000\r\n"; // K0GMMMKKKHHHmmff00 // | | | | | // | | | | |__________ 00\r\n\0 terminator // | | | |____________ Bandwidth // | | | 00=2.8kHz, 01=6kHz, // | | | 02=15kHz, 03=50kHz, 04=230kHz // | | |______________ Mode code, // | | 00=LSB, 01=USB, 02=AM, // | | 03=CW, 05=NFM, 06=WFM, 04 is NOT USED! // | |_________________________ 10 digit frequency in Hertz // |___________________________ command K0 // Set the frequency in the selected mode command unsigned long long freq = freqMode.freq ; for( int pos = 11 ; pos > 1 ; pos--) { freq_cmd[pos] = '0'+ (freq % 10) ; freq /= 10; } // Set the mode freq_cmd[13] = mode_chr[ freqMode.imode ]; // Set the band width freq_cmd[15] = '0'+ freqMode.iBW ; return freq_cmd; } //---------------------------------------------------------------------- /* * The PCR-1000 cannot change its frequency so it is always whatever we last set it to */ //---------------------------------------------------------------------- void RIG_PCR1000::set_vfoA (unsigned long long freq) { freqA = A.freq = freq; if (inuse == onA) wait_crlf(strFreqModeBW(A), "set_vfo A"); } unsigned long long RIG_PCR1000::get_vfoA () { return A.freq; } //---------------------------------------------------------------------- void RIG_PCR1000::set_vfoB (unsigned long long freq) { freqB = B.freq = freq; if (inuse == onB) wait_crlf(strFreqModeBW(B), "set_vfo B"); } unsigned long long RIG_PCR1000::get_vfoB () { return B.freq; } //====================================================================== // Some utility functions //====================================================================== /* * This method converts a character to its hex values, i.e. * '0' = 0 * '5' = 5 * 'A' = 10 * */ int RIG_PCR1000::hexTo(const char c) const { return ( c <= '9') ? c - '0' : c - 'A' + 10 ; } /* * This method sets the value of ival into the first 2 characters in cptr, i.e. * 17 is converted to "11" * 37 is converted to "25" * */ void RIG_PCR1000::set2Hex(int ival, char *cptr) { static const char hex_chars[] = "0123456789ABCDEF"; cptr[0] = hex_chars[ival / 16] ; cptr[1] = hex_chars[ival % 16] ; } //---------------------------------------------------------------------- int RIG_PCR1000::get_smeter() { // returns 0-100 int ret = 0; get_trace(1, "get_smeter()"); wait_crlf(cmd = get_smeter_command, "smeter"); // gett(""); size_t p = replystr.find("I1"); if (p == std::string::npos) return 0; ret = hexTo(replystr[p+2]) * 16 + hexTo(replystr[p+3]) ; return (int)((float)ret * ( 100.0 / 255.0 ) ) ; } //---------------------------------------------------------------------- // Volume control return (rig sends back 0 .. 255) int RIG_PCR1000::get_volume_control() { return current_volume ; } //---------------------------------------------------------------------- void RIG_PCR1000::set_volume_control(int val) // 0 .. 100 { current_volume = val ; int ival = (int)(val * 2.55); // 0 .. 255 set2Hex( ival, &(volume_command[3])) ; set_trace(1, "set_volume_control"); wait_crlf(cmd = volume_command, "volume"); sett(""); } //====================================================================== // Band width commands //====================================================================== void RIG_PCR1000::set_bwA(int val) { A.iBW = bwA = val; if (inuse == onA) wait_crlf(strFreqModeBW(A), "set_bw A"); } int RIG_PCR1000::get_bwA() { return A.iBW ; } void RIG_PCR1000::set_bwB(int val) { B.iBW = bwB = val; if (inuse == onB) wait_crlf(strFreqModeBW(B), "set_bw B"); } int RIG_PCR1000::get_bwB() { return B.iBW ; } //====================================================================== // mode commands //====================================================================== void RIG_PCR1000::set_modeA(int val) { modeA = A.imode = val ; if (inuse == onA) wait_crlf(strFreqModeBW(A), "set mode A"); } //---------------------------------------------------------------------- int RIG_PCR1000::get_modeA() { return A.imode; } //---------------------------------------------------------------------- void RIG_PCR1000::set_modeB(int val) { modeB = B.imode = val ; if (inuse == onB) wait_crlf( strFreqModeBW(B), "set_mode B"); } //---------------------------------------------------------------------- int RIG_PCR1000::get_modeB() { return B.imode; } //---------------------------------------------------------------------- int RIG_PCR1000::get_modetype(int n) { return mode_type[n]; } //====================================================================== // mode commands //====================================================================== //---------------------------------------------------------------------- void RIG_PCR1000::selectA() { inuse = onA; wait_crlf(strFreqModeBW(A), "select A"); } //---------------------------------------------------------------------- void RIG_PCR1000::selectB() { inuse = onB; wait_crlf(strFreqModeBW(B), "select B"); } //---------------------------------------------------------------------- void RIG_PCR1000::A2B() { B = A; } //---------------------------------------------------------------------- void RIG_PCR1000::swapAB() { XCVR_STATE T = B; B = A; A = T; if (inuse == onA) wait_crlf(strFreqModeBW(A), "swapAB"); else wait_crlf(strFreqModeBW(B), "swapAB"); } //====================================================================== // Squelch commands //====================================================================== //---------------------------------------------------------------------- void RIG_PCR1000::set_squelch(int val) { sql = val ; set2Hex( val, &(squelch_command[3])) ; set_trace(1, "set_squelch()"); wait_crlf(cmd = squelch_command, "squelch"); sett(""); } int RIG_PCR1000::get_squelch() { return sql ; } //====================================================================== // IF shift commands //====================================================================== //---------------------------------------------------------------------- /* * Since the PCR1000 IF shift shifts in 10 hertz increments we display and store * the actual shift. Just divide by 10 and add 0x80 before its set. */ void RIG_PCR1000::set_if_shift(int val) { if_shift = val ; set2Hex( val/10 + 128, &(if_shift_command[3])) ; set_trace(1, "set_if_shift"); wait_crlf(cmd = if_shift_command, "IF shift"); sett(""); } bool RIG_PCR1000::get_if_shift(int &val) { val = if_shift ; return (if_shift == if_shift_mid) ? false : true ; } //====================================================================== // Attenuator commands //====================================================================== //---------------------------------------------------------------------- void RIG_PCR1000::set_attenuator(int val) { if( val != attenuator ) { if( val ) { // Turn att on set_trace(1, "set_attenuator ON"); wait_crlf(cmd = att_on_command, "att ON"); sett(""); attenuator = 1 ; } else { // Turn att off set_trace(1, "set_attenuator OFF"); wait_crlf(cmd = att_off_command, "att OFF"); sett(""); attenuator = 0 ; } } } int RIG_PCR1000::get_attenuator() { return attenuator ; } //====================================================================== // AGC commands - modified Preamp button //====================================================================== //---------------------------------------------------------------------- void RIG_PCR1000::set_preamp(int val) { if( val != preamp ) { if( val ) { // Turn agc on set_trace(1, "AGC ON"); wait_crlf(cmd = agcontrol_on_command, "preamp ON"); sett(""); preamp = 1 ; } else { // Turn agc off set_trace(1, "AGC OFF"); wait_crlf(cmd = agcontrol_off_command, "preamp OFF"); sett(""); preamp = 0 ; } } } int RIG_PCR1000::get_preamp() { return preamp ; } //====================================================================== // Noise reduction commands - UT-106 Module required // The PCR-1000 doesn't acknowledge any of these commands, so they're // sent "best-effort". The slider function in the NR Level section required // suppression if NR is "Off" due to program looping constantly setting its // value - and with it, the command. //====================================================================== //---------------------------------------------------------------------- void RIG_PCR1000::set_noise(bool on) { if( on ) { // Turn on sendCommand("G301\r\n"); //Auto-Update required for DSP functions set_trace(1, "set DSP ON"); wait_crlf(cmd = noise_on_command, "DSP ON"); sett(""); noise = 1 ; } else { // Turn off set_trace(1, "set DSP OFF"); wait_crlf(cmd = noise_off_command, "DSP OFF"); sendCommand("G300\r\n"); //Auto-Update OFF sett(""); noise = 0 ; } } int RIG_PCR1000::get_noise() { return noise ; } void RIG_PCR1000::set_auto_notch(int val) { if( val != auto_notch ) { if( val ) { // Turn auto-notch on set_trace(1, "set AN ON"); wait_crlf(cmd = an_on_command, "AN ON"); sett(""); auto_notch = 1 ; } else { // Turn auto-notch off set_trace(1, "set AN OFF"); wait_crlf(cmd = an_off_command, "AN OFF"); sett(""); auto_notch = 0 ; } } } int RIG_PCR1000::get_auto_notch() { return auto_notch ; } void RIG_PCR1000::set_noise_reduction(int val) { if( val != noise_reduction ) { if( val ) { // Turn NR on set_trace(1, "set NR ON"); wait_crlf(cmd = nr_on_command, "NR ON"); sett(""); noise_reduction = 1 ; nr_on = 1 ; } else { // Turn NR off nr_level = 0 ; set_trace(1, "set NR OFF"); wait_crlf(cmd = nr_off_command, "NR OFF"); sett(""); noise_reduction = 0 ; nr_on = 0 ; } } } int RIG_PCR1000::get_noise_reduction() { return noise_reduction ; } void RIG_PCR1000::set_noise_reduction_val(int val) { if (nr_on) { nr_level = val ; set2Hex(nr_level, &(nr_level_command[8])) ; set_trace(1, "set_NR Level"); wait_crlf(cmd = nr_level_command, "NR Level"); sett(""); } else { wait_crlf(cmd = nr_off_command, "NR Off"); //Forces the slider routine to adhere to "Off" // if NR deactivated } } //====================================================================== // Command structures for the PCR1000 // // From http://www.gm4jjj.co.uk/PCR1000.html //====================================================================== /* PCR1000 Command List The ICOM PCR1000 Computer Controlled Radio Command Protocol has not been published by ICOM, however I have compiled this list from various sources. Warning: I take no responsibility for the accuracy of any of the following, you use it at your own risk! - Make sure you have a backup of your EEPROM before trying any experimentation! Updated 10 JAN 2002 All commands are sent is ASCII in the format: Command + CR + LF CR = chr$(13) LF = chr$(10) EXCEPT when in AUTOUPDATE mode (see G3xx command), when NO CR + LF IS REQUIRED after the Command Note that no G0XX is returned in autoupdate mode Some responses from the PCR1000 have an added character at the end of the response std::string. It is usually a duplicate of the last character of the std::string and can be discarded. (A bug, I suppose) DTR and RTS set high by software. When radio is first turned on, the software send the following commands: initial boot up at 9600 Baud. H101 Turn Radio ON G105 Set Baud rate to 38400 Baud G300 Set Autoupdate to OFF H1? Is radio still ON? Responds H100 for OFF, H101 for ON H101 Radio ON command G4? Possible Inquire Firmware Revision? US and UK version returns G410 G301 Auto Update ON GE? Inquire Country/Region returns GE09 in FCC USA version and GE02 in EUR/AUS version GD? Is DSP Installed? Returns GD00 if NO, GD01 if Yes K00857937500050200 Set Frequency and mode and filter J4100 Set Squelch J5100 See Tone Squelch J5000 Set VSC off J4380 Set IF Shift to mid range J4500 Set AGC OFF J4600 Set Noise Blanker OFF J4700 Set Attenuator OFF J4A80 Not known LD82000 Set Tracking Filter to Automatic J8001J8101J8200J8301 DSP Packet. See DSP commands below J4000 Set Volume ME0000120050100012500 Set Bandscope ON to +- 200 Khz and 12.5 Khz step ' This is returned when Bandscope first turned ON NE100000000000000000000000000000000000 NE110000000000000000000000000000000000 NE120000000000000000000000000000000000 NE130000000000000000000000000000000000 NE140000000000000000000000000000000000 NE150000000000000000000000000000000000 NE160000000000000000000000000000000000 NE170000000000000000000000000000000000 NE190000000000000000000000000000000000 NE1A0000000000000000000000000000000000 NE1B0000000000000000000000000000000000 NE1C0000000000000000000000000000000000 NE1D0000000000000000000000000000000000 NE1E0000000000000000000000000000000000 NE1F0000000000000000000000000000000000 ___________________________________________________ Command Status: G0xx where xx = 00 when command is Good, 01 when command is Bad Signal Update: G3xx 00 = off (Program needs to Poll status) See I1? to I3? below 01 = on (Radio sends Status when a parameter changes) See Ix? commands 02 = binary mode (Update off) 03 = binary mode (Update on) Inquire signal information. These commands can be Polled or are returned as a packet if Autoupdate is ON (See G301) and one of thesmeter values changes. I0? Squelch Status returns 04 = Closed, 07 = Open I1? Signal Strength returns 00 to FF I2? Signal Centering returns 00 = Low, 80 = Centered, FF = High I3? DTMF Tone returns I300 if NO DTMF tone present returns I31 + ASCII digit 0 to F (* = E, # = F) Alive: H1? Is radio alive? Radio responds H101 (on) or H100 (off) Volume: J40xx xx Range 00 to FF Squelch: J41xx xx Range 00 to FF IF Shift: J43xx xx Range 00 to FF AGC: J45xx xx = 01 for ON, 00 for OFF NB: J46xx xx = 01 for ON, 00 for OFF Attenuator: J47xx xx = 01 for ON, 00 for OFF VSC: J50xx xx = 01 for ON, 00 for OFF T Squelch on = J51tt (tt=tone , 01=67Hz, 33=254.1Hz) T Squelch off = J5100 Frequency: K0GMMMKKKHHHmmff00 where K0 G MMM KKK HHH mm ff 00 G=GHz MMM=MHz KKK=KHz HHH=Hz mm = mode ff = Filter 00 = Padding Bytes (always there) Mode Settings: 00 = LSB 01 = USB 02 = AM 03 = CW 04 = Not used or Unknown 05 = NFM 06 = WFM Filter Settings: 00 = 3 Khz (actually 2.8 Khz) (CW USB LSB AM) 01 = 6 Khz (CW USB LSB AM NFM) 02 = 15 Khz (AM NFM) 03 = 50 Khz (AM NFM WFM) 04 = 230 Khz (WFM) Radio Replies I0xx Squelch Status xx=04 Closed, 07 Open I1ss ss is Signal Strength 00 to FF I200 Signal Frequency < Display Frequency I280 Signal Frequency = Display Frequency I2FF Signal Frequency > Display Frequency I300 No DTMF Present I31t t is DTMF tone (* = E, # = F) Baud Rate G1xx where xx is: 00 = 300 01 = 1200 02 = 4800 03 = 9600 04 = 19200 05 = 38400 Signal Update G3xx 00 = off (Program needs to inquire signal strength, DTMF tone, Center, etc) 01 = on (Radio sends signal strength, DTMF tone, etc as needed) 02 = binary mode (Update off) 03 = binary mode (Update on) __________________________________________________________ Icom PCR1000 Band Scope commands. The basic command to turn the bandscope function On is: ME0000120050100012500 + CR + LF The command breaks down this way: ME00001 20050100012500 ME00001 is the preamble. It's always the same. ME00001 20 050100012500 20 is the number of samples. It must be a 2 digit HEX number represented in ASCII. Add leading 0 if necessary. Calculate this number by dividing the Scope Bandwidth by the step size. For example in the +- 200 Khz span the total bandwidth is 400 Khz. If the step size is 12.5 khz then 400/12.5 is 32 or 20 Hex. If you get a non integer answer for the initial division then increment the sample number by 1 or 2 (sample should be an EVEN number). You can arbitrarily set the sample higher(SLIGHTLY) to allow the display to be moved inward from the edges of the scope display. ME0000120 05 0100012500 05 is a sample rate value that determines how fast the scope is swept and in the Icom software is either 05 or 28. This is interpreted as a hex number and must be 2 digits. The practical values for this runs from 01 (very fast and resource intensive) to about 70 (very slow and nearly useless). Putting 00 here locks the PCR1000 and software up. In the Icom software the number of samples determine this value. Sample numbers above 10 hex use 05 and those 10 Hex or lower use 28 Hex. ME000012005 01 00012500 01 This is the On/Off characters. If they are 00 then the bandscope is OFF. If they are 01 the bandscope is ON ME00001200501 00 012500 00 is a padding value and must be there. ME0000120050100 012500 012500 is the step size expressed in HERTZ. It must be 6 digits unsigned long int, padded with LEADING ZEROS. Examples are 001000 for 1000 hertz (1 Khz), 030000 for 30 Khz and 100000 for 100 Khz. The bandscope accepts values down to at least 10 hertz but the Icom software displays a LIMIT warning at 1 Khz and at 100 Khz. The Band Scope commands appear to be insensitive to mode and bandwidth except for the fact that it doesn't work in USB, LSB or CW. It has been hypothesized that the product detector circuitry is used by the Band Scope. Typical Band Scope Commands: ME00001C8050100001000 +- 100 Khz @ 1 Khz ME0000164050100001000 +- 50 ME0000132050100001000 +- 25 ME00001A0050100002500 +- 200 Khz @ 2.5 Khz ME0000150050100002500 +- 100 ME0000128050100002500 +- 50 ME0000114050100002500 +- 25 ME0000150050100005000 +- 200 Khz @ 5.0 Khz ME0000128050100005000 +- 100 ME0000114050100005000 +- 50 ME000010A280100005000 +- 25 ME0000140050100006250 +- 200 Khz @ 6.25 Khz ME0000120050100006250 +- 100 ME0000110280100006250 +- 50 ME0000108280100006250 +- 25 ME000012E050100009000 +- 200 Khz @ 9.0 Khz ME0000118050100009000 +- 100 ME000010C280100009000 +- 50 ME0000106280100009000 +- 25 ME0000128050100010000 +- 200 Khz @ 10.0 Khz ME0000114050100010000 +- 100 ME000010A280100010000 +- 50 ME0000106280100010000 +- 25 ME0000120050100012500 +- 200 Khz @ 12.5 Khz ME0000110280100012500 +- 100 ME0000110280100012500 +- 50 ME0000108280100012500 +- 25 ME0000114050100020000 +- 200 Khz @ 20.0 Khz ME000010A280100020000 +- 100 ME0000106280100020000 +- 50 ME0000104280100020000 +- 25 ME0000110280100025000 +- 200 Khz @ 25.0 Khz ME0000108280100025000 +- 100 ME0000104280100025000 +- 50 ME0000100280100025000 +- 25 ME000010E280100030000 +- 200 Khz @ 30.0 Khz ME0000108280100030000 +- 100 ME0000104280100030000 +- 50 ME0000100280100030000 +- 25 ME0000108280100050000 +- 200 Khz @ 50.0 Khz ME0000104280100050000 +- 100 ME0000100280100050000 +- 50 Note 00 sample size This is invalid! ME0000104280100100000 +- 200 Khz @ 100.0 Khz ME0000100280100100000 +- 100 Invalid ME0000100280100100000 +- 50 Invalid ********************************************************************** The data is returned in 37 byte packets. The packets begin with the Letters NE1 followed by the 2 digit hex packet number. The Packet numbers run from 00 to F0 (must be 2 digits). Typical packet numbers would be NE100, NE170, NE180 and NE1F0. These numbers are followed by 32 bytes that contain signal level information for EACH sample (16 per packet). Each byte is a hex number (in ascii) that can run from 00 to FF. The bytes in packet NE180 represent the first 16 samples UP from the displayed frequency in ascending order. The bytes in packet NE170 represent the 16 samples BELOW the displayed frequency in descending order. For example the following: NE18020202020202020202020202020202020 NE1 80 20202020202020202020202020202020 NE1 is the fixed preamble NE1 80 20202020202020202020202020202020 80 is the packet number NE180 20 202020202020202020202020202020 20 is the sample signal level (20 Hex) at the displayed frequency NE18020 20 2020202020202020202020202020 This is the next sample level UP from the displayed freq The next 14 values represent the next 14 sample levels. If less samples are needed, the higher sample levels are set to 00. If more then 16 sanple levels are needed Up from the center freq, then the next packet NE190 hold the values. For the following: NE17000000000000000001111111111111111 NE1 7000000000000000001111111111111111 NE1 is the fixed preamble NE1 70 00000000000000001111111111111111 70 is the packet number. Packet 70 is the first packet BELOW the center frequency. NE170000000000000000011111111111111 11 11 This is the first sample level BELOW the center frequency. NE1700000000000000000111111111111 11 11 11 This is the next LOWER sample level and so on. In this example, only 16 (10 Hex) samples were specified. 8 samples are provided here below center freq and the corresponding 8 above center freq would be in the NE180 packet. If more then the 32 samples that can be displayed with NE170 and NE180 were specified then additional packets would be sent. For example if 48(decimal) samples were specified then the following packets would be returned: NE160 would have 8 samples (in the UPPER 8) NE170 would have 16 samples NE180 would have 16 samples NE190 would have 8 samples (in the LOWER 8) Note that they are sent in ascending order from NE160 to NE190. A rough indication of the number of packets needed for a given sample size is (Number of samples)/16 plus 1. If the number is ODD then add 1 more packet. Sample in order sent (This is a continous std::string): NE1600000000000000000000030180FA61F14 NE1701F2B0C0F7E030C2B85088E080F2B4314 NE1801B8E181830085FEC6603083001143003 NE19001030101012701000000000000000000 When Band Scope is first turned ON or is turned OFF, ALL 16 packets are returned with ALL samples set to 00. ___________________________________________________________ The DSP commands below have to be sent as a packet followed by a Cr + Lf sample packet J8001J8101J820FJ8301 | | is always there and never changes J8001J8101J820FJ8301 | | DSP ON J8100 is DSP Off J8001J8101J820FJ8301 | | ANR on and set to max would be J8200 if off J8001J8101J820FJ8301 | | Notch turned ON J8301 turns notch ON With this in mind here is the DSP Command Set: On startup the software sends GD? Returns GD00 if NO DSP installed Returns GD01 if DSP Installed Autoupdate must be ON (send G301 + cr + lf): J8001 Always the same J81xx where xx is 00 if DSP is OFF and 01 if ON J82xx This is the ANR function (Automatic Noise Reduction) xx is 00 if ANR is OFF. If ON, xx varies from 01 to 0F when you turn a knob on the new DSP Popup panel. J83xx is the Automatic Notch filter. xx is 00 if notch is OFF and 01 if ON. The following data is written to the PCR1000.ini file. DSPON with either 0 or 1 for Off/On DSPANF with either 0 or 1 for Off/On DSPNR with either 0 or 1 for Off/On DSPNRLEVEL with value 0 to 15 for Noise Reduction level ---------------------------------------------------------- COUNTRY/REGION Table GE? (Returns contents of Address 7E of the EEPROM) JAPAN 00 USA 01 EUR/AUS 02 FRA 03 DEN 04 CAN 05 GENE1 06 GENE2 07 FCC JPN 08 FCC USA 09 FCC EUR/AUS 0A FCC FRA 0B FCC DEN 0C FCC CAN 0D FCC GENE1 0E FCC GENE2 OF TRACKING FILTER LD820x xx=00 automatic tracking, Range 01 to FF manual setting of filter EEPROM UNLOCKING Don't play with these unless you have a verified backup of your own PCR-1000 EEPROM contents You need to unlock the protection even to READ the EEPROM contents. The Unlock Codes are: GC01 GCF0 Note the response to both the above commands is G001 Read Command: LD0xx? xx= eeprom address 00 to 7F Replies LD0xxyy yy = data in location xx Write Command: LD0xxyy xx = address yy = data to write Replies G000 if OK To put protection back on again turn the PCR-1000 off and on again. Use the software command H100 or the switch. The baud rate will then return to 9600. Average Values Use these if you have a corrupted EEPROM and no backup Crash Pattern This is what the PCR-1000 produces if it crashes and corrupts the EEPROM EEPROM Locations (DATA IN DECIMAL) ADDRESS AVERAGE CRASHED COMMENTS (HEX) (DEC) (DEC) 00 0 0 RESERVED 01 0 0 RESERVED 02 82 82 CHECK PATTERN 03 88 88 CHECK PATTERN 04 99 128 REFERENCE XTAL SHIFT (CENTRE =128) 05 0 0 RESERVED 06 0 0 RESERVED 07 0 0 RESERVED 08 63 0 FM LEVEL S0 REF-VOLT 09 79 48 FM LEVEL S3 REF-VOLT 0A 95 80 FM LEVEL S5 REF-VOLT 0B 117 112 FM LEVEL S7 REF-VOLT 0C 140 144 FM LEVEL S9 REF-VOLT 0D 166 176 FM LEVEL S9+20 REF-VOLT 0E 188 208 FM LEVEL S9+40 REF-VOLT 0F 210 240 FM LEVEL S9+60 REF-VOLT 10 54 0 WFM LEVEL S0 REF-VOLT 11 67 48 WFM LEVEL S3 REF-VOLT 12 80 80 WFM LEVEL S5 REF-VOLT 13 103 112 WFM LEVEL S7 REF-VOLT 14 126 144 WFM LEVEL S9 REF-VOLT 15 152 176 WFM LEVEL S9+20 REF-VOLT 16 177 208 WFM LEVEL S9+40 REF-VOLT 17 199 240 WFM LEVEL S9+60 REF-VOLT 18 21 0 SCOPE LEVEL S0 REF-VOLT 19 39 48 SCOPE LEVEL S3 REF-VOLT 1A 45 80 SCOPE LEVEL S5 REF-VOLT 1B 55 112 SCOPE LEVEL S7 REF-VOLT 1C 57 144 SCOPE LEVEL S9 REF-VOLT 1D 61 176 SCOPE LEVEL S9+20 REF-VOLT 1E 64 208 SCOPE LEVEL S9+40 REF-VOLT 1F 67 240 SCOPE LEVEL S9+60 REF-VOLT 20 21 115 FM CENTERMETER LOW 21 57 46 FM CENTERMETER HIGH 22 115 115 RESERVED 23 146 146 RESERVED 24 11 166 FM NOISESQL THRESHOLD LEVEL 25 11 36 FM NOISESQL TIGHT LEVEL 26 2 0 FM NOISESQL SETTING T2 27 4 0 FM NOISESQL SETTING T3 28 0 0 RESERVED 29 0 0 RESERVED 2A 96 96 CTCSS-DET JUDGEMENT LEVEL (CLOSE) 2B 160 160 CTCSS-DET JUDGEMENT LEVEL (OPEN) 2C 98 144 BPF0 LEVEL S9 REFERENCE 2D 137 144 BPF1 LEVEL S9 REFERENCE 2E 111 144 BPF2 LEVEL S9 REFERENCE 2F 106 144 BPF3 LEVEL S9 REFERENCE 30 125 144 BPF4 LEVEL S9 REFERENCE 50.02MHZ 31 130 144 BPF4 LEVEL S9 REFERENCE 58.28MHZ 32 129 144 BPF4 LEVEL S9 REFERENCE 58.32MHZ 33 135 144 BPF4 LEVEL S9 REFERENCE 88.02MHZ 34 138 144 BPF4 LEVEL S9 REFERENCE 108.28MHZ 35 138 144 BPF4 LEVEL S9 REFERENCE 108.32MHZ 36 141 144 BPF4 LEVEL S9 REFERENCE 130.02MHZ 37 140 144 BPF4 LEVEL S9 REFERENCE 149.98MHZ 38 118 144 BPF5 LEVEL S9 REFERENCE 150.02MHZ 39 122 144 BPF5 LEVEL S9 REFERENCE 183.28MHZ 3A 121 144 BPF5 LEVEL S9 REFERENCE 183.32MHZ 3B 122 144 BPF5 LEVEL S9 REFERENCE 216.02MHZ 3C 119 144 BPF5 LEVEL S9 REFERENCE 265.68MHZ 3D 117 144 BPF5 LEVEL S9 REFERENCE 265.72MHZ 3E 117 144 BPF5 LEVEL S9 REFERENCE 300.02MHZ 3F 110 144 BPF5 LEVEL S9 REFERENCE 349.98HZ 40 124 144 BPF6 LEVEL S9 REFERENCE 350.02HZ 41 123 144 BPF6 LEVEL S9 REFERENCE 383.28MHZ 42 123 144 BPF6 LEVEL S9 REFERENCE 383.32MHZ 43 125 144 BPF6 LEVEL S9 REFERENCE 433.32MHZ 44 123 144 BPF6 LEVEL S9 REFERENCE 483.28MHZ 45 123 144 BPF6 LEVEL S9 REFERENCE 483.32MHZ 46 121 144 BPF6 LEVEL S9 REFERENCE 558.32MHZ 47 119 144 BPF6 LEVEL S9 REFERENCE 633.28MHZ 48 119 144 BPF6 LEVEL S9 REFERENCE 633.32MHZ 49 116 144 BPF6 LEVEL S9 REFERENCE 699.98MHZ 4A 103 144 BPF7 LEVEL S9 REFERENCE 700.02MHZ 4B 107 144 BPF7 LEVEL S9 REFERENCE 750.02MHZ 4C 110 144 BPF7 LEVEL S9 REFERENCE 799.98MHZ 4D 110 144 BPF7 LEVEL S9 REFERENCE 800.02MHZ 4E 120 144 BPF7 LEVEL S9 REFERENCE 916.68MHZ 4F 119 144 BPF7 LEVEL S9 REFERENCE 916.72MHZ 50 123 144 BPF7 LEVEL S9 REFERENCE 1016.68MHZ 51 122 144 BPF7 LEVEL S9 REFERENCE 1016.72MHZ 52 112 144 BPF7 LEVEL S9 REFERENCE 1166.68MHZ 53 111 144 BPF7 LEVEL S9 REFERENCE 1166.72MHZ 54 110 144 BPF7 LEVEL S9 REFERENCE 1299.98MHZ 55 0 0 RESERVED 56 0 0 RESERVED 57 0 0 RESERVED 58 35 128 BPF4 TUNING PEAK-POINT 50.02MHZ 59 35 128 BPF4 TUNING PEAK-POINT 58.28MHZ 5A 117 128 BPF4 TUNING PEAK-POINT 58.32MHZ 5B 110 128 BPF4 TUNING PEAK-POINT 88.02MHZ 5C 114 128 BPF4 TUNING PEAK-POINT 108.28MHZ 5D 188 128 BPF4 TUNING PEAK-POINT 108.32MHZ 5E 191 128 BPF4 TUNING PEAK-POINT 130.02MHZ 5F 204 128 BPF4 TUNING PEAK-POINT 149.98MHZ 60 70 128 BPF5 TUNING PEAK-POINT 150.02MHZ 61 43 128 BPF5 TUNING PEAK-POINT 183.28MHZ 62 118 128 BPF5 TUNING PEAK-POINT 183.32MHZ 63 101 28 BPF5 TUNING PEAK-POINT 216.02MHZ 64 92 128 BPF5 TUNING PEAK-POINT 265.68MHZ 65 180 128 BPF5 TUNING PEAK-POINT 265.72MHZ 66 173 128 BPF5 TUNING PEAK-POINT 300.02MHZ 67 177 128 BPF5 TUNING PEAK-POINT 349.98MHZ 68 46 128 BPF6 TUNING PEAK-POINT 350.02MHZ 69 32 128 BPF6 TUNING PEAK-POINT 383.28MHZ 6A 113 128 BPF6 TUNING PEAK-POINT 383.32MHZ 6B 95 128 BPF6 TUNING PEAK-POINT 433.32MHZ 6C 83 128 BPF6 TUNING PEAK-POINT 483.28MHZ 6D 156 128 BPF6 TUNING PEAK-POINT 483.32MHZ 6E 132 128 BPF6 TUNING PEAK-POINT 558.32MHZ 6F 112 128 BPF6 TUNING PEAK-POINT 633.28MHZ 70 187 128 BPF6 TUNING PEAK-POINT 633.32MHZ 71 185 128 BPF6 TUNING PEAK-POINT 699.98MHZ 72 75 128 BPF7 TUNING PEAK-POINT 700.02MHZ 73 66 128 BPF7 TUNING PEAK-POINT 750.02MHZ 74 57 128 BPF7 TUNING PEAK-POINT 799.98MHZ 75 146 128 BPF7 TUNING PEAK-POINT 800.02MHZ 76 79 128 BPF7 TUNING PEAK-POINT 916.68MHZ 77 160 128 BPF7 TUNING PEAK-POINT 916.72MHZ 78 122 128 BPF7 TUNING PEAK-POINT 1016.68MHZ 79 194 128 BPF7 TUNING PEAK-POINT 1016.72MHZ 7A 127 128 BPF7 TUNING PEAK-POINT 1166.68MHZ 7B 202 128 BPF7 TUNING PEAK-POINT 1166.72MHZ 7C 170 128 BPF7 TUNING PEAK-POINT 1299.98MHZ 7D 0 0 RESERVED 7E * 7 COUNTRY/REGION (*See Table of values) 7F 2 7 RESERVED Unknowns --------- Still looking for the purpose of the following PCR commands:- LE20050 LE20040 Above used by icom in their EEPROM routines in their software for setting up the radio and also some third party software I have seen. Is this understood or is it just being copied? GCD0 GE07 H800 * see below LD840? LD846? LD84A? * see below LD842 * see below LD844 * see below LD848 LD860 LD862 G4? returns G410 J4A80 If anyone fill in the gaps that would be great! Update:- Some more info has come in! - Thanks to the guys on the PCR-1000 list. There are some questions about the following commands: LD840? (always 0) LD842? (current signal strength) LD844? (centering info?) LD846? (usually 0x60) LD848? (always 0) LD84A? (old LD842?) LD84C? (always 0) LD84E? (always 0) LD860? (always 0) LD862? (always 0) LD864? (always 0) LD842? returns the current signal strength level, same as for I1? LD84A? returns the previous signal strength. I believe this is what the radio uses to determine if the signal strength level has changed (as you probably noticed, it only kicks out a new I1xx message in G301 mode when the signal strength changes). LD844? returns something relevant to frequency. If I set the PCR-1000 to 144.35, NBFM, 6Khz filter, and set my HT for 144.35 Mhz, when I transmit on the HT, this value goes to 0x25. Moving the HT to 144.355 causes the value to increase to a nominal 0x37, and moving the HT to 144.345 causes the value to decrease to a nominal 0x15. Interesting relationship between these values: 0x37 - 0x25 = 0x12, and 0x25 - 0x15 = 0x10. This is 18 decimal and 16 decimal respectively. Two pretty close numbers for shifting +/- 5Khz. I expect this register has something to do with the centering information. I'm not completely sure about this, but every document except 1 has the auto tracking register mis-coded. It's generally listed as LD8200 to turn off, and LD8201 to set to manual. It's actually LD82000 (note three 0's) to turn off, and can be varied from LD82001 to LD820FF. I don't know exactly what the tracking thingie does, but it has a pronounced affect turning it off or on. - Editor's note this has now been corrected in this document, it is the tracking of the RF stage with frequency I believe. There's also a mention of H800 in the documents. H8 will accept values from 00 to FF, and has an odd effect on the audio. Values greater than or equal to 0x81 cause a very brief (100ms or so) drop out on the audio. Values 0x80 and below don't do this. Interestingly enough, when G301 is in effect, changing H8 causes an H9 message to be output. H9 can be read with the H9? command. I've only seen 0x00, 0x01, and 0x10 be reported back. The following command sequence seems to have something to do with squelch and signal strength. H800; J4180; H881; H9? (reports H901), J4100. Now the squelch should be open, but isn't. Setting H800 will open the squelch again. Now do H8FF; H9? Audio opens, and H9? reports H910. Curious. All my experimenting is in NBFM mode, so perhaps some of these other registers come into play in other modes. Something else that's not mentioned in any of the documentation is that when G301 mode is on, commands don't generate a response unless they're interrogative (i.e. GD? or H1?). */ flrig-2.0.04/src/rigs/other/RAY152.cxx0000664000175000017500000002023714502041135014105 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include "other/RAY152.h" //============================================================================= const char RIG_RAY152name_[] = "RAY 152"; static std::vectorRIG_RAY152modes_; static const char *vRIG_RAY152modes_[] = { "USB", "LSB", "H3E", "A1A", "F1B"}; static const char RIG_RAY152_mode_type[] = {'U', 'L', 'U', 'L', 'U'}; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 145, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 145, 368 }, { (Fl_Widget *)sldrRFGAIN, 54, 125, 156 }, { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_RAY152::RIG_RAY152() { name_ = RIG_RAY152name_; modes_ = RIG_RAY152modes_; widgets = rig_widgets; serial_baudrate = BR1200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.freq = 14070000ULL; A.imode = 0; A.iBW = 0; B.freq = 3580000ULL; B.imode = 0; B.iBW = 0; precision = 100; ndigits = 6; has_mode_control = true; has_ptt_control = true; has_rf_control = true; has_volume_control = true; has_rit = true; has_sql_control = true; has_noise_control = true; has_auto_notch = true; }; static void nocr( std::string & s) { for (size_t i = 0; i < s.length(); i++) if (s[i] == '\r') s[i] = ' '; } /* Data std::string returned by the 'O' command 3 A*\r AGC ON/OFF 5 C***\r Memory channel # 5 D+/-**\r Clarifier frequency 9 FT******\r Transmit frequemcy 9 FR******\r Receive frequency 6 I****\r ITU channel # 3 M*\r Mode 3 N*\r Noise blanker status 3 P*\r Power reduction status 5 Q***\r Squelch setting 5 R***\r RF gain setting 5 V***\r Volume setting 3 Z*\r Meter function total 64 */ bool RIG_RAY152::check() { int ret = sendCommand("O\r"); if (ret < 66) return false; return true; } void RIG_RAY152::get_data() { int ret = sendCommand("O\r"); if (ret < 66) return; // test std::string //replystr = "A1\rC000\rD-05\rFT1407000\rFR1407000\rI0000\rM1\rN1\rP0\rQ000\rR100\rV128\rZ1\r"; if (dumpdata) LOG_WARN("\n%s", replystr.c_str()); dumpdata = false; size_t pos; pos = replystr.find("FR"); // receive frequency if (pos != std::string::npos) { int freq; sscanf(&replystr[pos + 2], "%d", &freq); A.freq = 100 * freq; } pos = replystr.find("M"); // mode if (pos != std::string::npos) A.imode = replystr[pos + 1] - '1'; pos = replystr.find("D"); if (pos != std::string::npos) { sscanf(&replystr[pos + 1], "%d", &RitFreq); RitFreq *= 10; } pos = replystr.find("\rR"); if (pos != std::string::npos) sscanf(&replystr[pos + 2], "%d", &rfg); pos = replystr.find("V"); if (pos != std::string::npos) { sscanf(&replystr[pos + 1], "%d", &vol); vol *= 100; vol /= 255; } pos = replystr.find("Q"); if (pos != std::string::npos) { sscanf(&replystr[pos + 1], "%d", &squelch); } pos = replystr.find("N"); if (pos != std::string::npos) { if (replystr[pos + 1] > '0') { nb_set = replystr[pos+1]; nb = 1; } else { nb = 0; nb_set = '2'; } } // RAY152 usurps the autonotch button for AGC control pos = replystr.find("A"); if (pos != std::string::npos) agc = replystr[1] == '1' ? 1 : 0; } void RIG_RAY152::initialize() { VECTOR (RIG_RAY152modes_, vRIG_RAY152modes_); modes_ = RIG_RAY152modes_; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = sldrSQUELCH; sendCommand("E1\r", 0); sendCommand("Z1\r", 0); dumpdata = true; get_data(); set_auto_notch(agc); } void RIG_RAY152::shutdown() { sendCommand("E0\r", 0); LOG_INFO("%s", cmd.c_str()); } unsigned long long RIG_RAY152::get_vfoA () { return A.freq; } void RIG_RAY152::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FT000000\r"; freq /= 100; cmd[7] += freq % 10; freq /= 10; cmd[6] += freq % 10; freq /= 10; cmd[5] += freq % 10; freq /= 10; cmd[4] += freq % 10; freq /= 10; cmd[3] += freq % 10; freq /=10; cmd[2] += freq; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); cmd[1] = 'R'; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } unsigned long long RIG_RAY152::get_vfoB () { return B.freq; } void RIG_RAY152::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FT000000\r"; freq /= 100; cmd[7] += freq % 10; freq /= 10; cmd[6] += freq % 10; freq /= 10; cmd[5] += freq % 10; freq /= 10; cmd[4] += freq % 10; freq /= 10; cmd[3] += freq % 10; freq /=10; cmd[2] += freq; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); cmd[1] = 'R'; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } void RIG_RAY152::set_PTT_control(int val) { cmd = val ? "X1\r" : "X0\r"; sendCommand(cmd,0); LOG_INFO("%s", cmd.c_str()); ptt_ = val; } void RIG_RAY152::set_modeA(int md) { A.imode = md; cmd = "M"; cmd += (md + '1'); cmd += '\r'; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } int RIG_RAY152::get_modeA() { return A.imode; } void RIG_RAY152::set_modeB(int md) { B.imode = md; cmd = "M"; cmd += (md + '1'); cmd += '\r'; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } int RIG_RAY152::get_modeB() { return B.imode; } int RIG_RAY152::get_modetype(int n) { return RIG_RAY152_mode_type[n]; } void RIG_RAY152::set_volume_control(int val) { vol = val; std::string cmd = "V000\r"; val *= 255; val /= 100; cmd[3] += val % 10; val /= 10; cmd[2] += val % 10; val /= 10; cmd[1] += val; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } void RIG_RAY152::set_rf_gain(int val) { rfg = val; cmd = "R000\r"; cmd[3] += val % 10; val /= 10; cmd[2] += val % 10; val /= 10; cmd[1] += val; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } int RIG_RAY152::get_smeter(void) { cmd = "U\r"; int ret = sendCommand(cmd); std::string s = replystr; nocr(s); LOG_WARN("%s", s.c_str()); if (ret < 5) return 0; if (replystr[ret - 5] == 'U') { int val; sscanf(&replystr[ret - 5 + 1], "%d", &val); val = (int)(60.0 * (256.0 / (val + 16.0) - 1.0)); if (val > 100) val = 100; if (val < 0) val = 0; return val; } return 0; } int RIG_RAY152::get_power_out(void) { int ret = sendCommand("U\r"); if (ret < 5) return 0; if (replystr[ret - 5] == 'U') { int val; sscanf(&replystr[ret - 5 + 1], "%d", &val); val /= 128; val *= 100; return val; } return -1; } void RIG_RAY152::setRit(int v) { RitFreq = v; cmd = "D+00\r"; if (v < 0) cmd[1] = '-'; v /= 10; v = abs(v); cmd[3] += v % 10; v /= 10; cmd[2] += v % 10; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } int RIG_RAY152::getRit() { return RitFreq; } void RIG_RAY152::set_squelch(int val) { squelch = val; cmd = "Q000\r"; cmd[3] += val % 10; val /= 10; cmd[2] += val % 10; val /= 10; cmd[1] += val; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } int RIG_RAY152::get_squelch() { return squelch; } void RIG_RAY152::set_noise(bool on) { cmd = "Nx\r"; cmd[1] = on ? nb_set : '0'; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } int RIG_RAY152::get_noise() { return nb; } void RIG_RAY152::set_auto_notch(int v) { cmd = "Ax\r"; cmd[1] = v ? '1' : '0'; sendCommand(cmd, 0); LOG_INFO("%s", cmd.c_str()); } int RIG_RAY152::get_auto_notch() { return agc; } flrig-2.0.04/src/rigs/other/TMD710.cxx0000664000175000017500000001741414502041135014101 00000000000000// Kennwood TM-D710 and similar #include "other/TMD710.h" const char TMD710name_[] = "TMD710"; static std::vectorTMD710modes_; static const char *vTMD710modes_[] = { "FM", "NFM", "AM"}; //gibts nicht static const char TMD710_mode_type[] = {'U', 'U', 'U'}; RIG_TMD710::RIG_TMD710() { // base class values name_ = TMD710name_; modes_ = TMD710modes_; bandwidths_ = vNOBWS; serial_baudrate = BR38400; stopbits = 1; serial_retries = 3; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 1000; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; // bwA = 2; has_mode_control = has_ptt_control = true; // has_attenuator_control = // has_preamp_control = // has_power_out = has_power_control = has_sql_control = /* has_volume_control = has_bandwidth_control = has_micgain_control = has_notch_control = has_ifshift_control = has_tune_control =*/ // has_swr_control = false; has_vfoAB = true; // has_split = // has_split_AB = precision = 10; ndigits = 7; } void RIG_TMD710::initialize() { VECTOR (TMD710modes_, vTMD710modes_); modes_ = TMD710modes_; bandwidths_ = vNOBWS; } bool RIG_TMD710::check () { cmd = "DL 0\r"; // Enable dual mode int ret = wait_char('\r', 5, 100, "check and set Dual Band Mode", ASC); if (ret < 1) return false; return true; } // Works for TM-D710E unsigned long long RIG_TMD710::get_vfoA () { cmd = "FO 0\r"; int ret = wait_char('\r', 49, 100, "get VFO", ASC); if (ret < 49) return freqA; gett("get_vfoA"); char frequency[11]; int p = 5; int n = 0; for (n = 0; n < 10; n++) frequency[n] = (replystr[p + n]); frequency[10] = '\0'; sscanf(frequency, "%lld", &freqA); char mode[2]; mode[0] = (replystr[47]); mode[1] = '\0'; modeA = atoi(mode); return freqA; /* 1 Band 0 Band A 1 Band B 2 TX A - RX B 3 TX B - RX A 2 Frequency in Hz 10 digit. must be within selected band -> ok 3 Step size 0 5 Khz 1 6.25 Khz 2 28,33 KHz 3 10 Khz 4 12.5 Khz 5 15 Khz 6 20 Khz 7 25 KHz 8 30 KHz 9 50 Khz A 100 Khz 4 Shift direction 0 simplex or split 1 up 2 down 5 Reverse 0 off 1 on 6 Tone status 0 off 1 on 7 CTCSS status 0 off 1 on 8 DCS status 0 off 1 on 9 Tone frequency 01 67 02 69,3 03 71,9 04 74,4 05 77 06 79,7 07 82,5 08 85,4 09 88,5 10 91,5 11 94,8 12 97,4 13 100 14 103,5 15 107,2 16 110,9 17 114,8 18 118,8 19 123 20 127,3 21 131,8 22 136,5 23 141,3 24 146,2 25 151,4 26 156,7 27 162,2 28 167,9 29 173,8 30 179,9 31 186,2 32 192,8 33 203,5 34 240,7 35 210,7 36 218,1 37 225,7 38 229,1 39 233,6 40 241,8 41 250,3 42 254,1 10 CTCSS frequency 01 67 02 69,3 03 71,9 04 74,4 05 77 06 79,7 07 82,5 08 85,4 09 88,5 10 91,5 11 94,8 12 97,4 13 100 14 103,5 15 107,2 16 110,9 17 114,8 18 118,8 19 123 20 127,3 21 131,8 22 136,5 23 141,3 24 146,2 25 151,4 26 156,7 27 162,2 28 167,9 29 173,8 30 179,9 31 186,2 32 192,8 33 203,5 34 240,7 35 210,7 36 218,1 37 225,7 38 229,1 39 233,6 40 241,8 41 250,3 42 254,1 11 DCS frequency -> seite down 12 Offset frequency in Hz 8 digit 13 Mode 0 FM 1 NFM 2 AM */ } unsigned long long RIG_TMD710::get_vfoB () { cmd = "FO 1\r"; int ret = wait_char('\r', 49, 100, "get VFO", ASC); if (ret < 49) return freqB; gett("get_vfoB"); char frequency[11]; int p = 5; int n = 0; for (n = 0; n < 10; n++) frequency[n] = (replystr[p + n]); frequency[10] = '\0'; sscanf(frequency, "%lld", &freqB); char mode[2]; mode[0] = (replystr[47]); mode[1] = '\0'; modeB = atoi(mode); return freqB; } void RIG_TMD710::set_vfoA (unsigned long long freq) { cmd = "FO 0\r"; int ret = wait_char('\r', 49, 200, "get VFO A", ASC); if (ret < 49) return; cmd = replystr; char frequency[11]; snprintf(frequency,11, "%010llu", freq); int n = 0; int p = 5; for (n = 0; n < 10; n++) (cmd[p + n])= frequency[n]; wait_char('\r', 49, 200, "set frequency A", ASC); return; } void RIG_TMD710::set_vfoB (unsigned long long freq) { cmd = "FO 1\r"; int ret = wait_char('\r', 49, 200, "get VFO B", ASC); if (ret < 49) return; cmd = replystr; char frequency[11]; snprintf(frequency,11, "%010llu", freq); int n = 0; int p = 5; for (n = 0; n < 10; n++) (cmd[p + n])= frequency[n]; wait_char('\r', 49, 200, "set frequency B", ASC); return; } int RIG_TMD710::get_modetype(int n) { return TMD710_mode_type[n]; } void RIG_TMD710::set_modeA(int val) { // AM is not available at 430 MHz cmd = "FO 0\r"; int ret = wait_char('\r', 49, 200, "get VFO A", ASC); if (ret < 49) return; cmd = replystr; cmd[47] = val +'0'; wait_char('\r', 49, 200, "set mode A", ASC); return; } void RIG_TMD710::set_modeB(int val) { cmd = "FO 1\r"; int ret = wait_char('\r', 49, 200, "get VFO B", ASC); if (ret < 49) return; cmd = replystr; cmd[47] = val +'0'; wait_char('\r', 49, 200, "set mode B", ASC); return; } int RIG_TMD710::get_modeA() { //information is available with cyclic VFO readings return modeA; } int RIG_TMD710::get_modeB() { //information is available with cyclic VFO readings return modeB; } void RIG_TMD710::selectA() { cmd = "BC 0,0\r"; wait_char('\r', 3, 100, "set select A PTT/CTRL band", ASC); sett("selectA"); inuse = onA; } void RIG_TMD710::selectB() { cmd = "BC 1,1\r"; wait_char('\r', 3, 100, "set select B PTT/CTRL band", ASC); sett("selectB"); inuse = onB; } // Tranceiver PTT on/off void RIG_TMD710::set_PTT_control(int val) { if (val) sendCommand("TX\r"); else sendCommand("RX\r"); ptt_ = val; } int RIG_TMD710::get_PTT() { return ptt_; } // Transceiver power level double RIG_TMD710::get_power_control() { char seite[2]; cmd = "PC "; snprintf(seite,2, "%d", inuse); cmd += seite; cmd += '\r'; int ret = wait_char('\r', 8, 100, "get power", ASC); if (ret < 1) return false; gett("get_power_control"); int wert; int mtr = 30; wert = replystr[5] - '0'; switch (wert) { case 0: mtr = 50; break; case 1: mtr = 10; break; case 2: mtr = 5; break; } return mtr; } void RIG_TMD710::set_power_control(double val) { char mtrs = '2'; if (val >= 35) mtrs = '0'; if (val < 35) mtrs = '1'; if (val < 10) mtrs = '2'; char seite[2]; cmd = "PC "; snprintf(seite,2, "%d", inuse); cmd += seite; cmd += ','; cmd += mtrs; cmd += '\r'; wait_char('\r', 8, 100, "set power", ASC); } void RIG_TMD710::set_squelch(int val) { char hexstr[3] = "00"; char seite[2]; cmd = "SQ "; snprintf(seite,2, "%d", inuse); cmd += seite; cmd += ','; snprintf(hexstr,3,"%02X", val); cmd += hexstr; cmd += '\r'; wait_char('\r', 9, 100, "set power", ASC); } // needed for mingw compile which does not support the C++11 stoi template namespace stoi_fix { int stoi( const std::string& str, std::size_t* pos = 0, int base = 10 ) { const char* begin = str.c_str() ; char* end = 0 ; long value = std::strtol( begin, &end, base ) ; if (pos) *pos = end - begin ; return value ; } } int RIG_TMD710::get_squelch() { char seite[2]; cmd = "SQ "; snprintf(seite,2, "%d", inuse); cmd += seite; cmd += '\r'; int ret = wait_char('\r', 7, 100, "get squelch", ASC); if (ret < 1) return false; gett("get_squelch_control"); char hexstr[3]; hexstr[0]= replystr[3]; hexstr[1]= replystr[4]; hexstr[2]= '\0'; return stoi_fix::stoi (hexstr, 0, 16); } flrig-2.0.04/src/rigs/other/AOR5K.cxx0000664000175000017500000002715314502041135014047 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // AOR 5000 driver based on several other drivers as examples. // Written 05/2017 by Mario Lorenz, dl5mlo@amsat-dl.org #include "other/AOR5K.h" #include "status.h" #include "support.h" const char AOR5Kname_[] = "AOR-5000"; static std::vectorAOR5Kmodes_; static const char *vAOR5Kmodes_[] = { "FM", "AM", "LSB", "USB", "CW", "SAM", "SAL", "SAH"}; const char modenbr[] = { '0', '1', '2', '3', '4', '5', '6', '7' }; static const char AOR5K_mode_type[] = { 'U', 'U', 'L', 'U', 'U', 'U', 'U', 'L' }; static std::vectorAOR5K_IF_widths; static const char *vAOR5K_IF_widths[] = { "500", "3000", "6000", "15000", "40000", "110000", "220000"}; static int AOR5K_IF_bw_vals[] = { 0, 1, 2, 3, 4, 5, 6, WVALS_LIMIT}; static int def_mode_width[] = { 3, 2, 1, 1, 0, 1, 1, 1 }; static const char *AOR5K_SL_label = "HPF"; static std::vectorAOR5K_SL; static const char *vAOR5K_SL[] = { "50", "200", "300", "400" }; static const char *AOR5K_SH_label = "LPF"; static std::vectorAOR5K_SH; static const char *vAOR5K_SH[] = { "3000", "4000", "6000", "12000" }; static GUI aor5k_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // { (Fl_Widget *)btnAGC, 2, 145, 50 }, // { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, // { (Fl_Widget *)btnNotch, 214, 145, 50 }, // { (Fl_Widget *)sldrNOTCH, 266, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_AOR5K::RIG_AOR5K() { // base class values name_ = AOR5Kname_; modes_ = AOR5Kmodes_; bandwidths_ = AOR5K_IF_widths; bw_vals_ = AOR5K_IF_bw_vals; dsp_SL = AOR5K_SL; SL_tooltip = AOR5K_SL_label; SL_label = AOR5K_SL_label; dsp_SH = AOR5K_SH; SH_tooltip = AOR5K_SH_label; SH_label = AOR5K_SH_label; serial_baudrate = BR9600; widgets = aor5k_widgets; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; def_freq = freqA = freqB = 14070000ULL; def_mode = modeA = modeB = 1; def_bw = bwA = bwB = 1; has_volume_control = has_mode_control = has_bandwidth_control = has_noise_control = has_attenuator_control = has_agc_control = has_smeter = has_agc_level = has_vfoAB = can_change_alt_vfo = has_dsp_controls = true; has_notch_control = has_sql_control = has_xcvr_auto_on_off = has_a2b = has_b2a = has_vfo_adj = has_rit = has_xit = has_bfo = has_power_control = has_micgain_control = has_mic_line_control = has_auto_notch = has_noise_reduction_control = has_noise_reduction = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = has_swr_control = has_alc_control = has_rf_control = has_power_out = has_split = has_split_AB = has_data_port = has_getvfoAorB = has_extras = has_nb_level = has_cw_wpm = has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_break_in = has_cw_delay = has_cw_weight = has_cw_keyer = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_compression = has_compON = use_line_in = has_bpf_center = has_special = has_ext_tuner = has_band_selection = false; precision = 1; ndigits = 10; atten_level = 0; agcval = 0; } int RIG_AOR5K::adjust_bandwidth(int m) { return def_mode_width[m]; } int RIG_AOR5K::def_bandwidth(int m) { return def_mode_width[m]; } #define AOR5K_WAIT_TIME 800 void RIG_AOR5K::initialize() { VECTOR (AOR5Kmodes_, vAOR5Kmodes_); VECTOR (AOR5K_IF_widths, vAOR5K_IF_widths); VECTOR (AOR5K_SL, vAOR5K_SL); VECTOR (AOR5K_SH, vAOR5K_SH); modes_ = AOR5Kmodes_; bandwidths_ = AOR5K_IF_widths; bw_vals_ = AOR5K_IF_bw_vals; dsp_SL = AOR5K_SL; dsp_SH = AOR5K_SH; aor5k_widgets[0].W = btnVol; aor5k_widgets[1].W = sldrVOLUME; // aor5k_widgets[2].W = btnAGC; // aor5k_widgets[3].W = sldrSQUELCH; // aor5k_widgets[4].W = btnNotch; // aor5k_widgets[5].W = sldrNOTCH; // aor5k_widgets[6].W = sldrPOWER; // cmd = "AI0;"; // disable auto-info // sendCommand(cmd); // showresp(INFO, ASC, "disable auto-info", cmd, replystr); get_vfoA(); get_modeA(); get_bwA(); get_vfoB(); get_modeB(); get_bwB(); set_split(false); // normal ops } void RIG_AOR5K::shutdown() { } void RIG_AOR5K::selectA() { cmd = "VE\r"; wait_char('\r', 1, AOR5K_WAIT_TIME, "Select VFO A", ASC); } void RIG_AOR5K::selectB() { cmd = "VB\r"; wait_char('\r', 1, AOR5K_WAIT_TIME, "Select VFO B", ASC); } bool RIG_AOR5K::check() { cmd = "RX\r"; int ret = wait_char('\r', 34, AOR5K_WAIT_TIME, "get vfo A", ASC); if (ret < 34) return false; return true; } unsigned long long RIG_AOR5K::get_vfoA () { cmd = "RX\r"; int ret = wait_char('\r', 34, AOR5K_WAIT_TIME, "get vfo A", ASC); if (ret < 34) return freqA; size_t p = replystr.rfind("RF"); if (p == std::string::npos) return freqA; if (p < 3) return freqA; if (replystr[p-2] =='E') { // VFO A is active. Instead of A we use E unsigned long long f = 0; for (size_t n = 2; n < 12; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; } return freqA; } void RIG_AOR5K::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "VE0000000000\r"; for (int i = 11; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } wait_char('\r', 1, AOR5K_WAIT_TIME, "set VFO A", ASC); } unsigned long long RIG_AOR5K::get_vfoB () { cmd = "RX\r"; int ret = wait_char('\r', 34, AOR5K_WAIT_TIME, "get vfo B", ASC); if (ret < 34) return freqB; size_t p = replystr.rfind("RF"); if (p == std::string::npos) return freqB; if (p < 3) return freqB; if (replystr[p-2] == 'B') { // VFO B active unsigned long long f = 0; for (size_t n = 2; n < 12; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; } return freqB; } void RIG_AOR5K::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "VB0000000000\r"; for (int i = 11; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } wait_char('\r', 1, AOR5K_WAIT_TIME, "set VFO B", ASC); } // Volume control void RIG_AOR5K::set_volume_control(int val) { cmd = "VL000\r"; for (int i = 4; i > 1; i--) { cmd[i] += val % 10; val /= 10; } wait_char('\r', 1, AOR5K_WAIT_TIME, "set Vol", ASC); } int RIG_AOR5K::get_volume_control() { cmd = "VL\r"; int ret = wait_char('\r', 5, AOR5K_WAIT_TIME, "get volume", ASC); if (ret < 5) return progStatus.volume; size_t p = replystr.rfind("VL"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; int v = atoi(&replystr[p + 2]); return v; } void RIG_AOR5K::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } void RIG_AOR5K::set_modeA(int val) { modeA = val; cmd = "MD0\r"; cmd[2] = modenbr[val]; wait_char('\r', 1, AOR5K_WAIT_TIME, "set mode A", ASC); //sendCommand(cmd); //showresp(INFO, ASC, "set mode A", cmd, replystr); //cmd="RX\r"; } int RIG_AOR5K::get_modeA() { cmd = "MD\r"; int ret = wait_char('\r', 4, AOR5K_WAIT_TIME, "get mode A", ASC); if (ret < 4) return modeA; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return modeA; int md = replystr[p + 2] - '0'; if (md > 8) md=0; return (modeA = md); } void RIG_AOR5K::set_modeB(int val) { modeB = val; set_modeA(val); // Fake ModeB -- mode setting is not per VFO } int RIG_AOR5K::get_modeB() { // Fake ModeB return (modeB = get_modeA()); } int RIG_AOR5K::get_modetype(int n) { return AOR5K_mode_type[n]; } int RIG_AOR5K::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 22; case 22: return 0; } return 0; } void RIG_AOR5K::set_attenuator(int val) { atten_level = val; switch (atten_level) { case 1: cmd = "AT1\r"; break; case 2: cmd = "AT2\r"; break; case 22: cmd = "ATF\r"; break; case 0: default: cmd = "AT0\r"; break; } wait_char('\r', 1, AOR5K_WAIT_TIME, "set attenuator", ASC); } int RIG_AOR5K::get_attenuator() { cmd = "AT\r"; int ret = wait_char('\r', 4, AOR5K_WAIT_TIME, "get ATT", ASC); if (ret < 4) return atten_level; size_t p = replystr.rfind("AT"); if (p == std::string::npos) return atten_level; if (replystr[p+2] == '1') atten_level = 22; else atten_level = replystr[p + 3] - '0'; return atten_level; } const char *RIG_AOR5K::ATT_label() { switch (atten_level) { default: case 0: return "0 dB"; break; case 1: return "10 dB"; break; case 2: return "20 dB"; break; case 22: return "AUTO"; break; } return "0 dB"; } //SM $ (S-meter Read; GET only) int RIG_AOR5K::get_smeter() { cmd = "LM\r"; int ret = wait_char('\r', 7, AOR5K_WAIT_TIME, "get Smeter", ASC); if (ret < 6) return 0; size_t p = replystr.rfind("LM"); if (p == std::string::npos) return 0; replystr[p+5] ='\0'; int mtr; sscanf(replystr.c_str(), "LM%d;", &mtr); return int(floor(float(mtr)/2.55)); // 0...100 is legal range } void RIG_AOR5K::set_noise(bool on) { if (on) cmd = "NB1\r"; else cmd = "NB0\r"; wait_char('\r', 1, AOR5K_WAIT_TIME, "set Noise Blanker", ASC); } int RIG_AOR5K::get_noise() { cmd = "NB\r"; int ret = wait_char('\r', 4, AOR5K_WAIT_TIME, "get Noise Blanker", ASC); if (ret < 4) return progStatus.noise; size_t p = replystr.rfind("NB"); if (p == std::string::npos) return progStatus.noise; return (replystr[p+2] == '1' ? 1 : 0); } // FW $ (Filter Bandwidth and Number; GET/SET) // K3 Extended SET/RSP format (K31): FWxxxx; where xxxx is 0-9999, the bandwidth // in 10-Hz units. May be quantized and/or range limited based on the present // operating mode. void RIG_AOR5K::set_bwA(int val) { cmd = "BW0\r"; bwA = val; cmd[2] = '0' + val; wait_char('\r', 4, AOR5K_WAIT_TIME, "set BW A", ASC); } int RIG_AOR5K::get_bwA() { cmd = "BW\r"; int ret = wait_char('\r', 4, AOR5K_WAIT_TIME, "get bandwidth A", ASC); if (ret < 4) return bwA; size_t p = replystr.rfind("BW"); if (p == std::string::npos) return bwA; return (bwA = replystr[p+2] - '0'); } void RIG_AOR5K::set_bwB(int val) { bwB = val; set_bwA(val); } int RIG_AOR5K::get_bwB() { return (bwB = get_bwA()); } int RIG_AOR5K::get_agc() { cmd = "AC\r"; int ret = wait_char('\r', 4, AOR5K_WAIT_TIME, "get AGC", ASC); if (ret < 4) return agcval; size_t p = replystr.rfind("AC"); if (p == std::string::npos) return agcval; int agci = replystr[p+2] - '0'; switch (agci) { case 0: agcval = 1; break; case 1: agcval = 2; break; case 2: agcval = 3 ; break; case 22: agcval = 0; break; } return agcval; } int RIG_AOR5K::incr_agc() { agcval++; if (agcval >= 4) agcval = 0; switch(agcval) { case 0: cmd = "ACF\r"; break; case 1: cmd = "AC0\r"; break; case 2: cmd = "AC1\r"; break; case 3: cmd = "AC2\r"; break; } wait_char('\r', 1, AOR5K_WAIT_TIME, "set AGC", ASC); return agcval; } static const char *agcstrs[] = {"AGC", "AGF" , "AGM", "AGS"}; const char* RIG_AOR5K::agc_label() { return agcstrs[agcval]; } int RIG_AOR5K::agc_val() { return agcval; } flrig-2.0.04/src/rigs/other/trusdx.cxx0000664000175000017500000001057514502041135014557 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2022 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // with this program. If not, see . // ---------------------------------------------------------------------------- #include "other/trusdx.h" #include "support.h" static const char TRUSDXname_[] = "truSDX"; enum { SDR2_LSB, SDR2_USB, SDR2_CW, SDR2_FM, SDR2_AM }; static std::vectorTRUSDXmodes_; static const char *vTRUSDXmodes_[] = { "LSB", "USB", "CW", "FM", "AM"}; static const char TRUSDX_mode_type[] = { 'L', 'U', 'U', 'U', 'U' }; RIG_TRUSDX::RIG_TRUSDX() { // base class values name_ = TRUSDXname_; modes_ = TRUSDXmodes_; bandwidths_ = vNOBWS; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = 1; A.freq = 14070000ULL; has_mode_control = true; has_ptt_control = true; precision = 1; ndigits = 8; } static int ret = 0; void RIG_TRUSDX::initialize() { VECTOR (TRUSDXmodes_, vTRUSDXmodes_); modes_ = TRUSDXmodes_; bandwidths_ = vNOBWS; } void RIG_TRUSDX::shutdown() { } bool RIG_TRUSDX::check () { MilliSleep(2000); // xcvr needs time to wake up cmd = "ID;"; get_trace(1, "check()"); ret = wait_char(';', 6, 100, "get ID", ASC); gett(""); if (replystr.find("ID020;") != std::string::npos) return true; return false; } /* ======================================================================== frequency & mode data are contained in the IF; response 0 1 2 3 012345678901234567890123456789012345678 IFaaaaaaaaaaaXXXXXbbbbbcdXeefgHJKLMMX; IFggmmmkkkhhh00000+0000000000d0000000; IF0001407000000000+000000000020000200; where: aaaaaaaaaaa => decimal value of vfo frequency bbbbb => rit/xit frequency c => rit off/on d => xit off/on e => memory channel f => tx/rx g => mode H => function J => scan off/on K => split off /on L => tone off /on M => tone number X => unused characters d = Value as defined in MD Command ======================================================================== */ void RIG_TRUSDX::get_IF() { cmd = "IF;"; get_trace(1, "get_IF()"); wait_char(';', 38, 100, "get IF", ASC); // This function called for its side effect, not its return. gett(""); size_t p = replystr.rfind("IF"); A.imode = replystr[p + 29] - '1'; return; } unsigned long long RIG_TRUSDX::get_vfoA () { cmd = "FA;"; get_trace(1, "get_vfoA()"); if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; gett(""); size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } return A.freq; } void RIG_TRUSDX::set_vfoA (unsigned long long freq) { A.freq = freq; set_trace(1, "set_vfoA(...)"); cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); sett(""); } int RIG_TRUSDX::get_modeA() { cmd = "MD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 4, 100, "get modeA", ASC); gett(""); if (ret < 4) return A.imode; size_t p = replystr.rfind("MD"); A.imode = replystr[p + 2] - '1'; return A.imode; } void RIG_TRUSDX::set_modeA(int val) { A.imode = val; cmd = "MD"; cmd += '1' + val; cmd += ';'; set_trace(1, "set_modeA"); sendCommand(cmd); sett(""); } int RIG_TRUSDX::get_modetype(int n) { return TRUSDX_mode_type[n]; } void RIG_TRUSDX::set_PTT_control(int val) { set_trace(3, "set_PTT(", (val ? "ON" : "OFF"), ")"); if (val) sendCommand("TX;"); else sendCommand("RX;"); sett(""); ptt_ = val; } flrig-2.0.04/src/rigs/other/tcisdr.cxx0000664000175000017500000006303714502041135014517 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "other/tcisdr.h" #include "support.h" static const char TCI_SUNDX_name_[] = "SunSDR2-DX/TCI"; static const char TCI_SUNPRO_name_[] = "SunSDR2-Pro/TCI"; static std::vectorTCI_modes; static const char *vTCI_modes[] = { "AM", "SAM", "DSB", "LSB", "USB", "CW", "NFM", "DIGL", "DIGU", "WFM", "DRM" }; static const char TCI_mode_type[] = { 'U', 'U', 'U', 'L', 'U', 'U', 'U', 'L', 'U', 'U', 'U' }; // pairs set up for a nominal 700 Hz CW note // default is 800 Hz bandwidth static std::vectorTCI_CWwidths; static const char *vTCI_CWwidths[] = { "50", "100", "250", "400", "500", "650", "800", "1000", "1500", "2000", "3000", "4000"}; static std::string TCI_CWpairs[] = { "-25,25;", "-50,50;", "-125,125;", "-200,200;", "-250,250;", "-325,325;", "-400,400;", "-500,500;", " -600,900;", "-600,1400;", "-600,2400;", "-600, 3400;" }; static int tci_nbr_cw = 12; static int tci_def_cw = 6; static int tci_cw_tone = 0; static std::vectorTCI_AMwidths; static const char *vTCI_AMwidths[] = { "3000", "3500", "4000", "5000", "6000", "8000", "10000", "12000", "16000" }; static std::string TCI_AMpairs[] = { "-1500,1500;", "-1750,1750;", "-2000,2000;", "-2500,2500;", "-3000,3000;", "-4000,4000;", "-5000,5000;", "-6000,6000;", "-8000,8000;", "" }; static int tci_nbr_am = 9; static int tci_def_am = 4; static std::vectorTCI_DSBwidths; static const char *vTCI_DSBwidths[] = { "3000", "3500", "4000", "5000", "6000", "8000", "10000", "12000", "16000" }; static std::string TCI_DSBpairs[] = { "-1500,1500;", "-1750,1750;", "-2000,2000;", "-2500,2500;", "-3000,3000;", "-4000,4000;", "-5000,5000;", "-6000,6000;", "-8000,8000;", "" }; static int tci_nbr_dsb = 9; static int tci_def_dsb = 4; static std::vectorTCI_LSBwidths; static const char *vTCI_LSBwidths[] = { "100", "200", "400", "800", "1000", "1500", "1800", "2000", "2200", "2500", "2700", "2900", "3000", "3300", "3500" }; static std::string TCI_LSBpairs[] = { "-1550,-1450;", "-1600,-1400;", "-1700,-1300;", "-1900,-1100;", "-2000,-1000;", "-2250,-750;", "-1800,-70;", "-2000,-70;", "-2200,-70;", "-2500,-70;", "-2700,-70;", "-2900,-70;", "-3000,-70;", "-3300,-70;", "-3500,-70;", "" }; static int tci_nbr_lsb = 15; static int tci_def_lsb = 12; static int tci_centers[] = { 500, 550, 600, 650, 700, 750, 800, 900, 1000, 1250, 1500, 1750, 2000, 2250, 2500 }; std::vectorTCI_centers; static const char *vTCI_centers[] = { "500", "550", "600", "650", "700", "750", "800", "900", "1000", "1250", "1500", "1750", "2000", "2250", "2500" }; int tci_nbr_centers = 15; int tci_center = -1; //1500 Hz default static std::vectorTCI_USBwidths; static const char *vTCI_USBwidths[] = { "100", "200", "400", "800", "1000", "1500", "1800", "2000", "2200", "2500", "2700", "2900", "3000", "3300", "3500" }; static std::string TCI_USBpairs[] = { "1450,1550;", "1400,1600;", "1300,1700;", "1100,1900;", "1000,2000;", " 750,2250;", " 70,1800;", " 70,2000;", " 70,2200;", " 70,2500;", " 70,2700;", " 70,2900;", " 70,3000;", " 70,3300;", " 70,3500;", "" }; static int tci_nbr_usb = 15; static int tci_def_usb = 12; static std::vectorTCI_NFMwidths; static const char *vTCI_NFMwidths[] = { "3000", "3500", "4000", "5000", "6000", "8000", "10000", "12000", "16000" }; static std::string TCI_NFMpairs[] = { "-1500,1500;", "-1750,1750;", "-2000,2000;", "-2500,2500;", "-3000,3000;", "-4000,4000;", "-5000,5000;", "-6000,6000;", "-8000,8000;", "" }; static int tci_nbr_nfm = 9; static int tci_def_nfm = 3; static std::vectorTCI_WFMwidths; static const char *vTCI_WFMwidths[] = { "WIDE" }; static std::string TCI_WFMpairs[] = { "-18000,18000;", "" }; static int tci_nbr_wfm = 1; static int tci_def_wfm = 0; static std::vectorTCI_DIGLwidths; static const char *vTCI_DIGLwidths[] = { "1800", "2000", "2200", "2500", "2700", "2900", "3000", "3300", "3500" }; static std::string TCI_DIGLpairs[] = { "-1800,-70;", "-2000,-70;", "-2200,-70;", "-2500,-70;", "-2700,-70;", "-2900,-70;", "-3000,-70;", "-3300,-70;", "-3500,-70;", "" }; static int tci_nbr_digl = 9; static int tci_def_digl = 1; static std::vectorTCI_DIGUwidths; static const char *vTCI_DIGUwidths[] = { "1800", "2000", "2200", "2500", "2700", "2900", "3000", "3300", "3500" }; static std::string TCI_DIGUpairs[] = { "70,1800;", "70,2000;", "70,2200;", "70,2500;", "70,2700;", "70,2900;", "70,3000;", "70,3300;", "70,3500;", "" }; static int tci_nbr_digu = 9; static int tci_def_digu = 1; static std::vectorTCI_DRMwidths; static const char *vTCI_DRMwidths[] = { "FIXED" }; static std::string TCI_DRMpairs[] = { "-5000,5000;", "" }; static int tci_nbr_drm = 1; static int tci_def_drm = 0; static int agcval = 1; void tci_adjust_widths() { char szpairs[20]; int width; int lo, hi; int tci_freq; if (tci_center != progStatus.tci_center) { tci_center = progStatus.tci_center; tci_freq = tci_centers[tci_center]; for (int i = 0; i < tci_nbr_usb; i++ ) { width = atol(TCI_USBwidths[i].c_str())/2; lo = tci_freq - width; hi = tci_freq + width; if (lo < 0) { hi -= lo; lo = 0; } snprintf(szpairs, sizeof(szpairs), "%d,%d;", lo, hi); TCI_USBpairs[i] = szpairs; } for (int i = 0; i < tci_nbr_lsb; i++ ) { width = atol(TCI_LSBwidths[i].c_str())/2; lo = -(tci_freq + width); hi = -(tci_freq - width); if (hi > 0) { lo -= hi; hi = 0; } snprintf(szpairs, sizeof(szpairs), "%d,%d;", lo, hi); TCI_LSBpairs[i] = szpairs; } } if (tci_cw_tone != progStatus.cw_spot_tone) { tci_cw_tone = progStatus.cw_spot_tone; for (int i = 0; i < 11; i++) { width = atol(TCI_CWwidths[i].c_str()); lo = - width / 2; hi = width / 2; if (width/2 > tci_cw_tone) { lo = -(tci_cw_tone - 100); hi = width + 100 - tci_cw_tone; } snprintf(szpairs, sizeof(szpairs), "%d,%d;", lo, hi); TCI_CWpairs[i] = szpairs; } } } /* int match( std::string &needle, const char **haystack) { int n = 0; while (*haystack != NULL) { if (needle == *haystack) return n; if (needle < *haystack) return n - 1; ++n; ++haystack; } return -1; } */ static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 2 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 2 { (Fl_Widget *)sldrPOWER, 264, 125, 156 }, // 0 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_TCI_SDR::initialize() { VECTOR (TCI_modes, vTCI_modes); VECTOR (TCI_CWwidths, vTCI_CWwidths); VECTOR (TCI_AMwidths, vTCI_AMwidths); VECTOR (TCI_DSBwidths, vTCI_DSBwidths); VECTOR (TCI_LSBwidths, vTCI_LSBwidths); VECTOR (TCI_centers, vTCI_centers); VECTOR (TCI_USBwidths, vTCI_USBwidths); VECTOR (TCI_NFMwidths, vTCI_NFMwidths); VECTOR (TCI_WFMwidths, vTCI_WFMwidths); VECTOR (TCI_DIGLwidths, vTCI_DIGLwidths); VECTOR (TCI_DIGUwidths, vTCI_DIGUwidths); VECTOR (TCI_DRMwidths, vTCI_DRMwidths); modes_ = TCI_modes; _mode_type = TCI_mode_type; bandwidths_ = TCI_USBwidths; bw_vals_ = NULL; tci_open(progStatus.tci_addr, progStatus.tci_port); rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrPOWER; tci_center = progStatus.tci_center; tci_adjust_widths(); } void RIG_TCI_SDR::shutdown() { tci_trace(1, "RIG_TCI_SDR shutdown()"); tci_close(); } bool RIG_TCI_SDR::check() { return tci_running(); } RIG_TCI_SDR::RIG_TCI_SDR() { // base class values name_ = TCI_SUNDX_name_; modes_ = TCI_modes; _mode_type = TCI_mode_type; bandwidths_ = TCI_USBwidths; bw_vals_ = NULL; io_class = TCI; widgets = rig_widgets; serial_baudrate = BR115200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.freq = 7070000ULL; A.imode = TCI_CW; A.iBW = 6; B.freq = A.freq + 500; B.imode = B.imode; B.iBW = A.iBW; can_change_alt_vfo = true; has_extras = true; // has_noise_reduction = // has_noise_reduction_control = // has_noise_control = // has_sql_control = has_split = true; has_split_AB = true; // has_micgain_control = true; has_swr_control = true; has_power_out = true; has_smeter = true; has_attenuator_control = true; has_preamp_control = true; has_mode_control = true; has_bandwidth_control = true; has_volume_control = true; has_power_control = true; has_tune_control = true; has_ptt_control = true; precision = 1; ndigits = 8; _noise_reduction_level = 0; _nrval1 = 2; _nrval2 = 4; preamp_level = atten_level = 0; sdrtype = UNK; slice = 0; } const char * RIG_TCI_SDR::get_bwname_(int n, int md) { try { switch (md) { case TCI_AM: return TCI_AMwidths.at(n).c_str(); case TCI_SAM: return TCI_AMwidths.at(n).c_str(); case TCI_DSB: return TCI_DSBwidths.at(n).c_str(); case TCI_LSB: return TCI_LSBwidths.at(n).c_str(); case TCI_USB: return TCI_USBwidths.at(n).c_str(); case TCI_CW: return TCI_CWwidths.at(n).c_str(); case TCI_NFM: return TCI_NFMwidths.at(n).c_str(); case TCI_DIGL: return TCI_DIGLwidths.at(n).c_str(); case TCI_DIGU: return TCI_DIGUwidths.at(n).c_str(); case TCI_WFM: return TCI_WFMwidths.at(n).c_str(); case TCI_DRM: return TCI_DRMwidths.at(n).c_str(); default: return TCI_USBwidths.at(n).c_str(); } } catch (const std::exception& e) { std::cout << e.what() << '\n'; } return "UNKNOWN"; } // responds in dBm, +10; -115 // S units: 80+; S0- // s0 == -127 .... 0 // S6 == -90 .... // S9 == -73 .... 50 // +60 == -14 .... 100 int RIG_TCI_SDR::get_smeter() { std::string tcicmd = "rx_smeter:"; int mtr = 0; tcicmd.append( slice ? "1," : "0,"); tcicmd.append( (inuse == onA) ? "0;" : "1;"); tci_send(tcicmd); MilliSleep(10); if (slice) mtr = (inuse == onA) ? slice_1.A.smeter : slice_1.B.smeter; else mtr = (inuse == onA) ? slice_0.A.smeter : slice_0.B.smeter; mtr += 127; mtr *= 100; mtr /= 113; if (mtr < 0) mtr = 0; if (mtr > 100) mtr = 100; return mtr; } int RIG_TCI_SDR::get_power_out() { int mtr = slice ? slice_1.tx_power : slice_0.tx_power; return mtr; } int RIG_TCI_SDR::get_swr() { int mtr = slice ? slice_1.tx_swr : slice_0.tx_swr; return (mtr - 1) * 25; } int RIG_TCI_SDR::set_widths(int mode) { int bw = 0; switch (mode) { case TCI_AM: bandwidths_ = TCI_AMwidths; bw = tci_def_am; break; case TCI_SAM: bandwidths_ = TCI_AMwidths; bw = tci_def_am; break; case TCI_DSB: bandwidths_ = TCI_DSBwidths; bw = tci_def_dsb; break; case TCI_LSB: bandwidths_ = TCI_LSBwidths; bw = tci_def_lsb; break; case TCI_USB: bandwidths_ = TCI_USBwidths; bw = tci_def_usb; break; case TCI_CW: bandwidths_ = TCI_CWwidths; bw = tci_def_cw; break; case TCI_NFM: bandwidths_ = TCI_NFMwidths; bw = tci_def_nfm; break; case TCI_DIGL: bandwidths_ = TCI_DIGLwidths; bw = tci_def_digl; break; case TCI_DIGU: bandwidths_ = TCI_DIGUwidths; bw = tci_def_digu; break; case TCI_WFM: bandwidths_ = TCI_WFMwidths; bw = tci_def_wfm; break; case TCI_DRM: bandwidths_ = TCI_DRMwidths; bw = tci_def_drm; break; default: bandwidths_ = TCI_USBwidths; bw = tci_def_usb; break; } return bw; } std::vector& RIG_TCI_SDR::bwtable(int md) { switch (md) { case TCI_AM: bandwidths_ = TCI_AMwidths; break; case TCI_SAM: bandwidths_ = TCI_AMwidths; break; case TCI_DSB: bandwidths_ = TCI_DSBwidths; break; case TCI_LSB: bandwidths_ = TCI_LSBwidths; break; case TCI_USB: bandwidths_ = TCI_USBwidths; break; case TCI_CW: bandwidths_ = TCI_CWwidths; break; case TCI_NFM: bandwidths_ = TCI_NFMwidths; break; case TCI_DIGL: bandwidths_ = TCI_DIGLwidths; break; case TCI_DIGU: bandwidths_ = TCI_DIGUwidths; break; case TCI_WFM: bandwidths_ = TCI_WFMwidths; break; case TCI_DRM: bandwidths_ = TCI_DRMwidths; break; default: bandwidths_ = TCI_USBwidths; break; } return bandwidths_; } #define WAIT_ON_MODE 10 int wait_on_mode = 0; void RIG_TCI_SDR::set_modeA(int mode) { try { std::string tcicmd = slice ? "modulation:1," : "modulation:0,"; tcicmd.append(TCI_modes.at(mode)).append(";"); tci_send(tcicmd); A.imode = mode; bwtable(A.imode); wait_on_mode = WAIT_ON_MODE; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_TCI_SDR::get_modeA() { if (--wait_on_mode > 0) return A.imode; std::string tcicmd = slice ? slice_1.A.mod : slice_0.A.mod; try { size_t n = 0; for (n = 0; n < TCI_modes.size(); n++) { if (tcicmd.find(TCI_modes.at(n)) != std::string::npos) { if (n != (size_t)A.imode) { A.imode = n; A.iBW = set_widths(n); } return A.imode; } } } catch (const std::exception& e) { std::cout << e.what() << '\n'; } return A.imode; } // set modeB is identical to set modeA as the ExpertSDR2/3 does not differentiate // between the two void RIG_TCI_SDR::set_modeB(int mode) { try { std::string tcicmd = slice ? "MODULATION:1," : "MODULATION:0,"; tcicmd.append(TCI_modes.at(mode)).append(";"); tci_send(tcicmd); B.imode = mode; bwtable(B.imode); wait_on_mode = WAIT_ON_MODE; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_TCI_SDR::get_modeB() { if (--wait_on_mode > 0) return B.imode; std::string tcicmd = slice ? slice_1.B.mod : slice_0.B.mod; try { size_t n = 0; for (n = 0; n < TCI_modes.size(); n++) { if (tcicmd.find(TCI_modes.at(n)) != std::string::npos) { if (n != (size_t)A.imode) { B.imode = n; B.iBW = set_widths(n); } return B.imode; } } } catch (const std::exception& e) { std::cout << e.what() << '\n'; } return B.imode; } int RIG_TCI_SDR::get_modetype(int n) { return _mode_type[n]; } void RIG_TCI_SDR::set_bwA(int val) { tci_adjust_widths(); std::string tcicmd = slice ? "rx_filter_band:1," : "rx_filter_band:0,"; std::string pairs; switch (A.imode) { case TCI_AM: pairs = TCI_AMpairs[val < tci_nbr_am ? val : tci_def_am]; break; case TCI_SAM: pairs = TCI_AMpairs[val < tci_nbr_am ? val : tci_def_am]; break; case TCI_DSB: pairs = TCI_DSBpairs[val < tci_nbr_dsb ? val : tci_def_dsb]; break; case TCI_LSB: pairs = TCI_LSBpairs[val < tci_nbr_lsb ? val : tci_def_lsb]; break; case TCI_USB: pairs = TCI_USBpairs[val < tci_nbr_usb ? val : tci_def_usb]; break; case TCI_CW: pairs = TCI_CWpairs[val < tci_nbr_cw ? val : tci_def_cw]; break; case TCI_NFM: pairs = TCI_NFMpairs[val < tci_nbr_nfm ? val : tci_def_nfm]; break; case TCI_DIGL: pairs = TCI_DIGLpairs[val < tci_nbr_digl ? val : tci_def_digl]; break; case TCI_DIGU: pairs = TCI_DIGUpairs[val < tci_nbr_digu ? val : tci_def_digu]; break; case TCI_WFM: pairs = TCI_WFMpairs[val < tci_nbr_wfm ? val : tci_def_wfm]; break; case TCI_DRM: pairs = TCI_DRMpairs[val < tci_nbr_drm ? val : tci_def_drm]; break; default: pairs = TCI_USBpairs[val < tci_nbr_usb ? val : tci_def_usb]; break; } tcicmd.append(pairs); A.iBW = val; if (slice) slice_1.A.bw = pairs; else slice_0.A.bw = pairs; tci_send(tcicmd); FilterInner_A = atoi(pairs.c_str()); size_t pos = pairs.find(","); if (pos != std::string::npos) pairs.erase(0,pos); FilterOuter_A = atoi(pairs.c_str()); } int RIG_TCI_SDR::get_bwA() { std::string *tbl = TCI_USBpairs; std::string sbw = slice ? slice_1.A.bw : slice_0.A.bw; switch (A.imode) { case TCI_AM: tbl = TCI_AMpairs; break; case TCI_SAM: tbl = TCI_AMpairs; break; case TCI_DSB: tbl = TCI_DSBpairs; break; case TCI_LSB: tbl = TCI_LSBpairs; break; case TCI_USB: tbl = TCI_USBpairs; break; case TCI_CW: tbl = TCI_CWpairs; break; case TCI_NFM: tbl = TCI_NFMpairs; break; case TCI_DIGL: tbl = TCI_DIGLpairs; break; case TCI_DIGU: tbl = TCI_DIGUpairs; break; case TCI_WFM: tbl = TCI_WFMpairs; break; case TCI_DRM: tbl = TCI_DRMpairs; break; default: tbl = TCI_USBpairs; break; } int n = 0; while (!tbl[n].empty()) { if (sbw.find(tbl[n]) != std::string::npos) break; n++; } if (!tbl[n].empty()) A.iBW = n; FilterInner_A = atoi(sbw.c_str()); size_t pos = sbw.find(","); if (pos != std::string::npos) { sbw.erase(0, pos + 1); FilterOuter_A = atoi(sbw.c_str()); } return A.iBW; } // set bwB is identical to set bwA as the ExpertSDR2/3 does not differentiate // between the two void RIG_TCI_SDR::set_bwB(int val) { tci_adjust_widths(); std::string tcicmd = slice ? "rx_filter_band:1," : "rx_filter_band:0,"; std::string pairs; switch (B.imode) { case TCI_AM: pairs = TCI_AMpairs[val < tci_nbr_am ? val : tci_def_am]; break; case TCI_SAM: pairs = TCI_AMpairs[val < tci_nbr_am ? val : tci_def_am]; break; case TCI_DSB: pairs = TCI_DSBpairs[val < tci_nbr_dsb ? val : tci_def_dsb]; break; case TCI_LSB: pairs = TCI_LSBpairs[val < tci_nbr_lsb ? val : tci_def_lsb]; break; case TCI_USB: pairs = TCI_USBpairs[val < tci_nbr_usb ? val : tci_def_usb]; break; case TCI_CW: pairs = TCI_CWpairs[val < tci_nbr_cw ? val : tci_def_cw]; break; case TCI_NFM: pairs = TCI_NFMpairs[val < tci_nbr_nfm ? val : tci_def_nfm]; break; case TCI_DIGL: pairs = TCI_DIGLpairs[val < tci_nbr_digl ? val : tci_def_digl]; break; case TCI_DIGU: pairs = TCI_DIGUpairs[val < tci_nbr_digu ? val : tci_def_digu]; break; case TCI_WFM: pairs = TCI_WFMpairs[val < tci_nbr_wfm ? val : tci_def_wfm]; break; case TCI_DRM: pairs = TCI_DRMpairs[val < tci_nbr_drm ? val : tci_def_drm]; break; default: pairs = TCI_USBpairs[val < tci_nbr_usb ? val : tci_def_usb]; break; } tcicmd.append(pairs); B.iBW = val; if (slice) slice_1.B.bw = pairs; else slice_0.B.bw = pairs; tci_send(tcicmd); FilterInner_B = atoi(pairs.c_str()); size_t pos = pairs.find(","); if (pos != std::string::npos) pairs.erase(0,pos); FilterOuter_B = atoi(pairs.c_str()); } int RIG_TCI_SDR::get_bwB() { std::string *tbl = TCI_USBpairs; std::string sbw = slice ? slice_1.B.bw : slice_0.B.bw; switch (B.imode) { case TCI_AM: tbl = TCI_AMpairs; break; case TCI_SAM: tbl = TCI_AMpairs; break; case TCI_DSB: tbl = TCI_DSBpairs; break; case TCI_LSB: tbl = TCI_LSBpairs; break; case TCI_USB: tbl = TCI_USBpairs; break; case TCI_CW: tbl = TCI_CWpairs; break; case TCI_NFM: tbl = TCI_NFMpairs; break; case TCI_DIGL: tbl = TCI_DIGLpairs; break; case TCI_DIGU: tbl = TCI_DIGUpairs; break; case TCI_WFM: tbl = TCI_WFMpairs; break; case TCI_DRM: tbl = TCI_DRMpairs; break; default: tbl = TCI_USBpairs; break; } int n = 0; while (!tbl[n].empty()) { if (sbw.find(tbl[n]) != std::string::npos) break; n++; } if (!tbl[n].empty()) B.iBW = n; FilterInner_B = atoi(sbw.c_str()); size_t pos = sbw.find(","); if (pos != std::string::npos) sbw.erase(0,pos + 1); FilterOuter_B = atoi(sbw.c_str()); return B.iBW; } int RIG_TCI_SDR::def_bandwidth(int val) { int defbw = 0; switch (A.imode) { case TCI_AM: defbw = tci_def_am; break; case TCI_SAM: defbw = tci_def_am; break; case TCI_DSB: defbw = tci_def_dsb; break; case TCI_LSB: defbw = tci_def_lsb; break; case TCI_USB: defbw = tci_def_usb; break; case TCI_CW: defbw = tci_def_cw; break; case TCI_NFM: defbw = tci_def_nfm; break; case TCI_DIGL: defbw = tci_def_digl; break; case TCI_DIGU: defbw = tci_def_digu; break; case TCI_WFM: defbw = tci_def_wfm; break; case TCI_DRM: defbw = tci_def_drm; break; default: defbw = 0; break; } return defbw; } int RIG_TCI_SDR::adjust_bandwidth(int val) { return def_bandwidth(val); } void RIG_TCI_SDR::set_pbt(int inner, int outer) { char cmdstr[50]; snprintf(cmdstr, sizeof(cmdstr), "rx_filter_band:%c,%d,%d;", (inuse == onA) ? '0' : '1', inner, outer); tci_send(cmdstr); } int RIG_TCI_SDR::get_pbt_inner() { if ((inuse == onA)) return FilterInner_A; else return FilterInner_B; } int RIG_TCI_SDR::get_pbt_outer() { if ((inuse == onA)) return FilterOuter_A; else return FilterOuter_B; } void RIG_TCI_SDR::set_attenuator(int val) { } int RIG_TCI_SDR::get_attenuator() { return 0; } void RIG_TCI_SDR::set_preamp(int val) { } int RIG_TCI_SDR::get_preamp() { return 0; } // Noise Reduction (TS2000.cxx) NR1 only works; no NR2 and don' no why void RIG_TCI_SDR::set_noise_reduction(int val) { } int RIG_TCI_SDR::get_noise_reduction() { return 0; } void RIG_TCI_SDR::set_noise_reduction_val(int val) { } int RIG_TCI_SDR::get_noise_reduction_val() { return 0; } int RIG_TCI_SDR::get_agc() { return 0; } int RIG_TCI_SDR::incr_agc() { return agcval; } static const char *agcstrs[] = {"FM", "AGC", "FST", "SLO"}; const char *RIG_TCI_SDR::agc_label() { return agcstrs[agcval]; } int RIG_TCI_SDR::agc_val() { return agcval; } // Noise Blanker (TS2000.cxx) void RIG_TCI_SDR::set_noise(bool b) { } int RIG_TCI_SDR::get_noise() { return 0; } // Tranceiver PTT on/off void RIG_TCI_SDR::set_PTT_control(int val) { std::string tcicmd; char cmd[30]; snprintf(cmd, sizeof(cmd), "TRX:%d,%s;", slice, val ? "TRUE" : "FALSE"); tci_send(cmd); ptt_ = val; if (slice) slice_1.ptt = val; else slice_0.ptt = val; } int RIG_TCI_SDR::get_PTT() { ptt_ = slice ? slice_1.ptt : slice_0.ptt; return ptt_; } void RIG_TCI_SDR::set_rf_gain(int val) { } int RIG_TCI_SDR::get_rf_gain() { return 100; } void RIG_TCI_SDR::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TCI_SDR::selectA() { inuse = onA; char cmd[30]; snprintf(cmd, sizeof(cmd), "RX_CHANNEL_ENABLE:%d,1,FALSE;", slice); tci_send(cmd); } void RIG_TCI_SDR::selectB() { inuse = onB; char cmd[30]; snprintf(cmd, sizeof(cmd), "RX_CHANNEL_ENABLE:%d,1,TRUE;", slice); tci_send(cmd); } int RIG_TCI_SDR::get_vfoAorB() { return inuse; } void RIG_TCI_SDR::set_slice(int val) { slice = val; return; } int RIG_TCI_SDR::get_slice() { return slice; } void RIG_TCI_SDR::set_split(bool val) { char cmd[30]; snprintf(cmd, sizeof(cmd), "split_enable:%d,%s;", slice, val ? "true;" : "false;"); tci_send(cmd); } bool RIG_TCI_SDR::can_split() { return true; } int RIG_TCI_SDR::get_split() { return slice ? slice_1.split : slice_0.split; } unsigned long long RIG_TCI_SDR::get_vfoA () { A.freq = slice ? slice_1.A.freq : slice_0.A.freq; return A.freq; } void RIG_TCI_SDR::set_vfoA (unsigned long long freq) { A.freq = freq; if (slice) slice_1.A.freq = freq; else slice_0.A.freq = freq; char vfostr[20]; snprintf(vfostr, sizeof(vfostr), "vfo:%d,0,%llu;", slice, freq); tci_send(vfostr); } unsigned long long RIG_TCI_SDR::get_vfoB () { B.freq = slice ? slice_1.B.freq : slice_0.B.freq; return B.freq; } void RIG_TCI_SDR::set_vfoB (unsigned long long freq) { B.freq = freq; if (slice) slice_1.B.freq = freq; else slice_0.B.freq = freq; char vfostr[30]; snprintf(vfostr, sizeof(vfostr), "vfo:%d,1,%llu;", slice, freq); tci_send(vfostr); } // Squelch (TS990.cxx) void RIG_TCI_SDR::set_squelch(int val) { } int RIG_TCI_SDR::get_squelch() { int val = 0; return val; } void RIG_TCI_SDR::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } /* void RIG_TCI_SDR::set_mic_gain(int val) { std::string tcicmd = "MG"; tcicmd.append(to_decimal(val,3)).append(";"); sendCommand(tcicmd); showresp(WARN, ASC, "set mic gain", tcicmd, ""); } int RIG_TCI_SDR::get_mic_gain() { int val = progStatus.mic_gain; std::string tcicmd = "MG;"; if (wait_char(';', 6, 100, "get mic gain", ASC) < 6) return val; size_t p = replystr.rfind("MG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); return val; } void RIG_TCI_SDR::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } */ void RIG_TCI_SDR::set_volume_min_max_step(double &min, double &max, double &step) { min = -60; max = 0; step = 1; // in dBm } void RIG_TCI_SDR::set_volume_control(int val) { char szcmd[20]; val = ((val * 60)/100) - 60; snprintf(szcmd, sizeof(szcmd), "volume:%d;", val); tci_send(szcmd); if (slice) slice_1.vol = val; else slice_0.vol = val; } int RIG_TCI_SDR::get_volume_control() { int vol = ((slice ? slice_1.vol : slice_0.vol) + 60) * 100 / 60; return vol; } void RIG_TCI_SDR::get_pc_min_max_step(double &min, double &max, double &step) { if (sdrtype == DX) { min = 0; max = 100; step = 1; } else { min = 0; max = 20; step = 0.1; } } void RIG_TCI_SDR::set_power_control(double val) { char szcmd[20]; if (sdrtype == PRO) val *= 5; snprintf(szcmd, sizeof(szcmd), "drive:%d;", (int)(val)); tci_send(szcmd); if (slice) slice_1.pwr = val; else slice_0.pwr = val; } double RIG_TCI_SDR::get_power_control() { double pwr = slice ? slice_1.pwr : slice_0.pwr; if (sdrtype == PRO) pwr *= 0.2; return pwr; } static bool tune_on = false; void RIG_TCI_SDR::tune_rig() { tune_on = !tune_on; char szcmd[20]; snprintf(szcmd, sizeof(szcmd), "tune:%d,%s;", slice, (tune_on ? "true" : "false")); tci_send(szcmd); } //====================================================================== RIG_TCI_SUNPRO::RIG_TCI_SUNPRO() { sdrtype = PRO; name_ = TCI_SUNPRO_name_; }; //====================================================================== RIG_TCI_SUNDX::RIG_TCI_SUNDX() { sdrtype = DX; name_ = TCI_SUNDX_name_; }; flrig-2.0.04/src/rigs/other/sunsdr2.cxx0000664000175000017500000006033014502041135014620 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "other/sunsdr2.h" #include "support.h" static const char SUNSDR2name_[] = "SunSDR"; enum { SDR2_LSB, SDR2_USB, SDR2_CW, SDR2_FM, SDR2_AM, SDR2_DIGL, SDR2_CWR, SDR2_SAM, SDR2_DIGU, SDR2_DRM }; static std::vectorSUNSDR2modes_; static const char *vSUNSDR2modes_[] = { "LSB", "USB", "CW", "FM", "AM", "DIGL", "CW-R", "SAM", "DIGU", "DRM"}; static std::vectorSUNSDR2_mode_cat; static const char *vSUNSDR2_mode_cat[] = { "MD1;", "MD2;", "MD3;", "MD4;", "MD5;", "MD6;", "MD7;", "MD8;", "MD9;", "MD0;"}; int SUNSDR2_num_modes = 10; static std::vectorSUNSDR2_ssb_widths; static const char *vSUNSDR2_ssb_widths[] = { "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3400", "4000", "5000" }; static std::vectorSUNSDR2_ssb_cat; static const char *vSUNSDR2_ssb_cat[] = { "SH00;", "SH01;", "SH02;", "SH03;", "SH04;", "SH05;", "SH06;", "SH07;", "SH08;", "SH09;", "SH10;", "SH11;", "SH12;", "SH13;" }; int SUNSDR2_num_ssb = 14; static std::vectorSUNSDR2_am_widths; static const char *vSUNSDR2_am_widths[] = { "5 KHz", "6 KHz", "8 KHz", "10 KHz" }; static std::vectorSUNSDR2_am_cat; static const char *vSUNSDR2_am_cat[] = { "SH00", "SH01", "SH02", "SH03" }; int SUNSDR2_num_am = 4; static std::vectorSUNSDR2_cw_widths; static const char *vSUNSDR2_cw_widths[] = { "50", "80", "100", "150", "200", "300", "400", "500", "600", "1000"}; static std::vectorSUNSDR2_cw_cat; static const char *vSUNSDR2_cw_cat[] = { "FW0050;", "FW0080;", "FW0100;", "FW0150;", "FW0200;", "FW0300;", "FW0400;", "FW0500;", "FW0600;", "FW1000;" }; int SUNSDR2_num_cw = 10; static std::vectorSUNSDR2_digi_widths; static const char *vSUNSDR2_digi_widths[] = { "250", "500", "1000", "1500"}; static std::vectorSUNSDR2_digi_cat; static const char *vSUNSDR2_digi_cat[] = { "FW0250;", "FW0500;", "FW1000;", "FW1500;" }; int SUNSDR2_num_digi = 4; static std::vectorSUNSDR2_other_widths; static const char *vSUNSDR2_other_widths[] = { "FIXED" }; static std::vectorSUNSDR2_other_cat; static const char *vSUNSDR2_other_cat[] = { "FW0000;" }; int SUNSDR2_num_other = 1; static int agcval = 1; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 2 { (Fl_Widget *)btnIFsh, 214, 105, 50 }, // 3 { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, // 4 { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, // 5 { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, // 6 { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, // 7 { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_SDR2_PRO::initialize() { VECTOR (SUNSDR2modes_, vSUNSDR2modes_); VECTOR (SUNSDR2_mode_cat, vSUNSDR2_mode_cat); VECTOR (SUNSDR2_ssb_widths, vSUNSDR2_ssb_widths); VECTOR (SUNSDR2_ssb_cat, vSUNSDR2_ssb_cat); VECTOR (SUNSDR2_am_widths, vSUNSDR2_am_widths); VECTOR (SUNSDR2_cw_widths, vSUNSDR2_cw_widths); VECTOR (SUNSDR2_cw_cat, vSUNSDR2_cw_cat); VECTOR (SUNSDR2_digi_widths, vSUNSDR2_digi_widths); VECTOR (SUNSDR2_digi_cat, vSUNSDR2_digi_cat); VECTOR (SUNSDR2_other_widths, vSUNSDR2_other_widths); VECTOR (SUNSDR2_am_cat, vSUNSDR2_am_cat); VECTOR (SUNSDR2_other_cat, vSUNSDR2_other_cat); modes_ = SUNSDR2modes_; bandwidths_ = SUNSDR2_cw_widths; bw_vals_ = NULL; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = sldrSQUELCH; rig_widgets[6].W = sldrMICGAIN; rig_widgets[7].W = sldrPOWER; } RIG_SDR2_PRO::RIG_SDR2_PRO() { // base class values name_ = SUNSDR2name_; modes_ = SUNSDR2modes_; bandwidths_ = SUNSDR2_cw_widths; bw_vals_ = NULL; widgets = rig_widgets; serial_baudrate = BR115200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8A03; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; has_extras = true; has_noise_reduction = has_noise_reduction_control = has_auto_notch = has_noise_control = has_sql_control = has_split = true; has_split_AB = true; has_micgain_control = true; has_ifshift_control = true; has_rf_control = true; has_agc_control = true; has_power_out = true; has_smeter = true; has_attenuator_control = true; has_preamp_control = true; has_mode_control = true; has_bandwidth_control = true; has_volume_control = true; has_power_control = true; has_tune_control = true; has_ptt_control = true; precision = 1; ndigits = 9; _noise_reduction_level = 0; _nrval1 = 2; _nrval2 = 4; preamp_level = atten_level = 0; } static int ret = 0; const char * RIG_SDR2_PRO::get_bwname_(int n, int md) { try { if (md == SDR2_LSB || md == SDR2_USB || md == SDR2_FM) return SUNSDR2_ssb_widths.at(n).c_str(); if (md == SDR2_CW || md == SDR2_CWR) return SUNSDR2_cw_widths.at(n).c_str(); if (md == SDR2_AM) return SUNSDR2_am_widths.at(n).c_str(); if (md == SDR2_DIGU || md == SDR2_DIGL) return SUNSDR2_digi_widths.at(n).c_str(); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } return "UNKNOWN"; } void RIG_SDR2_PRO::shutdown() { } // SM cmd 0 ... 100 (rig values 0 ... 15) int RIG_SDR2_PRO::get_smeter() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_smeter"); ret = wait_char(';', 8, 100, "get Smeter", ASC); gett(""); if (ret < 8) return 0; size_t p = replystr.rfind("SM"); if (p != std::string::npos) mtr = 5 * atoi(&replystr[p + 3]); return mtr; } int RIG_SDR2_PRO::set_widths(int val) { int bw; if (val == SDR2_LSB || val == SDR2_USB || val == SDR2_FM) { bandwidths_ = SUNSDR2_ssb_widths; bw = 10; } else if (val == SDR2_CW || val == SDR2_CWR) { bandwidths_ = SUNSDR2_cw_widths; bw = 7; } else if (val == SDR2_DIGU || val == SDR2_DIGL) { bandwidths_ = SUNSDR2_digi_widths; bw = 0; } else if (val == SDR2_AM) { bandwidths_ = SUNSDR2_am_widths; bw = 2; } else { bandwidths_ = SUNSDR2_other_widths; bw = 0; } return bw; } std::vector& RIG_SDR2_PRO::bwtable(int m) { if (m == SDR2_LSB || m == SDR2_USB || m == SDR2_FM) return SUNSDR2_ssb_widths; else if (m == SDR2_CW || m == SDR2_CWR) return SUNSDR2_cw_widths; else if (m == SDR2_DIGU || m == SDR2_DIGL) return SUNSDR2_digi_widths; else if (m == SDR2_AM) return SUNSDR2_am_widths; return SUNSDR2_other_widths; } void RIG_SDR2_PRO::set_modeA(int val) { A.imode = val; cmd = SUNSDR2_mode_cat[val]; sendCommand(cmd); sett(""); showresp(WARN, ASC, "set mode", cmd, ""); A.iBW = set_widths(val); } int RIG_SDR2_PRO::get_modeA() { cmd = "MD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 4, 100, "get modeA", ASC); gett(""); size_t p = replystr.rfind("MD"); if (p != std::string::npos) { replystr = replystr.substr(p); size_t i = 0; for (i = 0; i < SUNSDR2_mode_cat.size(); i++) { if (replystr == SUNSDR2_mode_cat[i]){ A.imode = i; A.iBW = set_widths(i); return A.imode; } } } return A.imode; } void RIG_SDR2_PRO::set_modeB(int val) { B.imode = val; cmd = SUNSDR2_mode_cat[val]; sendCommand(cmd); sett(""); showresp(WARN, ASC, "set mode B", cmd, ""); B.iBW = set_widths(val); } int RIG_SDR2_PRO::get_modeB() { cmd = "MD;"; get_trace(1, "get_modeB"); ret = wait_char(';', 4, 100, "get modeB", ASC); gett(""); size_t p = replystr.rfind("MD"); if (p != std::string::npos) { replystr = replystr.substr(p); size_t i = 0; for (i = 0; i < SUNSDR2_mode_cat.size(); i++) { if (replystr == SUNSDR2_mode_cat[i]){ B.imode = i; B.iBW = set_widths(i); return B.imode; } } } return B.imode; } int RIG_SDR2_PRO::get_modetype(int n) { return _mode_type[n]; } void RIG_SDR2_PRO::set_bwA(int val) { try { int md = A.imode; if (md == SDR2_LSB || md == SDR2_USB || md == SDR2_FM) cmd = SUNSDR2_ssb_cat.at(val); else if (md == SDR2_CW || md == SDR2_CWR) cmd = SUNSDR2_cw_cat.at(val); else if (md == SDR2_DIGU || md == SDR2_DIGL) cmd = SUNSDR2_digi_cat.at(val); else if (md == SDR2_AM) cmd = SUNSDR2_am_cat.at(val); else cmd = SUNSDR2_other_cat.at(0); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set SDR2_DIGU bw", cmd, ""); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_SDR2_PRO::get_bwA() { size_t i = 0; size_t p; if (A.imode == SDR2_LSB || A.imode == SDR2_USB) { cmd = "SH;"; int retn = wait_char(';', 5, 100, "get SH", ASC); gett(""); if (retn >= 5) { p = replystr.rfind("SH"); if (p != std::string::npos) { replystr = replystr.substr(p); for (i = 0; i < SUNSDR2_ssb_cat.size(); i++) { if (replystr == SUNSDR2_ssb_cat[i]) return A.iBW = i; } } } } else if (A.imode == SDR2_CW || A.imode == SDR2_CWR) { cmd = "FW;"; int retn = wait_char (';', 7, 100, "get BW", ASC); gett(""); if (retn >= 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { replystr = replystr.substr(p); for (i = 0; i < SUNSDR2_cw_cat.size(); i++) { if (replystr == SUNSDR2_cw_cat[i]) return A.iBW = i; } } } } else if (A.imode == SDR2_DIGU || A.imode == SDR2_DIGL) { cmd = "FW;"; int retn = wait_char (';', 7, 100, "get BW", ASC); gett(""); if (retn >= 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { replystr = replystr.substr(p); for (i = 0; i < SUNSDR2_digi_cat.size(); i++) { if (replystr == SUNSDR2_digi_cat[i]) return A.iBW = i; } } } } return A.iBW; } void RIG_SDR2_PRO::set_bwB(int val) { try { int md = B.imode; if (md == SDR2_LSB || md == SDR2_USB || md == SDR2_FM) cmd = SUNSDR2_ssb_cat.at(val); else if (md == SDR2_CW || md == SDR2_CWR) cmd = SUNSDR2_cw_cat.at(val); else if (md == SDR2_DIGU || md == SDR2_DIGL) cmd = SUNSDR2_digi_cat.at(val); else if (md == SDR2_AM) cmd = SUNSDR2_am_cat[val < SUNSDR2_num_am ? val : SUNSDR2_num_am]; else cmd = SUNSDR2_other_cat[0]; sendCommand(cmd); showresp(WARN, ASC, "set SDR2_DIGU bw", cmd, ""); sett(""); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_SDR2_PRO::get_bwB() { size_t i = 0; size_t p; if (B.imode == SDR2_LSB || B.imode == SDR2_USB) { cmd = "SH;"; int retn = wait_char(';', 5, 100, "get SH", ASC); gett(""); if (retn >= 5) { p = replystr.rfind("SH"); if (p != std::string::npos) { replystr = replystr.substr(p); for (i = 0; i < SUNSDR2_ssb_cat.size(); i++) { if (replystr == SUNSDR2_ssb_cat[i]) return B.iBW = i; } } } } else if (B.imode == SDR2_CW || B.imode == SDR2_CWR) { cmd = "FW;"; int retn = wait_char (';', 7, 100, "get BW", ASC); gett(""); if (retn >= 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { replystr = replystr.substr(p); for (i = 0; i < SUNSDR2_cw_cat.size(); i++) { if (replystr == SUNSDR2_cw_cat[i]) return B.iBW = i; } } } } else if (B.imode == SDR2_DIGU || B.imode == SDR2_DIGL) { cmd = "FW;"; int retn = wait_char (';', 7, 100, "get BW", ASC); gett(""); if (retn >= 7) { p = replystr.rfind("FW"); if (p != std::string::npos) { replystr = replystr.substr(p); for (i = 0; i < SUNSDR2_digi_cat.size(); i++) { if (replystr == SUNSDR2_digi_cat[i]) return B.iBW = i; } } } } return A.iBW; } int RIG_SDR2_PRO::adjust_bandwidth(int val) { int bw = 0; if (val == SDR2_LSB || val == SDR2_USB || val == SDR2_FM) bw = 10; else if (val == SDR2_AM) bw = 2; else if (val == SDR2_CW || val == SDR2_CWR) bw = 7; else if (val == SDR2_DIGU) bw = 1; else // other bw = 0; return bw; } int RIG_SDR2_PRO::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_SDR2_PRO::set_power_control(double val) { cmd = "PC"; char szval[4]; if (modeA == 4 && val > 50) val = 50; // SDR2_AM mode limitation snprintf(szval, sizeof(szval), "%03d", (int)val); cmd += szval; cmd += ';'; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); } double RIG_SDR2_PRO::get_power_control() { int val = progStatus.power_level; cmd = "PC;"; get_trace(1, "get_power_control"); ret = wait_char(';', 6, 100, "get Power control", ASC); gett(""); if (ret < 6) return val; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return val; val = atoi(&replystr[p + 2]); return val; } void RIG_SDR2_PRO::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; max = 20.0; step = 0.1; } void RIG_SDR2_PRO::set_attenuator(int val) { if (val) cmd = "RA01;"; else cmd = "RA00;"; LOG_WARN("%s", cmd.c_str()); set_trace(1, "set attenuator"); sendCommand(cmd); sett(""); atten_level = val; } int RIG_SDR2_PRO::get_attenuator() { cmd = "RA;"; get_trace(1, "get_attenuator"); ret = wait_char(';', 7, 100, "get attenuator", ASC); gett(""); if (ret < 7) return atten_level; size_t p = replystr.rfind("RA"); if (p != std::string::npos) atten_level = (replystr[p+3] == '1'); return atten_level; } void RIG_SDR2_PRO::set_preamp(int val) { if (val) cmd = "PA1;"; else cmd = "PA0;"; LOG_WARN("%s", cmd.c_str()); set_trace(1, "set preamp"); sendCommand(cmd); sett(""); preamp_level = val; } int RIG_SDR2_PRO::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp"); ret = wait_char(';', 5, 100, "get preamp", ASC); gett(""); if (ret < 5) return preamp_level; size_t p = replystr.rfind("PA"); if (p != std::string::npos) preamp_level = (replystr[p+2] == '1'); return preamp_level; } void RIG_SDR2_PRO::set_if_shift(int val) { cmd = "IS+"; if (val < 0) cmd[2] = '-'; cmd.append(to_decimal(abs(val),4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set IF shift", cmd, ""); } bool RIG_SDR2_PRO::get_if_shift(int &val) { cmd = "IS;"; get_trace(1, "get_if_shift"); ret = wait_char(';', 8, 100, "get IF shift", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("IS"); if (p != std::string::npos) { val = fm_decimal(replystr.substr(p+3), 4); if (replystr[p+2] == '-') val *= -1; return (val != 0); } } val = progStatus.shift_val; return progStatus.shift; } void RIG_SDR2_PRO::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1100; if_shift_max = max = 1100; if_shift_step = step = 10; if_shift_mid = 0; } // Noise Reduction (TS2000.cxx) NR1 only works; no NR2 and don' no why void RIG_SDR2_PRO::set_noise_reduction(int val) { if (val == -1) { return; } _noise_reduction_level = val; if (_noise_reduction_level == 0) { nr_label("NR", false); } else if (_noise_reduction_level == 1) { nr_label("NR1", true); } else if (_noise_reduction_level == 2) { nr_label("NR2", true); } cmd.assign("NR"); cmd += '0' + _noise_reduction_level; cmd += ';'; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); } int RIG_SDR2_PRO::get_noise_reduction() { cmd = rsp = "NR"; cmd.append(";"); get_trace(1, "get_noise_reduction"); ret = wait_char(';', 4, 100, "GET noise reduction", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return _noise_reduction_level; _noise_reduction_level = replystr[p+2] - '0'; } if (_noise_reduction_level == 1) { nr_label("NR1", true); } else if (_noise_reduction_level == 2) { nr_label("NR2", true); } else { nr_label("NR", false); } return _noise_reduction_level; } void RIG_SDR2_PRO::set_noise_reduction_val(int val) { if (_noise_reduction_level == 0) return; if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; cmd.assign("RL").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); } int RIG_SDR2_PRO::get_noise_reduction_val() { int nrval = 0; if (_noise_reduction_level == 0) return 0; int val = progStatus.noise_reduction_val; cmd = rsp = "RL"; cmd.append(";"); get_trace(1, "get_noise_reduction_val"); ret = wait_char(';', 5, 100, "GET noise reduction val", ASC); gett(""); if (ret == 5) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) { nrval = (_noise_reduction_level == 1 ? _nrval1 : _nrval2); return nrval; } val = atoi(&replystr[p+2]); } if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; return val; } int RIG_SDR2_PRO::get_agc() { cmd = "GT;"; get_trace(1, "get_agc"); ret = wait_char(';', 6, 100, "GET agc val", ASC); gett(""); size_t p = replystr.rfind("GT"); if (p == std::string::npos) return agcval; if (replystr[4] == ' ') return 0; agcval = replystr[4] - '0' + 1; // '0' == off, '1' = fast, '2' = slow return agcval; } int RIG_SDR2_PRO::incr_agc() { agcval++; if (agcval == 4) agcval = 1; cmd.assign("GT00"); cmd += (agcval + '0' - 1); cmd += ";"; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); return agcval; } static const char *agcstrs[] = {"SDR2_FM", "AGC", "FST", "SLO"}; const char *RIG_SDR2_PRO::agc_label() { return agcstrs[agcval]; } int RIG_SDR2_PRO::agc_val() { return agcval; } // Auto Notch, beat canceller (TS2000.cxx) BC1 only, not BC2 void RIG_SDR2_PRO::set_auto_notch(int v) { cmd = v ? "BC1;" : "BC0;"; sendCommand(cmd); showresp(WARN, ASC, "set auto notch", cmd, ""); } int RIG_SDR2_PRO::get_auto_notch() { cmd = "BC;"; get_trace(1, "get_auto_notch"); ret = wait_char(';', 4, 100, "get auto notch", ASC); gett(""); if (ret == 4) { int anotch = 0; size_t p = replystr.rfind("BC"); if (p != std::string::npos) { anotch = (replystr[p+2] == '1'); return anotch; } } return 0; } // Noise Blanker (TS2000.cxx) void RIG_SDR2_PRO::set_noise(bool b) { if (b) cmd = "NB1;"; else cmd = "NB0;"; sendCommand(cmd); showresp(WARN, ASC, "set NB", cmd, ""); } int RIG_SDR2_PRO::get_noise() { cmd = "NB;"; get_trace(1, "get_noise"); ret = wait_char(';', 4, 100, "get Noise Blanker", ASC); gett(""); if (ret == 4) { size_t p = replystr.rfind("NB"); if (p == std::string::npos) return 0; if (replystr[p+2] == '0') return 0; } return 1; } // Tranceiver PTT on/off void RIG_SDR2_PRO::set_PTT_control(int val) { if (val) { if (progStatus.data_port) cmd = "TX1;"; // DTS transmission using ANI input else cmd = "TX0;"; // mic input } else cmd = "RX;"; sendCommand(cmd); showresp(WARN, ASC, "set PTT", cmd, ""); } int RIG_SDR2_PRO::get_PTT() { // cmd = "IF;"; // get_trace(1, "get_PTT"); // ret = wait_char(';', 38, 100, "get VFO", ASC); // gett(""); int ret = check_ifstr(); if (ret < 38) return ptt_; ptt_ = (replystr[28] == '1'); return ptt_; } void RIG_SDR2_PRO::set_rf_gain(int val) { cmd = "RG"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set rf gain", cmd, ""); } int RIG_SDR2_PRO::get_rf_gain() { int val = progStatus.rfgain; cmd = "RG;"; get_trace(1, "get_rf_gain"); ret = wait_char(';', 6, 100, "get rf gain", ASC); gett(""); if (ret < 6) return val; size_t p = replystr.rfind("RG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); return val; } void RIG_SDR2_PRO::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_SDR2_PRO::selectA() { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); inuse = onA; } void RIG_SDR2_PRO::selectB() { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); inuse = onB; } void RIG_SDR2_PRO::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } bool RIG_SDR2_PRO::can_split() { return true; } int RIG_SDR2_PRO::get_split() { size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "FT"; cmd.append(";"); if (wait_char(';', 4, 100, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "FR"; cmd.append(";"); if (wait_char(';', 4, 100, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; } if (tx == '0' && rx == '0') split = 0; else if (tx == '1' && rx == '0') split = 1; else if (tx == '0' && rx == '1') split = 2; else if (tx == '1' && rx == '1') split = 3; return split; } unsigned long long RIG_SDR2_PRO::get_vfoA () { cmd = "FA;"; if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } return A.freq; } void RIG_SDR2_PRO::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_SDR2_PRO::get_vfoB () { cmd = "FB;"; if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) return B.freq; size_t p = replystr.rfind("FB"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; B.freq = f; } return B.freq; } void RIG_SDR2_PRO::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } // Squelch (TS990.cxx) void RIG_SDR2_PRO::set_squelch(int val) { cmd = "SQ0"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set squelch", cmd, ""); } int RIG_SDR2_PRO::get_squelch() { int val = 0; cmd = "SQ0;"; if (wait_char(';', 7, 20, "get squelch", ASC) >= 7) { size_t p = replystr.rfind("SQ0"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); } return val; } void RIG_SDR2_PRO::get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } void RIG_SDR2_PRO::set_mic_gain(int val) { cmd = "MG"; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic gain", cmd, ""); } int RIG_SDR2_PRO::get_mic_gain() { int val = progStatus.mic_gain; cmd = "MG;"; if (wait_char(';', 6, 100, "get mic gain", ASC) < 6) return val; size_t p = replystr.rfind("MG"); if (p != std::string::npos) val = fm_decimal(replystr.substr(p+2), 3); return val; } void RIG_SDR2_PRO::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_SDR2_PRO::set_volume_control(int val) { cmd = "AG"; char szval[20]; snprintf(szval, sizeof(szval), "%04d", val * 255 / 100); cmd += szval; cmd += ';'; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); } int RIG_SDR2_PRO::get_volume_control() { int val = progStatus.volume; cmd = "AG0;"; if (wait_char(';', 7, 100, "get vol", ASC) < 7) return val; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return val; replystr[p + 6] = 0; val = atoi(&replystr[p + 3]); val = val * 100 / 255; return val; } void RIG_SDR2_PRO::tune_rig() { cmd = "AC111;"; LOG_WARN("%s", cmd.c_str()); sendCommand(cmd); } flrig-2.0.04/src/rigs/other/FLEX1500.cxx0000664000175000017500000006436414505113055014303 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014, 2020 // Michael Black W9MDB // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "other/FLEX1500.h" #include "support.h" #include static const char FLEX1500name_[] = "FLEX1500"; static std::vectorFLEX1500modes_; static const char *vFLEX1500modes_[] = { "LSB", "USB", "DSB", "CWL", "CWU", "FM", "AM", "DIGU", "SPEC", "DIGL", "SAM", "DRM"}; static std::vectorFLEX1500_mode_chr; static const char *vFLEX1500_mode_chr[] = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11" }; static const char FLEX1500_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U', 'U', 'L', 'U', 'U' }; static std::vectorFLEX1500_empty; static const char *vFLEX1500_empty[] = { "NONE" }; //------------------------------------------------------------------------ static std::vectorFLEX1500_USBwidths; static const char *vFLEX1500_USBwidths[] = { " 5000", " 4400", " 3800", " 3300", " 2900", " 2700", " 2400", " 2100", " 1800", " 1000", "Var 1", "Var 2" }; static std::vectorFLEX1500_CAT_USB; static const char *vFLEX1500_CAT_USB[] = { "ZZFI00;", "ZZFI01;", "ZZFI02;", "ZZFI03;", "ZZFI04;", "ZZFI05;", "ZZFI06;", "ZZFI07;", "ZZFI08;", "ZZFI09;", "ZZFI10;", "ZZFI11;" }; //static const char *FLEX1500_SH_tooltip = "hi cut"; //static const char *FLEX1500_SSB_btn_SH_label = "H"; //------------------------------------------------------------------------ static std::vectorFLEX1500_WIDEwidths; static const char *vFLEX1500_WIDEwidths[] = { "Wideband" }; //static std::vectorFLEX1500_CAT_WIDE = { //"ZZFI12;" }; //------------------------------------------------------------------------ static std::vectorFLEX1500_DIGwidths; static const char *vFLEX1500_DIGwidths[] = { " 3000", " 2500", " 2000", " 1500", " 1000", " 800", " 600", " 300", " 150", " 75", "Var 1", "Var 2" }; static std::vectorFLEX1500_CAT_DIG; static const char *vFLEX1500_CAT_DIG[] = { "ZZFI00;", "ZZFI01;", "ZZFI02;", "ZZFI03;", "ZZFI04;", "ZZFI05;", "ZZFI06;", "ZZFI07;", "ZZFI08;", "ZZFI09;", "ZZFI10;", "ZZFI11;" }; //------------------------------------------------------------------------------ static std::vectorFLEX1500_AMwidths; static const char *vFLEX1500_AMwidths[] = { "16000", "12000", "10000", " 8000", " 6600", " 5200", " 4000", " 3100", " 2900", " 2400", "Var 1", "Var 2" }; static std::vectorFLEX1500_CAT_AM; static const char *vFLEX1500_CAT_AM[] = { "ZZFI00;", "ZZFI01;", "ZZFI02;", "ZZFI03;", "ZZFI04;", "ZZFI05;", "ZZFI06;", "ZZFI07;", "ZZFI08;", "ZZFI09;", "ZZFI10;", "ZZFI11;" }; //------------------------------------------------------------------------------ static std::vectorFLEX1500_CWwidths; static const char *vFLEX1500_CWwidths[] = { " 1000", " 800", " 750", " 600", " 500", " 400", " 250", " 100", " 50", " 25", "Var 1", "Var 2"}; static std::vectorFLEX1500_CAT_CW; static const char *vFLEX1500_CAT_CW[] = { "ZZFI00;", "ZZFI01;", "ZZFI02;", "ZZFI03;", "ZZFI04;", "ZZFI05;", "ZZFI06;", "ZZFI07;", "ZZFI08;", "ZZFI09;", "ZZFI10;", "ZZFI11;" }; //------------------------------------------------------------------------------ static std::vectorvarwidths; static const char *vvarwidths[] = { " 5000", " 4400", " 3800", " 3300", " 2900", " 2700", " 2400", " 2100", " 1800", " 1000", " 500", " 200" }; //------------------------------------------------------------------------------ static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, // 0 { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, // 1 { (Fl_Widget *)sldrSQUELCH, 266, 125, 156 }, // 2 { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, // 3 { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, // 4 { (Fl_Widget *)sldrINNER, 54, 165, 156 }, // 5 { (Fl_Widget *)sldrOUTER, 266, 165, 156 }, // 6 { (Fl_Widget *)sldrPOWER, 54, 185, 368 }, // 7 { (Fl_Widget *)NULL, 0, 0, 0 } }; // mid range on loudness static std::string menu012 = "EX01200004"; void RIG_FLEX1500::initialize() { VECTOR (FLEX1500modes_, vFLEX1500modes_); VECTOR (FLEX1500_mode_chr, vFLEX1500_mode_chr); VECTOR (FLEX1500_empty, vFLEX1500_empty); VECTOR (FLEX1500_USBwidths, vFLEX1500_USBwidths); VECTOR (FLEX1500_CAT_USB, vFLEX1500_CAT_USB); VECTOR (FLEX1500_WIDEwidths, vFLEX1500_WIDEwidths); VECTOR (FLEX1500_DIGwidths, vFLEX1500_DIGwidths); VECTOR (FLEX1500_CAT_DIG, vFLEX1500_CAT_DIG); VECTOR (FLEX1500_AMwidths, vFLEX1500_AMwidths); VECTOR (FLEX1500_CAT_AM, vFLEX1500_CAT_AM); VECTOR (FLEX1500_CWwidths, vFLEX1500_CWwidths); VECTOR (FLEX1500_CAT_CW, vFLEX1500_CAT_CW); VECTOR (varwidths, vvarwidths); modes_ = FLEX1500modes_; bandwidths_ = FLEX1500_empty; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrSQUELCH; rig_widgets[3].W = sldrRFGAIN; rig_widgets[4].W = sldrMICGAIN; rig_widgets[5].W = sldrINNER; rig_widgets[6].W = sldrOUTER; rig_widgets[7].W = sldrPOWER; } void RIG_FLEX1500::shutdown() { } static bool is_tuning = false; RIG_FLEX1500::RIG_FLEX1500() { // base class values name_ = FLEX1500name_; modes_ = FLEX1500modes_; bandwidths_ = FLEX1500_empty; //dsp_SL = FLEX1500_SL; //SL_tooltip = FLEX1500_SL_tooltip; //SL_label = FLEX1500_SSB_btn_SL_label; //dsp_SH = FLEX1500_SH; //SH_tooltip = FLEX1500_SH_tooltip; //SH_label = FLEX1500_SSB_btn_SH_label; widgets = rig_widgets; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8803; B.freq = A.freq = 14070000ULL; can_change_alt_vfo = true; has_dsp_controls = false; has_pbt_controls = has_power_out = has_swr_control = has_alc_control = has_split = has_split_AB = has_rf_control = has_auto_notch = has_smeter = has_noise_reduction = has_noise_reduction_control = has_noise_control = has_micgain_control = has_volume_control = has_power_control = has_tune_control = has_mode_control = has_bandwidth_control = has_sql_control = has_ptt_control = has_extras = has_preamp_control = true; rxona = true; precision = 1; ndigits = 9; att_level = 0; // preamp_level = 0; _noise_reduction_level = 0; _nrval1 = 2; _nrval2 = 4; is_tuning = false; } static int ret = 0; const char * RIG_FLEX1500::get_bwname_(int n, int md) { std::stringstream str; str << "n=" << n << ", md=" << md; trace(2, __func__, str.str().c_str()); try { if (md == USB || md == LSB) return FLEX1500_USBwidths.at(n).c_str(); if (md == FM || md == DRM || md == SPEC) return FLEX1500_WIDEwidths.at(n).c_str(); if (md == DIGU || md == DIGL) return FLEX1500_DIGwidths.at(n).c_str(); if (md == CWU || md == CWL) return FLEX1500_CWwidths.at(n).c_str(); else return FLEX1500_AMwidths.at(n).c_str(); } catch (const std::exception& e) { std::cout << e.what() << '\n'; } return "UNKNOWN"; } int RIG_FLEX1500::get_smeter() { int smtr = 0; std::string strmtr; if (rxona) strmtr = "ZZSM0"; else strmtr = "ZZSM1"; cmd = strmtr; cmd.append(";"); get_trace(1, "get_smeter"); ret = wait_string(strmtr, 9); gett(""); size_t p = replystr.rfind("SM"); if (p != std::string::npos) { smtr = fm_decimal(replystr.substr(p+3),3); smtr = -54 + smtr/(256.0/100.0); // in S-Units smtr = (smtr + 54); } return smtr; } // Transceiver power level void RIG_FLEX1500::set_power_control(double val) { int ival = (int)val; cmd = "PC"; cmd.append(to_decimal(ival, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set pwr ctrl", cmd, ""); sett("pwr control"); } int RIG_FLEX1500::get_power_out() { float mtr = 0.0; cmd = "ZZRM5;"; get_trace(1, "get_power_out"); ret = wait_string("ZZRM5", 26); gett(""); sscanf(&replystr[0],"ZZRM5%f", &mtr); return (int)(10 * mtr); } double RIG_FLEX1500::get_power_control() { int pctrl = 0; cmd = "ZZPC;"; get_trace(1, "get_power_control"); ret = wait_string("ZZPC", 8); gett(""); sscanf(&replystr[0], "ZZPC%d;", &pctrl); return pctrl; } struct meterpair {float mtr; float val;}; static meterpair swr_tbl[] = { { 1, 0 }, { 1.5, 12.5 }, { 2, 25 }, { 3, 50 }, { 20, 100 } }; int RIG_FLEX1500::get_swr() { double mtr = 0; if (get_tune() != 0) return 0; // swr only works when tuning cmd = "ZZRM8;"; get_trace(1, "get_swr"); ret = wait_string("ZZRM8", 26); gett(""); if (sscanf(&replystr[0], "ZZRM8%lf", &mtr)!=1) { return 0; } size_t i = 0; for (i = 0; i < sizeof(swr_tbl) / sizeof(meterpair) - 1; i++) if (mtr >= swr_tbl[i].mtr && mtr < swr_tbl[i+1].mtr) break; if (mtr > 19) mtr = 19; mtr = (int)round(swr_tbl[i].val + (swr_tbl[i+1].val - swr_tbl[i].val)*(mtr - swr_tbl[i].mtr)/(swr_tbl[i+1].mtr - swr_tbl[i].mtr)); if (mtr > 100) mtr = 100; return mtr; } int RIG_FLEX1500::get_alc() { double alc = 0; cmd = "ZZRM4;"; get_trace(1, "get_alc"); ret = wait_string("ZZRM4", 26); gett(""); if (sscanf(&replystr[0], "ZZRM4%lf", &alc) != 1) alc = 0; return alc; } /* ZZPA0 : -10 dB ZZPA1 : 0 dB ZZPA2 : 10 dB ZZPA3 : 20 dB ZZPA4 : 30 dB */ void RIG_FLEX1500::set_preamp(int val) { preamp_level = val; cmd = "ZZPA"; cmd += (val + '0'); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set PRE", cmd, ""); sett("preamp"); } int RIG_FLEX1500::get_preamp() { cmd = "ZZPA;"; get_trace(1, "get_preamp"); ret = wait_string("ZZPA", 6); gett(""); if (ret < 6) return preamp_level; size_t p = replystr.rfind("PA"); if (p != std::string::npos) preamp_level = (unsigned char)replystr[p+2] - '0'; return preamp_level; } int RIG_FLEX1500::set_widths(int val) { int bw = get_bwA(); cmd = "ZZMN"; cmd += FLEX1500_mode_chr[val]; cmd += ';'; set_trace(1, "bandwidths:"); wait_string("ZZMN", 185); sett(""); size_t p = replystr.rfind("ZZMN"); if (p != std::string::npos) p += 6; bool fill_widths = false; switch (val) { case LSB: case USB: bandwidths_ = FLEX1500_USBwidths; dsp_SL = FLEX1500_empty; dsp_SH = FLEX1500_empty; fill_widths = true; break; case DIGU: case DIGL: bandwidths_ = FLEX1500_DIGwidths; dsp_SL = FLEX1500_empty; dsp_SH = FLEX1500_empty; fill_widths = true; break; case FM: case SPEC: case DRM: bandwidths_ = FLEX1500_WIDEwidths; dsp_SL = FLEX1500_empty; dsp_SH = FLEX1500_empty; break; case CWL: case CWU: bandwidths_ = FLEX1500_CWwidths; dsp_SL = FLEX1500_empty; dsp_SH = FLEX1500_empty; fill_widths = true; break; case AM: case SAM: case DSB: default: bandwidths_ = FLEX1500_AMwidths; dsp_SL = FLEX1500_empty; dsp_SH = FLEX1500_empty; fill_widths = true; break; } if (fill_widths) { if (p != std::string::npos) { if (replystr.length() < 187) return bw; varwidths.clear(); static std::string widths; widths = replystr.substr(p + 6); for (int i = 0; i < 12; i++) { widths[i*15 + 6] = 0; varwidths.push_back(&widths[i*15]); } bandwidths_ = varwidths; } } return bw; } std::vector& RIG_FLEX1500::bwtable(int val) { switch (val) { case LSB: case USB: bandwidths_ = FLEX1500_USBwidths; break; case DIGU: case DIGL: bandwidths_ = FLEX1500_DIGwidths; break; case FM: case SPEC: case DRM: bandwidths_ = FLEX1500_WIDEwidths; break; case CWL: case CWU: bandwidths_ = FLEX1500_CWwidths; break; case AM: case SAM: case DSB: default: bandwidths_ = FLEX1500_AMwidths; break; } return bandwidths_; } #if 0 std::vector& RIG_FLEX1500::lotable(int val) { if (val == LSB || val == USB || val == FM || val == DRM || val == SPEC) return FLEX1500_USBwidths; else if (val == DIGU || val == DIGL) return FLEX1500_DIGwidths; else if (val == AM || val == SAM || val == DSB) return FLEX1500_AMwidths; return FLEX1500_USBwidths; } const char **RIG_FLEX1500::hitable(int val) { if (val == LSB || val == USB || val == FM || val == DRM || val == SPEC) return FLEX1500_USBwidths; else if (val == DIGU || val == DIGL) return FLEX1500_DIGwidths; else if (val == CWU || val == CWL) return FLEX1500_CWwidths; else if (val == AM || val == SAM || val == DSB) return FLEX1500_AMwidths; return FLEX1500_USBwidths; } #endif void RIG_FLEX1500::set_pbt(int inner, int outer) { char cmdstr[50]; snprintf(cmdstr, sizeof(cmdstr), "ZZFL%c%04d;", inner < 0 ? '-' : '+', abs(inner)); sendCommand(cmd = cmdstr); sett(""); snprintf(cmdstr, sizeof(cmdstr), "ZZFH%c%04d;", outer < 0 ? '-' : '+', abs(outer)); sendCommand(cmd = cmdstr); sett(""); } int RIG_FLEX1500::get_pbt_inner() { cmd = "ZZFL;"; get_trace(1, "get_pbt_lower"); ret = wait_string("ZZFL", 10); gett(""); size_t p = replystr.find("ZZFL"); if (p != std::string::npos) { FilterInner = atoi(replystr.substr(p+4).c_str()); } return FilterInner; } int RIG_FLEX1500::get_pbt_outer() { cmd = "ZZFH;"; get_trace(1, "get_pbt_upper"); ret = wait_string("ZZFH", 10); gett(""); size_t p = replystr.find("ZZFH"); if (p != std::string::npos) { FilterOuter = atoi(replystr.substr(p+4).c_str()); } return FilterOuter; } void RIG_FLEX1500::set_modeA(int val) { try { _currmode = A.imode = val; cmd = "ZZMD"; cmd += FLEX1500_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); sett("modeA"); A.iBW = set_widths(val); vfoA.iBW = A.iBW; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_FLEX1500::get_modeA() { // if (tuning()) return A.imode; cmd = "ZZMD;"; get_trace(1, "get_modeA"); ret = wait_string("ZZMD", 7); gett(""); if (ret == 7) { size_t p = replystr.rfind("MD"); if (p != std::string::npos) { int md; sscanf(&replystr[p+2],"%d",&md); if (A.imode != md) { A.imode = md; A.iBW = set_widths(A.imode); } } } _currmode = A.imode; return A.imode; } void RIG_FLEX1500::set_modeB(int val) { try { _currmode = B.imode = val; cmd = "MD"; cmd += FLEX1500_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode B", cmd, ""); sett("modeB"); MilliSleep(100); // give rig a chance to change width B.iBW = set_widths(val); vfoB.iBW = B.iBW; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } int RIG_FLEX1500::get_modeB() { // if (tuning()) return B.imode; cmd = "MD;"; get_trace(1, "get_modeB"); ret = wait_string("MD", 4); gett(""); if (ret == 7) { size_t p = replystr.rfind("MD"); if (p != std::string::npos) { int md=0; sscanf(&replystr[p+2],"%d",&md); if (B.imode != md) { B.imode = md; B.iBW = set_widths(B.imode); } } } _currmode = B.imode; return B.imode; } int RIG_FLEX1500::adjust_bandwidth(int val) { int bw = 0; bw = 0; if (val == CWU || val == CWL) bw = 7; return bw; } int RIG_FLEX1500::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_FLEX1500::set_bwA(int val) { std::stringstream str; if (A.imode == FM || A.imode == DRM || A.imode == SPEC) return; // mode is fixed else if (A.imode == LSB || A.imode == USB) { try { cmd = FLEX1500_CAT_USB.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA USB", cmd, ""); sett("bwA USB"); A.iBW = val; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else if (A.imode == DIGU || A.imode == DIGL) { std::stringstream str; str << "val =" << val ; trace(2, __func__, str.str().c_str()); try { cmd = FLEX1500_CAT_DIG.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA DIG", cmd, ""); sett("bwA DIG"); A.iBW = val; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else if (A.imode == CWU || A.imode == CWL) { try { cmd = FLEX1500_CAT_CW.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA CW", cmd, ""); sett("bwA CW"); A.iBW = val; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } else if (A.imode == AM || A.imode == SAM || A.imode == DSB) { try { cmd = FLEX1500_CAT_AM.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA AM", cmd, ""); sett("bwA AM"); A.iBW = val; } catch (const std::exception& e) { std::cout << e.what() << '\n'; } } } int RIG_FLEX1500::get_bw(int mode) { size_t i = 0; int bw = 0; std::vector& tbl = FLEX1500_CAT_USB; if (mode == FM || mode == DRM || mode == SPEC) gett("get_bwA Wideband"); else { cmd = "ZZFI;"; get_trace(3, "get ", FLEX1500modes_[mode].c_str(), " bandwidth"); ret = wait_string("ZZFI", 7); gett(""); if (ret) { switch (mode) { default: case LSB : case USB : tbl = FLEX1500_CAT_USB; break; case CWL : case CWU : tbl = FLEX1500_CAT_CW; break; case DIGU : case DIGL : tbl = FLEX1500_CAT_DIG; break; case AM : case SAM : case DSB : tbl = FLEX1500_CAT_AM; break; } for (i = 0; i < tbl.size(); i++) { if (replystr.find(tbl[i]) != std::string::npos) { bw = i; break; } } } } return bw; } int RIG_FLEX1500::get_bwA() { vfoA.iBW = A.iBW = get_bw(A.imode); progStatus.iBW_A = A.iBW; return A.iBW; } void RIG_FLEX1500::set_bwB(int val) { set_bwA(val); B.iBW = val; std::stringstream str; str << "B.iBW = " << B.iBW; trace(2, __func__, str.str().c_str()); return; } int RIG_FLEX1500::get_bwB() // same as A { vfoB.iBW = B.iBW = get_bw(B.imode); progStatus.iBW_B = B.iBW; return B.iBW; } int RIG_FLEX1500::get_modetype(int n) { if (n >= (int)(sizeof(FLEX1500_mode_type)/sizeof(*FLEX1500_mode_type))) return 0; return FLEX1500_mode_type[n]; } void RIG_FLEX1500::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = 400; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 700; } void RIG_FLEX1500::set_notch(bool on, int val) { if (on) { cmd = "ZZBC1;"; sendCommand(cmd); showresp(WARN, ASC, "set notch on", cmd, ""); sett("notch ON"); } else { cmd = "ZZBC0;"; // no notch action sendCommand(cmd); showresp(WARN, ASC, "set notch off", cmd, ""); sett("notch OFF"); } } bool RIG_FLEX1500::get_notch(int &val) { bool ison = false; return ison; // NOT IMPLEMENTED } void RIG_FLEX1500::get_notch_min_max_step(int &min, int &max, int &step) { min = 200; max = 3350; step = 50; } void RIG_FLEX1500::set_auto_notch(int v) { cmd = v ? "NT1;" : "NT0;"; sendCommand(cmd); showresp(WARN, ASC, "set auto notch", cmd, ""); sett("auto notch"); } int RIG_FLEX1500::get_auto_notch() { int anotch = 0; cmd = "ZZNT;"; get_trace(1, "get_auto_notch"); ret = wait_string("ZZNT", 6); gett(""); if (ret == 6) { size_t p = replystr.rfind("ZZNT"); if (p != std::string::npos) { anotch = (replystr[p+4] == '1'); } } return anotch; } void RIG_FLEX1500::set_noise_reduction(int val) { if (val == -1) { return; } _noise_reduction_level = val; if (_noise_reduction_level == 0) { nr_label("ZZNR0", 0); } else if (_noise_reduction_level == 1) { nr_label("ZZNR1", 1); } else { nr_label("???", 2); return; } cmd.assign("ZZNR"); cmd += '0' + _noise_reduction_level; cmd += ';'; sendCommand (cmd); showresp(WARN, ASC, "SET noise reduction", cmd, ""); sett("noise reduction"); } int RIG_FLEX1500::get_noise_reduction() { cmd = rsp = "ZZNR"; cmd.append(";"); get_trace(1, "get_noise_reduction"); ret = wait_string("ZZNR", 6); gett(""); if (ret == 6) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) return _noise_reduction_level; _noise_reduction_level = replystr[p+4] - '0'; } if (_noise_reduction_level == 1) { nr_label("NR", 1); } else if (_noise_reduction_level == 2) { nr_label("NR2", 2); } else { nr_label("NR", 0); } return _noise_reduction_level; } void RIG_FLEX1500::set_noise_reduction_val(int val) { if (_noise_reduction_level == 0) return; if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; cmd.assign("NR").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, ""); sett("noise reduction val"); } int RIG_FLEX1500::get_noise_reduction_val() { int nrval = 0; if (_noise_reduction_level == 0) return 0; int val = progStatus.noise_reduction_val; cmd = rsp = "ZZNR"; cmd.append(";"); get_trace(1, "get_noise_reduction_val"); ret = wait_string("ZZNR", 6); gett(""); if (ret == 6) { size_t p = replystr.rfind(rsp); if (p == std::string::npos) { nrval = (_noise_reduction_level == 1 ? _nrval1 : _nrval2); return nrval; } val = atoi(&replystr[p+2]); } if (_noise_reduction_level == 1) _nrval1 = val; else _nrval2 = val; return val; } void RIG_FLEX1500::tune_rig(int val) { std::stringstream str; str << "val=" << val; trace(2, __func__, str.str().c_str()); switch (val) { case 0: cmd = "ZZTU0;"; break; case 1: case 2: cmd = "ZZTU1;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FLEX1500::get_tune() { cmd = rsp = "ZZTU"; cmd += ';'; get_trace(1, "get_tune"); ret = wait_string("ZZTU", 6); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return val; } void RIG_FLEX1500::set_rf_gain(int val) { cmd = "ZZAR"; if (val < 0) cmd += '-'; else cmd += '+'; cmd.append(to_decimal(abs(val), 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set rf gain", cmd, ""); sett("RFgain"); } int RIG_FLEX1500::get_rf_gain() { cmd = "ZZAR;"; int rfg = 120; char sign; get_trace(1, "get_rf_gain"); ret = wait_string("ZZAR", 9); gett(""); if (ret == 9) { size_t p = replystr.rfind("ZZAR"); if (p != std::string::npos) { sscanf(replystr.c_str(),"ZZAR%c%d", &sign, &rfg); if (sign == '-') rfg *= -1; } } return rfg; } void RIG_FLEX1500::get_rf_min_max_step(int &min, int &max, int &step) { min = -20; max = 120; step = 1; } void RIG_FLEX1500::set_mic_gain(int val) { cmd = "ZZMG"; if (val < 0) cmd += "-"; else cmd += "+"; cmd.append(to_decimal(abs(val),2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic", cmd, ""); sett("MICgain"); } int RIG_FLEX1500::get_mic_gain() { int mgain = 0; cmd = "ZZMG;"; get_trace(1, "get_mic_gain"); ret = wait_string("ZZMG", 8); gett(""); if (ret == 8) { size_t p = replystr.rfind("MG"); if (p != std::string::npos) { sscanf(replystr.c_str(),"ZZMG%d",&mgain); } } return mgain; } void RIG_FLEX1500::get_mic_min_max_step(int &min, int &max, int &step) { min = -40; max = 10; step = 1; } // Transceiver PTT on/off void RIG_FLEX1500::set_PTT_control(int val) { if (val) sendCommand("ZZTX1;"); else sendCommand("ZZTX0;"); ptt_ = val; } int RIG_FLEX1500::get_PTT() { cmd = "ZZTX;"; get_trace(1, "get_PTT"); ret = wait_string("ZZTX", 6); gett(""); if (ret < 6) return ptt_; ptt_ = (replystr[4] == '1'); return ptt_; } bool RIG_FLEX1500::tuning() { cmd = "ZZTU;"; if (wait_string("ZZTU", 6) == 6) { if (replystr[4] == '1') return true; } return false; } void RIG_FLEX1500::set_split(bool val) { if (val) { cmd = "ZZSP1;"; } else { cmd = "ZZSP0;"; } sendCommand(cmd); } int RIG_FLEX1500::get_split() { cmd = "ZZSP;"; get_trace(1, "get_split"); ret = wait_string("ZZSP", 6); gett(""); if (ret < 6) return split; split = (replystr[4] == '1'); return split; } void RIG_FLEX1500::set_squelch(int val) { cmd = "ZZSQ"; cmd.append(to_decimal(abs(val),3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic", cmd, ""); sett("Squelch"); } int RIG_FLEX1500::get_squelch() { int sq = 0; cmd = "ZZSQ;"; get_trace(1, "get_squelch"); ret = wait_string("ZZSQ", 7); gett(""); if (ret == 8) { size_t p = replystr.rfind("ZZSQ"); if (p != std::string::npos) { sscanf(replystr.c_str(),"ZZSQ%d",&sq); } } return (-sq); } void RIG_FLEX1500::get_squelch_min_max_step(int &min, int &max, int &step) { min = -160; max = 0; step = 4; } unsigned long long RIG_FLEX1500::get_vfoA() { unsigned long long freq = A.freq; cmd = "ZZFA;"; get_trace(1, "get_vfoA"); ret = wait_string("ZZFA", 16); gett(""); if (ret >= 16) { size_t p = replystr.find("ZZFA"); if (p != std::string::npos) { sscanf(replystr.c_str(), "ZZFA%llu", &freq); A.freq = freq; } } return A.freq; } void RIG_FLEX1500::set_vfoA(unsigned long long f) { A.freq = f; char szf[20]; snprintf(szf, sizeof(szf), "ZZFA%011llu;", A.freq); sendCommand(szf); sett(""); } unsigned long long RIG_FLEX1500::get_vfoB() { unsigned long long freq = B.freq; cmd = "ZZFB;"; get_trace(1, "get_vfoB"); ret = wait_string("ZZFB", 16); gett(""); if (ret >= 16) { size_t p = replystr.find("ZZFB"); if (p != std::string::npos) { sscanf(replystr.c_str(), "ZZFB%llu", &freq); B.freq = freq; } } return B.freq; } void RIG_FLEX1500::set_vfoB(unsigned long long f) { B.freq = f; char szf[20]; snprintf(szf, sizeof(szf), "ZZFB%011llu;", B.freq); sendCommand(szf); sett(""); } // Volume control return 0 ... 100 int RIG_FLEX1500::get_volume_control() { int volctrl = 0; cmd = "ZZAG;"; get_trace(1, "get_volume_control"); ret = wait_string("ZZAG", 8); gett(""); size_t p = replystr.rfind("ZZAG"); sscanf(&replystr[p], "ZZAG%d;", &volctrl); return volctrl; } void RIG_FLEX1500::set_volume_control(int val) { char szcmd[20]; snprintf(szcmd, sizeof(szcmd), "ZZAG%03d;", val); set_trace(2, "set_volume_control", szcmd); sendCommand(szcmd); sett(""); showresp(WARN, ASC, "set vol", szcmd, ""); } void RIG_FLEX1500::set_noise(bool b) { if (b) cmd = "ZZNA1;"; else cmd = "ZZNA0;"; set_trace(1, "set_noise_blanker"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set NB", cmd, ""); } int RIG_FLEX1500::get_noise() { int response = 0; cmd = "ZZNA;"; get_trace(1, "get_noise"); ret = wait_string("ZZNA", 6); gett(""); size_t p = replystr.rfind("ZZNA"); if (p != std::string::npos) response = replystr[p + 4] - '0'; return response; } flrig-2.0.04/src/rigs/other/SmartSDR.cxx0000664000175000017500000003063514502041135014664 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2023 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "other/SmartSDR.h" #include "support.h" #include static const char SmartSDRname_[] = "SmartSDR"; enum SMART_MODES {SM_LSB, SM_USB, SM_CWL, SM_CWU, SM_FM, SM_AM, SM_DIGU, SM_DIGL, SM_SAM, SM_NFM, SM_RTTY, SM_DFM}; static std::vectorSmartSDRmodes_; static const char *vSmartSDRmodes_[] = { "LSB", "USB", "CW-L", "CW-U", "FM", "AM", "DIGU", "DIGL", "SAM", "NFM", "RTTY", "DFM" }; static std::vectorSmartSDR_mode_chr; static const char *vSmartSDR_mode_chr[] = { "00", "01", "03", "04", "05", "06", "07", "09", "10", "11", "30", "12" }; static const char SmartSDR_mode_type[] = { 'L', 'U', 'L', 'U', 'U', 'U', 'U', 'L', 'U', 'U', 'L', 'U' }; static std::vectorSmartSDR_empty; static const char *vSmartSDR_empty[] = { "NONE" }; //------------------------------------------------------------------------ static std::vectorSmartSDR_bws; static const char *vSmartSDR_bws[] = { "Fil 1x1", "Fil 1x2", "Fil 1x3", "Fil 1x4", "Fil 2x1", "Fil 2x2", "Fil 2x3", "Fil 2x4" }; static std::vectorSmartSDR_CAT_BW; static const char *vSmartSDR_CAT_BW[] = { "ZZFI07;", "ZZFI06;", "ZZFI05;", "ZZFI04;", "ZZFI03;", "ZZFI02;", "ZZFI01;", "ZZFI00;" }; static std::vectorSmartSDR_widths_SSB; static const char *vssb[] = { "1800", "2100", "2400", "2700", "2900", "3300", "4000", "6000" }; static std::vectorSmartSDR_widths_AM; static const char *vam[] = { "5.6 K", "6.0 K", "8.0 K", "10 K", "12 K", "14 K", "16 K", "20 K" }; static std::vectorSmartSDR_widths_CW; static const char *vcww[] = { "50", "100", "250", "400", "500", "800", "1000", "3000" }; static std::vectorSmartSDR_widths_RTTY; static const char *vrtty[] = { "250", "300", "350", "400", "500", "1100", "1500", "3000" }; static std::vectorSmartSDR_widths_DATA; static const char *vdata[] = { "100", "300", "600", "1000", "1500", "2000", "3000", "6000" }; static std::vectorSmartSDR_widths_FM; static const char *vfm[] = { "FIXED" }; static std::vectorSmartSDR_widths_DFM; static const char *vdfm[] = { "6.0 K", "8.0 K", "10.0 K", "12 K", "14 K", "16 K", "18 K", "20 K" }; //------------------------------------------------------------------------------ static GUI rig_widgets[]= { { (Fl_Widget *)sldrRFGAIN, 54, 125, 156 }, // 2 { (Fl_Widget *)sldrMICGAIN, 266, 125, 156 }, // 8 { (Fl_Widget *)sldrPOWER, 54, 145, 368 }, // 9 { (Fl_Widget *)NULL, 0, 0, 0 } }; // mid range on loudness static std::string menu012 = "EX01200004"; void RIG_SmartSDR::initialize() { VECTOR (SmartSDRmodes_, vSmartSDRmodes_); VECTOR (SmartSDR_mode_chr, vSmartSDR_mode_chr); VECTOR (SmartSDR_empty, vSmartSDR_empty); VECTOR (SmartSDR_bws, vSmartSDR_bws); VECTOR (SmartSDR_CAT_BW, vSmartSDR_CAT_BW); VECTOR (SmartSDR_widths_SSB, vssb); VECTOR (SmartSDR_widths_AM, vam); VECTOR (SmartSDR_widths_CW, vcww); VECTOR (SmartSDR_widths_RTTY, vrtty); VECTOR (SmartSDR_widths_DATA, vdata); VECTOR (SmartSDR_widths_DFM, vdfm); VECTOR (SmartSDR_widths_FM, vfm); modes_ = SmartSDRmodes_; bandwidths_ = SmartSDR_bws; rig_widgets[0].W = sldrRFGAIN; rig_widgets[1].W = sldrMICGAIN; rig_widgets[2].W = sldrPOWER; // turn off AI and set the input to DAX sendCommand("ZZAI0;"); sendCommand("ZZDX1;"); } void RIG_SmartSDR::shutdown() { } RIG_SmartSDR::RIG_SmartSDR() { // base class values name_ = SmartSDRname_; modes_ = SmartSDRmodes_; bandwidths_ = SmartSDR_empty; widgets = rig_widgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = SM_USB; B.iBW = A.iBW = 3; B.freq = A.freq = 7070000ULL; can_change_alt_vfo = false; has_dsp_controls = false; has_power_out = has_rf_control = has_smeter = has_noise_control = has_power_control = has_mode_control = has_bandwidth_control = has_ptt_control = has_extras = true; precision = 1; ndigits = 9; } static int ret = 0; const char * RIG_SmartSDR::get_bwname_(int n, int md) { try { return SmartSDR_bws.at(n).c_str(); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } return "Fil ???"; } int RIG_SmartSDR::get_smeter() { int smtr = 0; cmd = "ZZSM;"; get_trace(1, "get_smeter"); ret = wait_char(';', 8, 100, "get smeter", ASC); gett(""); size_t p = replystr.rfind("ZZSM"); if (p != std::string::npos) { smtr = fm_decimal(replystr.substr(p+4), 3); smtr *= (100.0 / 260.0); } return smtr; } // Transceiver power level void RIG_SmartSDR::set_power_control(double val) { int ival = (int)val; cmd = "ZZPC"; cmd.append(to_decimal(ival, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set pwr ctrl", cmd, ""); sett("pwr control"); } double RIG_SmartSDR::get_power_control() { int pctrl = 0; cmd = "ZZPC;"; get_trace(1, "get_power_control"); ret = wait_char(';', 8, 100, "get pout", ASC); gett(""); size_t p = replystr.rfind("ZZPC"); if (p != std::string::npos) { pctrl = fm_decimal(replystr.substr(p+4), 3); } return pctrl; } int RIG_SmartSDR::set_widths(int val) { return get_bw(val); } void RIG_SmartSDR::set_modeA(int val) { try { _currmode = A.imode = val; cmd = "ZZMD"; cmd += SmartSDR_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode", cmd, ""); sett("modeA"); // A.iBW = set_widths(val); // vfoA.iBW = A.iBW; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } int RIG_SmartSDR::get_modeA() { if (tuning()) return A.imode; cmd = "ZZMD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 7, 100, "get mode A", ASC); gett(""); size_t p = replystr.rfind("MD"); if (p != std::string::npos) { for (size_t md = 0; md < SmartSDR_mode_chr.size(); md++) { if (replystr.substr(p+2, 2) == SmartSDR_mode_chr.at(md)) { A.imode = md; break; } } } _currmode = A.imode; return A.imode; } void RIG_SmartSDR::set_modeB(int val) { try { _currmode = B.imode = val; cmd = "MD"; cmd += SmartSDR_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "set mode B", cmd, ""); sett("modeB"); // MilliSleep(100); // give rig a chance to change width // B.iBW = set_widths(val); // vfoB.iBW = B.iBW; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } int RIG_SmartSDR::get_modeB() { return B.imode; if (tuning()) return B.imode; cmd = "ZZMD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 7, 100, "get mode B", ASC); gett(""); size_t p = replystr.rfind("MD"); if (p != std::string::npos) { for (size_t md = 0; md < SmartSDR_mode_chr.size(); md++) { if (replystr.substr(p+2, 2) == SmartSDR_mode_chr.at(md)) { B.imode = md; break; } } } _currmode = B.imode; return B.imode; } int RIG_SmartSDR::adjust_bandwidth(int val) { int bw = 0; bandwidths_ = bwtable(val); switch (val) { case SM_CWL: case SM_CWU: bw = 4; break; case SM_AM: case SM_SAM: bw = 5; break; case SM_RTTY: bw = 6; break; case SM_DIGL: case SM_DIGU: bw = 5; break; case SM_FM: case SM_NFM: bw = 0; break; case SM_DFM: bw = 3; break; default: ; bw = 4; } return bw; } int RIG_SmartSDR::def_bandwidth(int val) { return adjust_bandwidth(val); } void RIG_SmartSDR::set_bwA(int val) { if (A.imode == FM || A.imode == DFM) return; // mode is fixed try { cmd = SmartSDR_CAT_BW.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA", cmd, ""); sett("bwA"); A.iBW = val; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } int RIG_SmartSDR::get_bw(int mode) { int bw = 0; cmd = "ZZFI;"; get_trace(3, "get ", SmartSDRmodes_[mode].c_str(), " bandwidth"); ret = wait_char(';', 7, 100, "get ZZFI", ASC); gett(""); for (size_t i = 0; i < SmartSDR_CAT_BW.size(); i++) { if (replystr.find(SmartSDR_CAT_BW.at(i)) != std::string::npos) { bw = i; break; } } return bw; } int RIG_SmartSDR::get_bwA() { vfoA.iBW = A.iBW = get_bw(A.imode); progStatus.iBW_A = A.iBW; return A.iBW; } void RIG_SmartSDR::set_bwB(int val) { if (B.imode == FM || B.imode == DFM) return; // mode is fixed try { cmd = SmartSDR_CAT_BW.at(val); sendCommand(cmd); showresp(WARN, ASC, "set_bwA", cmd, ""); sett("bwA"); B.iBW = val; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } int RIG_SmartSDR::get_bwB() // same as A { vfoB.iBW = B.iBW = get_bw(B.imode); progStatus.iBW_B = B.iBW; return B.iBW; } int RIG_SmartSDR::get_modetype(int n) { if (n >= (int)(sizeof(SmartSDR_mode_type)/sizeof(*SmartSDR_mode_type))) return 0; return SmartSDR_mode_type[n]; } void RIG_SmartSDR::set_rf_gain(int val) { cmd = "ZZAR"; if (val < 0) cmd += '-'; else cmd += '+'; cmd.append(to_decimal(abs(val), 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set rf gain", cmd, ""); sett("RFgain"); } int RIG_SmartSDR::get_rf_gain() { cmd = "ZZAR;"; int rfg = 100; get_trace(1, "get_rf_gain"); ret = wait_char(';', 9, 100, "get rf gain", ASC); gett(""); size_t p = replystr.rfind("ZZAR"); if (p != std::string::npos) { sscanf(replystr.c_str(),"ZZAR%d", &rfg); } return rfg; } void RIG_SmartSDR::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_SmartSDR::set_mic_gain(int val) { cmd = "ZZMG"; if (val < 0) cmd += "-"; else cmd += "+"; cmd.append(to_decimal(abs(val),2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set mic", cmd, ""); sett("MICgain"); } int RIG_SmartSDR::get_mic_gain() { int mgain = 0; cmd = "ZZMG;"; get_trace(1, "get_mic_gain"); ret = wait_char(';', 8, 100, "get mic", ASC); gett(""); if (ret == 8) { size_t p = replystr.rfind("MG"); if (p != std::string::npos) { sscanf(replystr.c_str(),"ZZMG%d",&mgain); } } return mgain; } void RIG_SmartSDR::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // Transceiver PTT on/off void RIG_SmartSDR::set_PTT_control(int val) { if (val) sendCommand("ZZTX1;"); else sendCommand("ZZTX0;"); ptt_ = val; } int RIG_SmartSDR::get_PTT() { cmd = "ZZTX;"; get_trace(1, "get_PTT"); ret = wait_char(';', 6, 100, "get PTT", ASC); gett(""); if (ret < 6) return ptt_; ptt_ = (replystr[4] == '1'); return ptt_; } unsigned long long RIG_SmartSDR::get_vfoA() { cmd = "ZZFA;"; get_trace(1, "get vfoA"); ret = wait_char(';', 16, 100, "get vfoA", ASC); gett(""); if (ret < 16) return A.freq; size_t p = replystr.rfind("ZZFA"); if (p == std::string::npos) return A.freq; long long int newfreq = 0; if (sscanf(&replystr[p+4], "%lld", &newfreq) == 1) A.freq = newfreq; return A.freq; } void RIG_SmartSDR::set_vfoA(unsigned long long freq) { A.freq = freq; cmd = "ZZFA00000000000;"; for (int i = 14; i > 3; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); sett("vfoA"); } unsigned long long RIG_SmartSDR::get_vfoB() { return B.freq; } void RIG_SmartSDR::set_vfoB(unsigned long long freq) { B.freq = freq; return; } void RIG_SmartSDR::selectA() { } void RIG_SmartSDR::selectB() { } std::vector& RIG_SmartSDR::bwtable(int val) { std::vector& bw_ = SmartSDR_widths_SSB; switch (val) { case SM_CWL: case SM_CWU: bw_ = SmartSDR_widths_CW; break; case SM_AM: case SM_SAM: bw_ = SmartSDR_widths_AM; break; case SM_RTTY: bw_ = SmartSDR_widths_RTTY; break; case SM_DIGL: case SM_DIGU: bw_ = SmartSDR_widths_DATA; break; case SM_FM: case SM_NFM: bw_ = SmartSDR_widths_FM; break; case SM_DFM: bw_ = SmartSDR_widths_DFM; break; default: ; } return bw_; } flrig-2.0.04/src/rigs/tentec/0000775000175000017500000000000014511461606012724 500000000000000flrig-2.0.04/src/rigs/tentec/TT550.cxx0000664000175000017500000013767014502041135014156 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // TenTec Pegasus computer controlled transceiver #include #include #include #include #include #include #include #include "tentec/TT550.h" #include "support.h" #include "util.h" #include "debug.h" #include "trace.h" #include "rigbase.h" #include "rig.h" static const char TT550name_[] = "TT-550"; enum TT550_MODES { TT550_AM_MODE, TT550_USB_MODE, TT550_LSB_MODE, TT550_CW_MODE, TT550_DIGI_MODE, TT550_FM_MODE }; static std::vectorTT550modes_; static const char *vTT550modes_[] = { "AM", "USB", "LSB", "CW", "DIGI", "FM"}; static const int TT550_def_bw[] = { 32, 20, 20, 10, 20, 32 }; static const char TT550mode_chr[] = { '0', '1', '2', '3', '1', '4' }; static const char TT550mode_type[] = { 'U', 'U', 'L', 'L', 'U', 'U' }; static std::vectorTT550_widths; static const char *vTT550_widths[] = { "300", "330", "375", "450", "525", "600", "675", "750", "900", "1050", "1200", "1350", "1500", "1650", "1800", "1950", "2100", "2250", "2400", "2550", "2700", "2850", "3000", "3300", "3600", "3900", "4200", "4500", "4800", "5100", "5400", "5700", "6000", "8000"}; static int TT550_bw_vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34, WVALS_LIMIT}; static const int TT550_filter_nbr[] = { 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 33 }; static const int TT550_filter_width[] = { 300, 330, 375, 450, 525, 600, 675, 750, 900, 1050, 1200, 1350, 1500, 1650, 1800, 1950, 2100, 2250, 2400, 2550, 2700, 2850, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700, 6000, 8000 }; std::vectorTT550_xmt_widths; static const char *vTT550_xmt_widths[] = { "900", "1050", "1200", "1350", "1500", "1650", "1800", "1950", "2100", "2250", "2400", "2550", "2700", "2850", "3000", "3300", "3600", "3900"}; static const int TT550_xmt_filter_nbr[] = { 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7}; static const int TT550_xmt_filter_width[] = { 900, 1050, 1200, 1350, 1500, 1650, 1800, 1950, 2100, 2250, 2400, 2550, 2700, 2850, 3000, 3300, 3600, 3900 }; static const int TT550_steps[] = { 1, 10, 100, 1000, 10000 }; static char TT550restart[] = "XX\r"; static char TT550init[] = "P1\r"; //static char TT550isRADIO[] = " RADIO START"; //static char TT550isDSP[] = " DSP START"; //static char TT550setFREQ[] = "N123456\r"; static char TT550setMODE[] = "Mnn\r"; static char TT550setRcvBW[] = "Wx\r"; static char TT550setXmtBW[] = "Cx\r"; static char TT550setVolume[] = "Vn\r"; static char TT550setAGC[] = "Gc\r"; static char TT550setRFGAIN[] = "An\r"; static char TT550setATT[] = "Bc\r"; static char TT550setCWWPM[] = "Eabcdef\r"; static char TT550setMONVOL[] = "Hn\r"; static char TT550setCWMONVOL[] = "Jn\r"; static char TT550setNRNOTCH[] = "Kna\r"; static char TT550setLINEOUT[] = "Ln\r"; // 63 - min, 0 - max static char TT550setMICLINE[] = "O1cn\r"; // ******************************************* static char TT550setPOWER[] = "Pn\r"; // **************************************** static char TT550setXMT[] = "Q1\r"; static char TT550setRCV[] = "Q0\r"; static char TT550setSQUELCH[] = "Sn\r"; // 0..19; 6db / unit static char TT550setVOX[] = "Uc\r"; // '0' = off; '1' = on static char TT550setVOXGAIN[] = "UGn\r"; // 0 <= n <= 255 static char TT550setANTIVOX[] = "UAn\r"; // 0..255 static char TT550setVOXHANG[] = "UHn\r"; // 0..255; n= delay*0.0214 sec static char TT550setCWSPOTLVL[] = "Fn\r"; // 0..255; 0 = off static char TT550setCWQSK[] = "UQn\r"; // 0..255; 0 = none static char TT550setAUXHANG[] = "UTn\r"; // 0..255; 0 = none static char TT550setBLANKER[] = "Dn\r"; // 0..7; 0 = off static char TT550setSPEECH[] = "Yn\r"; // 0..127; 0 = off static char TT550setDISABLE[] = "#0\r"; // disable transmitter static char TT550setENABLE[] = "#1\r"; // enable transmitter static char TT550setTLOOP_OFF[] = "#2\r"; // disable T loop static char TT550setTLOOP_ON[] = "#3\r"; // enable T loop static char TT550setKEYER_OFF[] = "#6\r"; // enable keyer static char TT550setKEYER_ON[] = "#7\r"; // disable keyer static char TT550setALIVE_OFF[] = "#8\r"; // disable keep alive //static char TT550setALIVE_ON[] = "#9\r"; // enable keep alive //static char TT550getAGC[] = "?Y\r"; // 0..255 //static char TT550getFWDPWR[] = "?F\r"; // F<0..255> //static char TT550getREFPWR[] = "?R\r"; // R<0..255> static char TT550query[] = "?S\r"; // S<0..255><0..255> static char TT550getFWDREF[] = "?S\r"; // T<0..255><0..255> static char TT550setAMCARRIER[] = "R \r"; // enables AM mode transmit static std::string xcvrstream = ""; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 125, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_TT550::RIG_TT550() { // base class values name_ = TT550name_; modes_ = TT550modes_; bandwidths_ = TT550_widths; bw_vals_ = TT550_bw_vals; widgets = rig_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; serloop_timing = 100; def_mode = modeA = modeB = 1; def_bw = bwA = bwB = 20; def_freq = freqA = freqB = 14070000ULL; max_power = 100; can_change_alt_vfo = true; VfoAdj = 0; Bfo = 600; ATTlevel = 0; RFgain = 100; has_notch_control = has_preamp_control = false; has_extras = has_bfo = has_smeter = has_power_out = has_split = has_split_AB = has_swr_control = has_micgain_control = has_power_control = has_agc_level = has_cw_wpm = has_cw_vol = has_cw_spot = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_compression = has_rit = has_xit = has_rf_control = has_attenuator_control = has_volume_control = has_ifshift_control = has_ptt_control = has_bandwidth_control = has_auto_notch = has_tune_control = has_noise_control = has_mode_control = has_vfo_adj = true; auto_notch = noise_reduction = false; precision = 1; ndigits = 8; } static std::string ctlvals[] = { "x00", "x01", "x02", "x03", "x04", "x05", "x06", "x07", "x08", "x09", "x0a", "x0b", "x0c", "x0d", "x0e", "x0f"}; static std::string noctl(std::string cmd) { std::stringstream s; unsigned int c; s << cmd[0]; for (size_t n = 1; n < cmd.length(); n++) { c = cmd[n] & 0xFF; if (c < 0x10) s << " " << ctlvals[c]; else s << " x" << std::hex << c; } return s.str(); } static const char* info(std::string s) { static std::string infostr; infostr.assign(s); if (infostr[infostr.length()-1] == '\r') infostr.replace(infostr.length()-1, 1, "<0d>"); infostr.append(" "); infostr.append(str2hex(s.c_str(), s.length())); return infostr.c_str(); } void RIG_TT550::showASCII(std::string s1, std::string s) { while (s[0] == ' ' || s[0] == '\r' || s[0] == '\n') s.erase(0,1); for (size_t i = 0; i < s.length(); i++) { if (s[i] == '\r' || s[i] == '\n') s[i] = ' '; } LOG_INFO("%9s : %s", s1.c_str(), s.c_str()); } void RIG_TT550::initialize() { VECTOR (TT550modes_, vTT550modes_); VECTOR (TT550_widths, vTT550_widths); VECTOR (TT550_xmt_widths, vTT550_xmt_widths); modes_ = TT550modes_; bandwidths_ = TT550_widths; bw_vals_ = TT550_bw_vals; progStatus.settrace = true; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = sldrMICGAIN; rig_widgets[6].W = sldrPOWER; sendCommand(TT550restart, 14); if (replystr.find("RADIO") == std::string::npos) { showASCII("Power up", "DSP START"); sendCommand(TT550init); // put into radio mode } showASCII("Init", replystr); sendCommand("?V\r", 13); showASCII("Version", replystr); sendCommand(TT550setALIVE_OFF, 0); set_volume_control(0); set_auto_notch(auto_notch); set_compression(0,0); set_vox_hang(); set_vox_anti(); set_vox_gain(); set_vox_onoff(); set_cw_spot(); set_cw_vol(); set_cw_wpm(); set_cw_qsk(); enable_keyer(); set_agc_level(); set_line_out(); // use_line_in = progStatus.use_line_in; set_mic_gain(progStatus.mic_gain); set_mic_line(0); set_rf_gain(RFgain); XitFreq = progStatus.xit_freq; RitFreq = progStatus.rit_freq; split = false; Bfo = progStatus.bfo_freq; // set_vfoA(freqA); VfoAdj = progStatus.vfo_adj; // setXit(XitFreq); // setRit(RitFreq); // setBfo(Bfo); set_attenuator(0); set_mon_vol(); set_squelch_level(); // set_if_shift(pbt); set_aux_hang(); set_volume_control(progStatus.volume); cmd = TT550setAMCARRIER; cmd[1] = 0x0F; sendCommand(cmd, 0); enable_tloop(); enable_xmtr(); xcvrstream.clear(); keypad_timeout = 0; encoder_count = 0; } void RIG_TT550::enable_xmtr() { if (progStatus.tt550_enable_xmtr) cmd = TT550setENABLE; else cmd = TT550setDISABLE; sendCommand(cmd, 0); set_trace(2, "enable_xmtr()", noctl(cmd).c_str()); } void RIG_TT550::enable_tloop() { if (progStatus.tt550_enable_tloop) cmd = TT550setTLOOP_ON; else cmd = TT550setTLOOP_OFF; sendCommand(cmd, 0); set_trace(2, "enable_tloop()", noctl(cmd).c_str()); } void RIG_TT550::shutdown() { cmd = "Vx\r"; cmd[1] = 0; sendCommand(cmd, 0); // volume = zero cmd = "Lx\r"; cmd[1] = 0x3F; sendCommand(cmd, 0); // line out = minimum set_trace(2, "shutdown()", noctl(cmd).c_str()); } int DigiAdj = 0; void RIG_TT550::set_vfoRX(unsigned long long freq) { unsigned long long NVal = 0, FVal = 0; // N value / finetune value int TBfo = 0; // temporary BFO (Hz) int IBfo = 0; // Intermediate BFO Freq (Hz) int PbtAdj = PbtActive ? pbt : 0;//PbtFreq : 0; // passband adj (Hz) int RitAdj = RitActive ? RitFreq : 0; // RIT adj (Hz) int FiltAdj = (TT550_filter_width[def_bw])/2; // filter bw (Hz) unsigned long long lFreq = freq * (1 + VfoAdj * 1e-6); lFreq += RitAdj; if(def_mode == TT550_DIGI_MODE) { DigiAdj = 1500 - FiltAdj - 200; DigiAdj = DigiAdj < 0 ? 0 : DigiAdj; IBfo = FiltAdj + 200; lFreq += (IBfo + PbtAdj + DigiAdj); IBfo = IBfo + PbtAdj + DigiAdj; } if(def_mode == TT550_USB_MODE) { IBfo = FiltAdj + 200; lFreq += (IBfo + PbtAdj); IBfo = IBfo + PbtAdj; } if(def_mode == TT550_LSB_MODE) { IBfo = FiltAdj + 200; lFreq -= (IBfo + PbtAdj); IBfo = IBfo + PbtAdj; } if(def_mode == TT550_CW_MODE) { // CW Mode uses LSB Mode if (( FiltAdj + 300) <= Bfo) { IBfo = PbtAdj + Bfo; } else { IBfo = FiltAdj + 300; lFreq += (Bfo - IBfo); IBfo = IBfo + PbtAdj; } } if(def_mode == TT550_FM_MODE) { lFreq += Bfo; IBfo = 0; } lFreq -= 1250; NVal = lFreq / 2500 + 18000; FVal = (int)((lFreq % 2500) * 5.46); cmd = "N"; cmd += (NVal >> 8) & 0xff; cmd += NVal & 0xff; cmd += (FVal >> 8) & 0xff; cmd += FVal & 0xff; TBfo = (int)((IBfo + 8000)*2.73); cmd += (TBfo >> 8) & 0xff; cmd += TBfo & 0xff; cmd += '\r'; sendCommand(cmd, 0); std::stringstream s; s << "Rx freq = " << freq << " / adjusted to " << lFreq << ", " << noctl(cmd); set_trace(2, "set vfoRX", s.str().c_str()); } void RIG_TT550::set_vfoTX(unsigned long long freq) { unsigned long long NVal = 0, FVal = 0; // N value / finetune value int TBfo = 0; // temporary BFO int IBfo = 1500; // Intermediate BFO Freq int bwBFO = 0; // BFO based on selected bandwidth int FilterBw = 0; // Filter Bandwidth determined from table int XitAdj; unsigned long long lFreq = freq * (1 + VfoAdj * 1e-6); lFreq += XitAdj = XitActive ? XitFreq : 0; if (progStatus.tt550_use_xmt_bw) FilterBw = TT550_xmt_filter_width[progStatus.tt550_xmt_bw]; else FilterBw = TT550_filter_width[def_bw]; if (FilterBw < 900) FilterBw = 900; if (FilterBw > 3900) FilterBw = 3900; // if (def_mode == TT550_DIGI_MODE) FilterBw = 3000; bwBFO = (FilterBw/2) + 200; IBfo = (bwBFO > IBfo) ? bwBFO : IBfo ; if (def_mode == TT550_USB_MODE || def_mode == TT550_DIGI_MODE) { lFreq += IBfo; TBfo = (int)(IBfo * 2.73); } if (def_mode == TT550_LSB_MODE) { lFreq -= IBfo; TBfo = (int)(IBfo * 2.73); } // CW Mode uses LSB Mode if(def_mode == TT550_CW_MODE) { IBfo = 1500; // fixed for CW lFreq += Bfo - IBfo; TBfo = (int)(Bfo * 2.73); } if(def_mode == TT550_FM_MODE) { IBfo = 0; lFreq -= IBfo; TBfo = 0; } lFreq -= 1250; NVal = lFreq / 2500 + 18000; FVal = (int)((lFreq % 2500) * 5.46); cmd = "T"; cmd += (NVal >> 8) & 0xff; cmd += NVal & 0xff; cmd += (FVal >> 8) & 0xff; cmd += FVal & 0xff; cmd += (TBfo >> 8) & 0xff; cmd += TBfo & 0xff; cmd += '\r'; sendCommand(cmd, 0); std::stringstream s; s << "Tx freq = " << freq << " / adjusted to " << lFreq << ", " << noctl(cmd); set_trace(2, "set vfoTX", s.str().c_str()); } void RIG_TT550::set_split(bool val) { split = val; if (split) { if (inuse == onA) set_vfoTX(freqB); else set_vfoTX(freqA); } else { if (inuse == onA) set_vfoTX(freqA); else set_vfoTX(freqB); } set_trace(2, "set split ", (val ? "ON" : "OFF")); } void RIG_TT550::set_vfo(unsigned long long freq) { set_vfoRX(freq); if (!split) set_vfoTX(freq); xcvrstream.clear(); } void RIG_TT550::set_vfoA (unsigned long long freq) { freqA = freq; if (inuse == onA) set_vfo(freq); } int enc_change = 0; void RIG_TT550::process_encoder(int val) { } bool RIG_TT550::check() { return true; } unsigned long long RIG_TT550::get_vfoA () { if (inuse == onA) { freqA += enc_change; enc_change = 0; } return freqA; } void RIG_TT550::set_vfoB (unsigned long long freq) { freqB = freq; if (inuse == onB) set_vfo(freqB); } unsigned long long RIG_TT550::get_vfoB () { if (inuse == onB) { freqB += enc_change; enc_change = 0; } return freqB; } // Tranceiver PTT on/off static unsigned int fp[FPLEN]; static unsigned int rp[FPLEN]; static int iswr; void RIG_TT550::set_PTT_control(int val) { ptt_ = val; if (val) { for (int i = 0; i < FPLEN; i++) fp[i] = rp[i] = 0; iswr = 0; } if (val) cmd = TT550setXMT; else cmd = TT550setRCV; sendCommand(cmd, 0); std::stringstream s; s << "set PTT " << (val ? "ON " : "OFF ") << noctl(cmd); set_trace(1, s.str().c_str()); } int RIG_TT550::get_PTT() { return ptt_; } void RIG_TT550::set_mode(int val) { def_mode = val; if (val == TT550_AM_MODE) { cmd = TT550setMODE; cmd[1] = cmd[2] = TT550mode_chr[val]; sendCommand(cmd, 0); std::stringstream s; s << "Set Mode " << noctl(cmd); set_trace(1, s.str().c_str()); cmd = TT550setPOWER; cmd[1] = 0xFF; sendCommand(cmd, 0); set_power_control(progStatus.tt550_AM_level); } else { cmd = TT550setMODE; cmd[1] = cmd[2] = TT550mode_chr[val]; sendCommand(cmd, 0); std::stringstream s; s << "Set Mode " << noctl(cmd); set_trace(1, s.str().c_str()); set_power_control(progStatus.power_level); } set_bw(def_bw); } void RIG_TT550::set_modeA(int val) { modeA = val; set_mode(val); } void RIG_TT550::set_modeB(int val) { modeB = val; if (inuse == onB) set_mode(val); } int RIG_TT550::get_modeB() { return modeB; } static int ret_mode = TT550_CW_MODE; static void tt550_tune_off(void *) { selrig->set_PTT_control(0); selrig->set_power_control(progStatus.power_level); if (selrig->inuse == onB) selrig->set_modeB(ret_mode); else selrig->set_modeA(ret_mode); } void RIG_TT550::tune_rig(int val) { set_PTT_control(0); if (inuse == onA) { ret_mode = modeA; set_modeA(TT550_CW_MODE); } else { ret_mode = modeB; set_modeB(TT550_CW_MODE); } set_power_control(10); set_PTT_control(1); set_trace(1, "tune rig"); Fl::add_timeout(5.0, tt550_tune_off); } int RIG_TT550::get_modeA() { return modeA; } int RIG_TT550::get_modetype(int n) { return TT550mode_type[n]; } void RIG_TT550::set_bw(int val) { def_bw = val; int rxbw = TT550_filter_nbr[val]; int txbw = rxbw; if (progStatus.tt550_use_xmt_bw) txbw = TT550_xmt_filter_nbr[progStatus.tt550_xmt_bw]; if (txbw < 7) txbw = 7; if (txbw > 24) txbw = 24; cmd = TT550setRcvBW; cmd[1] = rxbw; sendCommand(cmd, 0); std::stringstream s; s << "Set RX bandwidth " << val << " " << noctl(cmd); set_trace(1, s.str().c_str()); cmd = TT550setXmtBW; cmd[1] = txbw; sendCommand(cmd, 0); std::stringstream s2; s2 << "Set TX bandwidth " << val << " " << noctl(cmd); set_trace(1, s2.str().c_str()); set_vfo(inuse == onA ? freqA : freqB); } void RIG_TT550::set_bwA(int val) { bwA = val; set_bw(bwA); } int RIG_TT550::get_bwA() { return bwA; } void RIG_TT550::set_bwB(int val) { bwB = val; if (inuse == onB) set_bw(val); } int RIG_TT550::get_bwB() { return bwB; } int RIG_TT550::adjust_bandwidth(int md) { return bwA; } int RIG_TT550::def_bandwidth(int m) { if (m < 0) m = 0; if (m > 4) m = 4; return TT550_def_bw[m]; } void RIG_TT550::set_if_shift(int val) { pbt = val; if (pbt) PbtActive = true; set_vfoRX(inuse == onA ? freqA : freqB); } bool RIG_TT550::get_if_shift(int &val) { val = pbt; if (!val) return false; return true; } void RIG_TT550::get_if_min_max_step(int &min, int &max, int &step) { min = -500; max = 500; step = 50; } void RIG_TT550::set_attenuator(int val) { progStatus.attenuator = val; cmd = TT550setATT; if (val) cmd[1] = '1'; else cmd[1] = '0'; sendCommand(cmd, 0); std::stringstream s; s << "Set attenuator " << noctl(cmd); set_trace(1, s.str().c_str()); } int RIG_TT550::get_attenuator() { return progStatus.attenuator; } void RIG_TT550::set_volume_control(int val) { cmd = TT550setVolume; cmd[1] = 0xFF & ((val * 255) / 100); sendCommand(cmd, 0); std::stringstream s; s << "Set volume " << noctl(cmd); set_trace(1, s.str().c_str()); } int RIG_TT550::get_volume_control() { return progStatus.volume; } static void show_encA(void *) { txt_encA->show(); } static void hide_encA(void *) { txt_encA->hide(); } static void update_encA(void *d) { char *str = (char *)d; txt_encA->value(str); } void RIG_TT550::selectA() { Fl::awake(hide_encA); xcvrstream.clear(); set_trace(1, "Select A"); freqA = vfoA.freq; set_modeA (vfoA.imode); set_bwA (vfoA.iBW); set_vfoRX(freqA); set_vfoTX(freqA); inuse = onA; } void RIG_TT550::selectB() { Fl::awake(hide_encA); xcvrstream.clear(); set_trace(1, "Select B"); freqB = vfoB.freq; set_modeB (vfoB.imode); set_bwB (vfoB.iBW); set_vfoRX(freqB); set_vfoTX(freqB); inuse = onB; } void RIG_TT550::process_freq_entry(char c) { static bool have_decimal = false; double ffreq = 0.0; unsigned long long freq = 0; if (xcvrstream.empty()) have_decimal = false; if (c != '\r') { if ((c >= '0' && c <= '9') || c == '.') { xcvrstream += c; if (!have_decimal && c == '.') have_decimal = true; else if (have_decimal && c == '.') { xcvrstream.clear(); have_decimal = false; keypad_timeout = 0; Fl::awake(hide_encA); return; } ffreq = 0; sscanf(xcvrstream.c_str(), "%lf", &ffreq); if (have_decimal) ffreq *= 1000; freq = (unsigned long long) ffreq; if (!txt_encA->visible()) Fl::awake(show_encA); Fl::awake(update_encA, (void*)xcvrstream.c_str()); // LOG_INFO("%s => %ld", str2hex(xcvrstream.c_str(), xcvrstream.length()), freq); keypad_timeout = progStatus.tt550_keypad_timeout / progStatus.serloop_timing; } } else { keypad_timeout = 0; if (xcvrstream.empty()) return; ffreq = 0; sscanf(xcvrstream.c_str(), "%lf", &ffreq); if (have_decimal) ffreq *= 1000; freq = (unsigned long long) ffreq; if (freq < 50000) freq *= 1000; Fl::awake(hide_encA); if (inuse == onA) { freqA = freq; } else { freqB = freq; } xcvrstream.clear(); have_decimal = false; } } //static const char *tt550_fkey_std::strings[] = {"None","Clear","CW++","CW--","Band++","Band--","Step++","Step--"}; void RIG_TT550::fkey_clear() { // LOG_INFO("%s", tt550_fkey_std::strings[1]); xcvrstream.clear(); keypad_timeout = 0; Fl::awake(hide_encA); } void RIG_TT550::fkey_cw_plus() { // LOG_INFO("%s", tt550_fkey_std::strings[2]); if (progStatus.tt550_cw_wpm >= 80) return; progStatus.tt550_cw_wpm++; spnr_tt550_cw_wpm->value(progStatus.tt550_cw_wpm); spnr_tt550_cw_wpm->redraw(); selrig->set_cw_wpm(); } void RIG_TT550::fkey_cw_minus() { if (progStatus.tt550_cw_wpm <= 5) return; progStatus.tt550_cw_wpm--; spnr_tt550_cw_wpm->value(progStatus.tt550_cw_wpm); spnr_tt550_cw_wpm->redraw(); selrig->set_cw_wpm(); } struct BANDS { unsigned long long lo; unsigned long long hi; unsigned long long digi; }; static BANDS ibands[] = { { 0, 1800000, 28120000 }, { 1800000, 2000000, 1807000 }, { 3500000, 4000000, 3580000 }, { 7000000, 7300000, 7035000 }, { 10100000, 10150000, 10140000 }, { 14000000, 14350000, 14070000 }, { 18068000, 18168000, 18100000 }, { 21000000, 21450000, 21070000 }, { 24890000, 24990000, 24920000 }, { 28000000, 29700000, 28120000 }, { 29700000, 0, 1807000 } }; void RIG_TT550::fkey_band_plus() { VFOQUEUE qvfo; if (inuse == onB) qvfo.vfo = vfoB; else qvfo.vfo = vfoA; for (size_t i = 1; i < sizeof(ibands) / sizeof(BANDS); i++) { if (qvfo.vfo.freq < ibands[i].lo) { qvfo.vfo.freq = ibands[i].digi; break; } } qvfo.vfo.src = UI; qvfo.vfo.iBW = 255; qvfo.vfo.imode = -1; if (inuse == onB) qvfo.change = vB; else qvfo.change = vA; srvc_reqs.push(qvfo); } void RIG_TT550::fkey_band_minus() { VFOQUEUE qvfo; if (inuse == onB) qvfo.vfo = vfoB; else qvfo.vfo = vfoA; for (size_t i = sizeof(ibands) / sizeof(BANDS) - 2; i >= 0; i--) { if (qvfo.vfo.freq > ibands[i].hi) { qvfo.vfo.freq = ibands[i].digi; break; } } qvfo.vfo.src = UI; qvfo.vfo.iBW = 255; qvfo.vfo.imode = -1; if (inuse == onB) qvfo.change = vB; else qvfo.change = vA; srvc_reqs.push(qvfo); } void RIG_TT550::fkey_step_plus() { progStatus.tt550_encoder_step++; if (progStatus.tt550_encoder_step > 4) progStatus.tt550_encoder_step = 0; sel_tt550_encoder_step->value(progStatus.tt550_encoder_step); sel_tt550_encoder_step->redraw(); } void RIG_TT550::fkey_step_minus() { progStatus.tt550_encoder_step--; if (progStatus.tt550_encoder_step < 0) progStatus.tt550_encoder_step = 4; sel_tt550_encoder_step->value(progStatus.tt550_encoder_step); sel_tt550_encoder_step->redraw(); } void RIG_TT550::process_fkey(char c) { if (c == 0x11) switch (progStatus.tt550_F1_func) { case 1 : fkey_clear(); break; case 2 : fkey_cw_plus(); break; case 3 : fkey_cw_minus(); break; case 4 : fkey_band_plus(); break; case 5 : fkey_band_minus(); break; case 6 : fkey_step_plus(); break; case 7 : fkey_step_minus(); break; default: ; } if (c == 0x12) switch (progStatus.tt550_F2_func) { case 1 : fkey_clear(); break; case 2 : fkey_cw_plus(); break; case 3 : fkey_cw_minus(); break; case 4 : fkey_band_plus(); break; case 5 : fkey_band_minus(); break; case 6 : fkey_step_plus(); break; case 7 : fkey_step_minus(); break; default: ; } if (c == 0x13) switch (progStatus.tt550_F3_func) { case 1 : fkey_clear(); break; case 2 : fkey_cw_plus(); break; case 3 : fkey_cw_minus(); break; case 4 : fkey_band_plus(); break; case 5 : fkey_band_minus(); break; case 6 : fkey_step_plus(); break; case 7 : fkey_step_minus(); break; default: ; } } void RIG_TT550::process_keypad(char c) { if (c < 0 || c > 0x7f) return; if (c == 0x11 || c == 0x12 || c == 0x13) process_fkey(c); else process_freq_entry(c); } void RIG_TT550::get_302() { if (keypad_timeout) { keypad_timeout--; if (keypad_timeout == 0) { xcvrstream.clear(); Fl::awake(hide_encA); } } // reading any pending encoder / keyboard std::strings size_t p = 0; int encval = 0; int encode = 0; size_t len; if (!readResponse()) return; pending.append(replystr); len = replystr.length(); while (p < len) { switch (replystr[p]) { case 'U' : if (len - p < 3) { pending.erase(0,p); break; } process_keypad(replystr[p+1]); p += 3; break; case '!' : if (len - p < 5) { pending.erase(0,p); break; } encval = ((unsigned char)replystr[p+1] << 8) | (unsigned char)replystr[p+2]; if (encval > 16383) encval -= 65536; encode += encval; p += 5; break; default : p++; break; } } if (encode) enc_change = encode * TT550_steps[progStatus.tt550_encoder_step]; } int RIG_TT550::get_smeter() { int sval = 0; float fval; int fp; size_t p; size_t len; get_302(); p = 0; sendCommand( TT550query, 0); get_trace(1, "get smeter"); len = readResponse(); while ((p < len) && (replystr[p] != 'S') && (replystr[p] != 'T')) p++; if (p) { pending.append(replystr.substr(0,p)); replystr.erase(0,p); } len = replystr.length(); if (replystr[0] == 'S' && len > 5) { sscanf(&replystr[1], "%4x", &sval); fval = sval/256.0; sval = (int)(fval * 100.0 / 18.0); if (sval > 100) sval = 0; smtrval = sval; Fl::awake(updateSmeter); } else if (replystr[0] == 'T' && len > 3) { fp = (unsigned char)replystr[1]; pwrval = fp; Fl::awake(updateFwdPwr); } return sval; } int RIG_TT550::get_swr() { return iswr; } int RIG_TT550::get_power_out() { cmd = TT550getFWDREF; int ret = sendCommand(cmd, 4); get_trace(1, "get power out"); if (ret < 4) return fwdpwr; size_t p = replystr.rfind("T"); if (p == std::string::npos) return fwdpwr; for (int i = 0; i < FPLEN - 1; i++) { fp[i] = fp[i+1]; rp[i] = rp[i+1]; } fp[FPLEN-1] = (unsigned int)replystr[p+1]; rp[FPLEN-1] = (unsigned int)replystr[p+2]; fwdpwr = refpwr = 0; for (int i = FPLEN - progStatus.tt550_Nsamples; i < FPLEN; i++) { if (fp[i] > fwdpwr) { fwdpwr = fp[i]; refpwr = rp[i]; } } double swr = 1.0; if (fwdpwr < 5) iswr = 0; else if (fwdpwr == refpwr) iswr = 100; else { swr = (fwdpwr + refpwr) / (fwdpwr - refpwr); iswr = (swr-1.0) * 25; if (iswr < 0) iswr = 0; if (iswr > 100) iswr = 100; } std::stringstream s; s << "Get pwr: fwc " << fwdpwr << ", refpwr" << refpwr << ", swr " << swr; set_trace(1, s.str().c_str()); return fwdpwr; } void RIG_TT550::setBfo(int val) { progStatus.bfo_freq = Bfo = val; if (inuse == onB) { set_vfoRX(freqB); set_vfoTX(freqB); } else if (split) { set_vfoRX(freqA); set_vfoTX(freqB); } else { set_vfoRX(freqA); set_vfoTX(freqA); } } int RIG_TT550::getBfo() { return Bfo; } void RIG_TT550::setVfoAdj(double v) { VfoAdj = v; set_vfoRX(inuse == onA ? freqA : freqB); } void RIG_TT550::setRit(int val) { progStatus.rit_freq = RitFreq = val; if (RitFreq) RitActive = true; if (inuse == onB) { set_vfoRX(freqB); set_vfoTX(freqB); } else if (split) { set_vfoRX(freqA); set_vfoTX(freqB); } else { set_vfoRX(freqA); set_vfoTX(freqA); } } int RIG_TT550::getRit() { return RitFreq; } void RIG_TT550::setXit(int val) { progStatus.xit_freq = XitFreq = val; if (XitFreq) XitActive = true; if (inuse == onB) { set_vfoRX(freqB); set_vfoTX(freqB); } else if (split) { set_vfoRX(freqA); set_vfoTX(freqB); } else { set_vfoRX(freqA); set_vfoTX(freqA); } } int RIG_TT550::getXit() { return XitFreq; } void RIG_TT550::set_rf_gain(int val) { cmd = TT550setRFGAIN; cmd[1] = (unsigned char)(255 - val * 2.55); if (cmd[1] == 0x0D) cmd[1] = 0x0E; RFgain = val; sendCommand(cmd, 0); std::stringstream s; s << "Set rf gain " << val << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } int RIG_TT550::get_rf_gain() { return RFgain; } void RIG_TT550::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_TT550::set_line_out() { cmd = TT550setLINEOUT; cmd[1] = (0x3F) & (((100 - progStatus.tt550_line_out) * 63) / 100); if (cmd[1] == 0x0D) cmd[1] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set line out " << progStatus.tt550_line_out << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_agc_level() { cmd = TT550setAGC; switch (progStatus.tt550_agc_level) { case 0 : cmd[1] = '1'; break; case 1 : cmd[1] = '2'; break; case 2 : cmd[1] = '3'; break; } sendCommand(cmd, 0); std::stringstream s; s << "Set agc level " << progStatus.tt550_agc_level << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_cw_wpm() { cmd = TT550setCWWPM; int duration = 7200 / progStatus.tt550_cw_wpm; int ditfactor = duration * progStatus.tt550_cw_weight; int spcfactor = duration * (2.0 - progStatus.tt550_cw_weight); int dahfactor = duration * 3; cmd[1] = 0xFF & (ditfactor >> 8); cmd[2] = 0xFF & ditfactor; cmd[3] = 0xFF & (dahfactor >> 8); cmd[4] = 0xFF & dahfactor; cmd[5] = 0xFF & (spcfactor >> 8); cmd[6] = 0xFF & spcfactor; sendCommand(cmd, 0); std::stringstream s; s << "Set CW wpm " << progStatus.tt550_cw_wpm << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_cw_vol() { int val = progStatus.tt550_cw_vol; cmd = TT550setCWMONVOL; cmd[1] = 0xFF & (val * 255) / 100; if (cmd[1] == 0x0D) cmd[1] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set CW volume " << progStatus.tt550_cw_vol << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } bool RIG_TT550::set_cw_spot() { int val = progStatus.tt550_cw_spot; cmd = TT550setCWSPOTLVL; cmd[1] = 0xFF & ((val * 255 ) / 100); if (!progStatus.tt550_spot_onoff) cmd[1] = 0; if (cmd[1] == 0x0D) cmd[1] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set CW spot " << progStatus.tt550_cw_spot << ", " << noctl(cmd); set_trace(1, s.str().c_str()); return true; } void RIG_TT550::set_spot_onoff() { set_cw_spot(); } // front panel Preamp control is hijacked for a spot control ! void RIG_TT550::set_preamp(int val) { progStatus.tt550_spot_onoff = val; set_cw_spot(); } int RIG_TT550::get_preamp() { return progStatus.preamp; } void RIG_TT550::set_cw_weight() { set_cw_wpm(); } void RIG_TT550::set_cw_qsk() { cmd = TT550setCWQSK; cmd[2] = (0xFF) & (int)(progStatus.tt550_cw_qsk * 2); if (cmd[2] == 0x0D) cmd[2] = 0x0E; sendCommand(cmd, 0); } void RIG_TT550::enable_keyer() { if (progStatus.tt550_enable_keyer) cmd = TT550setKEYER_ON; else cmd = TT550setKEYER_OFF; sendCommand(cmd, 0); std::stringstream s; s << "Set enable keyer " << (progStatus.tt550_enable_keyer ? "ON" : "OFF") << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_vox_onoff() { cmd = TT550setVOX; cmd[1] = progStatus.vox_onoff ? '1' : '0'; sendCommand(cmd, 0); std::stringstream s; s << "Set vox " << (progStatus.vox_onoff ? "ON" : "OFF") << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_vox_gain() { cmd = TT550setVOXGAIN; cmd[2] = (0xFF) & (int)(progStatus.tt550_vox_gain * 2.55); if (cmd[2] == 0x0D) cmd[2] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set vox gain " << progStatus.tt550_vox_gain << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_vox_anti() { cmd = TT550setANTIVOX; cmd[2] = (0xFF) & (int)(progStatus.tt550_vox_anti * 2.55); if (cmd[2] == 0x0D) cmd[2] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set vox anti " << progStatus.tt550_vox_anti << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_vox_hang() { cmd = TT550setVOXHANG; cmd[2] = (0xFF) & (int)(progStatus.tt550_vox_hang * 2.55); if (cmd[2] == 0x0D) cmd[2] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set vox hang " << progStatus.tt550_vox_hang << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_aux_hang() { cmd = TT550setAUXHANG; cmd[2] = 0; sendCommand(cmd, 0); std::stringstream s; s << "Set aux hang " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_compression(int on, int val) { cmd = TT550setSPEECH; cmd[1] = (0x7F) & (int)(progStatus.tt550_compression * 1.27); if (cmd[1] == 0x0D) cmd[1] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set compression " << progStatus.tt550_compression << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_auto_notch(int v) { auto_notch = v; cmd = TT550setNRNOTCH; cmd[1] = '0'; cmd[1] = noise_reduction ? '1' : '0'; if (v) cmd[2] = '1'; else cmd[2] = '0'; sendCommand(cmd, 0); std::stringstream s; s << "Set auto notch " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_noise_reduction(int b) { noise_reduction = b; cmd = TT550setNRNOTCH; if (b) cmd[1] = '1'; else cmd[1] = '0'; cmd[2] = auto_notch ? '1' : '0'; sendCommand(cmd, 0); std::stringstream s; s << "Set noise reduction " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_mic_gain(int v) { progStatus.mic_gain = v; if (!progStatus.tt550_use_line_in) { cmd = TT550setMICLINE; cmd[2] = 0; cmd[3] = (unsigned char) v; sendCommand(cmd, 0); std::stringstream s; s << "Set mic gain " << noctl(cmd); set_trace(1, s.str().c_str()); } } int RIG_TT550::get_mic_gain() { return progStatus.mic_gain; } void RIG_TT550::set_mic_line(int v) { if (progStatus.tt550_use_line_in) { cmd = TT550setMICLINE; cmd[2] = 1; cmd[3] = 0;//(unsigned char) v; sendCommand(cmd, 0); std::stringstream s; s << "Set mic line " << noctl(cmd); set_trace(1, s.str().c_str()); } } void RIG_TT550::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void RIG_TT550::set_power_control(double val) { int ival = 0; if (def_mode == TT550_AM_MODE) { progStatus.tt550_AM_level = (int)val; cmd = TT550setAMCARRIER; ival = (val * .25 - 5) * 256 / 95; } else { progStatus.power_level = (int) val; cmd = TT550setPOWER; ival = (val - 5) * 256 / 95; } if (ival == 0x0d) ival++; if (ival < 5) ival = 5; if (ival > 255) ival = 255; cmd[1] = ival; sendCommand(cmd, 0); std::stringstream s; s << "Set power control " << noctl(cmd); set_trace(1, s.str().c_str()); } double RIG_TT550::get_power_control() { return progStatus.power_level; } void RIG_TT550::set_mon_vol() { cmd = TT550setMONVOL; cmd[1] = 0xFF & ((progStatus.tt550_mon_vol * 255) / 100); if (cmd[1] == 0x0D) cmd[1] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set mon volume " << progStatus.tt550_mon_vol << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_squelch_level() { cmd = TT550setSQUELCH; cmd[1] = 0xFF & ((progStatus.tt550_squelch_level * 255) / 100); if (cmd[1] == 0x0D) cmd[1] = 0x0E; sendCommand(cmd, 0); std::stringstream s; s << "Set squelch level " << progStatus.tt550_squelch_level << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_nb_level() { cmd = TT550setBLANKER; cmd[1] = progStatus.tt550_nb_level; sendCommand(cmd, 0); std::stringstream s; s << "Set nb level " << progStatus.tt550_nb_level << ", " << noctl(cmd); set_trace(1, s.str().c_str()); } void RIG_TT550::set_noise(bool b) { progStatus.noise = b; set_noise_reduction(b); } void RIG_TT550::tuner_bypass() { } // callbacks for tt550 transceiver void cb_tt550_line_out() { pthread_mutex_lock(&mutex_serial); selrig->set_line_out(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_agc_level() { pthread_mutex_lock(&mutex_serial); selrig->set_agc_level(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_cw_wpm() { pthread_mutex_lock(&mutex_serial); selrig->set_cw_wpm(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_cw_vol() { pthread_mutex_lock(&mutex_serial); selrig->set_cw_vol(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_cw_spot() { pthread_mutex_lock(&mutex_serial); selrig->set_cw_spot(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_cw_weight() { pthread_mutex_lock(&mutex_serial); selrig->set_cw_weight(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_enable_keyer() { pthread_mutex_lock(&mutex_serial); selrig->enable_keyer(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_spot_onoff() { pthread_mutex_lock(&mutex_serial); selrig->set_spot_onoff(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_vox_gain() { pthread_mutex_lock(&mutex_serial); selrig->set_vox_gain(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_vox_anti() { pthread_mutex_lock(&mutex_serial); selrig->set_vox_anti(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_vox_hang() { pthread_mutex_lock(&mutex_serial); selrig->set_vox_hang(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_vox_onoff() { pthread_mutex_lock(&mutex_serial); selrig->set_vox_onoff(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_compression() { pthread_mutex_lock(&mutex_serial); selrig->set_compression(0,0); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_mon_vol() { pthread_mutex_lock(&mutex_serial); selrig->set_mon_vol(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_tuner_bypass() { pthread_mutex_lock(&mutex_serial); selrig->tuner_bypass(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_enable_xmtr() { pthread_mutex_lock(&mutex_serial); selrig->enable_xmtr(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_enable_tloop() { pthread_mutex_lock(&mutex_serial); selrig->enable_tloop(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_nb_level() { pthread_mutex_lock(&mutex_serial); // progStatus.tt550_nb_level = cbo_tt550_nb_level->index(); selrig->set_nb_level(); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_use_line_in() { pthread_mutex_lock(&mutex_serial); if (progStatus.tt550_use_line_in) selrig->set_mic_line(0); else selrig->set_mic_gain(progStatus.mic_gain); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_setXmtBW() { pthread_mutex_lock(&mutex_serial); selrig->set_bwA(selrig->bwA); pthread_mutex_unlock(&mutex_serial); } void cb_tt550_cw_qsk() { pthread_mutex_lock(&mutex_serial); selrig->set_cw_qsk(); pthread_mutex_unlock(&mutex_serial); } // TT-550 / at-11 internal tuner i/o commands void RIG_TT550::at11_bypass() { cmd = "$0\r"; sendCommand(cmd, 0); LOG_INFO("%s", info(cmd)); } void RIG_TT550::at11_autotune() { cmd = "$1\r"; sendCommand(cmd, 0); LOG_INFO("%s", info(cmd)); } void RIG_TT550::at11_cap_up() { cmd = "$3\r"; sendCommand(cmd, 0); LOG_INFO("%s", info(cmd)); } void RIG_TT550::at11_cap_dn() { cmd = "$4\r"; sendCommand(cmd, 0); LOG_INFO("%s", info(cmd)); } void RIG_TT550::at11_ind_up() { cmd = "$5\r"; sendCommand(cmd, 0); LOG_INFO("%s", info(cmd)); } void RIG_TT550::at11_ind_dn() { cmd = "$6\r"; sendCommand(cmd, 0); LOG_INFO("%s", info(cmd)); } void RIG_TT550::at11_hiZ() { cmd = "$7\r"; sendCommand(cmd, 0); LOG_INFO("%s", info(cmd)); } void RIG_TT550::at11_loZ() { cmd = "$8\r"; sendCommand(cmd, 0); LOG_INFO("%s", info(cmd)); } //====================================================================== // data std::strings captured from TenTec Windows control program for Pegasus //====================================================================== /* Pegasus Control Program Startup, Query and Close Sequences ========================================================== ========================= start program ====================================== WRITE Length 3: 58 58 0D "XX" READ Length 2: 0D 0D READ Length 14: 20 20 52 41 44 49 4F 20 53 54 41 52 54 0D " RADIO START" WRITE Length 3: 3F 56 0D "?V" version? READ Length 13: 56 45 52 20 31 32 39 31 2D 35 33 38 0D "VER 1291.538" WRITE Length 7: 4D 31 31 0D "M11" mode - USB / USB 50 2B 0D "P+" power = 16.8 watts WRITE Length 28: 47 31 0D "G1" agc - slow 4E 51 5C 0A A9 67 70 0D "N...." Receive tuning factor 54 51 5C 0A A9 12 20 0D "T...." Transmit tuning factor 57 0A 0D "W." Width 3000 56 3E 0D "V." Volume 24 4C 00 0D "L0" Line out - 0, full output WRITE Length 3: 50 2B 0D "P+" power = 16.8 watts WRITE Length 3: 4A 29 0D "J." sidetone volume = 16 WRITE Length 13: 4F 31 01 00 0D "O1." select line in, gain factor = 1 55 47 0F 0D "UG." Vox gain = 15 55 48 0F 0D "UH." Vox hang = 15 WRITE Length 16: 55 41 5D 0D "UA." Antivox = 36 55 30 0D "U0" Vox OFF 48 00 0D "H." Audio monitor volume = 0 23 32 0D "#2" Disable 'T' loop 23 31 0D "#1" Enable transmitter WRITE Length 26: 43 0A 0D "C." Transmit filter width = 3000 23 36 0D "#6" Enable keyer 53 00 0D "S." Squelch = 0, OFF 52 0F 0D "R." UNKNOWN 45 01 1F 03 5D 01 1F 0D "E...." Keyer timing 44 00 0D "D." Noise blanker = 0, OFF 59 00 0D "Y." Speech processor = 0, OFF WRITE Length 8: 55 51 00 0D "UQ." set CW QSK = 0..255 55 54 00 0D "UT." set AUX TX HANG = 0..255 (aux T/R delay) ============================ smeter query ====================================== WRITE Length 3: 3F 53 0D "?S" read smeter READ Length 6: 53 30 39 31 42 0D "S...." smeter value ============================== close program ==================================== WRITE Length 3: 56 00 0D "V0" volume = ZERO WRITE Length 3: 4C 3F 0D "L." Line out = 63, MINIMUM unsigned char datastream[] = { 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0xFF, 0xFF, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x21, 0x00, 0x01, 0x00, 0x0D, 0x80 }; */ flrig-2.0.04/src/rigs/tentec/TT538.cxx0000664000175000017500000003176014502041135014155 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- /* * Note for anyone wishing to expand on the command set. * * The Jupiter always sends a response and ends the response with a "G\r" to * indicate that the command was accepted. A rejected command is responded to by a * two character sequence "Z\r". You should always expect a maximum response equal * to the number of data bytes plus two. * * For example: * A request for the present receiver filter bandwidth is the the std::string: * "?W\r" which is 3 bytes in length * The response from the Argonaut V will be: * "Wn\rG\r" which is 5 bytes in length, where n is an unsigned char (byte) * If the transceiver failed to receive the command correctly it will respond: * "Z\r" ----> you need to check for that condition * */ #include "tentec/TT538.h" #include "support.h" #include "math.h" static const char TT538name_[] = "TT-538"; //static std::vectorTT538modes_ = { "D-USB", "USB", "LSB", "CW", "AM", "FM"} //static const char TT538mode_chr[] = { '1', '1', '2', '3', '0', '4' }; //static const char TT538mode_type[] = { 'U', 'U', 'L', 'L', 'U', 'U' }; static std::vectorTT538modes_; static const char *vTT538modes_[] = { "AM", "USB", "LSB", "CW", "FM"}; static const char TT538mode_chr[] = { '0', '1', '2', '3', '4' }; static const char TT538mode_type[] = { 'U', 'U', 'L', 'U', 'U' }; // filter # is 38 - index static std::vectorTT538_widths; static const char *vTT538_widths[] = { "150", "165", "180", "225", "260", "300", "330", "375", "450", "525", "600", "675", "750", "900", "1050", "1200", "1350", "1500", "1650", "1800", "1950", "2100", "2250", "2400", "2550", "2700", "2850", "3000", "3300", "3600", "3900", "4200", "4500", "4800", "5100", "5400", "5700", "6000", "8000"}; static int TT538_bw_vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39, WVALS_LIMIT}; static const int TT538_numeric_widths[] = { 150, 165, 180, 225, 260, 300, 330, 375, 450, 525, 600, 675, 750, 900, 1050, 1200, 1350, 1500, 1650, 1800, 1950, 2100, 2250, 2400, 2550, 2700, 2850, 3000, 3300, 3600, 3900, 4200, 4500, 4800, 5100, 5400, 5700, 6000, 8000}; static char TT538setFREQA[] = "*Annnn\r"; //static char TT538setFREQB[] = "*Bnnnn\r"; //static char TT538setAGC[] = "*Gn\r"; //static char TT538setSQLCH[] = "*Hc\r"; static char TT538setRF[] = "*Ic\r"; static char TT538setATT[] = "*Jc\r"; //static char TT538setNB[] = "*Knar\r"; static char TT538setMODE[] = "*Mnn\r"; static char TT538setPBT[] = "*Pxx\r"; static char TT538setVOL[] = "*Un\r"; static char TT538setBW[] = "*Wx\r"; static char TT538getFREQA[] = "?A\r"; //static char TT538getFREQB[] = "?B\r"; //static char TT538getFWDPWR[] = "?F\r"; //static char TT538getAGC[] = "?G\r"; //static char TT538getSQLCH[] = "?H\r"; //static char TT538getRF[] = "?I\r"; static char TT538getATT[] = "?J\r"; //static char TT538getNB[] = "?K\r"; static char TT538getMODE[] = "?M\r"; static char TT538getPBT[] = "?P\r"; static char TT538getSMETER[] = "?S\r"; static char TT538getVOL[] = "?U\r"; static char TT538getBW[] = "?W\r"; //static char TT538getREFPWR[] = "?R\r"; //static char TT538setXMT[] = "#1\r"; //static char TT538setRCV[] = "#0\r"; static char TT538setXMT[] = "Q1\r"; static char TT538setRCV[] = "Q0\r"; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 266, 125, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_TT538::RIG_TT538() { // base class values name_ = TT538name_; modes_ = TT538modes_; bandwidths_ = TT538_widths; bw_vals_ = TT538_bw_vals; widgets = rig_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true;// false; serial_rtsptt = false; serial_dtrptt = false; serloop_timing = 200; def_mode = modeB = modeA = 1; def_bw = bwB = bwA = 25; def_freq = freqB = freqA = 14070000ULL; max_power = 100; pbt = 0; VfoAdj = progStatus.vfo_adj; has_power_control = has_micgain_control = has_notch_control = has_preamp_control = has_tune_control = has_noise_control = false; has_smeter = has_power_out = has_swr_control = has_bpf_center = has_volume_control = has_rf_control = has_attenuator_control = has_ifshift_control = has_ptt_control = has_bandwidth_control = has_mode_control = has_vfo_adj = true; precision = 1; ndigits = 8; } //static int corrA = 0, corrB = 0; #define sTT(s) set_trace(3, s, str2hex(cmd.c_str(), cmd.length()), str2hex(replystr.c_str(), replystr.length())) #define gTT(s) get_trace(3, s, str2hex(cmd.c_str(), cmd.length()), str2hex(replystr.c_str(), replystr.length())) void RIG_TT538::checkresponse(std::string s) { if (RigSerial->IsOpen() == false) return; gTT(s.c_str()); } void RIG_TT538::initialize() { VECTOR (TT538modes_, vTT538modes_); VECTOR (TT538_widths, vTT538_widths); modes_ = TT538modes_; bandwidths_ = TT538_widths; bw_vals_ = TT538_bw_vals; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; VfoAdj = progStatus.vfo_adj; fwdpwr = refpwr = 0.0; } void RIG_TT538::shutdown() { set_if_shift(0); } bool RIG_TT538::check () { cmd = TT538getFREQA; int ret = sendCommand(cmd); gTT("check"); if (ret < 6) return false; return true; } unsigned long long RIG_TT538::get_vfoA () { cmd = TT538getFREQA; int ret = sendCommand(cmd); gTT("get vfoA"); if (ret < 6) return (unsigned long long)(freqA / (1 + VfoAdj/1e6) + 0.5); size_t p = replystr.rfind("A"); if (p == std::string::npos) return (unsigned long long)(freqA / (1 + VfoAdj/1e6) + 0.5); unsigned long long f = 0; for (size_t n = 1; n < 5; n++) f = f*256 + (unsigned char)replystr[p + n]; freqA = f; return (unsigned long long)(freqA / (1 + VfoAdj/1e6) + 0.5); } void RIG_TT538::set_vfoA (unsigned long long freq) { freqA = freq; unsigned long long xfreq = freqA * (1 + VfoAdj/1e6) + 0.5; cmd = TT538setFREQA; cmd[5] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[4] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[3] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[2] = xfreq & 0xff; sendCommand(cmd); sTT("set vfoA"); set_if_shift(pbt); return ; } unsigned long long RIG_TT538::get_vfoB () { // cmd = TT538getFREQB; cmd = TT538getFREQA; int ret = sendCommand(cmd); gTT("get vfoB"); if (ret < 6) return (unsigned long long)(freqB / (1 + VfoAdj/1e6) + 0.5); size_t p = replystr.rfind("B"); if (p == std::string::npos) return (unsigned long long)(freqB / (1 + VfoAdj/1e6) + 0.5); unsigned long long f = 0; for (size_t n = 1; n < 5; n++) f = f*256 + (unsigned char)replystr[p + n]; freqB = f; return (unsigned long long)(freqB / (1 + VfoAdj/1e6) + 0.5); } void RIG_TT538::set_vfoB (unsigned long long freq) { freqB = freq; unsigned long long xfreq = freqB * (1 + VfoAdj/1e6) + 0.5; // cmd = TT538setFREQB; cmd = TT538setFREQA; cmd[5] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[4] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[3] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[2] = xfreq & 0xff; sendCommand(cmd); sTT("set vfoB"); set_if_shift(pbt); return ; } void RIG_TT538::setVfoAdj(double v) { VfoAdj = v; } void RIG_TT538::set_modeA(int val) { modeA = val; cmd = TT538setMODE; cmd[2] = TT538mode_chr[val]; cmd[3] = cmd[2]; sendCommand(cmd); sTT("set modeA"); } int RIG_TT538::get_modeA() { cmd = TT538getMODE; int ret = sendCommand(cmd); gTT("get modeA"); if (ret < 4) return modeA; size_t p = replystr.rfind("M"); if (p == std::string::npos) return modeA; modeA = replystr[p+1] - '0'; return modeA; } int RIG_TT538::get_modetype(int n) { return TT538mode_type[n]; } void RIG_TT538::set_bwA(int val) { bwA = val; cmd = TT538setBW; cmd[2] = 38 - val; sendCommand(cmd); sTT("set bwA"); set_if_shift(pbt); } int RIG_TT538::get_bwA() { cmd = TT538getBW; int ret = sendCommand(cmd); gTT("get bwA"); if (ret < 3) return bwA; size_t p = replystr.rfind("W"); if (p == std::string::npos) return bwA; bwA = 38 - (unsigned char)replystr[p + 1]; return bwA; } int RIG_TT538::adjust_bandwidth(int m) { if (m == 0) return 37; if (m == 1 || m == 2) return 27; if (m == 3) return 10; if (m == 4) return 27; return 27; } void RIG_TT538::set_if_shift(int val) { pbt = val; cmd = TT538setPBT; int bpval = progStatus.bpf_center - 200 - TT538_numeric_widths[bwA]/2; short int si = val; if ((modeA == 1 || modeA == 2) && progStatus.use_bpf_center) si += (bpval > 0 ? bpval : 0); cmd[2] = (si & 0xff00) >> 8; cmd[3] = (si & 0xff); sendCommand(cmd); int ret = sendCommand(TT538getPBT); gTT("get PBT"); if (ret < 4) return; size_t p = replystr.rfind("P"); if (p == std::string::npos) return; if (replystr[p+1] != cmd[2] || replystr[p+2] != cmd[3]) { sendCommand(cmd); sTT("set if shift"); } } bool RIG_TT538::get_if_shift(int &val) { val = 0; // cmd = TT538getPBT; // sendCommand(cmd, 0); return false; } void RIG_TT538::get_if_min_max_step(int &min, int &max, int &step) { min = -2000; max = 2000; step = 10; } void RIG_TT538::set_attenuator(int val) { cmd = TT538setATT; if (val) cmd[2] = '1'; else cmd[2] = '0'; sendCommand(cmd); sTT("set attenuator"); } int RIG_TT538::get_attenuator() { cmd = TT538getATT; int ret = sendCommand(cmd); gTT("get attenuator"); if (ret < 3) return 0; size_t p = replystr.rfind("J"); if (p == std::string::npos) return 0; if (replystr[p+1] == '1') return 1; return 0; } int RIG_TT538::get_smeter() { double sig = 0.0; cmd = TT538getSMETER; int ret = sendCommand(cmd); gTT("get smeter"); if (ret < 6) return 0; size_t p = replystr.rfind("S"); if (p == std::string::npos) return 0; int sval; replystr[p+5] = 0; sscanf(&replystr[p+1], "%4x", &sval); sig = sval / 256.0; return (int)(sig * 50.0 / 9.0); } static int gaintable[] = { 0, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 30, 31, 32, 33, 35, 36, 37, 38, 40, 41, 42, 43, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 60, 61, 62, 64, 65, 66, 68, 69, 70, 71, 72, 74, 75, 76, 77, 79, 80, 81, 82, 84, 85, 86, 88, 89, 90, 91, 92, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 107, 108, 109, 110, 111, 113, 114, 115, 117, 118, 119, 120, 121, 123, 127, 125, 127 }; static int pot2val(int n) { int i = 0; for (i = 0; i < 100; i++) if (gaintable[i] >= n) break; return gaintable[i]; } static int val2pot(int n) { return gaintable[n]; } int RIG_TT538::get_volume_control() { cmd = TT538getVOL; int ret = sendCommand(cmd); gTT("get volume control"); if (ret < 3) return 0; size_t p = replystr.rfind("U"); if (p == std::string::npos) return 0; return pot2val(replystr[p+1] & 0x7F); } void RIG_TT538::set_volume_control(int vol) { cmd = TT538setVOL; cmd[2] = val2pot(vol); sendCommand(cmd); sTT("set volume control"); } void RIG_TT538::set_rf_gain(int val) { cmd = TT538setRF; cmd[2] = val2pot(val); sendCommand(cmd); sTT("set rf gain"); } int RIG_TT538::get_rf_gain() { // cmd = TT538getRF; // sendCommand(cmd, 3, true); //showresponse(cmd); return 100; // Jupiter does not reply with values as specified in the programmers manual // Panel RF gain 0..50% replies with 80H..00H // Panel RF gain 50..100% replies with 00H } // Tranceiver PTT on/off void RIG_TT538::set_PTT_control(int val) { if (val) sendCommand(TT538setXMT); else sendCommand(TT538setRCV); sTT("set PTT"); } int RIG_TT538::get_power_out() { int ret = sendCommand("?S\r"); // same as get smeter in receive gTT("get power out"); if (ret < 4) return fwdpwr; size_t p = replystr.rfind("T"); if (p == std::string::npos) return fwdpwr; fwdpwr = 0.8*fwdpwr + 0.2*(unsigned char)replystr[p+1]; refpwr = 0.8*refpwr + 0.2*(unsigned char)replystr[p+2]; return (int)fwdpwr; } int RIG_TT538::get_swr() { double swr, nu; if (fwdpwr == 0) return 0; if (fwdpwr == refpwr) return 100; nu = sqrt(refpwr / fwdpwr); swr = (1 + nu) / (1 - nu) - 1.0; swr *= 16.67; if (swr < 0) swr = 0; if (swr > 100) swr = 100; //LOG_INFO("swr %4.2f", swr); return (int)swr; } flrig-2.0.04/src/rigs/tentec/TT588.cxx0000664000175000017500000004111514502041135014155 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // Fernando M. Maresca, // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- /* * Note for anyone wishing to expand on the command set. * * A rejected command is responded to by a three character sequence "Zy\r". * where the y is the letter of the command in error * you need to check for that response * */ #include "tentec/TT588.h" #include "support.h" #include "math.h" #include "debug.h" // fer, debugging purpose #include #include static const char TT588name_[] = "Omni-VII"; //static std::vectorTT588modes_ = { "D-USB", "USB", "LSB", "CW", "AM", "FM"} //static const char TT588mode_chr[] = { '1', '1', '2', '3', '0', '4' }; //static const char TT588mode_type[] = { 'U', 'U', 'L', 'L', 'U', 'U' }; static std::vectorTT588modes_; static const char *vTT588modes_[] = { "AM", "USB", "LSB", "CWU", "FM", "CWL", "FSK"}; static const char TT588mode_chr[] = { '0', '1', '2', '3', '4', '5', '6' }; static const char TT588mode_type[] = { 'U', 'U', 'L', 'U', 'U', 'L', 'L' }; // filter # is 37 - index static std::vectorTT588_widths; static const char *vTT588_widths[] = { "200", "250", "300", "350", "400", "450", "500", "600", "700", "800", "900", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2500", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4500", "5000", "5500", "6000", "6500", "7000", "7500", "8000", "9000", "12000"}; static int TT588_bw_vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38, WVALS_LIMIT}; static const int TT588_numeric_widths[] = { 200, 250, 300, 350, 400, 450, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2500, 2600, 2800, 3000, 3200, 3400, 3600, 3800, 4000, 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000, 9000, 12000, 0}; static char TT588setFREQA[] = "*Annnn\r"; static char TT588setFREQB[] = "*Bnnnn\r"; //static char TT588setAGC[] = "*Gn\r"; static char TT588setSQLCH[] = "*Hc\r"; static char TT588setRF[] = "*Ic\r"; static char TT588setATT[] = "*Jc\r"; static char TT588setNB[] = "*Knar\r"; static char TT588setMODE[] = "*Mnn\r"; static char TT588setSPLIT[] = "*Nn\r"; static char TT588setPBT[] = "*Pxx\r"; static char TT588setVOL[] = "*Un\r"; static char TT588setBW[] = "*Wx\r"; // these C1* and C2* commands are for ethernet only //static char TT588setPOWER[] = "*C1Xn\r"; //static char TT588setPREAMP[] = "*C1Zn\r"; //static char TT588getPOWER[] = "?C1X\r"; //static char TT588getPREAMP[] = "?C1Z\r"; // set pout is not available under serial interface //static char TT588setPOWER[] = "*C1Xn\r"; // F command gets fwd and ref power //static char TT588getFWDPWR[] = "?F\r"; static char TT588getPOWER[] = "?F\r"; static char TT588getFREQA[] = "?A\r"; static char TT588getFREQB[] = "?B\r"; //static char TT588getAGC[] = "?G\r"; static char TT588getSQLCH[] = "?H\r"; static char TT588getRF[] = "?I\r"; static char TT588getATT[] = "?J\r"; static char TT588getNB[] = "?K\r"; static char TT588getMODE[] = "?M\r"; static char TT588getSPLIT[] = "?N\r"; static char TT588getPBT[] = "?P\r"; static char TT588getSMETER[] = "?S\r"; static char TT588getVOL[] = "?U\r"; static char TT588getBW[] = "?W\r"; //static char TT588getFWDPWR[] = "?F\r"; //static char TT588getREFPWR[] = "?R\r"; static char TT588setXMT[] = "*Tnn\r"; static GUI tt588_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 125, 156 }, { (Fl_Widget *)sldrSQUELCH, 266, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_TT588::RIG_TT588() { // base class values name_ = TT588name_; modes_ = TT588modes_; bandwidths_ = TT588_widths; bw_vals_ = TT588_bw_vals; widgets = tt588_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = false; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true;// false; serial_rtsptt = false; serial_dtrptt = false; serloop_timing = 200; def_mode = modeB = modeA = A.imode = B.iBW = 1; def_bw = bwB = bwA = A.iBW = B.iBW = 15; def_freq = freqB = freqA = A.freq = B.freq = 14070000ULL; max_power = 100; pbt = 0; VfoAdj = progStatus.vfo_adj; vfo_corr = 0; atten_level = 0; nb_ = 0; an_ = 0; has_preamp_control = has_bpf_center = has_power_control = // must be in REMOTE mode has_micgain_control = // must be in REMOTE mode has_tune_control = has_vfo_adj = false; can_change_alt_vfo = // has_auto_notch = // has_notch_control = has_split = has_split_AB = has_smeter = has_power_out = has_swr_control = has_volume_control = has_rf_control = has_attenuator_control = has_ifshift_control = has_sql_control = has_ptt_control = has_bandwidth_control = has_noise_control = has_mode_control = true; precision = 1; ndigits = 8; } void RIG_TT588::initialize() { VECTOR (TT588modes_, vTT588modes_); VECTOR (TT588_widths, vTT588_widths); modes_ = TT588modes_; bandwidths_ = TT588_widths; bw_vals_ = TT588_bw_vals; tt588_widgets[0].W = btnVol; tt588_widgets[1].W = sldrVOLUME; tt588_widgets[2].W = sldrRFGAIN; tt588_widgets[3].W = sldrMICGAIN; tt588_widgets[4].W = sldrSQUELCH; VfoAdj = progStatus.vfo_adj; } void RIG_TT588::shutdown() { set_if_shift(0); } bool RIG_TT588::check () { cmd = TT588getFREQA; int ret = waitN(6, 100, "check"); if (ret < 6) return false; return true; } unsigned long long RIG_TT588::get_vfoA () { cmd = TT588getFREQA; int ret = waitN(6, 100, "get vfo A"); if (ret >= 6) { /* whenever 41 is in the freq. value answered, we don't want to use that index for an offset. (reproduce: freq. set around 21 MHz, then drag the wf to change freq. up and down.) */ size_t p = replystr.rfind("A"); if (p != std::string::npos) { unsigned long long f = 0; for (size_t n = 1; n < 5; n++) f = f*256 + (unsigned char)replystr[n]; freqA = f; } } return (unsigned long long)(freqA - vfo_corr); } void RIG_TT588::set_vfoA (unsigned long long freq) { freqA = freq; vfo_corr = (freq / 1e6) * VfoAdj + 0.5; unsigned long long xfreq = freqA + vfo_corr; cmd = TT588setFREQA; cmd[5] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[4] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[3] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[2] = xfreq & 0xff; sendCommand(cmd); showresp(WARN, HEX, "set vfo A", cmd, replystr); return ; } unsigned long long RIG_TT588::get_vfoB() { cmd = TT588getFREQB; int ret = waitN(6, 100, "get vfo B"); if (ret >= 6) { size_t p = replystr.rfind("B"); if (p != std::string::npos) { unsigned long long f = 0; for (size_t n = 1; n < 5; n++) f = f*256 + (unsigned char)replystr[n]; freqB = f; } } return (unsigned long long)(freqB - vfo_corr); } void RIG_TT588::set_vfoB (unsigned long long freq) { freqB = freq; vfo_corr = (freq / 1e6) * VfoAdj + 0.5; unsigned long long xfreq = freqB + vfo_corr; cmd = TT588setFREQB; cmd[5] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[4] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[3] = xfreq & 0xff; xfreq = xfreq >> 8; cmd[2] = xfreq & 0xff; sendCommand(cmd); showresp(WARN, HEX, "set vfo B", cmd, replystr); return ; } void RIG_TT588::setVfoAdj(double v) { VfoAdj = v; } void RIG_TT588::set_modeA(int val) { modeA = val; cmd = TT588setMODE; cmd[2] = TT588mode_chr[modeA]; cmd[3] = TT588mode_chr[modeB]; sendCommand(cmd); showresp(WARN, HEX, "set mode A", cmd, replystr); } void RIG_TT588::set_modeB(int val) { modeB = val; cmd = TT588setMODE; cmd[2] = TT588mode_chr[modeA]; cmd[3] = TT588mode_chr[modeB]; sendCommand(cmd); showresp(WARN, HEX, "set mode B", cmd, replystr); } int RIG_TT588::get_modeA() { cmd = TT588getMODE; int ret = waitN(4, 100, "get mode A"); if (ret < 4) return modeA; size_t p = replystr.rfind("M"); if (p == std::string::npos) return modeA; modeA = replystr[p + 1] - '0'; return modeA; } int RIG_TT588::get_modeB() { cmd = TT588getMODE; int ret = waitN(4, 100, "get mode B"); if (ret < 4) return modeB; size_t p = replystr.rfind("M"); if (p == std::string::npos) return modeB; modeB = replystr[p + 2] - '0'; return modeB; } int RIG_TT588::get_modetype(int n) { return TT588mode_type[n]; } void RIG_TT588::set_bwA(int val) { bwA = val; cmd = TT588setBW; cmd[2] = 37 - val; sendCommand(cmd); showresp(WARN, HEX, "set BW A", cmd, replystr); set_if_shift(pbt); } void RIG_TT588::set_bwB(int val) { bwB = val; cmd = TT588setBW; cmd[2] = 37 - val; sendCommand(cmd); showresp(WARN, HEX, "set BW B", cmd, replystr); set_if_shift(pbt); } int RIG_TT588::get_bwA() { cmd = TT588getBW; int ret = waitN(3, 100, "get BW A"); if (ret < 3) return 37 - bwA; size_t p = replystr.rfind("W"); if (p == std::string::npos) return 37 - bwA; bwA = (int)(replystr[p + 1] & 0x7F); return 37 - bwA; } int RIG_TT588::get_bwB() { cmd = TT588getBW; int ret = waitN(3, 100, "get BW B"); if (ret < 3) return 37 - bwB; size_t p = replystr.rfind("W"); if (p == std::string::npos) return 37 - bwB; bwB = (int)(replystr[p + 1] & 0x7F); return 37 - bwB; } int RIG_TT588::adjust_bandwidth(int m) { if (m == 0) return 35; // AM if (m == 1 || m == 2) return 22; // LSB-USB if (m == 3 || m == 5) return 9; if (m == 6) return 0; if (m == 4) return 25; return 22; } int RIG_TT588::def_bandwidth(int m) { return adjust_bandwidth(m); } void RIG_TT588::set_if_shift(int val) { pbt = val; cmd = TT588setPBT; short int si = val; int bpval = progStatus.bpf_center - 200 - TT588_numeric_widths[bwA]/2; if ((modeA == 1 || modeA == 2) && progStatus.use_bpf_center) si += (bpval > 0 ? bpval : 0); cmd[2] = (si & 0xff00) >> 8; cmd[3] = (si & 0xff); sendCommand(cmd); showresp(WARN, HEX, "set pbt", cmd, replystr); } bool RIG_TT588::get_if_shift(int &val) { cmd = TT588getPBT; int ret = waitN(4, 100, "get pbt"); val = pbt; if (ret >= 4) { size_t p = replystr.rfind("P"); if (p != std::string::npos) { val = ((replystr[p + 1] & 0xFF) << 8) | (replystr[p+2] & 0xFF); if (val > 0x7FFF) val -= 0x10000; } } return (val == 0 ? false : true); } void RIG_TT588::get_if_min_max_step(int &min, int &max, int &step) { min = -2500; max = 2500; step = 10; } int RIG_TT588::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_TT588::set_attenuator(int val) { atten_level = val; cmd = TT588setATT; cmd[2] = '0' + atten_level; sendCommand(cmd); showresp(WARN, HEX, "set att", cmd, replystr); } int RIG_TT588::get_attenuator() { cmd = TT588getATT; int ret = waitN(3, 100, "get att"); int val = atten_level; if (ret >= 3) { size_t p = replystr.rfind("J"); if (p != std::string::npos) val = (replystr[p + 1] - '0'); } if (atten_level != val) atten_level = val; return atten_level; } const char *RIG_TT588::ATT_label() { if (atten_level == 0) return "0 dB"; if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } int RIG_TT588::get_smeter() { int sval = 0; float fval = 0; cmd = TT588getSMETER; int ret = waitN(6, 100, "get smeter"); if (ret < 6) return sval; size_t p = replystr.rfind("S"); if (p == std::string::npos) return sval; sscanf(&replystr[p + 1], "%4x", &sval); fval = sval/256.0; sval = (int)(fval * 100.0 / 18.0); if (sval > 100) sval = 100; return sval; } int RIG_TT588::get_volume_control() { cmd = TT588getVOL; int ret = waitN(3, 100, "get vol"); if (ret < 3) return progStatus.volume; size_t p = replystr.rfind("U"); if (p == std::string::npos) return progStatus.volume; return (int)((replystr[p + 1] & 0x7F) / 1.27); } void RIG_TT588::set_volume_control(int vol) { cmd = TT588setVOL; cmd[2] = 0x7F & (int)(vol * 1.27); sendCommand(cmd); showresp(WARN, HEX, "set vol", cmd, replystr); } void RIG_TT588::set_rf_gain(int val) { cmd = TT588setRF; cmd[2] = 0x7F & (int)(val * 1.27); sendCommand(cmd); showresp(WARN, HEX, "set rfgain", cmd, replystr); } int RIG_TT588::get_rf_gain() { cmd = TT588getRF; int ret = waitN(3, 100, "get rfgain"); if (ret < 3) return 100; size_t p = replystr.rfind("I"); if (p == std::string::npos) return 100; return (int)((replystr[p+1] & 0x7F) / 1.27); } // Tranceiver PTT on/off void RIG_TT588::set_PTT_control(int val) { cmd = TT588setXMT; if (val) { cmd[2] = 0x04; cmd[3] = 0; } else { cmd[2] = 0; cmd[3] = 0; } sendCommand(cmd); showresp(WARN, HEX, "set PTT", cmd, replystr); } int RIG_TT588::get_power_out() { cmd = TT588getPOWER; int ret = waitN(4, 100, "get pout"); if (ret < 4) return 0; size_t p = replystr.rfind("F"); if (p == std::string::npos) return 0; fwdpwr = replystr[p + 1] & 0x7F; refpwr = replystr[p + 2] & 0x7F; // it looks like it never returns reflected power < 1 refpwr -= 1; fwdv = sqrtf(fwdpwr); refv = sqrtf(refpwr); return fwdpwr; } int RIG_TT588::get_swr() { float swr = (fwdv + refv)/(fwdv - refv) ; swr -= 1; swr *= 25.0; if (swr < 0) swr = 0; if (swr > 100) swr = 100; return (int)swr; } void RIG_TT588::set_squelch(int val) { cmd = TT588setSQLCH; cmd[2] = (unsigned char)(val * 1.27); sendCommand(cmd); showresp(WARN, HEX, "set sql", cmd, replystr); } int RIG_TT588::get_squelch() { cmd = TT588getSQLCH; int ret = waitN(3, 100, "get sql"); if (ret < 3) return 0; size_t p = replystr.rfind("H"); if (p == std::string::npos) return 0; return (int)((replystr[p+1] & 0x7F) / 1.27); } void RIG_TT588::set_noise(bool val) { static char nblabel[] = "NB "; nb_++; if (nb_ == 8) nb_ = 0; nblabel[2] = '0' + nb_; nb_label(nblabel, nb_ ? true : false); cmd = TT588setNB; cmd[2] = (unsigned char)nb_; cmd[3] = 0; cmd[4] = (unsigned char)an_; sendCommand(cmd); showresp(WARN, HEX, "set NB", cmd, replystr); } int RIG_TT588::get_noise() { cmd = TT588getNB; int ret = waitN(5, 100, "get NB"); if (ret < 5) return nb_; size_t p = replystr.rfind("K"); if (p == std::string::npos) return nb_; int val = replystr[p+1]; if (nb_ != val) nb_ = val; static char nblabel[] = "NB "; nblabel[2] = '0' + nb_; nb_label(nblabel, nb_ ? true : false); return nb_; } /* void RIG_TT588::set_auto_notch(int val) { static char anlabel[] = "AN "; an_++; if (an_ == 10) an_ = 0; anlabel[2] = '0' + an_; auto_notch_label(anlabel, an_ > 0 ? true : false); cmd = TT588setNB; cmd[2] = (unsigned char)nb_; cmd[3] = 0; cmd[4] = (unsigned char)an_; sendCommand(cmd); } int RIG_TT588::get_auto_notch() { cmd = TT588getNB; int ret = sendCommand(cmd); showresp(WARN, HEX, "get AN", cmd, replystr); int val = an_; if (ret >= 5) { size_t p = replystr.rfind("K"); if (p != std::string::npos) val = replystr[p+3]; } if (an_ != val) an_ = val; static char anlabel[] = "AN "; anlabel[2] = '0' + an_; auto_notch_label(anlabel, an_ ? true : false); return an_; } */ void RIG_TT588::set_split(bool val) { cmd = TT588setSPLIT; cmd[2] = val == true ? 1 : 0; sendCommand(cmd); showresp(WARN, HEX, "set split", cmd, replystr); } int RIG_TT588::get_split() { cmd = TT588getSPLIT; int ret = waitN(3, 100, "get split"); if (ret == 3) return (replystr[1] == 0x01); return false; } /* double RIG_TT588::get_power_control(void) { cmd = TT588getPOWER; int ret = waitN(7, 100, "get pc"); if (ret == 7) { int pc = replystr[3] & 0x7F; return (int)ceil(pc / 1.27); } return 0; } void RIG_TT588::set_power_control(double val) { cmd = TT588setPOWER; cmd[4] = ((int)(val * 1.27) & 0x7f); sendCommand(cmd); showresp(WARN, HEX, "set pc", cmd, replystr); } int RIG_TT588::get_preamp() { cmd = TT588getPREAMP; int ret = waitN(5, 100, "get preamp"); if (ret == 5) return replystr[3]; return 0; } void RIG_TT588::set_preamp(int val) { cmd = TT588setPREAMP; cmd[4] = (val == 0 ? 0 : 1); sendCommand(cmd); showresp(WARN, HEX, "set preamp", cmd, replystr); } */ flrig-2.0.04/src/rigs/tentec/TT566.cxx0000664000175000017500000004167414502041135014163 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // Code updates by // Harry McGavran, W5PNY // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "tentec/TT566.h" #include "rigbase.h" #include "support.h" //============================================================================= // TT-566 #define LCW 3 #define UCW 2 static int cur_modeA = 0; static int cur_modeB = 0; static const char RIG_TT566name_[] = "Orion-II"; static std::vectorRIG_TT566modes_; static const char *vRIG_TT566modes_[] = { "USB", "LSB", "UCW", "LCW", "AM", "FM", "FSK"}; static const char RIG_TT566_mode_type[] = {'U', 'L', 'U', 'L', 'U', 'U', 'L'}; static std::vectorRIG_TT566widths; static const char *vRIG_TT566widths[] = { "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4500", "5000", "5500", "6000"}; static int RIG_TT566_bw_vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29, WVALS_LIMIT}; static char TT566setFREQa[] = "*AF"; // binary data static char TT566getFREQa[] = "?AF\r"; static char TT566rspFREQa[] = "@AF"; static char TT566setFREQb[] = "*BF"; static char TT566getFREQb[] = "?BF\r"; static char TT566rspFREQb[] = "@BF"; static char TT566setMODEa[] = "*RMM"; static char TT566getMODEa[] = "?RMM\r"; static char TT566rspMODEa[] = "@RMM"; static char TT566setMODEb[] = "*RSM"; static char TT566getMODEb[] = "?RSM\r"; static char TT566rspMODEb[] = "@RSM"; static char TT566setBWa[] = "*RMF"; static char TT566getBWa[] = "?RMF\r"; static char TT566rspBWa[] = "@RMF"; static char TT566setBWb[] = "*RSF"; static char TT566getBWb[] = "?RSF\r"; static char TT566rspBWb[] = "@RSF"; static char TT566setVOLa[] = "*UM"; static char TT566getVOLa[] = "?UM\r"; static char TT566rspVOLa[] = "@UM"; static char TT566setRFGa[] = "*RMG"; static char TT566getRFGa[] = "?RMG\r"; static char TT566rspRFGa[] = "@RMG"; static char TT566setATTa[] = "*RMT"; static char TT566getATTa[] = "?RMT\r"; static char TT566rspATTa[] = "@RMT"; static char TT566setANa[] = "*RMNA"; static char TT566setNBa[] = "*RMNB"; static char TT566getNBa[] = "?RMNB\r"; static char TT566rspNBa[] = "@RMNB"; static char TT566setMIC[] = "*TM"; static char TT566getMIC[] = "?TM\r"; static char TT566rspMIC[] = "@TM"; static char TT566setPWR[] = "*TP"; static char TT566getPWR[] = "?TP\r"; static char TT566rspPWR[] = "@TP"; static char TT566getSMETER[] = "?S\r"; static char TT566rspSMETER[] = "@SRM"; static char TT566rspPOUT[] = "@STF"; static char TT566setPREAMP[] = "*RME"; // ONLY AVAILABLE ON PRIMARY RX static char TT566getPREAMP[] = "?RME\r"; static char TT566rspPREAMP[] = "@RME"; static char TT566setPTT[] = "*T"; //static char TT566setVOLb[] = "*US"; //static char TT566getVOLb[] = "?US\r"; //static char TT566rspVOLb[] = "@US"; //static char TT566setPBTa[] = "*RMP"; //static char TT566getPBTa[] = "?RMP\r"; //static char TT566rspPBTa[] = "@RMP"; //static char TT566setPBTb[] = "*RSP"; //static char TT566getPBTb[] = "?RSP\r"; //static char TT566rspPBTb[] = "@RSP"; //static char TT566setAGCa[] = "*RMA"; //static char TT566getAGCa[] = "?RMA\r"; //static char TT566rspAGCa[] = "@RMA"; //static char TT566setAGCb[] = "*RSA"; //static char TT566getAGCb[] = "?RSA\r"; //static char TT566rspAGCb[] = "@RSA"; //static char TT566setRFGb[] = "*RSG"; //static char TT566getRFGb[] = "?RSG\r"; //static char TT566rspRFGb[] = "@RSG"; //static char TT566setATTb[] = "*RST"; //static char TT566getATTb[] = "?RST\r"; //static char TT566rspATTb[] = "@RST"; //static char TT566setSQLa[] = "*RMS"; //static char TT566getSQLa[] = "?RMS\r"; //static char TT566rspSQLa[] = "@RMS"; //static char TT566setSQLb[] = "*RSS"; //static char TT566getSQLb[] = "?RSS\r"; //static char TT566rspSQLb[] = "@RSS"; //static char TT566setANb[] = "*RSNA"; //static char TT566getANb[] = "?RSNA\r"; //static char TT566rspANb[] = "@RSNA"; //static char TT566setNBb[] = "*RSNB"; //static char TT566getNBb[] = "?RSNB\r"; //static char TT566rspNBb[] = "@RSNB"; //static char TT566setTBW[] = "*TF"; //static char TT566getTBW[] = "?TF\r"; //static char TT566rspTBW[] = "@TF"; //static char TT566setTUNE[] = "*TT"; //static char TT566getTUNE[] = "?TT\r"; //static char TT566rspTUNE[] = "@TT"; //static char TT566setRITa[] = "*RMR"; //static char TT566getRITa[] = "?RMR\r"; //static char TT566rspRITa[] = "@RMR"; //static char TT566setRITb[] = "*RSR"; //static char TT566getRITb[] = "?RSR\r"; //static char TT566rspRITb[] = "@RSR"; //static char TT566setXIT[] = "*RMX"; // ONLY AVAILABLE ON PRIMARY RX //static char TT566getXIT[] = "?RMX\r"; //static char TT566rspXIT[] = "@RMX"; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 125, 156 }, { (Fl_Widget *)sldrPOWER, 266, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_TT566::RIG_TT566() { name_ = RIG_TT566name_; modes_ = RIG_TT566modes_; bandwidths_ = RIG_TT566widths; bw_vals_ = RIG_TT566_bw_vals; widgets = rig_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; def_mode = modeB = modeA = A.imode = B.imode = 1; def_bw = bwB = bwA = A.iBW = B.iBW = 19; def_freq = freqB = freqA = A.freq = B.freq = 14070000ULL; max_power = 100; atten_level = 0; // has_ifshift_control = // has_agc_level = can_change_alt_vfo = has_smeter = has_power_out = has_rf_control = has_volume_control = has_micgain_control = has_swr_control = has_mode_control = has_bandwidth_control = has_ptt_control = has_preamp_control = has_noise_control = has_auto_notch = has_attenuator_control = has_power_control = true; precision = 1; ndigits = 8; }; void RIG_TT566::initialize() { VECTOR (RIG_TT566modes_, vRIG_TT566modes_); VECTOR (RIG_TT566widths, vRIG_TT566widths); modes_ = RIG_TT566modes_; bandwidths_ = RIG_TT566widths; bw_vals_ = RIG_TT566_bw_vals; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = sldrMICGAIN; rig_widgets[4].W = sldrPOWER; } int RIG_TT566::adjust_bandwidth(int m) { switch (m) { case 0 : case 1 : return 19; case 2 : case 3 : return 4; case 4 : case 5 : return 24; case 6 : default : return 7; } return 19; } #define waitcr(n) wait_char('\r', n, 100, "", ASC) bool RIG_TT566::check () { cmd = TT566getFREQa; // replystr = "@AF14070050\r"; waitcr(12); getcr("check vfo A"); size_t p = replystr.rfind(TT566rspFREQa); if (p == std::string::npos) return false; return true; } unsigned long long RIG_TT566::get_vfoA () { cmd = TT566getFREQa; // replystr = "@AF14070050\r"; waitcr(12); getcr("get vfo A"); size_t p = replystr.rfind(TT566rspFREQa); if (p == std::string::npos) return A.freq; unsigned long long f = 0; sscanf(&replystr[p + strlen(TT566rspFREQa)], "%llu", &f); A.freq = f; return A.freq; } void RIG_TT566::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = TT566setFREQa; cmd.append(to_decimal(freq, 8)); cmd += '\r'; sendCommand(cmd); setcr("set vfo A"); return; } unsigned long long RIG_TT566::get_vfoB () { cmd = TT566getFREQb; // replystr = "@BF7070000\r"; waitcr(12); getcr("get vfo B"); size_t p = replystr.rfind(TT566rspFREQb); if (p == std::string::npos) return B.freq; unsigned long long f = 0; sscanf(&replystr[p + strlen(TT566rspFREQb)], "%llu", &f); B.freq = f; return B.freq; } void RIG_TT566::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = TT566setFREQb; cmd.append(to_decimal(freq, 8)); cmd += '\r'; sendCommand(cmd); setcr("set vfo B"); return; } void RIG_TT566::set_modeA(int md) { A.imode = md; cur_modeA = A.imode; cmd = TT566setMODEa; cmd += '0' + md; cmd += '\r'; sendCommand(cmd); setcr("set mode A"); } int RIG_TT566::get_modeA() { cmd = TT566getMODEa; // replystr = "@RMM3\r"; waitcr(6); getcr("get mode A"); size_t p = replystr.rfind(TT566rspMODEa); if (p == std::string::npos) return A.imode; A.imode = replystr[p + strlen(TT566rspMODEa)] - '0'; cur_modeA = A.imode; return A.imode; } void RIG_TT566::set_modeB(int md) { B.imode = md; cur_modeB = B.imode; cmd = TT566setMODEb; cmd += '0' + md; cmd += '\r'; sendCommand(cmd); setcr("set mode B"); } int RIG_TT566::get_modeB() { cmd = TT566getMODEb; // replystr = "@RSM2\r"; waitcr(6); getcr("get mode B"); size_t p = replystr.rfind(TT566rspMODEb); if (p == std::string::npos) return B.imode; B.imode = replystr[p + strlen(TT566rspMODEb)] - '0'; cur_modeB = B.imode; return B.imode; } void RIG_TT566::set_bwA(int bw) { A.iBW = bw; cmd = TT566setBWa; cmd.append(RIG_TT566widths[bw]); cmd += '\r'; sendCommand(cmd); setcr("set bw A"); } int RIG_TT566::get_bwA() { cmd = TT566getBWa; // replystr = "@RMF3000\r"; waitcr(9); getcr("get bw A"); size_t p = replystr.rfind(TT566rspBWa); if (p == std::string::npos) return A.iBW; std::string bwstr = replystr.substr(p + strlen(TT566rspBWa)); if (bwstr[bwstr.length() - 1] == '\r') bwstr.erase(bwstr.length() - 1); if (replystr.empty()) return A.iBW; size_t i = 0; for (i = 0; i < RIG_TT566widths.size(); i++) { if (bwstr == RIG_TT566widths[i]) { A.iBW = i; break; } } return A.iBW; } void RIG_TT566::set_bwB(int bw) { B.iBW = bw; cmd = TT566setBWb; cmd.append(RIG_TT566widths[bw]); cmd += '\r'; sendCommand(cmd); setcr("set bw B"); } int RIG_TT566::get_bwB() { cmd = TT566getBWb; // replystr = "@RSF500\r"; waitcr(9); getcr("get bw B"); size_t p = replystr.rfind(TT566rspBWb); if (p == std::string::npos) return B.iBW; std::string bwstr = replystr.substr(p + strlen(TT566rspBWb)); if (bwstr[bwstr.length() - 1] == '\r') bwstr.erase(bwstr.length() - 1); if (replystr.empty()) return B.iBW; size_t i = 0; for (i = 0; i < RIG_TT566widths.size(); i++) { if (bwstr == RIG_TT566widths[i]) { B.iBW = i; break; } } return B.iBW; } int RIG_TT566::get_modetype(int n) { return RIG_TT566_mode_type[n]; } double RIG_TT566::get_power_control(void) { cmd = TT566getPWR; // replystr = ""; waitcr(9); getcr("get power control"); size_t p = replystr.rfind(TT566rspPWR); if (p == std::string::npos) return 0; int pwr; sscanf(replystr.substr(p + strlen(TT566rspPWR)).c_str(), "%d", &pwr); return pwr; } void RIG_TT566::set_power_control(double val) { cmd = TT566setPWR; cmd.append(to_decimal(val,3)); cmd += '\r'; sendCommand(cmd); setcr("set power control"); } void RIG_TT566::get_pc_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } static int auto_notch_state = 0; void RIG_TT566::set_auto_notch(int v) { cmd = TT566setANa; cmd += v ? "1\r" : "0\r"; sendCommand(cmd); auto_notch_state = v; setcr("set auto notch"); } int RIG_TT566::get_auto_notch() { return auto_notch_state; } void RIG_TT566::set_PTT_control(int val) { ptt_ = val; cmd = TT566setPTT; cmd += val ? "K\r" : "U\r"; sendCommand(cmd); setcr("set PTT"); } static std::string pmeter = ""; int RIG_TT566::get_PTT() { cmd = TT566getSMETER; waitcr(12); getcr("get PTT"); pmeter = replystr; if (pmeter.rfind(TT566rspPOUT) != std::string::npos) { ptt_ = true; } else ptt_ = false; return ptt_; } // @SRM064S017 int RIG_TT566::get_smeter() { int dbm = 0; size_t p = pmeter.rfind(TT566rspSMETER); if (p == std::string::npos) { cmd = TT566getSMETER; waitcr(12); getcr("get smeter"); pmeter = replystr; p = pmeter.rfind(TT566rspSMETER); } else { get_trace(2, "get_smeter", pmeter.c_str()); } if (p != std::string::npos) sscanf(pmeter.substr(p + strlen(TT566rspSMETER)).c_str(), "%d", &dbm); pmeter.clear(); return 5 * dbm / 9; // 90 = S9 --> 50% of full scale of flrig display } static float swr = 1.0; int RIG_TT566::get_power_out() { getr("get power out"); size_t p = pmeter.rfind(TT566rspPOUT); if (p == std::string::npos) { cmd = TT566getSMETER; waitcr(12); getcr("get smeter"); pmeter = replystr; p = pmeter.rfind(TT566rspPOUT); } else { get_trace(2, "get_power_out", pmeter.c_str()); } if (p != std::string::npos) sscanf(pmeter.substr(p + strlen(TT566rspPOUT)).c_str(), "%dR%dS%f", &fwdpwr, &refpwr, &swr); pmeter.clear(); return 3 * fwdpwr / 2; } int RIG_TT566::get_swr() { if (fwdpwr == 0) return 0; float swr = (sqrtf(fwdpwr) + sqrtf(refpwr))/(sqrt(fwdpwr) - sqrt(refpwr) + .0001); swr = (swr - 1.0)*25; if (swr < 0) swr = 0; if (swr > 100) swr = 100; return (int)swr; } int RIG_TT566::get_volume_control() { cmd = TT566getVOLa; // replystr = ""; waitcr(9); getcr("get volume control"); int val = 0; size_t p = replystr.rfind(TT566rspVOLa); if (p == std::string::npos) return 0; sscanf(replystr.substr(p + strlen(TT566rspVOLa)).c_str(), "%d", &val); val = (100*val)/255; return val; } void RIG_TT566::set_volume_control(int val) { val = (255*val)/100; cmd = TT566setVOLa; cmd.append(to_decimal(val,3)); cmd += '\r'; sendCommand(cmd); setcr("set volume control"); } void RIG_TT566::set_mic_gain(int val) { cmd = TT566setMIC; cmd.append(to_decimal(val,3)); cmd += '\r'; sendCommand(cmd); setcr("set mic gain"); } int RIG_TT566::get_mic_gain() { cmd = TT566getMIC; // replystr = ""; waitcr(9); getcr("get mic gain"); int val = 0; size_t p = replystr.rfind(TT566rspMIC); if (p == std::string::npos) return 0; sscanf(replystr.substr(p + strlen(TT566rspMIC)).c_str(), "%d", &val); return val; } /* void RIG_TT566::set_if_shift(int val) { char sznum[6]; snprintf(sznum, sizeof(sznum), "%d", val); cmd = TT566getPBTa; cmd.append(sznum); cmd += '\r'; sendCommand(cmd); } bool RIG_TT566::get_if_shift(int &val) { int retval = 0; cmd = TT566getPBTa; sendCommand(cmd, strlen(TT566rspPBTa)+6); size_t p = replystr.rfind(TT566rspPBTa); if (p == std::string::npos) return false; sscanf(&replystr[p + 4], "%d", &retval); val = retval; if (val) return true; return false; } */ void RIG_TT566::set_rf_gain(int val) { cmd = TT566setRFGa; char sznum[5]; snprintf(sznum, sizeof(sznum), "%d\r", val); cmd.append(sznum); sendCommand(cmd); setcr("set rf gain"); } int RIG_TT566::get_rf_gain() { cmd = TT566getRFGa; // replystr = ""; waitcr(9); getcr("get rf gain"); size_t p = replystr.rfind(TT566rspRFGa); if (p == std::string::npos) return 0; int retval = 0; sscanf(replystr.substr(p + strlen(TT566rspRFGa)).c_str(), "%d", &retval); return retval; } int RIG_TT566::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_TT566::set_attenuator(int val) { atten_level = val; cmd = TT566setATTa; cmd += (atten_level + '0'); cmd += '\r'; sendCommand(cmd); setcr("set attenuator"); } int RIG_TT566::get_attenuator() { cmd = TT566getATTa; // replystr = ""; waitcr(7); int val = atten_level; size_t p = replystr.rfind(TT566rspATTa); if (p == std::string::npos) return val; val = (replystr[p + strlen(TT566rspATTa)] - '0'); if (atten_level != val) atten_level = val; return atten_level; } void RIG_TT566::set_preamp(int val) { cmd = TT566setPREAMP; cmd += val ? "1\r" : "0\r"; sendCommand(cmd); setcr("set preamp"); } int RIG_TT566::get_preamp() { cmd = TT566getPREAMP; // replystr = ""; waitcr(7); size_t p = replystr.rfind(TT566rspPREAMP); if (p == std::string::npos) return 0; return replystr[p + strlen(TT566rspPREAMP)] - '0'; } const char *RIG_TT566::PRE_label() { if (preamp_level == 1) return "Pr ON"; return "Pre"; } const char *RIG_TT566::ATT_label() { if (atten_level == 0) return "0 dB"; if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } void RIG_TT566::set_noise(bool val) { cmd = TT566setNBa; cmd += val ? "1\r" : "0\r"; sendCommand(cmd); setcr("set noise"); } int RIG_TT566::get_noise() { cmd = TT566getNBa; // replystr = ""; waitcr(7); size_t p = replystr.rfind(TT566rspNBa); if (p == std::string::npos) return 0; return replystr[p + strlen(TT566rspNBa)] - '0'; } flrig-2.0.04/src/rigs/tentec/TT563.cxx0000664000175000017500000001641614502041135014154 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "tentec/TT563.h" //============================================================================= // TT-563 static const char RIG_TT563name_[] = "OMNI-VI"; static std::vectorRIG_TT563modes_; static const char *vRIG_TT563modes_[] = { "LSB", "USB", "AM", "CW", "RTTY", "FM"}; static const char RIG_TT563_mode_type[] = {'L', 'U', 'U', 'U', 'L', 'U'}; static std::vectorRIG_TT563widths; static const char *vRIG_TT563widths[] = { "NARR", "WIDE"}; static int TT563_bw_vals[] = {1, 2, WVALS_LIMIT}; RIG_TT563::RIG_TT563() { name_ = RIG_TT563name_; modes_ = RIG_TT563modes_; bandwidths_ = RIG_TT563widths; bw_vals_ = TT563_bw_vals; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = true; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; def_freq = A.freq = 14070000ULL; def_mode = A.imode = 1; def_bw = A.iBW = 1; B.freq = 7070000ULL; B.imode = 1; B.iBW = 1; has_mode_control = true; has_ptt_control = true; has_a2b = true; has_getvfoAorB = true; has_split_AB = true; defaultCIV = 0x04; adjustCIV(defaultCIV); precision = 10; ndigits = 7; }; void RIG_TT563::initialize() { VECTOR (RIG_TT563modes_, vRIG_TT563modes_); VECTOR (RIG_TT563widths, vRIG_TT563widths); modes_ = RIG_TT563modes_; bandwidths_ = RIG_TT563widths; bw_vals_ = TT563_bw_vals; } void RIG_TT563::selectA() { cmd = pre_to; cmd += '\x07'; cmd += '\x00'; cmd.append(post); set_trace(2, "selectA()", str2hex(cmd.c_str(), cmd.length())); waitFB("select A"); inuse = onA; } void RIG_TT563::selectB() { cmd = pre_to; cmd += '\x07'; cmd += '\x01'; cmd.append(post); set_trace(2, "selectB()", str2hex(cmd.c_str(), cmd.length())); waitFB("select B"); inuse = onB; } void RIG_TT563::swapAB() { cmd = pre_to; cmd += 0x07; cmd += 0xB0; cmd.append(post); set_trace(2, "swapAB()", str2hex(cmd.c_str(), cmd.length())); waitFB("swapAB()"); } void RIG_TT563::A2B() { cmd = pre_to; cmd += 0x07; cmd += 0xA0; cmd.append(post); set_trace(2, "A2B()", str2hex(cmd.c_str(), cmd.length())); waitFB("A2B()"); } bool RIG_TT563::can_split() { return true; } void RIG_TT563::set_split(bool val) { split = val; cmd = pre_to; cmd += 0x0F; cmd += val ? 0x01 : 0x00; cmd.append(post); waitFB(val ? "set_split(ON)" : "set_split(OFF)"); set_trace(2, (val ? "set_split(ON)" : "set_split(OFF)"), str2hex(replystr.c_str(), replystr.length())); } // 7200 does not respond to get split CAT command int RIG_TT563::get_split() { return split; } bool RIG_TT563::check () { std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); bool ok = waitFOR(11, "check vfo"); get_trace(2, "check()", str2hex(replystr.c_str(), replystr.length())); return ok; } unsigned long long RIG_TT563::get_vfoA () { if (inuse == onB) return A.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); if (waitFOR(11, "get vfo A")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) A.freq = fm_bcd_be(replystr.substr(p+5), 10); } get_trace(2, "get_vfoA()", str2hex(replystr.c_str(), replystr.length())); return A.freq; } void RIG_TT563::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(2, "set_vfoA()", str2hex(cmd.c_str(), cmd.length())); waitFB("set vfo A"); } unsigned long long RIG_TT563::get_vfoB () { if (inuse == onA) return B.freq; std::string resp = pre_fm; resp += '\x03'; cmd = pre_to; cmd += '\x03'; cmd.append( post ); if (waitFOR(11, "get vfo B")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) B.freq = fm_bcd_be(replystr.substr(p+5), 10); } get_trace(2, "get_vfoB()", str2hex(replystr.c_str(), replystr.length())); return B.freq; } void RIG_TT563::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 10 ) ); cmd.append( post ); set_trace(2, "set_vfoB()", str2hex(cmd.c_str(), cmd.length())); waitFB("set vfo B"); } int RIG_TT563::get_vfoAorB() { int ret = inuse == onB; cmd = pre_to; cmd += '\x17'; cmd.append(post); std::string resp = pre_fm; resp += '\x17'; if (waitFOR(6, "get_PTT()")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { ret = ((replystr[p+4] & 0x02) == 0x02); } } get_trace(2, "get_vfoAorB()", str2hex(replystr.c_str(), replystr.length())); return ret; } void RIG_TT563::set_PTT_control(int val) { cmd = pre_to; cmd += '\x16'; cmd += val ? '\x01' : '\x02'; cmd.append( post ); sendCommand(cmd); set_trace(2, "set_PTT_control()", str2hex(cmd.c_str(), cmd.length())); waitFB("set_PTT_control()"); } int RIG_TT563::get_PTT() { int ret = false; cmd = pre_to; cmd += '\x17'; cmd.append(post); std::string resp = pre_fm; resp += '\x17'; if (waitFOR(6, "get_PTT()")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { ret = ((replystr[p+4] & 0x04) == 0x04); } } get_trace(2, "get_PTT()", str2hex(replystr.c_str(), replystr.length())); return ret; } void RIG_TT563::set_modeA(int md) { A.imode = md; cmd = pre_to; cmd += '\x06'; cmd += A.imode; cmd.append(post); sendCommand(cmd); set_trace(2, "set_modeA()", str2hex(cmd.c_str(), cmd.length())); waitFB("set_modeA()"); } int RIG_TT563::get_modeA() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(7, "get modeA")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { A.imode = replystr[p+5]; } } get_trace(2, "get_modeA()", str2hex(replystr.c_str(), replystr.length())); return A.imode; } void RIG_TT563::set_modeB(int md) { B.imode = md; cmd = pre_to; cmd += '\x06'; cmd += B.imode; cmd.append(post); sendCommand(cmd); set_trace(2, "set_modeB()", str2hex(cmd.c_str(), cmd.length())); waitFB("set_modeB()"); } int RIG_TT563::get_modeB() { cmd = pre_to; cmd += '\x04'; cmd.append(post); std::string resp = pre_fm; resp += '\x04'; if (waitFOR(7, "get mode")) { size_t p = replystr.rfind(resp); if (p != std::string::npos) { B.imode = replystr[p+5]; } } get_trace(2, "get_modeB()", str2hex(replystr.c_str(), replystr.length())); return B.imode; } int RIG_TT563::get_modetype(int n) { return RIG_TT563_mode_type[n]; } flrig-2.0.04/src/rigs/tentec/TT599.cxx0000664000175000017500000002513114502041135014157 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "tentec/TT599.h" #include "trace.h" //============================================================================= // TT-599 const char RIG_TT599name_[] = "Eagle"; static std::vectorRIG_TT599modes_; static const char *vRIG_TT599modes_[] = { "USB", "LSB", "CW", "AM", "FM"}; const char RIG_TT599mchar_[] = { '0', '1', '3', '4', '5', 0 }; static const int RIG_TT599_def_bw[] = { 19, 19, 7, 24, 19 }; static const char RIG_TT599_mode_type[] = {'U', 'L', 'L', 'U', 'U'}; static std::vectorRIG_TT599widths; static const char *vRIG_TT599widths[] = { "100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "1200", "1400", "1600", "1800", "2000", "2200", "2400", "2600", "2800", "3000"}; static int TT599_bw_vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, WVALS_LIMIT}; const int RIG_TT599w[] = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 0 }; static GUI rig_widgets[]= { { (Fl_Widget *)sldrPOWER, 266, 105, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_TT599::RIG_TT599() { name_ = RIG_TT599name_; modes_ = RIG_TT599modes_; bandwidths_ = RIG_TT599widths; bw_vals_ = TT599_bw_vals; widgets = rig_widgets; serial_baudrate = BR57600; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = false; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 16; can_change_alt_vfo = true; max_power = 100; has_smeter = has_power_out = has_split = has_split_AB = has_swr_control = has_mode_control = has_bandwidth_control = has_ptt_control = has_preamp_control = has_auto_notch = has_attenuator_control = has_noise_reduction_control = has_power_control = true; // has_agc_level = true; precision = 1; ndigits = 8; }; static void wait(int msec) { for (int i = 0; i < msec; i += 10) { MilliSleep(10); Fl::awake(); } } void RIG_TT599::initialize() { VECTOR (RIG_TT599modes_, vRIG_TT599modes_); VECTOR (RIG_TT599widths, vRIG_TT599widths); name_ = RIG_TT599name_; modes_ = RIG_TT599modes_; bandwidths_ = RIG_TT599widths; bw_vals_ = TT599_bw_vals; rig_widgets[0].W = sldrPOWER; cmd = "X\r"; sendCommand(cmd, 0); wait(200); readResponse(); showresp(WARN, ASC, "init", cmd, replystr); split = false; cmd = "*KVAAA\r"; sendCommand(cmd, 0); wait(200); readResponse(); showresp(WARN, ASC, "normal", cmd, replystr); } void RIG_TT599::shutdown() { cmd = "*RMF0\r"; sendCommand(cmd, 0); wait(200); readResponse(); showresp(WARN, ASC, "Enable BW control", cmd, replystr); } bool RIG_TT599::check () { return true; cmd = "?AF\r"; int ret = waitCommand( cmd, 12, "check"); getcr("check"); if (ret < 12) return false; return true; } unsigned long long RIG_TT599::get_vfoA () { size_t p; cmd = "?AF\r"; if ( waitCommand( cmd, 12, "get vfoA") ) { if ((p = replystr.rfind("@AF")) != std::string::npos) sscanf(replystr.substr(p+3).c_str(), "%lld", &freqA); } getcr("get vfoA"); return freqA; } void RIG_TT599::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "*AF"; cmd.append( to_decimal( freq, 8 ) ); cmd += '\r'; sendCommand(cmd); setcr("set vfoA"); get_vfoA(); } unsigned long long RIG_TT599::get_vfoB () { size_t p; cmd = "?BF\r"; if ( waitCommand( cmd, 12, "get vfoB") ) { if ((p = replystr.rfind("@BF")) != std::string::npos) sscanf(replystr.substr(p+3).c_str(), "%lld", &freqB); } getcr("get vfoB"); return freqB; } void RIG_TT599::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "*BF"; cmd.append( to_decimal( freq, 8 ) ); cmd += '\r'; sendCommand(cmd); setcr("set vfoB"); get_vfoB(); } void RIG_TT599::set_PTT_control(int val) { cmd = val ? "*TK\r" : "*TU\r"; sendCommand(cmd); setcr("set PTT"); wait(200); } int RIG_TT599::get_modeA() { size_t p; cmd = "?RMM\r"; if ( waitCommand( cmd, 6, "get modeA") ) { if ((p = replystr.rfind("@RMM")) != std::string::npos) { modeA = 0; while (RIG_TT599mchar_[modeA] != replystr[p+4]) { modeA++; if (RIG_TT599mchar_[modeA] == 0) { modeA = 0; break; } } } } getcr("get modeA"); return modeA; } void RIG_TT599::set_modeA(int md) { modeA = md; cmd = "*RMM"; cmd += RIG_TT599mchar_[md]; cmd += '\r'; sendCommand(cmd); setcr("set modeA"); get_modeA(); } int RIG_TT599::get_modeB() { size_t p; cmd = "?RMM\r"; if ( waitCommand( cmd, 6, "get modeB") ) { if ((p = replystr.rfind("@RMM")) != std::string::npos) { modeB = 0; while (RIG_TT599mchar_[modeB] != replystr[p+4]) { modeB++; if (RIG_TT599mchar_[modeB] == 0) { modeB = 0; break; } } } } getcr("get modeB"); return modeB; } void RIG_TT599::set_modeB(int md) { modeB = md; cmd = "*RMM"; cmd += RIG_TT599mchar_[md]; cmd += '\r'; sendCommand(cmd); setcr("set modeB"); get_modeB(); } int RIG_TT599::get_bwA() { int w = 0; size_t p; cmd = "?RMF\r"; if ( waitCommand( cmd, 12, "get bwA") ) { if ((p = replystr.rfind("@RMF")) != std::string::npos) { if ( p != std::string::npos) w = atol(&replystr[p+4]); bwA = 0; while ( (RIG_TT599w[bwA] < w) && (RIG_TT599w[bwA + 1] != 0) ) bwA++; } } getcr("get bwA"); return bwA; } void RIG_TT599::set_bwA(int bw) { cmd = "*RMF"; cmd.append(RIG_TT599widths[bw]); cmd += '\r'; sendCommand(cmd); setcr("set bwA"); get_bwA(); } int RIG_TT599::get_bwB() { int w = 0; size_t p; cmd = "?RMF\r"; if ( waitCommand( cmd, 12, "get bwB") ) { if ((p = replystr.rfind("@RMF")) != std::string::npos) { if ( p != std::string::npos) w = atol(&replystr[p+4]); bwB = 0; while ( (RIG_TT599w[bwB] < w) && (RIG_TT599w[bwB + 1] != 0) ) bwB++; } } getcr("get bwB"); return bwB; } void RIG_TT599::set_bwB(int bw) { cmd = "*RMF"; cmd.append(RIG_TT599widths[bw]); cmd += '\r'; sendCommand(cmd); setcr("set bwB"); get_bwB(); } int RIG_TT599::adjust_bandwidth(int m) { return RIG_TT599_def_bw[m]; } int RIG_TT599::def_bandwidth(int m) { return RIG_TT599_def_bw[m]; } int RIG_TT599::get_modetype(int n) { return RIG_TT599_mode_type[n]; } int RIG_TT599::get_preamp() { size_t p; cmd = "?RME\r"; int pre = 0; if ( waitCommand( cmd, 6, "get preamp") ) { if ((p = replystr.rfind("@RME")) != std::string::npos) pre = (replystr[p+4] & 0xFF) - '0'; } getcr("get preamp"); return pre; } void RIG_TT599::set_preamp(int val) { cmd = val ? "*RME1\r" : "*RME0\r"; sendCommand(cmd); setcr("set preamp"); get_preamp(); } //void RIG_TT599::set_agc_level() //{ // *RMAF - fast *RMAM - medium *RMAS - slow //} double RIG_TT599::get_power_control(void) { size_t p; cmd = "?TP\r"; double pwr = progStatus.power_level; if ( waitCommand( cmd, 6, "get power control") ) { if ((p = replystr.rfind("@TP")) != std::string::npos) { pwr = atof(&replystr[p+3]); } } getcr("get power control"); return pwr; } void RIG_TT599::set_power_control(double val) { char szPwr[4]; snprintf(szPwr, sizeof(szPwr), "%d", (int)val); cmd.assign("*TP"); cmd.append(szPwr).append("\r"); sendCommand(cmd); setcr("set power control"); get_power_control(); } int RIG_TT599::get_auto_notch() { cmd = "?RMNA\r"; sendCommand(cmd); if ( waitCommand( cmd, 7, "get auto notch") ) { getcr("get auto notch"); if (replystr.rfind("@RMNA1") == std::string::npos) return 0; } else getcr("get auto notch FAILED"); return 1; } void RIG_TT599::set_auto_notch(int v) { cmd = v ? "*RMNA1\r" : "*RMNA0\r"; sendCommand(cmd); setcr("set auto notch"); get_auto_notch(); } int RIG_TT599::get_attenuator() { size_t p; cmd = "?RMT\r"; if ( waitCommand( cmd, 6, "get attenuator") ) { getcr("get attenuator"); if ((p = replystr.rfind("@RMT1")) != std::string::npos) return 1; } else getcr("get attenuator FAILED"); return 0; } void RIG_TT599::set_attenuator(int val) { cmd = val ? "*RMT1\r" : "*RMT0\r"; sendCommand(cmd); setcr("set attenuator"); get_attenuator(); } int smeter_count = 10; int RIG_TT599::get_smeter() { size_t p; int dbm = 0; cmd = "?S\r"; if ( waitCommand( cmd, 20, "get smeter") ) { if ((p = replystr.rfind("@SRM")) != std::string::npos) dbm = atoi(&replystr[p+4]); } getcr("get smeter"); return 5 * dbm / 6; } int RIG_TT599::get_swr() { float swr = (sqrtf(fwdpwr) + sqrtf(refpwr/10.0))/(sqrt(fwdpwr) - sqrt(refpwr/10.0) + .0001); swr -= 1.0; swr *= 25.0; if (swr < 0) swr = 0; if (swr > 100) swr = 100; getcr("get swr"); return (int)swr; } int RIG_TT599::get_power_out() { size_t p; fwdpwr = 0; refpwr = 0; cmd = "?S\r"; if ( waitCommand( cmd, 20, "get smeter") ) { if ((p = replystr.rfind ("@STF")) != std::string::npos) { fwdpwr = atol(&replystr[p+4]); p = replystr.find("R", p+4); if (p != std::string::npos) refpwr = atol(&replystr[p+1]); } } getcr("get power out"); return fwdpwr; } int RIG_TT599::get_split() { cmd = "?KV\r"; if ( waitCommand( cmd, 7, "get split") ) { size_t p = replystr.find("@KVAA"); if ((p != std::string::npos) && (replystr[p+5] == 'B')) split = 1; else split = 0; } getcr("get split"); return split; } void RIG_TT599:: set_split(bool val) { split = val; cmd = val ? "*KVAAB\r" : "*KVAAA\r"; sendCommand(cmd); setcr("set split"); get_split(); } int RIG_TT599::get_noise_reduction_val() { int val = 1; cmd.assign("?RMNN\r"); if ( waitCommand( cmd, 7, "get noise_reduction_value") ) { getcr("get noise reduction"); size_t p = replystr.rfind("@RMNN"); if (p == std::string::npos) return val; val = atol(&replystr[p+5]); } else getcr("get noise reduction FAILED"); return val; } void RIG_TT599::set_noise_reduction_val(int val) { cmd.assign("*RMNN"); cmd += ('0' + val); cmd.append("\r"); sendCommand(cmd); setcr("set noise reduction"); get_noise_reduction_val(); } flrig-2.0.04/src/rigs/tentec/DELTA-II.cxx0000664000175000017500000000651714502041135014520 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "tentec/DELTA-II.h" //============================================================================= // TT-535 const char RIG_TT535name_[] = "DELTA-II"; static std::vectorRIG_TT535modes_; static const char *vRIG_TT535modes_[] = { "LSB", "USB", "AM", "CW", "FM"}; static const char RIG_TT535_mode_type[] = {'L', 'U', 'U', 'L', 'U'}; RIG_TT535::RIG_TT535() { name_ = RIG_TT535name_; modes_ = RIG_TT535modes_; serial_baudrate = BR1200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_echo = true; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; has_mode_control = true; // has_ptt_control = true; pre_to[2] = ok[3] = bad[3] = pre_fm[3] = 0x01; }; void RIG_TT535::initialize() { VECTOR (RIG_TT535modes_, vRIG_TT535modes_); modes_ = RIG_TT535modes_; } int RIG_TT535::adjust_bandwidth(int m) { return 0; } bool RIG_TT535::check() { return true; } unsigned long long RIG_TT535::get_vfoA () { return freqA; } void RIG_TT535::set_vfoA (unsigned long long freq) { freqA = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 8 ) ); cmd.append( post ); int ret = sendCommand(cmd); if (ret != 6) checkresponse(); } void RIG_TT535::set_vfoB (unsigned long long freq) { freqB = freq; cmd = pre_to; cmd += '\x05'; cmd.append( to_bcd_be( freq, 8 ) ); cmd.append( post ); if (sendCommand(cmd) != 6) checkresponse(); } unsigned long long RIG_TT535::get_vfoB () { return freqB; } // ditto on CAT PTT /* void RIG_TT535::set_PTT_control(int val) { cmd = pre_to; cmd += '\x16'; cmd += val ? '\x01' : '\x02'; cmd.append( post ); sendICcommand(cmd,6); checkresponse(6); } */ void RIG_TT535::set_modeA(int md) { modeA = md; cmd = pre_to; cmd += '\x06'; cmd += modeA; cmd.append(post); if (sendCommand(cmd) != 6) checkresponse(); } // same with get mode int RIG_TT535::get_modeA() { // cmd = pre_to; // cmd += '\x04'; // cmd.append(post); // if( sendICcommand (cmd, 8 )) { // modeA = replystr[5]; // bwA = replystr[6]; // } return modeA; } void RIG_TT535::set_modeB(int md) { modeB = md; cmd = pre_to; cmd += '\x06'; cmd += modeB; cmd.append(post); if (sendCommand(cmd) != 6) checkresponse(); } // same with get mode int RIG_TT535::get_modeB() { return modeB; } int RIG_TT535::get_modetype(int n) { return RIG_TT535_mode_type[n]; } flrig-2.0.04/src/rigs/tentec/TT516.cxx0000664000175000017500000002714314502041135014151 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- /* * Note for anyone wishing to expand on the command set. * * The Argo V always sends a response and ends the response with a "G\r" to * indicate that the command was accepted. A rejected command is responded to by a * two character sequence "Z\r". You should always expect a maximum response equal * to the number of data bytes plus two. * * For example: * A request for the present receiver filter bandwidth is the the std::string: * "?W\r" which is 3 bytes in length * The response from the Argonaut V will be: * "Wn\rG\r" which is 5 bytes in length, where n is an unsigned char (byte) * If the transceiver failed to receive the command correctly it will respond: * "Z\r" ----> you need to check for that condition * */ #include "tentec/TT516.h" #include "support.h" static const char TT516name_[] = "TT-516"; static std::vectorTT516modes_; static const char *vTT516modes_[] = { "AM", "USB", "LSB", "CW", "FM"}; static int TT516_def_bw[] = { 26, 36, 36, 12, 36 }; static const char TT516mode_chr[] = { '0', '1', '2', '3', '4' }; static const char TT516mode_type[] = { 'U', 'U', 'L', 'U', 'U' }; static std::vectorTT516_widths; static const char *vTT516_widths[] = { "200", "250", "300", "350", "400", "450", "500", "550", "600", "650", "700", "750", "800", "850", "900", "950", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000"}; static int TT516_WIDTH_bw_vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37, WVALS_LIMIT}; static std::vectorTT516_AM_widths; static const char *vTT516_AM_widths[] = { "400", "500", "600", "700", "800", "900", "1000", "1100", "1200", "1350", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000", "4200", "4400", "4600", "4800", "5000", "5200", "5400", "5600", "5800", "6000"}; static int TT516_AM_bw_vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37, WVALS_LIMIT}; static char TT516setBW[] = "*Wx\r"; static char TT516setPBT[] = "*Pxx\r"; static char TT516setMODE[] = "*Mnn\r"; static char TT516setFREQA[] = "*Annnn\r"; static char TT516setFREQB[] = "*Bnnnn\r"; static char TT516setNB[] = "*Kn\r"; static char TT516setXMT[] = "#1\r"; static char TT516setRCV[] = "#0\r"; static char TT516setSPLIT[] = "*On\r"; static char TT516setATT[] = "*Jn\r"; static char TT516getFREQA[] = "?A\r"; static char TT516getFREQB[] = "?B\r"; static char TT516getFWDPWR[] = "?F\r"; static char TT516getATT[] = "?J\r"; static char TT516getMODE[] = "?M\r"; //static char TT516getPBT[] = "?P\r"; static char TT516getREFPWR[] = "?R\r"; static char TT516getSMETER[] = "?S\r"; static char TT516getBW[] = "?W\r"; static char TT516setVfo[] = "*EVx\r"; static GUI rig_widgets[]= { { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_TT516::RIG_TT516() { // base class values name_ = TT516name_; modes_ = TT516modes_; bandwidths_ = TT516_widths; bw_vals_ = TT516_WIDTH_bw_vals; widgets = rig_widgets; serial_baudrate = BR1200; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; serloop_timing = 200; def_mode = modeB = modeA = B.imode = A.imode = 1; def_bw = bwB = bwA = B.iBW = A.iBW = 34; def_freq = freqB = freqA = B.freq = A.freq = 14070000ULL; max_power = 25; can_change_alt_vfo = true; has_power_control = has_volume_control = has_micgain_control = has_notch_control = has_preamp_control = has_tune_control = has_swr_control = false; has_smeter = has_power_out = has_swr_control = has_split = has_noise_control = has_attenuator_control = has_ifshift_control = has_ptt_control = has_bandwidth_control = has_mode_control = true; precision = 10; ndigits = 7; } void RIG_TT516::initialize() { VECTOR (TT516modes_, vTT516modes_); VECTOR (TT516_widths, vTT516_widths); VECTOR (TT516_AM_widths, vTT516_AM_widths); modes_ = TT516modes_; bandwidths_ = TT516_widths; bw_vals_ = TT516_WIDTH_bw_vals; rig_widgets[0].W = btnIFsh; rig_widgets[1].W = sldrIFSHIFT; } bool RIG_TT516::check () { cmd = TT516getFREQA; int ret = waitN(8, 150, "check", HEX); if (ret != 8) return false; return true; } unsigned long long RIG_TT516::get_vfoA () { cmd = TT516getFREQA; int ret = waitN(8, 150, "get vfo A", HEX); if (ret != 8) return A.freq; if (replystr[0] != 'A') return A.freq; if (replystr[6] != 'G') return A.freq; unsigned long long f = 0; for (size_t n = 1; n < 5; n++) { f = f*256 + ((unsigned char)replystr[n] & 0xFF) ; A.freq = f; } return A.freq; } void RIG_TT516::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = TT516setFREQA; cmd[5] = freq & 0xff; freq = freq >> 8; cmd[4] = freq & 0xff; freq = freq >> 8; cmd[3] = freq & 0xff; freq = freq >> 8; cmd[2] = freq & 0xff; LOG_INFO(" %c%c %02X %02X %02X %02X %02X", cmd[0], cmd[1], cmd[2] & 0xFF, cmd[3] & 0xFF, cmd[4] & 0xFF, cmd[5] & 0xFF, cmd[6]); sendCommand(cmd); return; } unsigned long long RIG_TT516::get_vfoB () { cmd = TT516getFREQB; int ret = waitN(8, 150, "get vfo B", HEX); if (ret != 8) return B.freq; if (replystr[0] != 'B') return B.freq; if (replystr[6] != 'G') return B.freq; unsigned long long f = 0; for (size_t n = 1; n < 5; n++) { f = f*256 + ((unsigned char)replystr[n] & 0xFF) ; B.freq = f; } return B.freq; } void RIG_TT516::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = TT516setFREQB; cmd[5] = freq & 0xff; freq = freq >> 8; cmd[4] = freq & 0xff; freq = freq >> 8; cmd[3] = freq & 0xff; freq = freq >> 8; cmd[2] = freq & 0xff; LOG_INFO(" %c%c %02X %02X %02X %02X %02X", cmd[0], cmd[1], cmd[2] & 0xFF, cmd[3] & 0xFF, cmd[4] & 0xFF, cmd[5] & 0xFF, cmd[6]); sendCommand(cmd); return; } void RIG_TT516::selectA() { cmd = TT516setVfo; cmd[3] = 'A'; sendCommand(cmd); inuse = onA; set_bwA(A.iBW); inuse = onA; return; } void RIG_TT516::selectB() { cmd = TT516setVfo; cmd[3] = 'B'; sendCommand(cmd); inuse = onB; set_bwB(B.iBW); inuse = onB; return; } void RIG_TT516::set_split(bool val) { cmd = TT516setSPLIT; cmd[2] = val ? '\x01' : '\x00'; sendCommand(cmd); return; } // Tranceiver PTT on/off void RIG_TT516::set_PTT_control(int val) { if (val) sendCommand(TT516setXMT); else sendCommand(TT516setRCV); } int RIG_TT516::get_modetype(int n) { return TT516mode_type[n]; } std::vector& RIG_TT516::bwtable(int m) { if (m == 0) { bandwidths_ = TT516_AM_widths; bw_vals_ = TT516_AM_bw_vals; return TT516_AM_widths; } bandwidths_ = TT516_widths; bw_vals_ = TT516_WIDTH_bw_vals; return TT516_widths; } int RIG_TT516::def_bandwidth(int m) { return TT516_def_bw[m]; } int RIG_TT516::adjust_bandwidth(int m) { bwtable(m); return def_bandwidth(m); } void RIG_TT516::set_modeA(int val) { A.imode = val; cmd = TT516setMODE; cmd[2] = TT516mode_chr[A.imode]; cmd[3] = TT516mode_chr[B.imode]; sendCommand(cmd); } int RIG_TT516::get_modeA() { cmd = TT516getMODE; int ret = waitN(6, 150, "get mode A", HEX); if (ret < 6) return A.imode; if (replystr[ret - 2] != 'G') return A.imode; size_t p = replystr.rfind("M"); if (p == std::string::npos) return A.imode; A.imode = replystr[p+1] - '0'; return A.imode; } void RIG_TT516::set_modeB(int val) { B.imode = val; cmd = TT516setMODE; cmd[2] = TT516mode_chr[A.imode]; cmd[3] = TT516mode_chr[B.imode]; sendCommand(cmd); } int RIG_TT516::get_modeB() { cmd = TT516getMODE; int ret = waitN(6, 150, "get mode B", HEX); if (ret < 6) return B.imode; if (replystr[ret - 2] != 'G') return B.imode; size_t p = replystr.rfind("M"); if (p == std::string::npos) return B.imode; B.imode = replystr[p+2] - '0'; return B.imode; } int RIG_TT516::get_bwA() { if (inuse == onA) { cmd = TT516getBW; int ret = waitN(5, 150, "get bw A", HEX); if (ret < 5) return A.iBW; if (replystr[ret - 2] != 'G') return A.iBW; size_t p = replystr.rfind("W"); if (p == std::string::npos) return A.iBW; A.iBW = (unsigned char)replystr[p+1]; } return A.iBW; } void RIG_TT516::set_bwA(int val) { A.iBW = val; if (inuse == onA) { cmd = TT516setBW; cmd[2] = val; sendCommand(cmd); } } int RIG_TT516::get_bwB() { if (inuse == onB) { cmd = TT516getBW; int ret = waitN(5, 150, "get bw B", HEX); if (ret < 5) return B.iBW; if (replystr[ret - 2] != 'G') return B.iBW; size_t p = replystr.rfind("W"); if (p == std::string::npos) return B.iBW; B.iBW = (unsigned char)replystr[p+1]; } return B.iBW; } void RIG_TT516::set_bwB(int val) { B.iBW = val; if (inuse == onB) { cmd = TT516setBW; cmd[2] = val; sendCommand(cmd); } } void RIG_TT516::set_if_shift(int val) { cmd = TT516setPBT; short int si = val; cmd[2] = (si & 0xff00) >> 8; cmd[3] = (si & 0xff); sendCommand(cmd); } bool RIG_TT516::get_if_shift(int &val) { val = 0; return false; } void RIG_TT516::get_if_min_max_step(int &min, int &max, int &step) { min = -2900; max = 2900; step = 100; } void RIG_TT516::set_attenuator(int val) { cmd = TT516setATT; if (val) cmd[2] = '1'; else cmd[2] = '0'; sendCommand(cmd); } int RIG_TT516::get_attenuator() { cmd = TT516getATT; int ret = sendCommand(cmd); if (ret < 5) return 0; size_t p = replystr.rfind("J"); if (p == std::string::npos) return 0; if (replystr[p+1] == '1') return 1; return 0; } void RIG_TT516::set_noise(bool b) { cmd = TT516setNB; if (b) cmd[2] = '4'; else cmd[2] = '0'; sendCommand(cmd); } int RIG_TT516::get_smeter() { double sig = 0.0; cmd = TT516getSMETER; int ret = sendCommand(cmd); if (ret < 6) return 0; size_t p = replystr.rfind("S"); if (p == std::string::npos) return 0; sig = (50.0 / 9.0) * ((unsigned char)replystr[p+1] + (unsigned char)replystr[p+2] / 256.0); return (int)sig; } int RIG_TT516::get_swr() { double swr = (fwdv + refv) / (fwdv - refv + .0001); swr -= 1.0; swr *= 25.0; if (swr < 0) swr = 0; if (swr > 100) swr = 100; return (int)swr; } int RIG_TT516::get_power_out() { fwdpwr = refpwr = fwdv = refv = 0; cmd = TT516getFWDPWR; int ret = sendCommand(cmd); if (ret < 5) return fwdpwr; size_t p = replystr.rfind("F"); if (p == std::string::npos) return fwdpwr; fwdv = 1.0 * (unsigned char)replystr[p+1]; cmd = TT516getREFPWR; ret = sendCommand(cmd); if (ret < 5) return fwdpwr; p = replystr.rfind("R"); if (p == std::string::npos) return fwdpwr; refv = 1.0 * (unsigned char)replystr[p+1]; fwdpwr = 30.0 * (fwdv * fwdv) / (256 * 256); refpwr = 30.0 * (refv * refv) / (256 * 256); return fwdpwr; } flrig-2.0.04/src/rigs/yaesu/0000775000175000017500000000000014511461606012570 500000000000000flrig-2.0.04/src/rigs/yaesu/FTdx3000.cxx0000664000175000017500000007642614502041135014412 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FTdx3000.h" #include "debug.h" #include "support.h" // Set this to enable my updates // These relate to how the rig behaves when in split mode. enum mFTdx3000 { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N }; // mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 // mode index // 19, 19, 9, 0, 0, 10, 9, 15, 10, 0, 0, 15, 0 // FTdx3000_def_bw static const char FTdx3000name_[] = "FTdx3000"; #undef NUM_MODES #define NUM_MODES 13 static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFTdx3000modes_; static const char *vFTdx3000modes_[] = { "LSB", "USB", "CW", "FM", "AM", "RTTY-L", "CW-R", "PKT-L", "RTTY-U", "PKT-FM", "FM-N", "PKT-U", "AM-N"}; static const int FTdx3000_def_bw[] = { 20, 20, 9, 0, 0, 10, 9, 15, 10, 0, 0, 15, 0 }; static const char FTdx3000_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D' }; static const char FTdx3000_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U', 'U' }; static std::vectorFTdx3000_widths_SSB; static const char *vFTdx3000_widths_SSB[] = { "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", "2100", "2250", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3200", "3400", "3600", "3800", "4000" }; static int FTdx3000_wvals_SSB[] = { 1,2,3,4,5,6,7, 8,9,10,11,12,13, 15,16,17,18,19,20, 21,22,23,24,25, WVALS_LIMIT}; static std::vectorFTdx3000_widths_CW; static const char *vFTdx3000_widths_CW[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400" }; static int FTdx3000_wvals_CW[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static std::vectorFTdx3000_widths_RTTY; static const char *vFTdx3000_widths_RTTY[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400" }; static int FTdx3000_wvals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static std::vectorFTdx3000_widths_PSK; static const char *vFTdx3000_widths_PSK[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400" }; static int FTdx3000_wvals_PSK[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static const int FTdx3000_wvals_AMFM[] = { 0, WVALS_LIMIT }; static std::vectorFTdx3000_widths_AMwide; static const char *vFTdx3000_widths_AMwide[] = { "AM-bw" }; static std::vectorFTdx3000_widths_AMnar; static const char *vFTdx3000_widths_AMnar[] = { "AM-nar" }; static std::vectorFTdx3000_widths_FMnar; static const char *vFTdx3000_widths_FMnar[] = { "FM-nar" }; static std::vectorFTdx3000_widths_FMwide; static const char *vFTdx3000_widths_FMwide[] = { "FM-wid" }; static std::vectorFTdx3000_widths_FMpkt; static const char *vFTdx3000_widths_FMpkt[] = { "FM-pkt" }; static std::vectorFTdx3000_US_60m; static const char *vFTdx3000_US_60m[] = {"", "126", "127", "128", "130"}; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. // // UK has 7 60M presets. Using dummy numbers for all. If you want support, // Maybe someone can do a cat command MC; on all 7 presets and add returned numbers below. // static std::vectorFTdx3000_UK_60m = {"", "126", "127", "128", "130", "131", "132"}; static std::vector& Channels_60m = FTdx3000_US_60m; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FTdx3000::initialize() { VECTOR (FTdx3000modes_, vFTdx3000modes_); VECTOR (FTdx3000_widths_SSB, vFTdx3000_widths_SSB); VECTOR (FTdx3000_widths_CW, vFTdx3000_widths_CW); VECTOR (FTdx3000_widths_RTTY, vFTdx3000_widths_RTTY); VECTOR (FTdx3000_widths_PSK, vFTdx3000_widths_PSK); VECTOR (FTdx3000_widths_AMwide, vFTdx3000_widths_AMwide); VECTOR (FTdx3000_widths_AMnar, vFTdx3000_widths_AMnar); VECTOR (FTdx3000_widths_FMnar, vFTdx3000_widths_FMnar); VECTOR (FTdx3000_widths_FMwide, vFTdx3000_widths_FMwide); VECTOR (FTdx3000_widths_FMpkt, vFTdx3000_widths_FMpkt); VECTOR (FTdx3000_US_60m, vFTdx3000_US_60m); modes_ = FTdx3000modes_; bandwidths_ = FTdx3000_widths_SSB; bw_vals_ = FTdx3000_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; cmd = "AI0;"; sendCommand(cmd); showresp(WARN, ASC, "Auto Info OFF", cmd, replystr); } RIG_FTdx3000::RIG_FTdx3000() { // base class values IDstr = "ID"; name_ = FTdx3000name_; modes_ = FTdx3000modes_; bandwidths_ = FTdx3000_widths_SSB; bw_vals_ = FTdx3000_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 1; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 19; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; notch_on = false; has_band_selection = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = // has_cw_spot_tone = // does not exist??? has_cw_qsk = has_cw_weight = has_cw_break_in = has_split = has_split_AB = can_change_alt_vfo = has_smeter = has_swr_control = has_alc_control = has_idd_control = has_voltmeter = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = true; // derived specific atten_level = 0; preamp_level = 0; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 8; } void RIG_FTdx3000::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; wait_char(';', 27, 100, "get band", ASC); sett("get band"); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+21] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0].empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx > (int)Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } bool RIG_FTdx3000::check () { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';', 11, 100, "check", ASC); gett("check()"); if (ret >= 11) return true; return false; } unsigned long long RIG_FTdx3000::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';', 11, 100, "get vfo A", ASC); gett("get_vfoA()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqA = f; return freqA; } void RIG_FTdx3000::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); } unsigned long long RIG_FTdx3000::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';', 11, 100, "get vfo B", ASC); gett("get_vfoB()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqB = f; return freqB; } void RIG_FTdx3000::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); } bool RIG_FTdx3000::twovfos() { return true; } void RIG_FTdx3000::selectA() { cmd = "FR0;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); inuse = onA; } void RIG_FTdx3000::selectB() { cmd = "FR4;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); inuse = onB; } void RIG_FTdx3000::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); } bool RIG_FTdx3000::can_split() { return true; } void RIG_FTdx3000::set_split(bool val) { split = val; if (val) { cmd = "FR0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A", cmd, replystr); cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on B", cmd, replystr); } else { cmd = "FR0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A", cmd, replystr); cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on A", cmd, replystr); } Fl::awake(highlight_vfo, (void *)0); } int RIG_FTdx3000::get_split() { return split; } int RIG_FTdx3000::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';', 7, 100, "get smeter", ASC); gett("get_smeter()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FTdx3000::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';', 7, 100, "get swr", ASC); gett("get_swr()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return mtr / 2.56; } struct pwrpair {int mtr; float pwr;}; static pwrpair pwrtbl[] = { { 32, 5.0 }, { 53, 10.0 }, { 80, 20.0 }, { 97, 30.0 }, {119, 40.0 }, {137, 50.0 }, {154, 60.0 }, {167, 70.0 }, {177, 80.0 }, {188, 90.0 }, {197,100.0 }, }; int RIG_FTdx3000::get_power_out() { cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';', 7, 100, "get pout", ASC); gett("get_power_out()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 197) mtr = 197; int pwr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (pwr > 100) pwr = 100; return (int)pwr; } int RIG_FTdx3000::get_alc() { cmd = rsp = "RM4"; cmd += ';'; wait_char(';',7, 100, "get alc", ASC); gett("get_alc"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } // Transceiver power level double RIG_FTdx3000::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';', 6, 100, "get power", ASC); gett("get_power_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FTdx3000::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); } // Volume control return 0 ... 100 int RIG_FTdx3000::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';', 7, 100, "get vol", ASC); gett("get_volume_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = atoi(&replystr[p+3]) * 100 / 250; if (val > 100) val = 100; return val; } void RIG_FTdx3000::set_volume_control(int val) { int ivol = (int)(val * 250 / 100); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); } // Tranceiver PTT on/off void RIG_FTdx3000::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; } int RIG_FTdx3000::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, 100, "get PTT", ASC); gett("get_PTT()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FTdx3000::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FTdx3000::get_tune() { cmd = rsp = "AC"; cmd += ';'; waitN(5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return !(val < 2); } int RIG_FTdx3000::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FTdx3000::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); } int RIG_FTdx3000::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, 100, "get att", ASC); gett("get_attenuator()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FTdx3000::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FTdx3000::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); } int RIG_FTdx3000::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';', 5, 100, "get pre", ASC); gett("get_preamp()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FTdx3000::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FTdx3000::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } int RIG_FTdx3000::adjust_bandwidth(int val) { int bw = 0; if (val == mCW || val == mCW_R) { bandwidths_ = FTdx3000_widths_CW; bw_vals_ = FTdx3000_wvals_CW; } else if (val == mFM || val == mAM || val == mFM_N || val == mPKT_FM || val == mAM_N) { if (val == mFM) bandwidths_ = FTdx3000_widths_FMwide; else if (val == mAM) bandwidths_ = FTdx3000_widths_AMwide; else if (val == mAM_N) bandwidths_ = FTdx3000_widths_AMnar; else if (val == mFM_N) bandwidths_ = FTdx3000_widths_FMnar; else if (val == mPKT_FM) bandwidths_ = FTdx3000_widths_FMpkt; bw_vals_ = FTdx3000_wvals_AMFM; } else if (val == mRTTY_L || val == mRTTY_U) { // RTTY bandwidths_ = FTdx3000_widths_RTTY; bw_vals_ = FTdx3000_wvals_RTTY; } else if (val == mPKT_L || val == mPKT_U) { // PSK bandwidths_ = FTdx3000_widths_PSK; bw_vals_ = FTdx3000_wvals_PSK; } else { bandwidths_ = FTdx3000_widths_SSB; bw_vals_ = FTdx3000_wvals_SSB; } bw = FTdx3000_def_bw[val]; return bw; } int RIG_FTdx3000::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FTdx3000::bwtable(int n) { switch (n) { case mCW: case mCW_R: return FTdx3000_widths_CW; case mFM: return FTdx3000_widths_FMwide; case mAM: return FTdx3000_widths_AMwide; case mAM_N : return FTdx3000_widths_AMnar; case mRTTY_L: case mRTTY_U: return FTdx3000_widths_RTTY; case mPKT_L: case mPKT_U: return FTdx3000_widths_PSK; case mFM_N: return FTdx3000_widths_FMnar; case mPKT_FM: return FTdx3000_widths_FMpkt; default: ; } return FTdx3000_widths_SSB; } void RIG_FTdx3000::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FTdx3000_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); adjust_bandwidth(modeA); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FTdx3000::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode A", ASC); gett("get_modeA()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeA = md; } } adjust_bandwidth(modeA); return modeA; } void RIG_FTdx3000::set_modeB(int val) { modeB = val; // Need to swap the vfos for the MD command to work on VFO B cmd = "SV;MD0"; cmd += FTdx3000_mode_chr[val]; cmd += ";SV;"; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FTdx3000::get_modeB() { // Use Opposite Information command to read VFO B mode int n = 20; cmd = rsp = "OI"; cmd += ';'; wait_char(';', 27, 100, "get mode B", ASC); gett("get_modeB()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { // JBA - n tells us where to start in the response if (p + n < replystr.length()) { int md = replystr[p+n]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeB = md; } } return modeB; } void RIG_FTdx3000::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mPKT_FM ) { return; } if ((((modeA == mLSB || modeA == mUSB) && val < 8)) || ((modeA == mCW || modeA == mCW_R) && val < 11) || ((modeA == mRTTY_L || modeA == mRTTY_U) && val < 11) || ((modeA == mPKT_L || modeA == mPKT_U) && val < 11)) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); mode_bwA[modeA] = val; } int RIG_FTdx3000::get_bwA() { if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mPKT_FM) { bwA = 0; mode_bwA[modeA] = bwA; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 100, "get bw A", ASC); gett("get_bwA()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; if (p + 5 >= replystr.length()) return bwA; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; mode_bwA[modeA] = bwA; return bwA; } void RIG_FTdx3000::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mPKT_FM) { mode_bwB[modeB] = 0; return; } if ((((modeB == mLSB || modeB == mUSB) && val < 8)) || ((modeB == mCW || modeB == mCW_R) && val < 11) || ((modeB == mRTTY_L || modeB == mRTTY_U) && val < 11) || ((modeB == mPKT_L || modeB == mPKT_U) && val < 11)) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); mode_bwB[modeB] = bwB; showresp(WARN, ASC, "SET bw B", cmd, replystr); } int RIG_FTdx3000::get_bwB() { if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mPKT_FM) { bwB = 0; mode_bwB[modeB] = bwB; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 100, "get bw B", ASC); gett("get_bwB()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; if (p + 5 >= replystr.length()) return bwB; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3),2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FTdx3000::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FTdx3000::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FTdx3000::get_modetype(int n) { return FTdx3000_mode_type[n]; } void RIG_FTdx3000::set_if_shift(int val) { cmd = "IS0+0000;"; if (val != 0) progStatus.shift = true; else progStatus.shift = false; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); } bool RIG_FTdx3000::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';', 9, 100, "get if shift", ASC); gett("get_if_shift()"); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FTdx3000::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1000; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 0; } void RIG_FTdx3000::set_notch(bool on, int val) { if (on && !notch_on) { notch_on = true; cmd = "BP00001;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); } else if (!on && notch_on) { notch_on = false; cmd = "BP00000;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch off", cmd, replystr); return; } cmd = "BP01"; val /= 10; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); } bool RIG_FTdx3000::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; wait_char(';', 8, 100, "get notch on/off", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; gett("get_notch()"); if (replystr[p+6] == '1') // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; wait_char(';', 8, 100, "get notch val", ASC); gett("get_notch_val()"); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; return (notch_on = ison); } void RIG_FTdx3000::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3000; step = 10; } void RIG_FTdx3000::set_auto_notch(int v) { cmd = "BC00;"; if (v) cmd[3] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET auto notch", cmd, replystr); } int RIG_FTdx3000::get_auto_notch() { cmd = "BC0;"; wait_char(';', 5, 100, "get auto notch", ASC); gett("get_auto_notch()"); size_t p = replystr.rfind("BC0"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } int FTdx3000_blanker_level = 0; void RIG_FTdx3000::set_noise(bool b) { cmd = "NB00;"; if (FTdx3000_blanker_level == 0) { FTdx3000_blanker_level = 1; nb_label("NB 1", true); } else if (FTdx3000_blanker_level == 1) { FTdx3000_blanker_level = 2; nb_label("NB 2", true); } else if (FTdx3000_blanker_level == 2) { FTdx3000_blanker_level = 0; nb_label("NB", false); } cmd[3] = '0' + FTdx3000_blanker_level; sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); } int RIG_FTdx3000::get_noise() { cmd = rsp = "NB0"; cmd += ';'; wait_char(';', 5, 100, "get NB", ASC); gett("get_noise()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return FTdx3000_blanker_level; FTdx3000_blanker_level = replystr[p+3] - '0'; if (FTdx3000_blanker_level == 1) { nb_label("NB 1", true); } else if (FTdx3000_blanker_level == 2) { nb_label("NB 2", true); } else { nb_label("NB", false); FTdx3000_blanker_level = 0; } return FTdx3000_blanker_level; } // val 0 .. 100 void RIG_FTdx3000::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); } int RIG_FTdx3000::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); gett("get_mic_gain()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); return val; } void RIG_FTdx3000::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx3000::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = val * 250 / 100; for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); } int RIG_FTdx3000::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, 100, "get rfgain", ASC); gett("get_rf_gain()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = rfval * 100 / 250; if (rfval > 100) rfval = 100; return rfval; } void RIG_FTdx3000::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx3000::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); } void RIG_FTdx3000::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FTdx3000::set_vox_anti() { cmd = "EX175"; cmd.append(to_decimal(progStatus.vox_anti, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET anti-vox", cmd, replystr); } void RIG_FTdx3000::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FTdx3000::set_vox_on_dataport() { cmd = "EX1140;"; if (progStatus.vox_on_dataport) cmd[5] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); } void RIG_FTdx3000::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FTdx3000::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FTdx3000::set_cw_spot() { if (vfo->imode == 2 || vfo->imode == 6) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FTdx3000::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX065").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FTdx3000::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX068").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); 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; } double RIG_FTdx3000::get_voltmeter() { cmd = "RM8;"; std::string resp = "RM"; int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); wait_char(';',7, 100, "get vdd", ASC); gett("get_voltmeter"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = atoi(&replystr[p+3]); val = 13.8 * mtr / 190; return val; } return -1; } double RIG_FTdx3000::get_idd() { cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_idd"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 9 >= replystr.length()) return 0; replystr[6] = '\x00'; double mtr = atoi(&replystr[p+3]); return mtr / 10.0; } /* void RIG_FTdx3000::set_cw_spot_tone() { int n = (progStatus.cw_spot_tone - 300) / 50; cmd = "EX045"; cmd.append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); } void RIG_FTdx3000::set_cw_vol() { } */ flrig-2.0.04/src/rigs/yaesu/FT950.cxx0000664000175000017500000011647414502041135014007 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // Copyright (C) 2014, Terry Embry, KJ4EED // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FT950.h" #include "debug.h" #include "support.h" #include "trace.h" #define FL950_WAIT_TIME 200 enum mFT950 { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 // mode index static const char FT950name_[] = "FT-950"; #undef NUM_MODES #define NUM_MODES 13 static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFT950modes_; static const char *vFT950modes_[] = { "LSB", "USB", "CW", "FM", "AM", "RTTY-L", "CW-R", "PKT-L", "RTTY-U", "PKT-FM", "FM-N", "PKT-U", "AM-N"}; static const char FT950_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D' }; static const char FT950_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U', 'U' }; // 20110707 - SSB "2450", 14 discontinued in latest North American firmware static const int FT950_def_bw[] = { 18, 18, 5, 0, 0, 5, 5, 10, 5, 0, 0, 10, 0 }; // mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N static std::vectorFT950_widths_SSB; static const char *vFT950_widths_SSB[] = { "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", "2100", "2250", "2400", "2500", "2600", "2700", "2800", "2900", "3000" }; static int FT950_wvals_SSB[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20, WVALS_LIMIT}; static std::vectorFT950_widths_SSBD; static const char *vFT950_widths_SSBD[] = { "100", "200", "300", "400", "500", "800", "1200", "1400", "1700", "2000", "2400" }; static int FT950_wvals_SSBD[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, WVALS_LIMIT}; static std::vectorFT950_widths_CW; static const char *vFT950_widths_CW[] = { "100", "200", "300", "400", "500", "800", "1200", "1400", "1700", "2000", "2400" }; static int FT950_wvals_CW[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, WVALS_LIMIT }; // Single bandwidth modes static std::vectorFT950_widths_AMFMnar; static const char *vFT950_widths_AMFMnar[] = { "NARR" }; static std::vectorFT950_widths_AMFMnorm; static const char *vFT950_widths_AMFMnorm[] = { "NORM" }; static const int FT950_wvals_AMFM[] = { 0, WVALS_LIMIT }; // mPKT_FM Multi bandwidth mode static std::vectorFT950_widths_NN; static const char *vFT950_widths_NN[] = {"NORM", "NARR" }; static const int FT950_wvals_NN[] = {0, 1, WVALS_LIMIT}; // US 60M 5-USB, 5-CW static std::vectorUS_60m_chan; static const char *vUS_60m_chan[] = {"000","125","126","127","128","130","141","142","143","144","146"}; static std::vectorUS_60m_label; static const char *vUS_60m_label[] = {"VFO","U51","U52","U53","U54","U55","U56","U57","U58","U59","U50"}; // UK 60m channel numbers by Brian, G8SEZ static std::vectorUK_60m_chan; static const char *vUK_60m_chan[] = {"000","118","120","121","127","128","129","130"}; static std::vectorUK_60m_label; static const char *vUK_60m_label[] = {"VFO","U51","U52","U53","U54","U55","U56","U57"}; static std::vector& Channels_60m = US_60m_chan; static std::vector& label_60m = US_60m_label; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_FT950::RIG_FT950() { // base class values // IDstr = "ID"; name_ = FT950name_; modes_ = FT950modes_; bandwidths_ = FT950_widths_SSB; bw_vals_ = FT950_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 50; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 12; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; has_compON = has_compression = has_a2b = has_ext_tuner = has_xcvr_auto_on_off = has_split = has_split_AB = has_band_selection = has_noise_reduction = has_noise_reduction_control = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_vfo_adj = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_weight = can_change_alt_vfo = has_smeter = has_alc_control = has_swr_control = has_idd_control = has_voltmeter = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = true; // derived specific atten_level = 3; preamp_level = 2; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 8; } void RIG_FT950::initialize() { VECTOR (FT950modes_, vFT950modes_); VECTOR (FT950_widths_SSB, vFT950_widths_SSB); VECTOR (FT950_widths_SSBD, vFT950_widths_SSBD); VECTOR (FT950_widths_CW, vFT950_widths_CW); VECTOR (FT950_widths_AMFMnar, vFT950_widths_AMFMnar); VECTOR (FT950_widths_AMFMnorm, vFT950_widths_AMFMnorm); VECTOR (FT950_widths_NN, vFT950_widths_NN); VECTOR (US_60m_chan, vUS_60m_chan); VECTOR (US_60m_label, vUS_60m_label); VECTOR (UK_60m_chan, vUK_60m_chan); VECTOR (UK_60m_label, vUK_60m_label); modes_ = FT950modes_; bandwidths_ = FT950_widths_SSB; bw_vals_ = FT950_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; rig_widgets[9].W = btnNR; rig_widgets[10].W = sldrNR; // set progStatus defaults if (progStatus.notch_val < 10) progStatus.notch_val = 1500; if (progStatus.noise_reduction_val < 1) progStatus.noise_reduction_val = 1; if (progStatus.power_level < 5) progStatus.power_level = 5; // first-time-thru, or reset if (progStatus.cw_qsk < 15) { progStatus.cw_qsk = 15; progStatus.cw_spot_tone = 700; progStatus.cw_weight = 3.0; progStatus.cw_wpm = 18; progStatus.vox_on_dataport = false; progStatus.vox_gain = 50; progStatus.vox_anti = 50; progStatus.vox_hang = 500; } // Disable Auto Information mode sendCommand("AI0;"); // "MRnnn;" if valid, returns last channel used, "mrlll...;", along with channel nnn info. cmd = "MR118;"; wait_char(';', 27, FL950_WAIT_TIME, "Read UK 60m Channel Mem", ASC); size_t p = replystr.rfind("MR"); if (p == std::string::npos) { Channels_60m = US_60m_chan; label_60m = US_60m_label; op_yaesu_select60->clear(); for (size_t n = 0; n < US_60m_label.size(); n++) op_yaesu_select60->add(US_60m_label.at(n).c_str()); } else { Channels_60m = UK_60m_chan; label_60m = UK_60m_label; op_yaesu_select60->clear(); for (size_t n = 0; n < UK_60m_label.size(); n++) op_yaesu_select60->add(UK_60m_label.at(n).c_str()); } op_yaesu_select60->index(m_60m_indx); op_yaesu_select60->activate(); } void RIG_FT950::post_initialize() { enable_yaesu_bandselect(12, false); enable_yaesu_bandselect(13, true); } bool RIG_FT950::check () { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';',11, FL950_WAIT_TIME, "check", ASC); if (ret >= 11) return true; return false; } unsigned long long RIG_FT950::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';',11, FL950_WAIT_TIME, "get vfo A", ASC); rig_trace(4, "get_vfoA()", cmd.c_str(), " => ", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqA = f; return freqA; } void RIG_FT950::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); rig_trace(4, "set_vfoA()", cmd.c_str(), " => ", replystr.c_str()); } unsigned long long RIG_FT950::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';',11, FL950_WAIT_TIME, "get vfo B", ASC); rig_trace(4, "get_vfoB()", cmd.c_str(), " => ", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqB = f; return freqB; } void RIG_FT950::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); rig_trace(4, "set_vfoB()", cmd.c_str(), " => ", replystr.c_str()); } void RIG_FT950::setVfoAdj(double v) { char cmdstr[20]; int iv = fabs(v); snprintf(cmdstr, sizeof(cmdstr), "%02d", iv); cmd = "EX035"; if (v < 0) cmd += '-'; else cmd += '+'; cmd.append(cmdstr); cmd.append(";"); sendCommand(cmd); rig_trace(4, "set_VfoAdj()", cmd.c_str(), " => ", replystr.c_str()); } double RIG_FT950::getVfoAdj() { cmd = rsp = "EX035"; sendCommand(cmd.append(";")); wait_char(';',9, FL950_WAIT_TIME, "get Vfo Adjust", ASC); rig_trace(4, "get_VfoAdj()", cmd.c_str(), " => ", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; return (double)(atoi(&replystr[p+5])); } void RIG_FT950::get_vfoadj_min_max_step(double &min, double &max, double &step) { min = -25; max = 25; step = 1; } bool RIG_FT950::twovfos() { return true; } void RIG_FT950::selectA() { cmd = "FR0;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); rig_trace(4, "selectA()", cmd.c_str(), " => ", replystr.c_str()); inuse = onA; } void RIG_FT950::selectB() { cmd = "FR4;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); rig_trace(4, "selectB()", cmd.c_str(), " => ", replystr.c_str()); inuse = onB; } void RIG_FT950::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); rig_trace(4, "A2B()", cmd.c_str(), " => ", replystr.c_str()); } bool RIG_FT950::can_split() { return true; } void RIG_FT950::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR4;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, replystr); rig_trace(4, "RxB, TxA()", cmd.c_str(), " => ", replystr.c_str()); } else { cmd = "FR4;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, replystr); rig_trace(4, "RxB, TxB()", cmd.c_str(), " => ", replystr.c_str()); } } else { if (val) { cmd = "FR0;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, replystr); rig_trace(4, "RxA, TxB()", cmd.c_str(), " => ", replystr.c_str()); } else { cmd = "FR0;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, replystr); rig_trace(4, "RxA, TxA()", cmd.c_str(), " => ", replystr.c_str()); } } Fl::awake(highlight_vfo, (void *)0); } int RIG_FT950::get_split() { size_t p; int split = 0; char rx, tx; // tx vfo cmd = rsp = "FT"; cmd.append(";"); wait_char(';',4, FL950_WAIT_TIME, "get split tx vfo", ASC); rig_trace(4, "get_split()", cmd.c_str(), " => ", replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) return false; tx = replystr[p+2] - '0'; // rx vfo cmd = rsp = "FR"; cmd.append(";"); wait_char(';',4, FL950_WAIT_TIME, "get split rx vfo", ASC); rig_trace(4, "get_split()", cmd.c_str(), " => ", replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) return false; rx = replystr[p+2] - '0'; split = (tx == 1 ? 2 : 0) + (rx >= 4 ? 1 : 0); return split; } int RIG_FT950::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';',7, FL950_WAIT_TIME, "get smeter", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FT950::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';',7, FL950_WAIT_TIME, "get swr", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.55); } int RIG_FT950::get_alc() { cmd = rsp = "RM4"; cmd += ';'; wait_char(';',7, FL950_WAIT_TIME, "get alc", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.55); } double RIG_FT950::get_voltmeter() { cmd = "RM8;"; std::string resp = "RM"; int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); wait_char(';',7, 100, "get vdd", ASC); gett("get_voltmeter"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = atoi(&replystr[p+3]); val = 13.8 * mtr / 190; return val; } return -1; } double RIG_FT950::get_idd() { cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_idd"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 9 >= replystr.length()) return 0; replystr[6] = '\x00'; double mtr = atoi(&replystr[p+3]); return mtr / 10.0; } int RIG_FT950::get_power_out() { cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';',7, FL950_WAIT_TIME, "get pout", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; double mtr = (double)(atoi(&replystr[p+3])); // following conversion iaw data measured by Terry, KJ4EED mtr = (.06 * mtr) + (.002 * mtr * mtr); return (int)ceil(mtr); } // Transceiver power level double RIG_FT950::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';',6, FL950_WAIT_TIME, "get power", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FT950::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); rig_trace(4, "set_power_control()", cmd.c_str(), " => ", replystr.c_str()); } // Volume control return 0 ... 100 int RIG_FT950::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';',7, FL950_WAIT_TIME, "get vol", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = round(atoi(&replystr[p+3]) / 2.55); if (val > 100) val = 100; return ceil(val); } void RIG_FT950::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); rig_trace(4, "set_volume_control()", cmd.c_str(), " => ", replystr.c_str()); } // Tranceiver PTT on/off void RIG_FT950::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); rig_trace(4, "set_PTT_control()", cmd.c_str(), " => ", replystr.c_str()); ptt_ = val; } int RIG_FT950::get_PTT() { cmd = "TX;"; rsp = "TX"; waitN(4, 100, "get PTT", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } // internal or external tune mode void RIG_FT950::tune_rig(int) { if (!progStatus.external_tuner) { cmd = "AC002;"; sendCommand(cmd); return; } static bool extun_on = false; static int rmd = modeA; static int rbw = bwA; static int rpwr = 100; static unsigned long long rfreq = freqA; // fix for menu 047 OFSt default int use_int_tuner = true; // On-The-Fly bandstack by bandstack int/ext tuner // if rig "Tuner" light is on internal else external cmd = rsp = "AC"; cmd.append(";"); wait_char(';',6, FL950_WAIT_TIME, "is Int. Tuner Enabled", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return; if ((p + 5) >= replystr.length()) return; if (replystr[p+4] == '0') { use_int_tuner = false; } if (use_int_tuner) { cmd = "AC002;"; sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); } else { if (extun_on == false) { if (btnPTT->value() == true) return; if (get_split() == 1 || get_split() == 2) return; // no split extune inuse == onB ? rmd = modeB : rmd = modeA; inuse == onB ? rbw = bwB : rbw = bwA; inuse == onB ? rfreq = freqB : rfreq = freqA; inuse == onB ? set_modeB(mAM_N) : set_modeA(mAM_N); // inuse == onB ? set_modeB(mFM_N) : set_modeA(mFM_N); inuse == onB ? set_vfoB(rfreq) : set_vfoA(rfreq); rpwr = get_power_control(); set_power_control(10); sendCommand("EX0360000;"); // AM mic off // sendCommand("EX0560000;"); // FM mic off extun_on = true; btnPTT->value(true); sendCommand("MX1;"); } else { extun_on = false; btnPTT->value(false); sendCommand("MX0;"); sendCommand("EX0361000;"); // AM mic default // sendCommand("EX0560050;"); // FM mic default set_power_control(rpwr); inuse == onB ? set_modeB(rmd) : set_modeA(rmd); inuse == onB ? set_bwB(rbw) : set_bwA(rbw); inuse == onB ? set_vfoB(rfreq) : set_vfoA(rfreq); } } } int RIG_FT950::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FT950::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); rig_trace(4, "set_attenuator()", cmd.c_str(), " => ", replystr.c_str()); } int RIG_FT950::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';',5, FL950_WAIT_TIME, "get att", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FT950::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FT950::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); rig_trace(4, "set_preamp()", cmd.c_str(), " => ", replystr.c_str()); } int RIG_FT950::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';',5, FL950_WAIT_TIME, "get pre", ASC); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FT950::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FT950::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } int RIG_FT950::adjust_bandwidth(int val) { switch (val) { case mCW : case mCW_R : case mRTTY_L : case mRTTY_U : bandwidths_ = FT950_widths_CW; bw_vals_ = FT950_wvals_CW; break; case mFM : case mAM : bandwidths_ = FT950_widths_AMFMnorm; bw_vals_ = FT950_wvals_AMFM; break; case mFM_N : case mAM_N : bandwidths_ = FT950_widths_AMFMnar; bw_vals_ = FT950_wvals_AMFM; break; case mPKT_FM : bandwidths_ = FT950_widths_NN; bw_vals_ = FT950_wvals_NN; break; case mPKT_L : case mPKT_U : bandwidths_ = FT950_widths_SSBD; bw_vals_ = FT950_wvals_SSBD; break; default: bandwidths_ = FT950_widths_SSB; bw_vals_ = FT950_wvals_SSB; } return FT950_def_bw[val]; } int RIG_FT950::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FT950::bwtable(int n) { switch (n) { case mPKT_FM : return FT950_widths_NN; case mFM : case mAM : return FT950_widths_AMFMnorm; case mFM_N : case mAM_N : return FT950_widths_AMFMnar; case mCW : case mCW_R : case mRTTY_L : case mRTTY_U : return FT950_widths_CW; case mPKT_L : case mPKT_U : return FT950_widths_SSBD; default : break; } return FT950_widths_SSB; } void RIG_FT950::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FT950_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); rig_trace(4, "set_modeA()", cmd.c_str(), " => ", replystr.c_str()); adjust_bandwidth(modeA); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); rig_trace(4, "set_spot_off()", cmd.c_str(), " => ", replystr.c_str()); btnSpot->value(0); } } int RIG_FT950::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';',5, FL950_WAIT_TIME, "get mode A", ASC); rig_trace(4, "get_modeA()", cmd.c_str(), " => ", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeA = md; } } adjust_bandwidth(modeA); return modeA; } void RIG_FT950::set_modeB(int val) { modeB = val; cmd = "MD0"; cmd += FT950_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); rig_trace(4, "set_modeB()", cmd.c_str(), " => ", replystr.c_str()); adjust_bandwidth(modeB); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); rig_trace(4, "set_spot off()", cmd.c_str(), " => ", replystr.c_str()); btnSpot->value(0); } } int RIG_FT950::get_modeB() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';',5, FL950_WAIT_TIME, "get mode B", ASC); rig_trace(4, "get_modeB()", cmd.c_str(), " => ", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeB = md; } } adjust_bandwidth(modeB); return modeB; } void RIG_FT950::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mAM_N) return; if (modeA == mPKT_FM) { if (val == 1) cmd = "NA01;"; else cmd = "NA00;"; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); rig_trace(4, "set_bwA()", cmd.c_str(), " => ", replystr.c_str()); return; } if ((((modeA == mLSB || modeA == mUSB) && val < 8)) || ((modeA == mCW || modeA == mCW_R || modeA == mRTTY_L || modeA == mRTTY_U || modeA == mPKT_L || modeA == mPKT_U) && val < 4) ) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); mode_bwA[modeA] = bwA; rig_trace(4, "set_bwA()", cmd.c_str(), " => ", replystr.c_str()); } int RIG_FT950::get_bwA() { size_t p; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mAM_N) { bwA = 0; mode_bwA[modeA] = bwA; return bwA; } if (modeA == mPKT_FM) { cmd = rsp = "NA0"; cmd += ';'; wait_char(';',5, FL950_WAIT_TIME, "get bw A narrow", ASC); rig_trace(4, "get_bwA()", cmd.c_str(), " => ", replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) { bwA = 0; return bwA; } if (p + 4 >= replystr.length()) { bwA = 0; return bwA; } if (replystr[p+3] == '1') bwA = 1; // narrow on else bwA = 0; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';',6, FL950_WAIT_TIME, "get bw A", ASC); rig_trace(4, "get_bwA()", cmd.c_str(), " => ", replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; if (p + 5 >= replystr.length()) return bwA; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3),2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; mode_bwA[modeA] = bwA; return bwA; } void RIG_FT950::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mAM_N) return; if (modeB == mPKT_FM) { if (val == 1) cmd = "NA01;"; else cmd = "NA00;"; sendCommand(cmd); showresp(WARN, ASC, "SET bw B", cmd, replystr); rig_trace(4, "set_bwB()", cmd.c_str(), " => ", replystr.c_str()); return; } if ((((modeB == mLSB || modeB == mUSB) && val < 8)) || ((modeB == mCW || modeB == mCW_R || modeB == mRTTY_L || modeB == mRTTY_U || modeB == mPKT_L || modeB == mPKT_U) && val < 4) ) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw B", cmd, replystr); mode_bwB[modeB] = bwB; rig_trace(4, "set_bwB()", cmd.c_str(), " => ", replystr.c_str()); } int RIG_FT950::get_bwB() { size_t p; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mAM_N) { bwB = 0; mode_bwB[modeB] = bwB; return bwB; } if (modeB == mPKT_FM) { cmd = rsp = "NA0"; cmd += ';'; wait_char(';',5, FL950_WAIT_TIME, "get bw B narrow", ASC); rig_trace(4, "get_bwB()", cmd.c_str(), " => ", replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) { bwB = 0; return bwB; } if (p + 4 >= replystr.length()) { bwB = 0; return bwB; } if (replystr[p+3] == '1') bwB = 1; // narrow on else bwB = 0; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';',6, FL950_WAIT_TIME, "get bw B", ASC); rig_trace(4, "get_bwB()", cmd.c_str(), " => ", replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; if (p + 5 >= replystr.length()) return bwB; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3),2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FT950::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FT950::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FT950::get_modetype(int n) { return FT950_mode_type[n]; } void RIG_FT950::set_if_shift(int val) { cmd = "IS0+0000;"; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); rig_trace(4, "set_if_shift()", cmd.c_str(), " => ", replystr.c_str()); } bool RIG_FT950::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';',9, FL950_WAIT_TIME, "get if shift", ASC); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FT950::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1000; if_shift_max = max = 1000; if_shift_step = step = 20; if_shift_mid = 0; } void RIG_FT950::set_notch(bool on, int val) { // set notch frequency if (on) { cmd = "BP00001;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); rig_trace(4, "set_notch_on()", cmd.c_str(), " => ", replystr.c_str()); cmd = "BP01000;"; if (val % 10 >= 5) val += 10; val /= 10; for (int i = 3; i > 0; i--) { cmd[3 + i] += val % 10; val /=10; } sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); rig_trace(4, "set_notch_val()", cmd.c_str(), " => ", replystr.c_str()); return; } // set notch off cmd = "BP00000;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch off", cmd, replystr); rig_trace(4, "set_notch_off()", cmd.c_str(), " => ", replystr.c_str()); } bool RIG_FT950::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; wait_char(';',8, FL950_WAIT_TIME, "get notch on/off", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; if (replystr[p+6] == '1') { // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; wait_char(';',8, FL950_WAIT_TIME, "get notch val", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4),3) * 10; } return ison; } void RIG_FT950::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3000; step = 10; } void RIG_FT950::set_auto_notch(int v) { cmd.assign("BC0").append(v ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET DNF Auto Notch Filter", cmd, replystr); } int RIG_FT950::get_auto_notch() { cmd = "BC0;"; wait_char(';',5, FL950_WAIT_TIME, "get auto notch", ASC); size_t p = replystr.rfind("BC0"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } int FT950_blanker_level = 2; void RIG_FT950::set_noise(bool b) { cmd = "NB00;"; if (FT950_blanker_level == 0) { FT950_blanker_level = 1; nb_label("NB 1", true); } else if (FT950_blanker_level == 1) { FT950_blanker_level = 2; nb_label("NB 2", true); } else if (FT950_blanker_level == 2) { FT950_blanker_level = 0; nb_label("NB", false); } cmd[3] = '0' + FT950_blanker_level; sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); rig_trace(4, "set_NB()", cmd.c_str(), " => ", replystr.c_str()); } int RIG_FT950::get_noise() { cmd = rsp = "NB0"; cmd += ';'; wait_char(';',5, FL950_WAIT_TIME, "get NB", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return FT950_blanker_level; FT950_blanker_level = replystr[p+3] - '0'; if (FT950_blanker_level == 1) { nb_label("NB 1", true); } else if (FT950_blanker_level == 2) { nb_label("NB 2", true); } else { nb_label("NB", false); FT950_blanker_level = 0; } return FT950_blanker_level; } // val 0 .. 100 void RIG_FT950::set_mic_gain(int val) { cmd = "MG000;"; val = (int)(val * 2.50); for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); rig_trace(4, "set_mic_gain()", cmd.c_str(), " => ", replystr.c_str()); } int RIG_FT950::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';',6, FL950_WAIT_TIME, "get mic", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); val = (int)(val / 2.50); if (val > 100) val = 100; return ceil(val); } void RIG_FT950::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT950::set_rf_gain(int val) { cmd = "RG0000;"; if (progStatus.ft950_rg_reverse) val = 100 - val; if (val > 100) val = 100; if (val < 0) val = 0; int rfval = (int)(val * 2.5); for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); rig_trace(4, "set_rf_gain()", cmd.c_str(), " => ", replystr.c_str()); } int RIG_FT950::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';',7, FL950_WAIT_TIME, "get rfgain", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = (int)(rfval / 2.5); if (rfval > 100) rfval = 100; if (rfval < 0) rfval = 0; if (progStatus.ft950_rg_reverse) rfval = 100 - rfval; return rfval; } void RIG_FT950::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT950::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); } void RIG_FT950::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FT950::set_vox_anti() { cmd = "EX117"; cmd.append(to_decimal(progStatus.vox_anti, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET anti-vox", cmd, replystr); } void RIG_FT950::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FT950::set_vox_on_dataport() { cmd = "EX1140;"; if (progStatus.vox_on_dataport) cmd[5] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); } void RIG_FT950::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FT950::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FT950::set_cw_spot() { if (vfo->imode == mCW || vfo->imode == mCW_R) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FT950::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX046").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FT950::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX049").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); } void RIG_FT950::set_cw_spot_tone() { int n = (progStatus.cw_spot_tone - 300) / 50; cmd.assign("EX045").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); } /* void RIG_FT950::set_cw_vol() { } */ void RIG_FT950::get_band_selection(int v) { int chan_mem_on = false; cmd = "IF;"; wait_char(';',27, FL950_WAIT_TIME, "get vfo mode in get_band_selection", ASC); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if ((p + 26) >= replystr.length()) return; if (replystr[p+21] != '0') { // vfo 60M memory mode chan_mem_on = true; } if (v == 13) { m_60m_indx = op_yaesu_select60->index(); if (m_60m_indx) cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); else if (chan_mem_on) cmd = "VM;"; } else { // v == 1..11 band selection OR return to vfo mode == 0 if (chan_mem_on) { cmd = "VM;"; op_yaesu_select60->index(m_60m_indx = 0); } else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); set_trace(2, "get band", cmd.c_str()); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } // DNR void RIG_FT950::set_noise_reduction_val(int val) { cmd.assign("RL0").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, replystr); } int RIG_FT950::get_noise_reduction_val() { int val = 1; cmd = rsp = "RL0"; cmd.append(";"); wait_char(';',6, FL950_WAIT_TIME, "GET noise reduction val", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = atoi(&replystr[p+3]); return val; } // DNR void RIG_FT950::set_noise_reduction(int val) { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET noise reduction", cmd, replystr); } int RIG_FT950::get_noise_reduction() { int val; cmd = rsp = "NR0"; cmd.append(";"); wait_char(';',5, FL950_WAIT_TIME, "GET noise reduction", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; val = replystr[p+3] - '0'; return val; } void RIG_FT950::set_xcvr_auto_on() { if (!progStatus.xcvr_auto_on) return; cmd = rsp = "PS"; cmd.append(";"); wait_char(';',4, FL950_WAIT_TIME, "Test: Is Rig ON", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) { // rig is off, power on cmd = "PS1;"; sendCommand(cmd); for (int i = 0; i < 1500; i += 100) { MilliSleep(100); update_progress(100 * i / 4500); Fl::awake(); } sendCommand(cmd); for (int i = 1500; i < 4500; i += 100) { MilliSleep(100); update_progress(100 * i / 4500); Fl::awake(); } } } void RIG_FT950::set_xcvr_auto_off() { if (!progStatus.xcvr_auto_off) return; cmd = "PS0;"; sendCommand(cmd); } void RIG_FT950::set_compression(int on, int val) { cmd.assign("PL").append(to_decimal(val, 3)).append(";"); sendCommand(cmd); showresp(INFO, ASC, "set Comp level", cmd, replystr); cmd.assign( on ? "PR1;" : "PR0;"); sendCommand(cmd); showresp(INFO, ASC, "set Comp on/off", cmd, replystr); rig_trace(2, "set compression on/off", cmd.c_str()); } void RIG_FT950::get_compression( int &on, int &val ) { on = progStatus.compON; val = progStatus.compression; cmd.assign("PL;"); wait_char(';', 6, FL950_WAIT_TIME, "GET compression value", ASC); size_t p = replystr.rfind("PL"); if (p == std::string::npos) return; val = fm_decimal(replystr.substr(p+3),2); cmd.assign("PR;"); wait_char(';', 4, FL950_WAIT_TIME, "GET compression on/off", ASC); p = replystr.rfind("PR"); if (p == std::string::npos) return; on = (replystr[p+2] == '1'); } /* // Audio Peak Filter, like set_cw_spot bool RIG_FT950::set_cw_APF() { if (vfo->imode == mCW || vfo->imode == mCW_R) { cmd = "CO0000;"; if (progStatus.apf_onoff) cmd[5] = '2'; sendCommand(cmd); showresp(WARN, ASC, "SET APF on/off", cmd, replystr); return true; } else return false; } */ flrig-2.0.04/src/rigs/yaesu/FT847.cxx0000664000175000017500000001226714502041135014007 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT847.h" #include "rig.h" static const char FT847name_[] = "FT-847"; static std::vectorFT847modes_; static const char *vFT847modes_[] = { "LSB", "USB", "CW", "CW-R", "AM", "FM", "CW-N", "CW-NR", "AM-N", "FM-N"}; static const int FT847_mode_val[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x08, 0x82, 0x83, 0x84, 0x88 }; static const char FT847_mode_type[] = { 'L', 'U', 'L', 'U', 'U', 'U', 'L', 'U', 'U', 'U' }; //static const int FT847_def_bw[] = { 2, 2, 1, 1, 3, 2, 2, 3 }; //static std::vectorFT847widths_; //static const char *vFT847widths_[] = { "300", "500", "2400", "6000"}; //static const int FT847_bw_val[] = { 0, 1, 2, 3 }; static const int sm[] = {0,2,4,6,8,11,14,16,19,22,25,28,31,34,37,40, 43,45,47,50,54,58,62,66,70,74,78,82,86,90,95,100}; static const int po[] = {0,2,3,4,5,6,7,8,9,10,11,12,14,16,18,20, 23,26,30,34,39,44,50,56,62,69,76,84,92,100,109,120}; RIG_FT847::RIG_FT847() { name_ = FT847name_; modes_ = FT847modes_; // bandwidths_ = FT847widths_; serial_baudrate = BR9600; stopbits = 2; serial_retries = 2; serial_write_delay = 50; serial_post_write_delay = 00; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; afreq = A.freq = B.freq = 14070000ULL; amode = A.imode = B.imode = 1; precision = 10; ndigits = 8; has_smeter = has_power_out = has_get_info = // has_bandwidth_control = has_mode_control = has_ptt_control = true; } void RIG_FT847::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT847::initialize() { VECTOR (FT847modes_, vFT847modes_); modes_ = FT847modes_; init_cmd(); sendCommand(cmd, 0); // CAT on cmd[4] = 0x8E; // satellite mode off replystr.clear(); sendCommand(cmd); showresp(WARN, HEX, "init", cmd, replystr); } bool RIG_FT847::get_info() { int ret = 0, i = 0; init_cmd(); cmd[4] = 0x03; ret = waitN(5, 100, "get info", HEX); if (ret >= 5) { afreq = fm_bcd(replystr.substr(ret - 5), 8)*10; amode = replystr[ret - 1]; for (i = 0; i < 10; i++) if (FT847_mode_val[i] == amode) break; if (i == 10) i = 1; amode = i; return true; } return false; } bool RIG_FT847::check () { init_cmd(); cmd[4] = 0x03; int ret = waitN(5, 100, "check", HEX); if (ret >= 5) return true; return false; } unsigned long long RIG_FT847::get_vfoA () { if (inuse == onB) return A.freq; if (get_info()) { A.freq = afreq; A.imode = amode; A.iBW = aBW; } return A.freq; } void RIG_FT847::set_vfoA (unsigned long long freq) { A.freq = freq; freq /=10; // 847 does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; replystr.clear(); sendCommand(cmd); showresp(WARN, HEX, "set vfo A", cmd, replystr); } int RIG_FT847::get_modeA() { return A.imode; } void RIG_FT847::set_modeA(int val) { A.imode = val; init_cmd(); cmd[0] = FT847_mode_val[val]; cmd[4] = 0x07; replystr.clear(); sendCommand(cmd); showresp(WARN, HEX, "set mode A", cmd, replystr); } unsigned long long RIG_FT847::get_vfoB() { if (inuse == onA) return B.freq; if (get_info()) { B.freq = afreq; B.imode = amode; B.iBW = aBW; } return B.freq; } void RIG_FT847::set_vfoB(unsigned long long freq) { B.freq = freq; freq /=10; // 847 does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; replystr.clear(); sendCommand(cmd); showresp(WARN, HEX, "set vfo B", cmd, replystr); } void RIG_FT847::set_modeB(int val) { B.imode = val; init_cmd(); cmd[0] = FT847_mode_val[val]; cmd[4] = 0x07; replystr.clear(); sendCommand(cmd); showresp(WARN, HEX, "set mode B", cmd, replystr); } int RIG_FT847::get_modeB() { return B.imode; } int RIG_FT847::get_modetype(int n) { return FT847_mode_type[n]; } // Tranceiver PTT on/off void RIG_FT847::set_PTT_control(int val) { init_cmd(); if (val) cmd[4] = 0x08; else cmd[4] = 0x88; replystr.clear(); sendCommand(cmd); showresp(WARN, HEX, "set PTT", cmd, replystr); ptt_ = val; } int RIG_FT847::get_smeter() { init_cmd(); cmd[4] = 0xE7; int sval = 0; int ret = waitN(1, 100, "get smeter", HEX); if (ret >= 1) sval = sm[(replystr[ret - 1] & 0x1F)]; return sval; } int RIG_FT847::get_power_out() { init_cmd(); cmd[4] = 0xF7; fwdpwr = 0; int ret = waitN(1, 100, "get power", HEX); if (ret >= 1) fwdpwr = po[(replystr[ret - 1] & 0x1F)]; return fwdpwr; } flrig-2.0.04/src/rigs/yaesu/FT450D.cxx0000664000175000017500000010305514502041135014075 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include #include "yaesu/FT450D.h" #include "rig.h" #include "support.h" #define FL450D_WAIT_TIME 200 static const char FT450Dname_[] = "FT-450D"; enum mFT450D { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mDATA_L, mRTTY_U, mFM_N, mDATA_U }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 mode index #undef NUM_MODES #define NUM_MODES 11 static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFT450Dmodes_; static const char *vFT450Dmodes_[] = { "LSB", "USB", "CW", "FM", "AM", "RTTY-L", "CW-R", "DATA-L", "RTTY-U", "FM-N", "DATA-U"}; static const char mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'B', 'C' }; static const char mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U' }; static std::vectorFT450D_ssb_widths; static const char *vFT450D_ssb_widths[] = {"1800", "2400", "3000"}; static int FT450D_wvals_ssb_widths[] = {1, 2, 3, WVALS_LIMIT}; static std::vectorFT450D_cw_widths; static const char *vFT450D_cw_widths[] = {"300", "500", "2400"}; static int FT450D_wvals_cw_widths[] = {1, 2, 3, WVALS_LIMIT}; static std::vectorFT450D_data_widths; static const char *vFT450D_data_widths[] = {"300", "2400", "3000"}; static int FT450D_wvals_data_widths[] = {1, 2, 3, WVALS_LIMIT}; static std::vectorFT450D_am_widths; static const char *vFT450D_am_widths[] = {"3000", "6000", "9000"}; static int FT450D_wvals_am_widths[] = {1, 2, 3, WVALS_LIMIT}; static std::vectorFT450D_fm_widths; static const char *vFT450D_fm_widths[] = {"2500", "5000"}; static int FT450D_wvals_fm_widths[] = {1, 2, WVALS_LIMIT}; static const int FT450D_def_bw[] = { 2, 2, 0, 1, 1, 0, 0, 1, 0, 1, 1 }; /* static std::vectorFT450D_US_60m = {"", "126", "127", "128", "130"}; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. // US 60M 5-USB, 5-CW static std::vector& Channels_60m = FT450D_US_60m; */ static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)btnAGC, 2, 145, 50 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_FT450D::RIG_FT450D() { // base class values IDstr = "ID"; name_ = FT450Dname_; modes_ = FT450Dmodes_; bandwidths_ = FT450D_ssb_widths; bw_vals_ = FT450D_wvals_ssb_widths; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 2; def_mode = 10; def_bw = 2; def_freq = 14070000ULL; precision = 10; ndigits = 8; has_a2b = can_change_alt_vfo = has_xcvr_auto_on_off = has_noise_reduction = has_noise_reduction_control = has_band_selection = has_extras = has_vox_onoff = has_vox_gain = has_vox_hang = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_weight = has_cw_delay = has_cw_break_in = has_split = has_split_AB = has_getvfoAorB = has_smeter = has_swr_control = has_alc_control = has_power_out = has_power_control = has_volume_control = has_agc_control = has_rf_control = has_mode_control = has_noise_control = has_bandwidth_control = has_micgain_control = has_notch_control = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = true; has_band_selection = true; // derived specific notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 8; } void RIG_FT450D::initialize() { VECTOR( FT450Dmodes_, vFT450Dmodes_); VECTOR( FT450D_ssb_widths, vFT450D_ssb_widths); VECTOR( FT450D_cw_widths, vFT450D_cw_widths); VECTOR( FT450D_data_widths, vFT450D_data_widths); VECTOR( FT450D_am_widths, vFT450D_am_widths); VECTOR( FT450D_fm_widths, vFT450D_fm_widths); modes_ = FT450Dmodes_; bandwidths_ = FT450D_ssb_widths; bw_vals_ = FT450D_wvals_ssb_widths; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = btnAGC; rig_widgets[3].W = sldrRFGAIN; rig_widgets[4].W = btnIFsh; rig_widgets[5].W = sldrIFSHIFT; rig_widgets[6].W = btnNotch; rig_widgets[7].W = sldrNOTCH; rig_widgets[8].W = sldrMICGAIN; rig_widgets[9].W = sldrPOWER; rig_widgets[10].W = btnNR; rig_widgets[11].W = sldrNR; op_yaesu_select60->deactivate(); // set progStatus defaults if (progStatus.noise_reduction_val < 1) progStatus.noise_reduction_val = 1; // turn off auto information mode sendCommand("AI0;"); } void RIG_FT450D::selectA() { cmd = "VS0;"; sendCommand(cmd); showresp(WARN, ASC, "select vfo A", cmd, replystr); sett("selectA"); inuse = onA; } void RIG_FT450D::selectB() { cmd = "VS1;"; sendCommand(cmd); showresp(WARN, ASC, "select vfo B", cmd, replystr); sett("selectB"); inuse = onB; } void RIG_FT450D::A2B() { cmd = "VV;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); sett("A2B"); } bool RIG_FT450D::check() { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';',11, FL450D_WAIT_TIME, "check", ASC); gett("check"); if (ret >= 11) return true; return false; } unsigned long long RIG_FT450D::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';',11, FL450D_WAIT_TIME, "get vfo A", ASC); gett("get_vfoA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqA = f; return freqA; } void RIG_FT450D::set_vfoA (unsigned long long freq) { int current_vfo = inuse; if (current_vfo == onB) selectA(); freqA = freq; cmd = "FA00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); sett("set_vfoA"); if (current_vfo == onB) selectB(); } unsigned long long RIG_FT450D::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';',11, FL450D_WAIT_TIME, "get vfo B", ASC); gett("get_vfoB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqB = f; return freqB; } void RIG_FT450D::set_vfoB (unsigned long long freq) { int current_vfo = inuse; if (current_vfo == onA) selectB(); freqB = freq; cmd = "FB00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); sett("set_vfoB"); if (current_vfo == onA) selectA(); } int RIG_FT450D::get_vfoAorB() { size_t p; cmd = rsp = "VS"; cmd.append(";"); wait_char(';', 4, FL450D_WAIT_TIME, "get vfo A/B", ASC); gett("get vfo A/B"); p = replystr.rfind(rsp); if (p == std::string::npos) return onNIL; if (replystr[p+2] == '1') inuse = onB; else inuse = onA; return inuse; } void RIG_FT450D::set_split(bool on) { if (inuse == onB) { if (on) cmd = "FT0;"; else cmd = "FT1;"; } else { if (on) cmd = "FT1;"; else cmd = "FT0;"; } sendCommand(cmd); showresp(WARN, ASC, "SET split", cmd, replystr); sett("set_split"); } int RIG_FT450D::get_split() { size_t p; int split = 0; char tx; // tx vfo cmd = rsp = "FT"; cmd.append(";"); get_trace(1, "get_split()"); wait_char(';',4, FL450D_WAIT_TIME, "get split tx vfo", ASC); gett(""); p = replystr.rfind(rsp); if (p == std::string::npos) return false; tx = replystr[p+2]; if (inuse == onB) split = (tx == '0'); else split = (tx == '1'); return split; } struct mtrpair {int val; float mtr;}; static mtrpair sm_tbl[] = { {0, 0.0}, {18, 6.0}, {51, 17.0}, {85, 28.0}, {118, 39.0}, {151, 50.0}, {255, 100.0} }; int RIG_FT450D::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; get_trace(1, "get_smeter()"); wait_char(';',7, FL450D_WAIT_TIME, "get smeter", ASC); // sets replystr via rigbase gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int val = atoi(&replystr[p+3]); size_t i = 0; if (val < 0) val = 0; else if (val > 255) val = 255; else while(val > sm_tbl[i].val) i++; int mtr = (int)ceil(sm_tbl[i].mtr + (sm_tbl[i+1].mtr - sm_tbl[i].mtr) * (val - sm_tbl[i].val)/(sm_tbl[i+1].val - sm_tbl[i].val)); if (mtr > 100) mtr = 100; return mtr; } // measured by W3NR // SWR..... mtr ... display // 6:1..... 255 ... 100 // 3:1..... 132 ... 50 // 2:1..... 066 ... 26 // 2.5:1... 099 ... 39 // 1.5:1... 033 ... 13 // 1.1:1... 008 ... 3 int RIG_FT450D::get_swr() { cmd = rsp = "RM6"; cmd += ';'; get_trace(1, "get_swr()"); wait_char(';',7, FL450D_WAIT_TIME, "get swr", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } int RIG_FT450D::get_alc() { cmd = rsp = "RM4"; cmd += ';'; get_trace(1, "get_alc()"); wait_char(';',7, FL450D_WAIT_TIME, "get alc", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } // Power out calculated using three zones, by Brian VE3IBW // The FT450D power meter seems to have three zones with // different slopes per zone as opposed to a singular curved // line. The zones equate to the major meter graduations // on the FT-450D. The slopes were calculated by measuring // power output into a 100W dummy load: // zone 1: 0 - 10W --> Slope = 7.4; Intercept = 0 // zone 2: 10 - 50W --> Slope = 2.2; Intercept = 54 // zone 1: 50 - 100W --> Slope = 1.5; Intercept = 91 struct pwrpair {int mtr; double pwr;}; static pwrpair pwrtbl[] = { {0, 0.0}, {74, 10.0}, {164, 50.0}, {238, 100.0} }; int RIG_FT450D::get_power_out() { cmd = rsp = "RM5"; cmd.append(";"); get_trace(1, "get_power_out()"); wait_char(';',7, FL450D_WAIT_TIME, "get pout", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); if (mtr < 0) mtr = 0; if (mtr > 238) mtr = 238; size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; double pwr = floor ( pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr) * (mtr - pwrtbl[i].mtr) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr) ); if (pwr > 100) pwr = 100; return (int)pwr; } double RIG_FT450D::get_power_control() { cmd = rsp = "PC"; cmd += ';'; get_trace(1, "get_power_control()"); wait_char(';',6, FL450D_WAIT_TIME, "get power", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FT450D::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); sett("set_power_control"); } // Volume control return 0 ... 100 int RIG_FT450D::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';',7, FL450D_WAIT_TIME, "get vol", ASC); gett("get_volume_control"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = round(atoi(&replystr[p+3]) / 2.55); if (val > 100) val = 100; return ceil(val); } void RIG_FT450D::set_volume_control(int val) { int ivol = (int)(val * 255 / 100); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); sett("set_volume_control"); } void RIG_FT450D::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // Tranceiver PTT on/off void RIG_FT450D::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); sett("set_PTT_control"); ptt_ = val; } int RIG_FT450D::get_PTT() { cmd = "TX;"; rsp = "TX"; waitN(4, 100, "get PTT", ASC); gett("get_PTT"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FT450D::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FT450D::get_tune() { cmd = rsp = "AC"; cmd += ';'; waitN(5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return (val > 0); } static int attval = 0; void RIG_FT450D::set_attenuator(int val) { attval = val; if (val) cmd = "RA01;"; else cmd = "RA00;"; sendCommand(cmd); showresp(WARN, ASC, "get att", cmd, replystr); sett("set_attenuator"); } int RIG_FT450D::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, FL450D_WAIT_TIME, "get att", ASC); gett("get_attenuator"); size_t p = replystr.rfind(rsp); atten_level = 0; if (p != std::string::npos) atten_level = (replystr[p+3] == '3' ? 1 : 0); return atten_level; } static int preval = 0; static bool wait_preamp = false; void RIG_FT450D::set_preamp(int val) { wait_preamp = true; preval = val; if (preval) cmd = "PA00;"; else cmd = "PA01;"; sendCommand(cmd); showresp(WARN, ASC, "set preamp", cmd, replystr); sett("set_preamp"); wait_preamp = false; } int RIG_FT450D::get_preamp() { while (wait_preamp) { Fl::awake(); MilliSleep(50); } cmd = "PA0;"; wait_char(';', 5, FL450D_WAIT_TIME, "get pre", ASC); gett("get_preamp"); if (replystr.empty()) return preval; size_t p = replystr.rfind("PA00;"); preval = 0; if (p != std::string::npos) preval = 1; return preval; } const char *RIG_FT450D::ATT_label() { if (atten_level == 1) return "12 dB"; return "ATT"; } const char *RIG_FT450D::PRE_label() { if (preamp_level == 1) return "Amp 1"; return "IPO"; } int RIG_FT450D::adjust_bandwidth(int val) { switch (val) { case mCW : case mCW_R : bandwidths_ = FT450D_cw_widths; bw_vals_ = FT450D_wvals_cw_widths; break; case mFM : case mFM_N : bandwidths_ = FT450D_fm_widths; bw_vals_ = FT450D_wvals_fm_widths; break; case mAM : bandwidths_ = FT450D_am_widths; bw_vals_ = FT450D_wvals_am_widths; break; case mRTTY_L : case mRTTY_U : case mDATA_L : case mDATA_U : bandwidths_ = FT450D_data_widths; bw_vals_ = FT450D_wvals_data_widths; break; default: bandwidths_ = FT450D_ssb_widths; bw_vals_ = FT450D_wvals_ssb_widths; break; } return FT450D_def_bw[val]; } int RIG_FT450D::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FT450D::bwtable(int n) { switch (n) { case mCW : case mCW_R : return FT450D_cw_widths; case mFM : case mFM_N : return FT450D_fm_widths; case mAM : return FT450D_am_widths; case mRTTY_L : case mRTTY_U : case mDATA_L : case mDATA_U : return FT450D_data_widths; } return FT450D_ssb_widths; } void RIG_FT450D::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); sett("set_modeA"); adjust_bandwidth(modeA); if (val == 2 || val == 6) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); sett("set_spot_off"); btnSpot->value(0); } } int RIG_FT450D::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, FL450D_WAIT_TIME, "get mode A", ASC); gett("get_modeA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return modeA; int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'B'; modeA = md; adjust_bandwidth(modeA); return modeA; } void RIG_FT450D::set_bwA(int val) { bwA = val; switch (val) { case 0 : cmd = "SH000;"; break; case 1 : cmd = "SH016;"; break; case 2 : cmd = "SH031;"; break; default: cmd = "SH016;"; } sendCommand(cmd); mode_bwA[modeA] = bwA; showresp(WARN, ASC, "SET bwA", cmd, replystr); sett("set_bwA"); } int RIG_FT450D::get_bwA() { cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, FL450D_WAIT_TIME, "get bw A", ASC); gett("get_bwA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; std::string bws = replystr.substr(p+3,2); if (bws == "00") bwA = 0; else if (bws == "16") bwA = 1; else if (bws == "31") bwA = 2; mode_bwA[modeA] = bwA; return bwA; } void RIG_FT450D::set_modeB(int val) { modeB = val; cmd = "MD0"; cmd += mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); sett("set_modeB"); adjust_bandwidth(modeB); if (val == 2 || val == 6) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); sett("set spot off"); btnSpot->value(0); } } int RIG_FT450D::get_modeB() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, FL450D_WAIT_TIME, "get mode B", ASC); gett("get_modeB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return modeB; int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'B'; modeB = md; adjust_bandwidth(modeB); return modeB; } void RIG_FT450D::set_bwB(int val) { bwB = val; switch (val) { case 0 : cmd = "SH000;"; break; case 1 : cmd = "SH016;"; break; case 2 : cmd = "SH031;"; break; default: cmd = "SH031;"; } sendCommand(cmd); mode_bwB[modeB] = bwB; showresp(WARN, ASC, "SET bwB", cmd, replystr); sett("set_bwB"); } int RIG_FT450D::get_bwB() { cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, FL450D_WAIT_TIME, "get bw B", ASC); gett("get_bwB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; std::string bws = replystr.substr(p+3,2); if (bws == "00") bwB = 0; else if (bws == "16") bwB = 1; else if (bws == "31") bwB = 2; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FT450D::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FT450D::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FT450D::get_modetype(int n) { return mode_type[n]; } void RIG_FT450D::set_if_shift(int val) { cmd = "IS0+0000;"; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET ifshift", cmd, replystr); sett("set_if_shift"); } bool RIG_FT450D::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';', 9, FL450D_WAIT_TIME, "get if shift", ASC); gett("get_if_shift"); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FT450D::get_if_min_max_step(int &min, int &max, int &step) { min = -1000; max = 1000; step = 100; } void RIG_FT450D::set_notch(bool on, int val) { cmd = "BP00000;"; if (!on) { if (notch_on) { sendCommand(cmd); showresp(WARN, ASC, "SET notch off", cmd, replystr); sett("set notch off"); notch_on = false; } return; } cmd = "BP00001;"; if (!notch_on) { sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); sett("set notch on"); notch_on = true; } cmd = "BP01nnn;"; val = val / 10; for (int i = 3; i > 0; i--) { cmd[3 + i] = val % 10 + '0'; val /=10; } sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); sett("set notch val"); } bool RIG_FT450D::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; wait_char(';', 8, FL450D_WAIT_TIME, "get notch on/off", ASC); gett("get_notch"); size_t p = replystr.rfind(rsp); val = progStatus.notch_val = 0; // disabled default slider position if (p == std::string::npos) return ison; if (replystr[p+6] == '1') { // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; waitN(8, 100, "get notch val", ASC); gett("get_notch_val"); p = replystr.rfind(rsp); if (p == std::string::npos || rsp.length() < 8) return ison; val = atoi(&replystr[p+4]); val = val * 10; } notch_on = ison; return ison; } void RIG_FT450D::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 4000; step = 10; } void RIG_FT450D::set_noise(bool b) { if (b) cmd = "NB01;"; else cmd = "NB00;"; sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); sett("set_noise"); } void RIG_FT450D::set_xcvr_auto_on() { // send dummy data request for ID (see pg 12 CAT reference book) cmd = "ID;"; sendCommand(cmd); // wait 1 to 2 seconds MilliSleep(1500); cmd = "PS1;"; sendCommand(cmd); // wait for power on status cmd = "PS;"; waitN(4, 500, "Xcvr ON?", ASC); } void RIG_FT450D::set_xcvr_auto_off() { cmd = "PS0;"; sendCommand(cmd); sett("set_xcvr_auto_off"); } // val 0 .. 100 static int mg = 0; void RIG_FT450D::set_mic_gain(int val) { cmd = "MG000;"; if (val == 1) cmd = "MG000;"; else if (val == 2) cmd = "MG128;"; else cmd = "MG255;"; mg = val; sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); sett("set_mic_gain"); } int RIG_FT450D::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, FL450D_WAIT_TIME, "get mic", ASC); gett("get_mic_gain"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return mg; replystr[p+5] = 0; int val = atoi(&replystr[p+2]); if (val < 86) return 1; if (val < 127) return 2; return 3; } void RIG_FT450D::get_mic_min_max_step(int &min, int &max, int &step) { min = 1; max = 3; step = 1; } void RIG_FT450D::set_special(int v) { if (v) cmd = "VR1;"; else cmd = "VR0;"; sendCommand(cmd); showresp(WARN, ASC, "Set special", cmd, replystr); sett("set_special"); } void RIG_FT450D::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on/off", cmd, replystr); sett("set_vox_onoff"); } void RIG_FT450D::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); sett("set_vox_gain"); } void RIG_FT450D::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); sett("set_vox_hang"); } void RIG_FT450D::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); sett("set_cw_wpm"); } void RIG_FT450D::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); sett("enable_keyer"); } bool RIG_FT450D::set_cw_spot() { if (vfo->imode == 2 || vfo->imode == 6) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); sett("set_cw_spot"); return true; } else return false; } void RIG_FT450D::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX024").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); sett("set_cw_weight"); } void RIG_FT450D::set_break_in() { if (progStatus.break_in) { cmd = "BI1;"; break_in_label("FULL"); } 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_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() { if (progStatus.break_in) return; int n = progStatus.cw_delay; cmd.assign("EX016").append(to_decimal(n,4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw delay", cmd, replystr); sett("set_cw_delay"); } void RIG_FT450D::set_cw_qsk() { if (progStatus.cw_qsk == 0) { cmd.assign("BI1;"); sendCommand(cmd); showresp(WARN, ASC, "SET break-in ON", cmd, replystr); sett("set break in ON"); return; } cmd.assign("BI0;"); sendCommand(cmd); sett("SET break-in OFF"); int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX018").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); sett("set cw qsk"); } void RIG_FT450D::set_cw_spot_tone() { int n = (progStatus.cw_spot_tone - 400) / 50 + 1; cmd = "EX020"; cmd.append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); sett("set_cw_spot_tone"); } // DNR void RIG_FT450D::set_noise_reduction_val(int val) { cmd.assign("RL0").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_level", cmd, replystr); sett("set_noise_reduction_val"); } int RIG_FT450D::get_noise_reduction_val() { int val = 1; cmd = rsp = "RL0"; cmd.append(";"); waitN(6, 100, "GET noise reduction level", ASC); gett("get_noise_reduction_val"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = atoi(&replystr[p+3]); return val; } // DNR void RIG_FT450D::set_noise_reduction(int val) { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET noise reduction", cmd, replystr); sett("set_noise_reduction"); } int RIG_FT450D::get_noise_reduction() { int val; cmd = rsp = "NR0"; cmd.append(";"); wait_char(';', 5, FL450D_WAIT_TIME, "GET noise reduction", ASC); gett("get_noise_reduction"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; val = replystr[p+3] - '0'; return val; } void RIG_FT450D::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = (int)(val * 2.55); for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); sett("set_rf_gain"); } int RIG_FT450D::get_rf_gain() { //int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, FL450D_WAIT_TIME, "get rfgain", ASC); gett("get_rf_gain"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; // Parse the RF value from the position returned by rfind for the response. // Valid values are 0-255. int rfval = (replystr[p+3] - '0') * 100 + (replystr[p+4] - '0') * 10 + (replystr[p+5] - '0'); // Convert 0-255 to 0-100 for the slider widget. rfval = (int)(rfval / 2.55); if (rfval > 100) rfval = 100; return rfval; } void RIG_FT450D::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } //---------------------------------------------------------------------- // these are used during initialization void RIG_FT450D::get_cw_weight() { cmd = "EX024;"; wait_char(';', 9, FL450D_WAIT_TIME, "get CW weight", ASC); gett("get_cw_weight"); size_t p = replystr.rfind("EX024"); if (p == std::string::npos) return; replystr[p+8] = 0; int val = atoi(&replystr[p+5]); progStatus.cw_weight = val / 10.0; } void RIG_FT450D::get_cw_wpm() { cmd = rsp = "KS;"; wait_char(';', 6, FL450D_WAIT_TIME, "get WPM", ASC); gett("get_cw_wpm"); size_t p = replystr.rfind("KS"); if (p == std::string::npos) return; replystr[p+5] = 0; int val = atoi(&replystr[p+2]); progStatus.cw_wpm = val; } void RIG_FT450D::get_qsk() { cmd = "EX018;"; wait_char(';', 7, FL450D_WAIT_TIME, "get CW qsk", ASC); gett("get_qsk"); size_t p = replystr.rfind("EX018"); if (p == std::string::npos) return; switch (replystr[p+5]) { default : case '0' : progStatus.cw_qsk = 15; break; case '1' : progStatus.cw_qsk = 20; break; case '2' : progStatus.cw_qsk = 25; break; case '3' : progStatus.cw_qsk = 30; break; } } void RIG_FT450D::get_qsk_delay() { cmd = "EX016;"; wait_char(';', 10, FL450D_WAIT_TIME, "get CW delay", ASC); gett("get_qsk_delay"); size_t p = replystr.rfind("EX016"); if (p == std::string::npos) return; replystr[p+9] = 0; progStatus.cw_delay = atoi(&replystr[p+5]); } void RIG_FT450D::get_cw_spot_tone() { cmd = "EX020;"; wait_char(';', 8, FL450D_WAIT_TIME, "get CW spot tone", ASC); gett("get_cw_spot_tone"); size_t p = replystr.rfind("EX020"); if (p == std::string::npos) return; replystr[p+7] = 0; int n = atoi(&replystr[p+5]); switch (n) { case 0: case 1: case 2: progStatus.cw_spot_tone = 400; break; case 3: case 4: progStatus.cw_spot_tone = 500; break; case 5: case 6: progStatus.cw_spot_tone = 600; break; case 7: case 8: progStatus.cw_spot_tone = 700; break; case 9: default: progStatus.cw_spot_tone = 800; break; } } void RIG_FT450D::get_vox_gain() { cmd = "VG;"; wait_char(';', 6, FL450D_WAIT_TIME, "get VOX gain", ASC); gett("get_vox_gain"); size_t p = replystr.rfind("VG"); if (p == std::string::npos) return; replystr[p+5] = 0; progStatus.vox_gain = atoi(&replystr[p+2]); } void RIG_FT450D::get_vox_hang() { cmd = "VD;"; wait_char(';', 7, FL450D_WAIT_TIME, "get VOX delay", ASC); gett("get_vox_hang"); size_t p = replystr.rfind("VD"); if (p == std::string::npos) return; replystr[p+6] = 0; progStatus.vox_hang = atoi(&replystr[p+2]); } void RIG_FT450D::get_band_selection(int v) { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); sett("get band"); } static int agcval = 0; int RIG_FT450D::get_agc() { cmd = "GT0;"; wait_char(';', 6, FL450D_WAIT_TIME, "get agc", ASC); gett("get_agc"); size_t p = replystr.rfind("GT"); if (p == std::string::npos) return agcval; switch (replystr[3]) { default: case '0': agcval = 0; break; case '1': agcval = 1; break; case '2': case '3': agcval = 2; break; case '4': case '6': agcval = 3; break; } return agcval; } int RIG_FT450D::incr_agc() { static const char ch[] = {'0', '1', '3', '4'}; agcval++; if (agcval > 3) agcval = 0; cmd = "GT00;"; cmd[3] = ch[agcval]; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); sett("set_agc"); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "SLO", "AUT"}; const char *RIG_FT450D::agc_label() { return agcstrs[agcval]; } int RIG_FT450D::agc_val() { return (agcval); } /* void RIG_FT450D::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; waitN(27, 100, "get band", ASC); sett("get band"); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+21] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0]empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx] >= Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } */ //---------------------------------------------------------------------- flrig-2.0.04/src/rigs/yaesu/FT990a.cxx0000664000175000017500000002276014502041135014146 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT990a.h" #include "rig.h" static const char FT990Aname_[] = "FT-990A"; enum { FT990A_LSB, FT990A_USB, FT990A_CW1, FT990A_CW2, FT990A_AM1, FT990A_AM2, FT990A_FM1, FT990A_FM2, FT990A_TTYL, FT990A_TTYU, FT990A_PKTL, FT990A_PKTU }; static std::vectorFT990Amodes_; static const char *vFT990Amodes_[] = { "LSB", "USB", "CW2.4", "CW500", "AM6.0", "AM2.4", "FM(1)", "FM(2)", "RTTY(L)", "RTTY(U)", "PKT(L)", "PKT(FM)"}; static const int FT990A_def_bw[] = { 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0 }; static const int FT990A_mode_val[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; static const char FT990A_mode_type[] = { 'L', 'U', 'L', 'L', 'U', 'U', 'U', 'U', 'L', 'U', 'L', 'U' }; static std::vectorFT990Awidths_; static const char *vFT990Awidths_[] = { "2400", "2000", "500", "250"}; static int FT990A_bw_vals[] = { 0,1,2,3,WVALS_LIMIT}; static const int FT990A_bw_val[] = { 0, 1, 2, 3 }; RIG_FT990A::RIG_FT990A() { name_ = FT990Aname_; modes_ = FT990Amodes_; bandwidths_ = FT990Awidths_; bw_vals_ = FT990A_bw_vals; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 50; serial_post_write_delay = 5; serial_timeout = 100; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; afreq = bfreq = A.freq = B.freq = 14070000ULL; amode = bmode = A.imode = B.imode = 1; aBW = bBW = A.iBW = B.iBW = 2; precision = 10; ndigits = 9; has_get_info = true; has_split = has_split_AB = has_smeter = has_power_out = has_swr_control = has_mode_control = has_bandwidth_control = has_ptt_control = has_tune_control = true; } int RIG_FT990A::adjust_bandwidth(int m) { if (m == 0 || m == 1 || m == 5) return 2; if (m == 2 || m == 3 ) return 1; if (m == 4 || m == 6 || m == 7) return 3; return 2; } void RIG_FT990A::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; replystr.clear(); } void RIG_FT990A::initialize() { VECTOR (FT990Amodes_, vFT990Amodes_); VECTOR (FT990Awidths_, vFT990Awidths_); modes_ = FT990Amodes_; bandwidths_ = FT990Awidths_; bw_vals_ = FT990A_bw_vals; init_cmd(); cmd[4] = 0x0E; sendCommand(cmd); } void RIG_FT990A::selectA() { init_cmd(); cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select A", cmd, ""); setthex("select A"); inuse = onA; } void RIG_FT990A::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select B", cmd, ""); setthex("select B"); inuse = onB; } void RIG_FT990A::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) showresp(WARN, HEX, "set split ON", cmd, ""); else showresp(WARN, HEX, "set split OFF", cmd, ""); setthex("split A/B"); } bool RIG_FT990A::check() { init_cmd(); cmd[3] = 0x00; cmd[4] = 0xFA; int ret = waitN(5, 100, "check", HEX); if (ret >= 5) return true; return false; } int RIG_FT990A::get_vfoAorB() { bool memmode = false; int vfobmode = onA; init_cmd(); cmd[3] = 0x00; cmd[4] = 0xFA; int ret = waitN(5, 100, "Read flags", HEX); getthex("read flags"); if (ret >= 5) { size_t p = ret - 5; memmode = ((replystr[p+1] & 0x10) == 0x10); vfobmode = ((replystr[p] & 0x02) == 0x02) ? onB : onA; if (memmode) return inuse; inuse = vfobmode; } return inuse; } bool RIG_FT990A::get_info() { int pmode, pbw; init_cmd(); cmd[3] = 0x03; // read 32 bytes of data for status of both vfos cmd[4] = 0x10; int ret = waitN(32, 100, "get info", ASC); getthex("Get info"); if (ret >= 32) { size_t da = ret - 32; size_t db = ret - 16; // vfo A data std::string A.freq = (replystr[da + 1] & 0xFF); A.freq <<= 8; A.freq += (replystr[da + 2]) & 0xFF; A.freq <<= 8; A.freq += (replystr[da + 3] & 0xFF); A.freq *= 10; int rmode = replystr[da + 7] & 0x07; switch (rmode) { case 0 : pmode = 0; break; // LSB case 1 : pmode = 1; break; // USB case 2 : pmode = 2; break; // CW case 3 : pmode = 5; break; // AM case 4 : pmode = 6; break; // FM case 5 : pmode = 8; break; // RTTY case 6 : pmode = 9; break; // PKT default : pmode = 1; break; } int rpbw = replystr[da + 8]; pbw = rpbw & 0x05; if (pbw > 4) pbw = 4; if ((rpbw & 0x80) == 0x80) { if (pmode == 10) pmode = 11; if (pmode == 8) pmode = 9; } if (pmode == 6) pbw = 0; A.imode = pmode; A.iBW = pbw; // vfo B data std::string B.freq = (replystr[db + 1] & 0xFF); B.freq <<= 8; B.freq += (replystr[db + 2]) & 0xFF; B.freq <<= 8; B.freq += (replystr[db + 3] & 0xFF); B.freq *= 10; rmode = replystr[db + 7] & 0x07; switch (rmode) { case 0 : pmode = 0; break; // LSB case 1 : pmode = 1; break; // USB case 2 : pmode = 2; break; // CW case 3 : pmode = 5; break; // AM case 4 : pmode = 6; break; // FM case 5 : pmode = 8; break; // RTTY case 6 : pmode = 9; break; // PKT default : pmode = 1; break; } rpbw = replystr[db + 8]; pbw = rpbw & 0x05; if (pbw > 4) pbw = 4; if ((rpbw & 0x80) == 0x80) { if (pmode == 10) pmode = 11; if (pmode == 8) pmode = 9; } if (pmode == 6) pbw = 0; B.imode = pmode; B.iBW = pbw; return true; } return false; } unsigned long long RIG_FT990A::get_vfoA () { return A.freq; } void RIG_FT990A::set_vfoA (unsigned long long freq) { int current_vfo = inuse; if (current_vfo == onB) selectA(); A.freq = freq; freq /=10; cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set freq A", cmd, replystr); setthex("Set freq A"); if (current_vfo == onB) selectB(); } int RIG_FT990A::get_modeA() { return A.imode; } void RIG_FT990A::set_modeA(int val) { int current_vfo = inuse; if (current_vfo == onB) selectA(); A.imode = val; init_cmd(); cmd[3] = FT990A_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode A", cmd, ""); setthex("set mode A"); if (current_vfo == onB) selectB(); } void RIG_FT990A::set_bwA (int val) { int current_vfo = inuse; if (current_vfo == onB) selectA(); A.iBW = val; init_cmd(); cmd[3] = FT990A_bw_val[val]; cmd[4] = 0x8C; sendCommand(cmd); showresp(WARN, HEX, "set BW A", cmd, ""); setthex("set BW A"); if (current_vfo == onB) selectB(); } int RIG_FT990A::get_bwA() { return A.iBW; } unsigned long long RIG_FT990A::get_vfoB() { return B.freq; } void RIG_FT990A::set_vfoB(unsigned long long freq) { int current_vfo = inuse; if (current_vfo == onA) selectB(); B.freq = freq; freq /=10; cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); // showresp(WARN, HEX, "set freq B", cmd, replystr); setthex("Set freq B"); if (current_vfo == onA) selectA(); } void RIG_FT990A::set_modeB(int val) { int current_vfo = inuse; if (current_vfo == onA) selectB(); B.imode = val; init_cmd(); cmd[3] = FT990A_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode B", cmd, ""); setthex("set mode B"); if (current_vfo == onA) selectA(); } int RIG_FT990A::get_modeB() { return B.imode; } void RIG_FT990A::set_bwB(int val) { int current_vfo = inuse; if (current_vfo == onA) selectB(); B.iBW = val; init_cmd(); cmd[3] = FT990A_bw_val[val]; cmd[4] = 0x8C; sendCommand(cmd); showresp(WARN, HEX, "set bw B", cmd, ""); setthex("set BW B"); if (current_vfo == onA) selectA(); } int RIG_FT990A::get_bwB() { return B.iBW; } int RIG_FT990A::def_bandwidth(int m) { return FT990A_def_bw[m]; } // Tranceiver PTT on/off void RIG_FT990A::set_PTT_control(int val) { init_cmd(); if (val) cmd[3] = 1; cmd[4] = 0x0F; sendCommand(cmd); if (val) showresp(WARN, HEX, "set PTT ON", cmd, ""); else showresp(WARN, HEX, "set PTT OFF", cmd, ""); ptt_ = val; setthex("set PTT On/Off"); } void RIG_FT990A::tune_rig(int) { init_cmd(); cmd[4] = 0x82; // initiate tuner cycle sendCommand(cmd,0); setthex("Tune xcvr"); } int RIG_FT990A::get_smeter() { float val = 0; init_cmd(); //cmd[0] = 0x00; cmd[4] = 0xF7; int ret = waitN(5, 100, "get smeter", HEX); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]); if (val <= 15) val = 5; else if (val <=154) val = 5 + 80 * (val - 15) / (154 - 15); else val = 50 + 50 * (val - 154.0) / (255.0 - 154.0); char szmeter[5]; snprintf(szmeter, sizeof(szmeter), "%d", (int)val); get_trace(3, "Smeter", str2hex(replystr.c_str(), 1), szmeter); return (int)val; } int RIG_FT990A::get_swr() { return 0; } int RIG_FT990A::get_power_out() { init_cmd(); cmd[4] = 0xF7; int ret = waitN(5, 100, "Power out"); getthex("get power out"); if (ret < 5) return 0; int sval = (unsigned char)replystr[0]; if (sval < 90) sval = 90; if (sval > 200) sval = 200; if (sval < 120) sval = 250 - 5 * sval / 3; else sval = 125 - 5 * sval / 8; return sval; } flrig-2.0.04/src/rigs/yaesu/FTdx9000.cxx0000664000175000017500000007610414502041135014411 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FTdx9000.h" #include "debug.h" #include "support.h" enum mFTdx9000 { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N }; // mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 // mode index // 19, 19, 9, 0, 0, 10, 9, 15, 10, 0, 0, 15, 0 // FTdx9000_def_bw #undef NUM_MODES #define NUM_MODES 13 static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static const char FTdx9000name_[] = "FTdx9000"; static std::vectorFTdx9000modes_; static const char *vFTdx9000modes_[] = { "LSB", "USB", "CW", "FM", "AM", "RTTY-L", "CW-R", "PKT-L", "RTTY-U", "PKT-FM", "FM-N", "PKT-U", "AM-N"}; static const int FTdx9000_def_bw[] = { 20, 20, 9, 0, 0, 10, 9, 15, 10, 0, 0, 15, 0 }; static const char FTdx9000_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D' }; static const char FTdx9000_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U', 'U' }; static std::vectorFTdx9000_widths_SSB; static const char *vFTdx9000_widths_SSB[] = { "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", "2100", "2250", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3200", "3400", "3600", "3800", "4000" }; static int FTdx9000_wvals_SSB[] = { 1,2,3,4,5,6,7, 8,9,10,11,12,13, 15,16,17,18,19,20, 21,22,23,24,25, WVALS_LIMIT}; static std::vectorFTdx9000_widths_CW; static const char *vFTdx9000_widths_CW[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400" }; static int FTdx9000_wvals_CW[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static std::vectorFTdx9000_widths_RTTY; static const char *vFTdx9000_widths_RTTY[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400" }; static int FTdx9000_wvals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static std::vectorFTdx9000_widths_PSK; static const char *vFTdx9000_widths_PSK[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400" }; static int FTdx9000_wvals_PSK[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static const int FTdx9000_wvals_AMFM[] = { 0, WVALS_LIMIT }; static std::vectorFTdx9000_widths_AMwide; static const char *vFTdx9000_widths_AMwide[] = { "AM-bw" }; static std::vectorFTdx9000_widths_AMnar; static const char *vFTdx9000_widths_AMnar[] = { "AM-nar" }; static std::vectorFTdx9000_widths_FMnar; static const char *vFTdx9000_widths_FMnar[] = { "FM-nar" }; static std::vectorFTdx9000_widths_FMwide; static const char *vFTdx9000_widths_FMwide[] = { "FM-wid" }; static std::vectorFTdx9000_widths_FMpkt; static const char *vFTdx9000_widths_FMpkt[] = { "FM-pkt" }; static std::vectorFTdx9000_US_60m; static const char *vFTdx9000_US_60m[] = {"", "126", "127", "128", "130"}; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. // // UK has 7 60M presets. Using dummy numbers for all. If you want support, // Maybe someone can do a cat command MC; on all 7 presets and add returned numbers below. // static std::vectorFTdx9000_UK_60m = {"", "126", "127", "128", "130", "131", "132"}; static std::vector& Channels_60m = FTdx9000_US_60m; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FTdx9000::initialize() { VECTOR (FTdx9000modes_, vFTdx9000modes_); VECTOR (FTdx9000_widths_SSB, vFTdx9000_widths_SSB); VECTOR (FTdx9000_widths_CW, vFTdx9000_widths_CW); VECTOR (FTdx9000_widths_RTTY, vFTdx9000_widths_RTTY); VECTOR (FTdx9000_widths_PSK, vFTdx9000_widths_PSK) VECTOR (FTdx9000_widths_AMwide, vFTdx9000_widths_AMwide); VECTOR (FTdx9000_widths_AMnar, vFTdx9000_widths_AMnar); VECTOR (FTdx9000_widths_FMnar, vFTdx9000_widths_FMnar); VECTOR (FTdx9000_widths_FMwide, vFTdx9000_widths_FMwide); VECTOR (FTdx9000_widths_FMpkt, vFTdx9000_widths_FMpkt); VECTOR (FTdx9000_US_60m, vFTdx9000_US_60m); modes_ = FTdx9000modes_; bandwidths_ = FTdx9000_widths_SSB; bw_vals_ = FTdx9000_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; cmd = "AI0;"; sendCommand(cmd); showresp(WARN, ASC, "Auto Info OFF", cmd, replystr); } RIG_FTdx9000::RIG_FTdx9000() { // base class values IDstr = "ID"; name_ = FTdx9000name_; modes_ = FTdx9000modes_; bandwidths_ = FTdx9000_widths_SSB; bw_vals_ = FTdx9000_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 19; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; notch_on = false; has_band_selection = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = // has_cw_spot_tone = // does not exist??? has_cw_qsk = has_cw_weight = has_cw_break_in = has_split_AB = can_change_alt_vfo = has_smeter = has_swr_control = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = has_xcvr_auto_on_off = true; // derived specific atten_level = 0; preamp_level = 0; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 8; } void RIG_FTdx9000::set_xcvr_auto_on() { // send dummy data request for ID (see pg 12 CAT reference book) cmd = "ID;"; sendCommand(cmd); // wait 1 to 2 seconds MilliSleep(1500); cmd = "PS1;"; sendCommand(cmd); // wait for power on status cmd = "PS;"; waitN(4, 500, "Xcvr ON?", ASC); } void RIG_FTdx9000::set_xcvr_auto_off() { cmd = "PS0;"; sendCommand(cmd); sett("set_xcvr_auto_off"); } void RIG_FTdx9000::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; wait_char(';', 27, 100, "get band", ASC); set_trace(2, "get band", replystr.c_str()); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+21] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0].empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx > (int)Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } bool RIG_FTdx9000::check () { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';', 11, 100, "check", ASC); rig_trace(2, "check()", replystr.c_str()); if (ret >= 11) return true; return false; } unsigned long long RIG_FTdx9000::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';', 11, 100, "get vfo A", ASC); rig_trace(2, "get_vfoA()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqA = f; return freqA; } void RIG_FTdx9000::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); } unsigned long long RIG_FTdx9000::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';', 11, 100, "get vfo B", ASC); rig_trace(2, "get_vfoB()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqB = f; return freqB; } void RIG_FTdx9000::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); } bool RIG_FTdx9000::twovfos() { return true; } void RIG_FTdx9000::selectA() { cmd = "FR0;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); inuse = onA; } void RIG_FTdx9000::selectB() { cmd = "FR3;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); inuse = onB; } void RIG_FTdx9000::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); } bool RIG_FTdx9000::can_split() { return true; } void RIG_FTdx9000::set_split(bool val) { split = val; if (val) { cmd = "FR0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A", cmd, replystr); cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on B", cmd, replystr); } else { cmd = "FR0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A", cmd, replystr); cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on A", cmd, replystr); } Fl::awake(highlight_vfo, (void *)0); } int RIG_FTdx9000::get_split() { return split; } int RIG_FTdx9000::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';', 7, 100, "get smeter", ASC); rig_trace(2, "get_smeter()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FTdx9000::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';', 7, 100, "get swr", ASC); rig_trace(2, "get_swr()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return mtr / 2.56; } struct pwrpair {int mtr; float pwr;}; int RIG_FTdx9000::get_power_out() { static pwrpair pwrtbl[] = { { 32, 10.0 }, { 53, 20.0 }, { 80, 40.0 }, { 97, 60.0 }, {119, 80.0 }, {137, 100.0 }, {154, 120.0 }, {167, 140.0 }, {177, 160.0 }, {188, 180.0 }, {197, 200.0 }, }; cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';', 7, 100, "get pout", ASC); gett("get_power_out()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 197) mtr = 197; int pwr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (pwr > 200) pwr = 200; return (int)pwr; } double RIG_FTdx9000::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';', 6, 100, "get power", ASC); gett("get_power_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FTdx9000::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); } // Volume control return 0 ... 100 int RIG_FTdx9000::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';', 7, 100, "get vol", ASC); rig_trace(2, "get_volume_control()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = atoi(&replystr[p+3]) * 100 / 250; if (val > 100) val = 100; return val; } void RIG_FTdx9000::set_volume_control(int val) { int ivol = (int)(val * 250 / 100); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); } // Tranceiver PTT on/off void RIG_FTdx9000::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; } int RIG_FTdx9000::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, 100, "get PTT", ASC); rig_trace(2, "get_PTT()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FTdx9000::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FTdx9000::get_tune() { cmd = rsp = "AC"; cmd += ';'; waitN(5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return !(val < 2); } int RIG_FTdx9000::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FTdx9000::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); } int RIG_FTdx9000::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, 100, "get att", ASC); rig_trace(2, "get_attenuator()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FTdx9000::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FTdx9000::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); } int RIG_FTdx9000::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';', 5, 100, "get pre", ASC); rig_trace(2, "get_preamp()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FTdx9000::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FTdx9000::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } int RIG_FTdx9000::adjust_bandwidth(int val) { int bw = 0; if (val == mCW || val == mCW_R) { bandwidths_ = FTdx9000_widths_CW; bw_vals_ = FTdx9000_wvals_CW; } else if (val == mFM || val == mAM || val == mFM_N || val == mPKT_FM || val == mAM_N) { if (val == mFM) bandwidths_ = FTdx9000_widths_FMwide; else if (val == mAM) bandwidths_ = FTdx9000_widths_AMwide; else if (val == mAM_N) bandwidths_ = FTdx9000_widths_AMnar; else if (val == mFM_N) bandwidths_ = FTdx9000_widths_FMnar; else if (val == mPKT_FM) bandwidths_ = FTdx9000_widths_FMpkt; bw_vals_ = FTdx9000_wvals_AMFM; } else if (val == mRTTY_L || val == mRTTY_U) { // RTTY bandwidths_ = FTdx9000_widths_RTTY; bw_vals_ = FTdx9000_wvals_RTTY; } else if (val == mPKT_L || val == mPKT_U) { // PSK bandwidths_ = FTdx9000_widths_PSK; bw_vals_ = FTdx9000_wvals_PSK; } else { bandwidths_ = FTdx9000_widths_SSB; bw_vals_ = FTdx9000_wvals_SSB; } bw = FTdx9000_def_bw[val]; return bw; } int RIG_FTdx9000::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FTdx9000::bwtable(int n) { switch (n) { case mCW: case mCW_R: return FTdx9000_widths_CW; case mFM: return FTdx9000_widths_FMwide; case mAM: return FTdx9000_widths_AMwide; case mAM_N : return FTdx9000_widths_AMnar; case mRTTY_L: case mRTTY_U: return FTdx9000_widths_RTTY; case mPKT_L: case mPKT_U: return FTdx9000_widths_PSK; case mFM_N: return FTdx9000_widths_FMnar; case mPKT_FM: return FTdx9000_widths_FMpkt; default: ; } return FTdx9000_widths_SSB; } void RIG_FTdx9000::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FTdx9000_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); adjust_bandwidth(modeA); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FTdx9000::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode A", ASC); rig_trace(2, "get_modeA()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeA = md; } } adjust_bandwidth(modeA); return modeA; } void RIG_FTdx9000::set_modeB(int val) { modeB = val; cmd = "MD0"; cmd += FTdx9000_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); adjust_bandwidth(modeA); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FTdx9000::get_modeB() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode B", ASC); rig_trace(2, "get_modeB()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeB = md; } } adjust_bandwidth(modeB); return modeB; } void RIG_FTdx9000::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mPKT_FM ) { return; } if ((((modeA == mLSB || modeA == mUSB) && val < 8)) || ((modeA == mCW || modeA == mCW_R) && val < 11) || ((modeA == mRTTY_L || modeA == mRTTY_U) && val < 11) || ((modeA == mPKT_L || modeA == mPKT_U) && val < 11)) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); mode_bwA[modeA] = val; } int RIG_FTdx9000::get_bwA() { if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mPKT_FM) { bwA = 0; mode_bwA[modeA] = bwA; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 100, "get bw A", ASC); rig_trace(2, "get_bwA()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; if (p + 5 >= replystr.length()) return bwA; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; mode_bwA[modeA] = bwA; return bwA; } void RIG_FTdx9000::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mPKT_FM) { mode_bwB[modeB] = 0; return; } if ((((modeB == mLSB || modeB == mUSB) && val < 8)) || ((modeB == mCW || modeB == mCW_R) && val < 11) || ((modeB == mRTTY_L || modeB == mRTTY_U) && val < 11) || ((modeB == mPKT_L || modeB == mPKT_U) && val < 11)) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); mode_bwB[modeB] = bwB; showresp(WARN, ASC, "SET bw B", cmd, replystr); } int RIG_FTdx9000::get_bwB() { if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mPKT_FM) { bwB = 0; mode_bwB[modeB] = bwB; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 100, "get bw B", ASC); rig_trace(2, "get_bwB()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; if (p + 5 >= replystr.length()) return bwB; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FTdx9000::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FTdx9000::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FTdx9000::get_modetype(int n) { return FTdx9000_mode_type[n]; } void RIG_FTdx9000::set_if_shift(int val) { cmd = "IS0+0000;"; if (val != 0) progStatus.shift = true; else progStatus.shift = false; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); } bool RIG_FTdx9000::get_if_shift(int &val) { if (inuse == onB) cmd = rsp = "IS1"; else cmd = rsp = "IS0"; cmd += ';'; wait_char(';', 9, 100, "get if shift", ASC); rig_trace(2, "get_if_shift()", replystr.c_str()); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FTdx9000::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1000; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 0; } void RIG_FTdx9000::set_notch(bool on, int val) { if (on && !notch_on) { notch_on = true; cmd = "BP00001;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); } else if (!on && notch_on) { notch_on = false; cmd = "BP00000;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch off", cmd, replystr); return; } cmd = "BP01"; val /= 10; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); } bool RIG_FTdx9000::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; wait_char(';', 8, 100, "get notch on/off", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; rig_trace(2, "get_notch()", replystr.c_str()); if (replystr[p+6] == '1') // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; wait_char(';', 8, 100, "get notch val", ASC); rig_trace(2, "get_notch_val()", replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; return (notch_on = ison); } void RIG_FTdx9000::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3000; step = 10; } void RIG_FTdx9000::set_auto_notch(int v) { cmd = "BC00;"; if (v) cmd[3] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET auto notch", cmd, replystr); } int RIG_FTdx9000::get_auto_notch() { cmd = "BC0;"; wait_char(';', 5, 100, "get auto notch", ASC); rig_trace(2, "get_auto_notch()", replystr.c_str()); size_t p = replystr.rfind("BC0"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } int FTdx9000_blanker_level = 0; void RIG_FTdx9000::set_noise(bool b) { cmd = "NB00;"; if (FTdx9000_blanker_level == 0) { FTdx9000_blanker_level = 1; nb_label("NB 1", true); } else if (FTdx9000_blanker_level == 1) { FTdx9000_blanker_level = 2; nb_label("NB 2", true); } else if (FTdx9000_blanker_level == 2) { FTdx9000_blanker_level = 0; nb_label("NB", false); } cmd[3] = '0' + FTdx9000_blanker_level; sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); } int RIG_FTdx9000::get_noise() { cmd = rsp = "NB0"; cmd += ';'; wait_char(';', 5, 100, "get NB", ASC); rig_trace(2, "get_noise()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return FTdx9000_blanker_level; FTdx9000_blanker_level = replystr[p+3] - '0'; if (FTdx9000_blanker_level == 1) { nb_label("NB 1", true); } else if (FTdx9000_blanker_level == 2) { nb_label("NB 2", true); } else { nb_label("NB", false); FTdx9000_blanker_level = 0; } return FTdx9000_blanker_level; } // val 0 .. 100 void RIG_FTdx9000::set_mic_gain(int val) { cmd = "MG000;"; val = (int)(val * 255 / 100); // convert to 0 .. 255 for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); } int RIG_FTdx9000::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); rig_trace(2, "get_mic_gain()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); return val * 100 / 255; } void RIG_FTdx9000::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx9000::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = val * 250 / 100; for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); } int RIG_FTdx9000::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, 100, "get rfgain", ASC); rig_trace(2, "get_rf_gain()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = rfval * 100 / 250; if (rfval > 100) rfval = 100; return rfval; } void RIG_FTdx9000::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx9000::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); } void RIG_FTdx9000::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FTdx9000::set_vox_anti() { cmd = "EX175"; cmd.append(to_decimal(progStatus.vox_anti, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET anti-vox", cmd, replystr); } void RIG_FTdx9000::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FTdx9000::set_vox_on_dataport() { cmd = "EX1140;"; if (progStatus.vox_on_dataport) cmd[5] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); } void RIG_FTdx9000::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FTdx9000::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FTdx9000::set_cw_spot() { if (vfo->imode == 2 || vfo->imode == 6) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FTdx9000::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX056").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FTdx9000::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX059").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); 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() { int n = (progStatus.cw_spot_tone - 300) / 50; cmd = "EX045"; cmd.append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); } void RIG_FTdx9000::set_cw_vol() { } */ flrig-2.0.04/src/rigs/yaesu/FT991.cxx0000664000175000017500000010441114502041135014000 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2015 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT991.h" #include "debug.h" #include "support.h" #define FL991_WAIT_TIME 200 enum mFT991 { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N, mC4FM }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 // mode index static const char FT991name_[] = "FT-991"; static std::vectorFT991modes_; static const char *vFT991modes_[] = { "LSB", "USB", "CW-U", "FM", "AM", "RTTY-L", "CW-L", "DATA-L", "RTTY-U", "DATA-FM", "FM-N", "DATA-U", "AM-N", "C4FM"}; static const char FT991_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E' }; static const char FT991_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U', 'U', 'U' }; static const int FT991_def_bw[] = { 17, 17, 5, 0, 0, 10, 5, 16, 10, 0, 0, 16, 0, 0 }; // mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N, mC4FM static std::vectorFT991_widths_SSB; static const char *vFT991_widths_SSB[] = { "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3200" }; static int FT991_wvals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, WVALS_LIMIT}; static std::vectorFT991_widths_SSBD; static const char *vFT991_widths_SSBD[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FT991_wvals_SSBD[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, WVALS_LIMIT}; static std::vectorFT991_widths_CW; static const char *vFT991_widths_CW[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FT991_wvals_CW[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, WVALS_LIMIT}; // Single bandwidth modes static std::vectorFT991_widths_AMFMnar; static const char *vFT991_widths_AMFMnar[] = { "NARR" }; static std::vectorFT991_widths_AMFMnorm; static const char *vFT991_widths_AMFMnorm[] = { "NORM" }; static const int FT991_wvals_AMFM[] = { 0, WVALS_LIMIT }; // mPKT_FM Multi bandwidth mode static std::vectorFT991_widths_NN; static const char *vFT991_widths_NN[] = {"NORM", "NARR" }; static const int FT991_wvals_NN[] = {0, 1, WVALS_LIMIT}; // US 60M 5-USB, 5-CW static std::vectorUS_60m_chan; static const char *vUS_60m_chan[] = {"000","125","126","127","128","130","141","142","143","144","146"}; static std::vectorUS_60m_label; static const char *vUS_60m_label[] = {"VFO","U51","U52","U53","U54","U55","U56","U57","U58","U59","U50"}; // UK 60m channel numbers by Brian, G8SEZ static std::vectorUK_60m_chan; static const char *vUK_60m_chan[] = {"000","118","120","121","127","128","129","130"}; static std::vectorUK_60m_label; static const char *vUK_60m_label[] = {"VFO","U51","U52","U53","U54","U55","U56","U57"}; static std::vector& Channels_60m = US_60m_chan; static std::vector& label_60m = US_60m_label; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_FT991::RIG_FT991() { // base class values IDstr = "ID"; name_ = FT991name_; modes_ = FT991modes_; bandwidths_ = FT991_widths_SSB; bw_vals_ = FT991_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 25; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 12; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; has_compON = has_compression = has_a2b = has_ext_tuner = has_xcvr_auto_on_off = has_split = has_split_AB = has_band_selection = has_noise_reduction = has_noise_reduction_control = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_vfo_adj = has_idd_control = has_voltmeter = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_weight = has_cw_break_in = can_change_alt_vfo = has_smeter = has_alc_control = has_swr_control = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = can_synch_clock = true; // derived specific atten_level = 1; preamp_level = 2; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 9; } void RIG_FT991::initialize() { VECTOR (FT991modes_, vFT991modes_); VECTOR (FT991_widths_SSB, vFT991_widths_SSB); VECTOR (FT991_widths_SSBD, vFT991_widths_SSBD); VECTOR (FT991_widths_CW, vFT991_widths_CW); VECTOR (FT991_widths_AMFMnar, vFT991_widths_AMFMnar); VECTOR (FT991_widths_AMFMnorm, vFT991_widths_AMFMnorm); VECTOR (FT991_widths_NN, vFT991_widths_NN); VECTOR (US_60m_chan, vUS_60m_chan); VECTOR (US_60m_label, vUS_60m_label); VECTOR (UK_60m_chan, vUK_60m_chan); VECTOR (UK_60m_label, vUK_60m_label) modes_ = FT991modes_; bandwidths_ = FT991_widths_SSB; bw_vals_ = FT991_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; rig_widgets[9].W = btnNR; rig_widgets[10].W = sldrNR; // set progStatus defaults if (progStatus.notch_val < 10) progStatus.notch_val = 1500; if (progStatus.noise_reduction_val < 1) progStatus.noise_reduction_val = 1; if (progStatus.power_level < 5) progStatus.power_level = 5; // first-time-thru, or reset if (progStatus.cw_qsk < 15) { progStatus.cw_qsk = 15; progStatus.cw_spot_tone = 700; progStatus.cw_weight = 3.0; progStatus.cw_wpm = 18; progStatus.vox_on_dataport = false; progStatus.vox_gain = 50; progStatus.vox_anti = 50; progStatus.vox_hang = 500; } // Disable Auto Information mode sendCommand("AI0;"); // "MRnnn;" if valid, returns last channel used, "mrlll...;", along with channel nnn info. cmd = "MR118;"; wait_char(';', 27, FL991_WAIT_TIME, "Read UK 60m Channel Mem", ASC); size_t p = replystr.rfind("MR"); if (p == std::string::npos) { Channels_60m = US_60m_chan; label_60m = US_60m_label; op_yaesu_select60->clear(); for (size_t n = 0; n < US_60m_label.size(); n++) op_yaesu_select60->add(US_60m_label.at(n).c_str()); } else { Channels_60m = UK_60m_chan; label_60m = UK_60m_label; op_yaesu_select60->clear(); for (size_t n = 0; n < UK_60m_label.size(); n++) op_yaesu_select60->add(UK_60m_label.at(n).c_str()); } op_yaesu_select60->index(m_60m_indx); } void RIG_FT991::post_initialize() { enable_yaesu_bandselect(12, false); enable_yaesu_bandselect(13, true); } bool RIG_FT991::check () { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';',12, FL991_WAIT_TIME, "check", ASC); if (ret >= 12) return true; return false; } unsigned long long RIG_FT991::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';',12, FL991_WAIT_TIME, "get vfo A", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; p += 2; unsigned long long f = 0; for (int n = 0; n < ndigits; n++) f = f * 10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_FT991::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA000000000;"; for (int i = 0; i < ndigits; i++) { cmd[ndigits + 1 - i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); } unsigned long long RIG_FT991::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';',12, FL991_WAIT_TIME, "get vfo B", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; p += 2; unsigned long long f = 0; for (int n = 0; n < ndigits; n++) f = f * 10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_FT991::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB000000000;"; for (int i = 0; i < ndigits; i++) { cmd[ndigits + 1 - i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); } void RIG_FT991::selectA() { cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); inuse = onA; } void RIG_FT991::selectB() { cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); inuse = onB; } void RIG_FT991::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A->B", cmd, replystr); } void RIG_FT991::B2A() { cmd = "BA;"; sendCommand(cmd); showresp(WARN, ASC, "vfo B->A", cmd, replystr); } void RIG_FT991::swapAB() { cmd = "SV;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A<>B", cmd, replystr); } bool RIG_FT991::can_split() { return true; } void RIG_FT991::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, replystr); } else { cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, replystr); } } else { if (val) { cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, replystr); } else { cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, replystr); } } Fl::awake(highlight_vfo, (void *)0); } int RIG_FT991::get_split() { size_t p; int split = 0; //char rx, tx; char tx; // tx vfo cmd = rsp = "FT"; cmd.append(";"); wait_char(';', 4, FL991_WAIT_TIME, "get split tx vfo", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) return false; tx = replystr[p+2] - '0'; split = (tx == 1 ? 2 : 0); return split; } int RIG_FT991::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';',7, FL991_WAIT_TIME, "get smeter", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FT991::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';',7, FL991_WAIT_TIME, "get swr", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } int RIG_FT991::get_alc() { cmd = rsp = "RM4"; cmd += ';'; wait_char(';',7, FL991_WAIT_TIME, "get alc", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } double RIG_FT991::get_voltmeter() { cmd = "RM8;"; std::string resp = "RM"; int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); wait_char(';',7, FL991_WAIT_TIME, "get vdd", ASC); gett("get_voltmeter"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = atoi(&replystr[p+3]); val = 13.8 * mtr / 190; return val; } return -1; } double RIG_FT991::get_idd() { cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, FL991_WAIT_TIME, "get alc", ASC); gett("get_idd"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 9 >= replystr.length()) return 0; replystr[6] = '\x00'; double mtr = atoi(&replystr[p+3]); return mtr / 10.0; } int RIG_FT991::get_power_out() { cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';',7, FL991_WAIT_TIME, "get pout", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; double mtr = (double)(atoi(&replystr[p+3])); // following conversion iaw data measured by Terry, KJ4EED mtr = (.06 * mtr) + (.002 * mtr * mtr); return (int)ceil(mtr); } // Transceiver power level double RIG_FT991::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';',6, FL991_WAIT_TIME, "get power", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FT991::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); } // Volume control return 0 ... 100 int RIG_FT991::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';',7, FL991_WAIT_TIME, "get vol", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = round(atoi(&replystr[p+3]) / 2.55); if (val > 100) val = 100; return ceil(val); } void RIG_FT991::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); } // Tranceiver PTT on/off void RIG_FT991::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; } int RIG_FT991::get_PTT() { cmd = "TX;"; rsp = "TX"; waitN(4, 100, "get PTT", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } // internal or external tune mode void RIG_FT991::tune_rig(int how) { cmd = "AC000;"; if (how == 1) cmd[4] = '1'; else if (how == 2) cmd[4] = '2'; sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); } int RIG_FT991::get_tune() { cmd = "AC;"; // Why override FL991_WAIT_TIME to be the same as FL991A_...? wait_char(';',6, 100, "Tuner Enabled?", ASC); size_t p = replystr.rfind("AC"); if (p == std::string::npos) return 0; if ((p + 5) >= replystr.length()) return 0; if (replystr[p+4] == '0') { return 0; } return 1; } int RIG_FT991::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 0; } return 0; } void RIG_FT991::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); } int RIG_FT991::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';',5, FL991_WAIT_TIME, "get att", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FT991::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FT991::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); } int RIG_FT991::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';',5, FL991_WAIT_TIME, "get pre", ASC); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FT991::ATT_label() { if (atten_level == 1) return "12 dB"; return "ATT"; } const char *RIG_FT991::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } int RIG_FT991::adjust_bandwidth(int val) { switch (val) { case mCW : case mCW_R : case mRTTY_L : case mRTTY_U : bandwidths_ = FT991_widths_CW; bw_vals_ = FT991_wvals_CW; break; case mFM : case mAM : bandwidths_ = FT991_widths_AMFMnorm; bw_vals_ = FT991_wvals_AMFM; break; case mFM_N : case mAM_N : bandwidths_ = FT991_widths_AMFMnar; bw_vals_ = FT991_wvals_AMFM; break; case mPKT_FM : bandwidths_ = FT991_widths_NN; bw_vals_ = FT991_wvals_NN; break; case mPKT_L : case mPKT_U : bandwidths_ = FT991_widths_SSBD; bw_vals_ = FT991_wvals_SSBD; break; default: bandwidths_ = FT991_widths_SSB; bw_vals_ = FT991_wvals_SSB; } return FT991_def_bw[val]; } int RIG_FT991::def_bandwidth(int val) { return FT991_def_bw[val]; } std::vector& RIG_FT991::bwtable(int n) { switch (n) { case mPKT_FM : return FT991_widths_NN; case mFM : case mAM : return FT991_widths_AMFMnorm; case mFM_N : case mAM_N : return FT991_widths_AMFMnar; case mCW : case mCW_R : case mRTTY_L : case mRTTY_U : return FT991_widths_CW; case mPKT_L : case mPKT_U : return FT991_widths_SSBD; default : break; } return FT991_widths_SSB; } void RIG_FT991::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FT991_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); adjust_bandwidth(modeA); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FT991::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';',5, FL991_WAIT_TIME, "get mode A", ASC); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeA = md; } } adjust_bandwidth(modeA); return modeA; } void RIG_FT991::set_modeB(int val) { modeB = val; cmd = "MD0"; cmd += FT991_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); adjust_bandwidth(modeB); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FT991::get_modeB() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';',5, FL991_WAIT_TIME, "get mode B", ASC); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeB = md; } } adjust_bandwidth(modeB); return modeB; } void RIG_FT991::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mAM_N) return; if (modeA == mPKT_FM) { if (val == 1) cmd = "NA01;"; else cmd = "NA00;"; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); return; } if ((((modeA == mLSB || modeA == mUSB) && val < 8)) || ((modeA == mCW || modeA == mCW_R || modeA == mRTTY_L || modeA == mRTTY_U || modeA == mPKT_L || modeA == mPKT_U) && val < 4) ) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); } int RIG_FT991::get_bwA() { size_t p; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mAM_N) { bwA = 0; return bwA; } if (modeA == mPKT_FM) { cmd = rsp = "NA0"; cmd += ';'; wait_char(';',5, FL991_WAIT_TIME, "get bw A narrow", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) { bwA = 0; return bwA; } if (p + 4 >= replystr.length()) { bwA = 0; return bwA; } if (replystr[p+3] == '1') bwA = 1; // narrow on else bwA = 0; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';',6, FL991_WAIT_TIME, "get bw A", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; if (p + 5 >= replystr.length()) return bwA; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; return bwA; } void RIG_FT991::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mAM_N) return; if (modeB == mPKT_FM) { if (val == 1) cmd = "NA01;"; else cmd = "NA00;"; sendCommand(cmd); showresp(WARN, ASC, "SET bw B", cmd, replystr); return; } if ((((modeB == mLSB || modeB == mUSB) && val < 8)) || ((modeB == mCW || modeB == mCW_R || modeB == mRTTY_L || modeB == mRTTY_U || modeB == mPKT_L || modeB == mPKT_U) && val < 4) ) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw B", cmd, replystr); } int RIG_FT991::get_bwB() { size_t p; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mAM_N) { bwB = 0; return bwB; } if (modeB == mPKT_FM) { cmd = rsp = "NA0"; cmd += ';'; wait_char(';',5, FL991_WAIT_TIME, "get bw B narrow", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) { bwB = 0; return bwB; } if (p + 4 >= replystr.length()) { bwB = 0; return bwB; } if (replystr[p+3] == '1') bwB = 1; // narrow on else bwB = 0; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';',6, FL991_WAIT_TIME, "get bw B", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; if (p + 5 >= replystr.length()) return bwB; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; return bwB; } int RIG_FT991::get_modetype(int n) { return FT991_mode_type[n]; } void RIG_FT991::set_if_shift(int val) { cmd = "IS0+0000;"; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); } bool RIG_FT991::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';',9, FL991_WAIT_TIME, "get if shift", ASC); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FT991::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1000; if_shift_max = max = 1000; if_shift_step = step = 20; if_shift_mid = 0; } void RIG_FT991::set_notch(bool on, int val) { // set notch frequency if (on) { cmd = "BP00001;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); cmd = "BP01000;"; if (val % 10 >= 5) val += 10; val /= 10; for (int i = 3; i > 0; i--) { cmd[3 + i] += val % 10; val /=10; } sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); return; } // set notch off cmd = "BP00000;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch off", cmd, replystr); } bool RIG_FT991::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; wait_char(';',8, FL991_WAIT_TIME, "get notch on/off", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; if (replystr[p+6] == '1') { // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; wait_char(';',8, FL991_WAIT_TIME, "get notch val", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; } return ison; } void RIG_FT991::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3000; step = 10; } void RIG_FT991::set_auto_notch(int v) { cmd.assign("BC0").append(v ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET DNF Auto Notch Filter", cmd, replystr); } int RIG_FT991::get_auto_notch() { cmd = "BC0;"; wait_char(';',5, FL991_WAIT_TIME, "get auto notch", ASC); size_t p = replystr.rfind("BC0"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } void RIG_FT991::set_noise(bool b) { if (b) cmd = "NB01;"; else cmd = "NB00;"; sendCommand (cmd); showresp(WARN, ASC, "SET noise blanker", cmd, replystr); } int RIG_FT991::get_noise() { cmd = "NB0;"; wait_char(';',5, FL991_WAIT_TIME, "get NB", ASC); size_t p = replystr.rfind("NB0"); if (p == std::string::npos) return 0; return replystr[p+3] - '0'; } // val 0 .. 100 void RIG_FT991::set_mic_gain(int val) { cmd = "MG000;"; val = (int)(val * 2.50); for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); } int RIG_FT991::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';',6, FL991_WAIT_TIME, "get mic", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); val = (int)(val / 2.50); if (val > 100) val = 100; return ceil(val); } void RIG_FT991::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT991::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = (int)(val * 2.50); for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); } int RIG_FT991::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';',7, FL991_WAIT_TIME, "get rfgain", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = (int)(rfval / 2.50); if (rfval > 100) rfval = 100; return ceil(rfval); } void RIG_FT991::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT991::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); } void RIG_FT991::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FT991::set_vox_anti() { cmd = "EX117"; cmd.append(to_decimal(progStatus.vox_anti, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET anti-vox", cmd, replystr); } void RIG_FT991::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FT991::set_vox_on_dataport() { cmd = "EX1140;"; if (progStatus.vox_on_dataport) cmd[5] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); } void RIG_FT991::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FT991::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FT991::set_cw_spot() { if (vfo->imode == mCW || vfo->imode == mCW_R) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FT991::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX014").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FT991::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX056").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); } void RIG_FT991::set_cw_spot_tone() { int n = (progStatus.cw_spot_tone - 300) / 50; cmd.assign("EX059").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); } /* void RIG_FT991::set_cw_vol() { } */ /* void RIG_FT991::get_band_selection(int v) { int chan_mem_on = false; cmd = "IF;"; wait_char(';',28, FL991_WAIT_TIME, "get vfo mode in get_band_selection", ASC); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if ((p + 27) >= replystr.length()) return; if (replystr[p+21] != '0') { // vfo 60M memory mode chan_mem_on = true; } if (v == 13) { m_60m_indx = op_yaesu_select60->index(); if (m_60m_indx) cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); else if (chan_mem_on) cmd = "VM;"; } else { // v == 1..11 band selection OR return to vfo mode == 0 if (chan_mem_on) { cmd = "VM;"; op_yaesu_select60->index(m_60m_indx = 0); } else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } */ // DNR void RIG_FT991::set_noise_reduction_val(int val) { cmd.assign("RL0").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, replystr); } int RIG_FT991::get_noise_reduction_val() { int val = 1; cmd = rsp = "RL0"; cmd.append(";"); wait_char(';',6, FL991_WAIT_TIME, "GET noise reduction val", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = atoi(&replystr[p+3]); return val; } // DNR void RIG_FT991::set_noise_reduction(int val) { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET noise reduction", cmd, replystr); } int RIG_FT991::get_noise_reduction() { int val; cmd = rsp = "NR0"; cmd.append(";"); wait_char(';',5, FL991_WAIT_TIME, "GET noise reduction", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; val = replystr[p+3] - '0'; return val; } void RIG_FT991::set_xcvr_auto_on() { if (!progStatus.xcvr_auto_on) return; cmd = rsp = "PS"; cmd.append(";"); wait_char(';', 4, FL991_WAIT_TIME, "Test: Is Rig ON", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) { // rig is off, power on cmd = "PS1;"; sendCommand(cmd); MilliSleep(1100); // 1.0 < T < 2.0 seconds sendCommand(cmd); sendCommand(cmd); MilliSleep(3000); // Wait for rig startup? Maybe not needed. } } void RIG_FT991::set_xcvr_auto_off() { if (!progStatus.xcvr_auto_off) return; cmd = "PS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET xcvr auto on/off", cmd, replystr); } void RIG_FT991::set_compression(int on, int val) { if (on) { if (val == 0) { cmd.assign("PR2;"); // mic eq on sendCommand(cmd); showresp(WARN, ASC, "set Comp EQ on", cmd, replystr); } else { cmd.assign("PR1;PL").append(to_decimal(val, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set Comp on", cmd, replystr); } } else{ cmd.assign("PR0;"); sendCommand(cmd); showresp(WARN, ASC, "set Comp off", cmd, replystr); } } void RIG_FT991::setVfoAdj(double v) { char cmdstr[20]; int iv = fabs(v); snprintf(cmdstr, sizeof(cmdstr), "%02d", iv); cmd = "EX039"; if (v < 0) cmd += '-'; else cmd += '+'; cmd.append(cmdstr); cmd.append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vfo adjust", cmd, replystr); } double RIG_FT991::getVfoAdj() { cmd = rsp = "EX039"; sendCommand(cmd.append(";")); wait_char(';',9, FL991_WAIT_TIME, "get Vfo Adjust", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; return (double)(atoi(&replystr[p+5])); } void RIG_FT991::get_vfoadj_min_max_step(double &min, double &max, double &step) { min = -25; max = 25; 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; } // --------------------------------------------------------------------- // set date and time // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_FT991::sync_date(char *dt) { cmd.assign("DT0"); cmd.append(dt); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_date", cmd, replystr); sett("sync_date"); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_FT991::sync_clock(char *tm) { cmd.assign("DT1"); cmd += tm[0]; cmd += tm[1]; cmd += tm[3]; cmd += tm[4]; cmd += tm[6]; cmd += tm[7]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_time", cmd, replystr); sett("sync_time"); } flrig-2.0.04/src/rigs/yaesu/FT747.cxx0000664000175000017500000001202314502041135013774 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "debug.h" #include "util.h" #include "yaesu/FT747.h" static const char FT747name_[] = "FT-747"; static std::vectorFT747modes_; static const char *vFT747modes_[] = { "LSB", "USB", "CW", "CWN", "AMW", "AMN", "FMW", "FMN"}; static const char FT747_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'U', 'U', 'U' }; RIG_FT747::RIG_FT747() { // base class values name_ = FT747name_; modes_ = FT747modes_; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 5; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; has_split = true; has_split_AB = true; has_get_info = true; has_ptt_control = true; has_mode_control = true; precision = 10; ndigits = 8; }; void RIG_FT747::initialize() { VECTOR( FT747modes_, vFT747modes_); modes_ = FT747modes_; } void RIG_FT747::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT747::selectA() { init_cmd(); cmd[4] = 0x05; sendCommand(cmd); showresp(INFO, HEX, "select A", cmd, replystr); inuse = onA; } void RIG_FT747::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); showresp(INFO, HEX, "select B", cmd, replystr); inuse = onB; } void RIG_FT747::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) showresp(INFO, HEX, "set split ON", cmd, replystr); else showresp(INFO, HEX, "set split OFF", cmd, replystr); } bool RIG_FT747::check() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0xFA; int ret = waitN(28, 100, "check", HEX); if (ret >= 28) return true; return false; } bool RIG_FT747::get_info() { unsigned long long afreq = A.freq, bfreq = B.freq; int amode = A.imode; init_cmd(); cmd[4] = 0x10; int ret = waitN(28, 100, "get info", HEX); showresp(DEBUG, HEX, "get info", cmd, replystr); if (ret >= 28) { // GET FREQUENCY bytes ARE NOT the same as SET FREQUENCY bytes // returned values are packed BCD // | 00 00 | f2 f3 | f4 f5 | f6 f7 | f8 f9 | where // f2 - 10's of MHz // f3 - MHz // ... f9 - Hz // | 00 00 | 01 04 | 02 05 | 00 00 | 00 00 | = 14.250.000 Hz afreq = fm_bcd(replystr.substr(9), 8); bfreq = fm_bcd(replystr.substr(16), 8); int md = replystr[22]; switch (md) { case 0x01 : amode = 6; // FMW break; case 0x81 : amode = 7; // FMN break; case 0x02 : amode = 4; // AMW break; case 0x82 : amode = 5; // AMN break; case 0x04 : amode = 2; // CW break; case 0x84 : amode = 3; // CWN break; case 0x08 : amode = 1; // USB break; case 0x10 : amode = 0; // LSB break; } A.freq = afreq; A.imode = amode; B.freq = bfreq; B.imode = amode; return true; } A.freq = afreq; A.imode = amode; B.freq = bfreq; B.imode = amode; return false; } unsigned long long RIG_FT747::get_vfoA () { return A.freq; } void RIG_FT747::set_vfoA (unsigned long long freq) { A.freq = freq; freq /=10; // 747 does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x0A; // SET FREQUENCY SLOG_INFO("cmd: %s", str2hex(cmd.c_str(), cmd.length())); sendCommand(cmd); } int RIG_FT747::get_modeA() { return A.imode; } void RIG_FT747::set_modeA(int val) { A.imode = val; init_cmd(); cmd[3] = val; cmd[4] = 0x0C; // MODESEL SLOG_INFO("cmd: %s", str2hex(cmd.c_str(), cmd.length())); sendCommand(cmd); } unsigned long long RIG_FT747::get_vfoB () { return B.freq; } void RIG_FT747::set_vfoB (unsigned long long freq) { B.freq = freq; freq /=10; cmd = to_bcd_be(freq, 8); cmd += 0x0A; // SET FREQUENCY SLOG_INFO("cmd: %s", str2hex(cmd.c_str(), cmd.length())); sendCommand(cmd); } int RIG_FT747::get_modeB() { return B.imode; } void RIG_FT747::set_modeB(int val) { B.imode = val; init_cmd(); cmd[3] = val; cmd[4] = 0x0C; // MODESEL SLOG_INFO("cmd: %s", str2hex(cmd.c_str(), cmd.length())); sendCommand(cmd); } void RIG_FT747::set_PTT_control(int val) { init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x0F; sendCommand(cmd); ptt_ = val; } flrig-2.0.04/src/rigs/yaesu/FT710.cxx0000664000175000017500000010532514502041135013772 00000000000000 // ---------------------------------------------------------------------------- // Copyright (C) 2023 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // comment out for distribution //#define TESTING 1 #include #include #include "yaesu/FT710.h" #include "debug.h" #include "support.h" enum mFT710 { mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPSK, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index static const char FT710name_[] = "FT-710"; #undef NUM_MODES #define NUM_MODES 15 static int defBW_narrow[NUM_MODES] = { // mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPSK, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index 6, 6, 9, 0, 0, 10, 9, 6, 10, 0, 0, 6, 0, 5, 0 }; static int defBW_wide[NUM_MODES] = { // mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPSK, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index 13, 13, 16, 0, 0, 10, 16, 17, 10, 0, 0, 17, 0, 9, 0 }; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFT710modes_; static const char *vmd[] = { "LSB", "USB", "CW-U", "FM", "AM", "RTTY-L", "CW-L", "DATA-L", "RTTY-U", "DATA-FM", "FM-N", "DATA-U", "AM-N", "PSK", "DATA-FMN"}; static const char FT710_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; static const char FT710_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U', 'U', 'U', 'U' }; static std::vectorFT710_widths_SSB; static const char *vssb[] = { "300", "400", "600", "850", "1100", // 1 ... 5 "1200", "1500", "1650", "1800", "1950", // 6 ... 10 "2100", "2250", "2400", "2450", "2500", // 7 ... 15 "2600", "2700", "2800", "2900", "3000", // 16 ... 20 "3200", "3500", "4000" }; // 21 ... 23 static int FT710_wvals_SSB[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, WVALS_LIMIT}; static std::vectorFT710_widths_CW; static const char *vcww[] = { "50", "100", "150", "200", "250", // 1 ... 5 "300", "350", "400", "450", "500", // 6 ... 10 "600", "800", "1200", "1400", "1700", // 11 ... 15 "2000", "2400", "3000", "3200", "3500", // 16 .. 20 "4000" }; // 21 static int FT710_wvals_CW[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, 19, 20, 21, WVALS_LIMIT }; static std::vectorFT710_widths_RTTY; static const char *vrtty[] = { "50", "100", "150", "200", "250", // 1 ... 5 "300", "350", "400", "450", "500", // 6 ... 10 "600", "800", "1200", "1400", "1700", // 11 ... 15 "2000", "2400", "3000", "3200", "3500", // 16 .. 20 "4000" }; // 21 static int FT710_wvals_RTTY[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, 19, 20, 21, WVALS_LIMIT }; static std::vectorFT710_widths_DATA; static const char *vdata[] = { "50", "100", "150", "200", "250", // 1 ... 5 "300", "350", "400", "450", "500", // 6 ... 10 "600", "800", "1200", "1400", "1700", // 11 ... 15 "2000", "2400", "3000", "3200", "3500", // 16 .. 20 "4000" }; // 21 static int FT710_wvals_PSK[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, 19, 20, 21, WVALS_LIMIT }; static const int FT710_wvals_AMFM[] = { 0, WVALS_LIMIT }; static std::vectorFT710_widths_AMwide; static const char *vamw[] = { "9000" }; static std::vectorFT710_widths_AMnar; static const char *vamn[] = { "6000" }; static std::vectorFT710_widths_FMnar; static const char *vfmn[] = { "9000" }; static std::vectorFT710_widths_FMwide; static const char *vfmw[] = { "16000" }; static std::vectorFT710_widths_DATA_FM; static const char *vfmd[] = { "16000" }; static std::vectorFT710_widths_DATA_FMN; static const char *vfmdn[] = { "9000" }; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. // // UK has 7 60M presets. Using dummy numbers for all. If you want support, // Maybe someone can do a cat command MC; on all 7 presets and add returned numbers below. // static const char *FT710_UK_60m[] = {"", "126", "127", "128", "130", "131", "132"}; static std::vectorFT710_US_60m; static const char *v60m[] = {"", "126", "127", "128", "130"}; static std::vector& Channels_60m = FT710_US_60m; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FT710::initialize() { name_ = FT710name_; VECTOR(FT710modes_, vmd); VECTOR(FT710_widths_SSB, vssb); VECTOR(FT710_widths_CW, vcww); VECTOR(FT710_widths_RTTY, vrtty); VECTOR(FT710_widths_DATA, vdata); VECTOR(FT710_widths_AMwide, vamw); VECTOR(FT710_widths_AMnar, vamn); VECTOR(FT710_widths_FMnar, vfmn); VECTOR(FT710_widths_FMwide, vfmw); VECTOR(FT710_widths_DATA_FM, vfmd); VECTOR(FT710_widths_DATA_FMN, vfmdn); VECTOR(FT710_US_60m, v60m); modes_ = FT710modes_; bandwidths_ = FT710_widths_SSB; bw_vals_ = FT710_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; rig_widgets[9].W = btnNR; rig_widgets[10].W = sldrNR; cmd = "AI0;"; sendCommand(cmd); showresp(WARN, ASC, "Auto Info OFF", cmd, replystr); sett("Auto Info OFF"); set_cw_spot(); get_vfoAorB(); } RIG_FT710::RIG_FT710() { // base class values IDstr = "ID"; name_ = FT710name_; modes_ = FT710modes_; bandwidths_ = FT710_widths_SSB; bw_vals_ = FT710_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 0; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; notch_on = false; has_band_selection = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = // has_cw_spot_tone = // does not exist??? has_cw_qsk = has_cw_weight = has_cw_break_in = has_split = can_change_alt_vfo = has_smeter = has_swr_control = has_alc_control = has_idd_control = has_voltmeter = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = has_xcvr_auto_on_off = true; // derived specific atten_level = 0; preamp_level = 0; notch_on = false; m_60m_indx = 0; inuse = onA; can_synch_clock = true; precision = 1; ndigits = 8; } void RIG_FT710::set_xcvr_auto_on() { cmd = "ID;"; wait_char(';', 7 , 100, "check", ASC); //std::cout << "check: " << replystr << std::endl; if (replystr.find("ID") != std::string::npos) return; //std::cout << "Xcvr not ON ... power ON cycle" << std::endl; // wait 1.2 seconds for (int i = 0; i < 12; i++) { MilliSleep(100); update_progress(i * 10); Fl::awake(); } cmd = "PS1;"; // std::cout << "power ON" << std::endl; RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); update_progress(0); // wait 7 seconds // std::cout << "wait 10 seconds" << std::endl; for (int i = 0; i < 140; i++) { MilliSleep(50); update_progress(i); Fl::awake(); } update_progress(0); // std::cout << "restart serial port" << std::endl; RigSerial->OpenPort(); cmd = "PS;"; wait_char(';', 4, 100, "closed/reopened port", ASC); if (replystr.find("PS1;") == std::string::npos) { // std::cout << "Reply to reopen port: " << replystr << std::endl; exit(3); } return; } void RIG_FT710::set_xcvr_auto_off() { cmd = "PS0;"; sendCommand(cmd); sett("set_xcvr_auto_off"); } void RIG_FT710::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; wait_char(';', 28, 100, "get band", ASC); sett("get band"); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+22 ] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0].empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx > (int)Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } //static std::string Avfo = "FA014070000;"; //static std::string Bvfo = "FB007070000;"; bool RIG_FT710::check () { #ifdef TESTING return true; #endif cmd = "ID;"; wait_char(';', 7 , 500, "check", ASC); //std::cout << "check: " << replystr << std::endl; if (replystr.find("ID") == std::string::npos) return false; return true; } unsigned long long RIG_FT710::get_vfoA () { cmd = "FA"; cmd += ';'; wait_char(';', 12, 100, "get vfo A", ASC); gett("get_vfoA()"); //replystr = "XXXFA014025500;"; unsigned long long f = 0; sscanf(replystr.c_str(), "FA%lld", &f); if (f) freqA = f; return freqA; } void RIG_FT710::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA000000000;"; for (int i = 10; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); sett("SET vfo A"); } unsigned long long RIG_FT710::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';', 12, 100, "get vfo B", ASC); gett("get_vfoB()"); // replystr = "YYYYYFB7300000;"; unsigned long long f = 0; sscanf(replystr.c_str(), "FA%lld", &f); if (f) freqB = f; return freqB; } void RIG_FT710::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB000000000;"; for (int i = 10; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); sett("SET vfo B"); } bool RIG_FT710::twovfos() { return true; } int RIG_FT710::get_vfoAorB() { cmd = "VS;"; rsp = "VS"; wait_char(';', 4, 100, "get vfoAorB()", ASC); gett("get vfoAorB()"); size_t p = replystr.rfind(rsp); // inuse = onA; if (p != std::string::npos) inuse = (replystr[p + 2] == '1') ? onB : onA; return inuse; } void RIG_FT710::selectA() { cmd = "VS0;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); sett("selectA()"); inuse = onA; } void RIG_FT710::selectB() { cmd = "VS1;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); sett("selectB()"); inuse = onB; } void RIG_FT710::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); sett("A2B()"); } bool RIG_FT710::can_split() { return true; } void RIG_FT710::set_split(bool val) { split = val; if (val) { cmd = "ST1;"; sendCommand(cmd); sett("Split ON"); } else { cmd = "ST0;"; sendCommand(cmd); sett("Split OFF"); } } int RIG_FT710::get_split() { cmd = rsp = "FT"; cmd += ";"; wait_char(';', 4, 100, "Get split", ASC); gett("get split()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int split = replystr[p+2] - '0'; return (split > 0); } void RIG_FT710::swapAB() { cmd = "SV;"; sendCommand(cmd); sett("swapAB()"); } int RIG_FT710::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';', 7, 100, "get smeter", ASC); gett("get_smeter()"); int mtr = 0; sscanf(replystr.c_str(), "SM0%d", &mtr); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FT710::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';', 10, 100, "get swr", ASC); gett("get_swr()"); int mtr = 0, dmy = 0; size_t p = replystr.rfind("RM6"); sscanf(&replystr[p], "RM6%3d%3d", &mtr, &dmy); return mtr / 2.56; } struct mtrpair {int mtr; float val;}; double RIG_FT710::get_idd() { static mtrpair iddtbl[] = { { 52, 5.0 }, { 70, 7.0 }, { 96, 10.0 }, { 116, 12.0 }, { 125, 13.0 }, { 134, 14.0 }, { 143, 15.0 }, { 152, 16.0 }, { 161, 17.0 }, { 171, 18.0 }, { 191, 20.0 } }; cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_idd"); int mtr = 0, dmy = 0; double idd = 0; size_t p = replystr.rfind("RM7"); if (p != std::string::npos) { sscanf(&replystr[p], "RM7%3d%3d", &mtr, &dmy); size_t i = 0; for (i = 0; i < sizeof(iddtbl) / sizeof(mtrpair) - 1; i++) if (mtr >= iddtbl[i].mtr && mtr < iddtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 191) mtr = 191; idd = iddtbl[i].val + (iddtbl[i+1].val - iddtbl[i].val)*(mtr - iddtbl[i].mtr) / (iddtbl[i+1].mtr - iddtbl[i].mtr); if (idd > 25) idd = 25; } return idd; } double RIG_FT710::get_voltmeter() { cmd = "RM8;"; std::string resp = "RM"; get_trace(1, "get_voltmeter()"); wait_char(';',10, 100, "get vdd", ASC); gett("get_voltmeter"); int mtr = 0, dmy = 0; double val = 0; size_t p = replystr.rfind("RM8"); if (p != std::string::npos) { sscanf(&replystr[p], "RM8%3d%3d", &mtr, &dmy); val = 13.8 * mtr / 190; return val; } return -1; } int RIG_FT710::get_power_out() { static mtrpair pwrtbl[] = { { 35, 5.0 }, { 94, 25.0 }, {147, 50.0 }, {176, 75.0 }, {205,100.0 } }; cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';', 10, 100, "get pout", ASC); gett("get_power_out()"); int mtr = 0, dmy = 0; size_t p = replystr.rfind("RM5"); sscanf(&replystr[p], "RM5%3d%3d", &mtr, &dmy); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(mtrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 205) mtr = 205; double pwr = (int)ceil(pwrtbl[i].val + (pwrtbl[i+1].val - pwrtbl[i].val)*(mtr - pwrtbl[i].mtr) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (pwr > 100) pwr = 100; return pwr; } int RIG_FT710::get_alc() { cmd = rsp = "RM4"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_alc"); int mtr = 0, dmy = 0; size_t p = replystr.rfind("RM4"); sscanf(&replystr[p], "RM4%3d%3d", &mtr, &dmy); return (int)ceil(mtr / 2.56); } // Transceiver power level double RIG_FT710::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';', 6, 100, "get power", ASC); gett("get_power_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FT710::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); } // Volume control return 0 ... 100 int RIG_FT710::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';', 7, 100, "get vol", ASC); gett("get_volume_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = 0; sscanf(replystr.c_str(), "AG0%d", &val); val *= 100; val /= 255; if (val > 100) val = 100; return val; } void RIG_FT710::set_volume_control(int val) { int ivol = (int)(val * 250 / 100); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); } // Tranceiver PTT on/off void RIG_FT710::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; } int RIG_FT710::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, 100, "get PTT", ASC); gett("get_PTT()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FT710::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC003;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FT710::get_tune() { cmd = rsp = "AC"; cmd += ';'; wait_char(';', 5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (replystr[p+4] == '0') return 0; return 1; } int RIG_FT710::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FT710::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); } int RIG_FT710::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, 100, "get att", ASC); gett("get_attenuator()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FT710::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FT710::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); } int RIG_FT710::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';', 5, 100, "get pre", ASC); gett("get_preamp()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FT710::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FT710::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } static bool narrow = 0; // 0 - wide, 1 - narrow int RIG_FT710::adjust_bandwidth(int val) { int bw = 0; if (val == mCW_U || val == mCW_L) { bandwidths_ = FT710_widths_CW; bw_vals_ = FT710_wvals_CW; } else if (val == mFM || val == mAM || val == mFM_N || val == mDATA_FM || val == mAM_N) { if (val == mFM) bandwidths_ = FT710_widths_FMwide; else if (val == mAM) bandwidths_ = FT710_widths_AMwide; else if (val == mAM_N) bandwidths_ = FT710_widths_AMnar; else if (val == mFM_N) bandwidths_ = FT710_widths_FMnar; else if (val == mDATA_FM) bandwidths_ = FT710_widths_DATA_FM; else if (val == mDATA_FMN) bandwidths_ = FT710_widths_DATA_FMN; bw_vals_ = FT710_wvals_AMFM; } else if (val == mRTTY_L || val == mRTTY_U) { // RTTY bandwidths_ = FT710_widths_RTTY; bw_vals_ = FT710_wvals_RTTY; } else if (val == mDATA_L || val == mDATA_U) { // PSK bandwidths_ = FT710_widths_DATA; bw_vals_ = FT710_wvals_PSK; } else { bandwidths_ = FT710_widths_SSB; bw_vals_ = FT710_wvals_SSB; } if (narrow) bw = defBW_narrow[val]; else bw = defBW_wide[val]; return bw; } int RIG_FT710::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FT710::bwtable(int n) { switch (n) { case mCW_U: case mCW_L: return FT710_widths_CW; case mFM: return FT710_widths_FMwide; case mAM: return FT710_widths_AMwide; case mAM_N : return FT710_widths_AMnar; case mRTTY_L: case mRTTY_U: return FT710_widths_RTTY; case mDATA_L: case mDATA_U: return FT710_widths_DATA; case mFM_N: return FT710_widths_DATA_FMN; case mDATA_FM: return FT710_widths_DATA_FM; default: ; } return FT710_widths_SSB; } void RIG_FT710::set_modeA(int val) { modeA = val; if (inuse == onB) cmd = rsp = "MD1"; else cmd = rsp = "MD0"; cmd += FT710_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); adjust_bandwidth(modeA); } int RIG_FT710::get_modeA() { if (inuse == onB) cmd = rsp = "MD1"; else cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode A", ASC); gett("get_modeA()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; int n = 0; for (n = 0; n < NUM_MODES; n++) if (md == FT710_mode_chr[n]) break; modeA = n; } } adjust_bandwidth(modeA); return modeA; } void RIG_FT710::set_modeB(int val) { modeB = val; if (inuse == onA) cmd = rsp = "MD1"; else cmd = rsp = "MD0"; cmd += FT710_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); adjust_bandwidth(modeA); } int RIG_FT710::get_modeB() { if (inuse == onA) cmd = rsp = "MD1"; else cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode B", ASC); gett("get_modeB()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; int n = 0; for (n = 0; n < NUM_MODES; n++) if (md == FT710_mode_chr[n]) break; modeB = n; } } adjust_bandwidth(modeB); return modeB; } void RIG_FT710::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mDATA_FM ) { return; } cmd.clear(); cmd.append("SH00"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); sett("SET bwA"); mode_bwA[modeA] = val; } int RIG_FT710::get_bwA() { if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mDATA_FM) { bwA = 0; mode_bwA[modeA] = bwA; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 7, 100, "get bw A", ASC); gett("get_bwA()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; replystr[p+6] = 0; int bw_idx = fm_decimal(replystr.substr(p+4), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i = 0; bwA = i; mode_bwA[modeA] = bwA; return bwA; } void RIG_FT710::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mDATA_FM) { mode_bwB[modeB] = 0; return; } cmd.clear(); cmd.append("SH00"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw B", cmd, replystr); sett("SET bwB"); mode_bwB[modeB] = bwB; } int RIG_FT710::get_bwB() { if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mDATA_FM) { bwB = 0; mode_bwB[modeB] = bwB; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 7, 100, "get bw B", ASC); gett("get_bwB()"); size_t p = replystr.rfind(rsp); p = replystr.find(rsp); if (p == std::string::npos) return bwB; replystr[p+6] = 0; int bw_idx = fm_decimal(replystr.substr(p+4),2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i = 0; bwB = i; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FT710::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FT710::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FT710::get_modetype(int n) { return FT710_mode_type[n]; } void RIG_FT710::set_if_shift(int val) { if (inuse == onB) cmd = "IS10+0000;"; else cmd = "IS00+0000;"; if (val != 0) progStatus.shift = true; else progStatus.shift = false; if (val < 0) cmd[4] = '-'; val = abs(val); for (int i = 8; i > 4; i--) { cmd[i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); } bool RIG_FT710::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';', 10, 100, "get if shift", ASC); gett("get_if_shift()"); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+5]); if (replystr[p+4] == '-') val = -val; return (val != 0); } void RIG_FT710::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1200; if_shift_max = max = 1200; if_shift_step = step = 20; if_shift_mid = 0; } /* BPabcde; a: Fixed, '0' b: Manual NOTCH ON/OFF, 1/0 cde: 001 - 320, (NOTCH Frequency : x 10 Hz ) */ static std::string notch_str_on = "BP00001;"; static std::string notch_str_off = "BP00000;"; static std::string notch_str_val = "BP01000;"; static int notch_val = 1500; void RIG_FT710::set_notch(bool on, int val) { if (notch_val != val) { cmd = notch_str_on; sendCommand(cmd); showresp(WARN, ASC, "SET notch ON", cmd, replystr); set_trace(3,"set_notch ON", cmd.c_str(), replystr.c_str()); // set notch frequency notch_val = val; val /= 10; for (int i = 0; i < 3; i++) { notch_str_val[6 - i] = '0' + (val % 10); val /= 10; } cmd = notch_str_val; // set notch ON sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); set_trace(3,"set_notch val", cmd.c_str(), replystr.c_str()); } if (on) cmd = notch_str_on; else cmd = notch_str_off; sendCommand(cmd); set_trace(3,"set_notch OFF", cmd.c_str(), replystr.c_str()); showresp(WARN, ASC, "SET notch OFF", cmd, replystr); } bool RIG_FT710::get_notch(int &val) { bool ison = false; cmd = "BP00;"; rsp = "BP"; wait_char(';', 8, 100, "get notch on/off", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; gett("get_notch()"); if (replystr[p+6] == '1') // manual notch enabled ison = true; val = progStatus.notch_val; cmd = "BP01;"; rsp = "BP"; wait_char(';', 8, 100, "get notch val", ASC); gett("get_notch_val()"); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; return (notch_on = ison); } void RIG_FT710::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3200; step = 10; } void RIG_FT710::set_auto_notch(int v) { if (inuse == onB) cmd = "BC10;"; else cmd = "BC00;"; if (v) cmd[3] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET auto notch", cmd, replystr); } int RIG_FT710::get_auto_notch() { cmd = "BC0;"; wait_char(';', 5, 100, "get auto notch", ASC); gett("get_auto_notch()"); size_t p = replystr.rfind("BC"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } int FT710_blanker_level = 0; void RIG_FT710::set_noise(bool b) { if (inuse == onB) cmd = "NB10;"; else cmd = "NB00;"; if (b) { cmd[3] = '1'; nb_label("NB on", true); } else nb_label("NB", false); sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); } int RIG_FT710::get_noise() { cmd = rsp = "NB0"; cmd += ';'; wait_char(';', 5, 100, "get NB", ASC); gett("get_noise()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return FT710_blanker_level; FT710_blanker_level = replystr[p+3] - '0'; if (FT710_blanker_level) { nb_label("NB on", true); } else nb_label("NB", false); return FT710_blanker_level; } // val 0 .. 100 void RIG_FT710::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); } int RIG_FT710::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); gett("get_mic_gain()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); return val; } void RIG_FT710::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT710::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = val * 250 / 100; for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); } int RIG_FT710::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, 100, "get rfgain", ASC); gett("get_rf_gain()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = rfval * 100 / 250; if (rfval > 100) rfval = 100; return rfval; } void RIG_FT710::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT710::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); } void RIG_FT710::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FT710::set_vox_anti() { } void RIG_FT710::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FT710::set_vox_on_dataport() { cmd = "EX0304050;"; if (progStatus.vox_on_dataport) cmd[8] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); } void RIG_FT710::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FT710::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FT710::set_cw_spot() { if (vfo->imode == 2 || vfo->imode == 6) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FT710::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX020205").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FT710::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX0202116").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); } void RIG_FT710::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_FT710::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; } // DNR void RIG_FT710::set_noise_reduction_val(int val) { cmd.assign("RL0").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, replystr); sett("set_noise_reduction_val"); } int RIG_FT710::get_noise_reduction_val() { int val = 1; cmd = rsp = "RL0"; cmd.append(";"); wait_char(';',6, 100, "GET noise reduction val", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = atoi(&replystr[p+3]); return val; } // DNR void RIG_FT710::set_noise_reduction(int val) { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET noise reduction", cmd, replystr); sett("set_noise_reduction_on/off"); } int RIG_FT710::get_noise_reduction() { int val; cmd = rsp = "NR0"; cmd.append(";"); wait_char(';',5, 100, "GET noise reduction", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; val = replystr[p+3] - '0'; return val; } // --------------------------------------------------------------------- // set date and time // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_FT710::sync_date(char *dt) { cmd.assign("DT0"); cmd.append(dt); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_date", cmd, replystr); sett("sync_date"); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_FT710::sync_clock(char *tm) { cmd.assign("DT1"); cmd += tm[0]; cmd += tm[1]; cmd += tm[3]; cmd += tm[4]; cmd += tm[6]; cmd += tm[7]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_time", cmd, replystr); sett("sync_time"); } flrig-2.0.04/src/rigs/yaesu/FT891.cxx0000664000175000017500000010765514502041135014014 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2017 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "yaesu/FT891.h" #include "debug.h" #include "support.h" #include "trace.h" #define FL891_WAIT_TIME 200 enum mFT891 { mLSB, mUSB, mCW, mFM, mAM, mTTYL, mCWR, mDATAL, mTTYU, mFMN, mDATAU, mAMN }; // 0 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 // mode index static const char FT891name_[] = "FT-891"; static std::vectorFT891modes_; static const char *vFT891modes_[] = { "LSB", "USB", "CW-U", "FM", "AM", "RTTY-L", "CW-L", "DATA-L", "RTTY-U", "FM-N", "DATA-U", "AM-N"}; static const char FT891_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'B', 'C', 'D' }; static const char FT891_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U' }; static const int FT891_def_bw[] = { 17, 17, 5, 0, 0, 10, 5, 16, 10, 0, 16, 0 }; // mLSB, mUSB, mCW, mFM, mAM, mTTYL, mCWR, mDATAL, mTTYU, mFMN, mDATAU, mAMN static std::vectorFT891_widths_SSB; static const char *vFT891_widths_SSB[] = { "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3200" }; static int FT891_wvals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, WVALS_LIMIT}; static std::vectorFT891_widths_SSBD; static const char *vFT891_widths_SSBD[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FT891_wvals_SSBD[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, WVALS_LIMIT}; static std::vectorFT891_widths_CW; static const char *vFT891_widths_CW[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FT891_wvals_CW[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, WVALS_LIMIT}; // Single bandwidth modes static std::vectorFT891_widths_AMFMnar; static const char *vFT891_widths_AMFMnar[] = { "NARR" }; static std::vectorFT891_widths_AMFMnorm; static const char *vFT891_widths_AMFMnorm[] = { "NORM" }; static const int FT891_wvals_AMFM[] = { 0, WVALS_LIMIT }; static const int FT891_wvals_NN[] = {0, 1, WVALS_LIMIT}; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_FT891::RIG_FT891() { // base class values IDstr = "ID"; name_ = FT891name_; modes_ = FT891modes_; bandwidths_ = FT891_widths_SSB; bw_vals_ = FT891_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 50; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 12; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; has_compression = has_compON = has_a2b = has_ext_tuner = has_xcvr_auto_on_off = has_split = // has_split_AB = has_noise_reduction = has_noise_reduction_control = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = // has_vfo_adj = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_weight = has_band_selection = can_change_alt_vfo = has_smeter = has_alc_control = has_swr_control = has_power_out = has_power_control = has_volume_control = has_rf_control = has_sql_control = has_micgain_control = has_mode_control = has_nb_level = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = true; // derived specific atten_level = 1; preamp_level = 1; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 9; } void RIG_FT891::initialize() { VECTOR (FT891modes_, vFT891modes_); VECTOR (FT891_widths_SSB, vFT891_widths_SSB); VECTOR (FT891_widths_SSBD, vFT891_widths_SSBD); VECTOR (FT891_widths_CW, vFT891_widths_CW); VECTOR (FT891_widths_AMFMnar, vFT891_widths_AMFMnar); VECTOR (FT891_widths_AMFMnorm, vFT891_widths_AMFMnorm); modes_ = FT891modes_; bandwidths_ = FT891_widths_SSB; bw_vals_ = FT891_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; rig_widgets[9].W = btnNR; rig_widgets[10].W = sldrNR; // set progStatus defaults if (progStatus.notch_val < 10) progStatus.notch_val = 1500; if (progStatus.noise_reduction_val < 1) progStatus.noise_reduction_val = 1; if (progStatus.power_level < 5) progStatus.power_level = 5; // first-time-thru, or reset if (progStatus.cw_qsk < 15) { progStatus.cw_qsk = 15; progStatus.cw_spot_tone = 700; progStatus.cw_weight = 3.0; progStatus.cw_wpm = 18; progStatus.vox_on_dataport = false; progStatus.vox_gain = 50; progStatus.vox_anti = 50; progStatus.vox_hang = 500; } // Disable Auto Information mode sendCommand("AI0;"); op_yaesu_select60->deactivate(); } void RIG_FT891::post_initialize() { } bool RIG_FT891::check () { cmd = rsp = "FA"; cmd += ';'; get_trace(1, "check()"); int ret = wait_char(';',12, FL891_WAIT_TIME, "check", ASC); gett(""); if (ret >= 12) return true; return false; } unsigned long long RIG_FT891::get_vfoA () { // When VFOA is 'selected', radio has it actively loaded in FA, otherwise // it is in FB if (rigbase::isOnA()) { cmd = rsp = "FA"; } else { cmd = rsp = "FB"; } cmd += ';'; get_trace(1, "get_vfoA()"); wait_char(';',12, FL891_WAIT_TIME, "get vfo A", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; p += 2; unsigned long long f = 0; for (int n = 0; n < ndigits; n++) f = f * 10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_FT891::set_vfoA (unsigned long long freq) { freqA = freq; // When VFOA is 'selected', radio has it actively loaded in FA, otherwise // it is in FB if (rigbase::isOnA()) { cmd = "FA000000000;"; } else { cmd = "FB000000000;"; } for (int i = 0; i < ndigits; i++) { cmd[ndigits + 1 - i] += freq % 10; freq /= 10; } set_trace(1, "set_vfoA"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET vfo A", cmd, replystr); } unsigned long long RIG_FT891::get_vfoB () { // When VFOB is 'selected', radio has it actively loaded in FA, otherwise // it is in FB if (rigbase::isOnB()) { cmd = rsp = "FA"; } else { cmd = rsp = "FB"; } cmd += ';'; get_trace(1, "get_vfoB()"); wait_char(';',12, FL891_WAIT_TIME, "get vfo B", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; p += 2; unsigned long long f = 0; for (int n = 0; n < ndigits; n++) f = f * 10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_FT891::set_vfoB (unsigned long long freq) { freqB = freq; // When VFOB is 'selected', radio has it actively loaded in FA, otherwise // it is in FB if (rigbase::isOnB()) { cmd = "FA000000000;"; } else { cmd = "FB000000000;"; } for (int i = 0; i < ndigits; i++) { cmd[ndigits + 1 - i] += freq % 10; freq /= 10; } set_trace(1, "set_vfoB"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET vfo B", cmd, replystr); } void RIG_FT891::selectA() { if (rigbase::isOnA()) return; rigbase::selectA(); cmd = "SV;"; set_trace(1, "select_A"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "select A", cmd, replystr); inuse = onA; } void RIG_FT891::selectB() { if (rigbase::isOnB()) return; rigbase::selectB(); cmd = "SV;"; set_trace(1, "selectB"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "select B", cmd, replystr); inuse = onB; } void RIG_FT891::A2B() { cmd = "AB;"; set_trace(1, "A2B()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "vfo A->B", cmd, replystr); } void RIG_FT891::B2A() { cmd = "BA;"; set_trace(1, "B2A()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "vfo B->A", cmd, replystr); } void RIG_FT891::swapAB() { rigbase::swapAB(); cmd = "SV;"; set_trace(1, "swapAB()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "vfo A<>B", cmd, replystr); } bool RIG_FT891::can_split() { return true; } void RIG_FT891::set_split(bool val) { split = val; if (val) { cmd = "ST1;"; sendCommand(cmd); sett("Split ON"); } else { cmd = "ST0;"; sendCommand(cmd); sett("Split OFF"); } } int RIG_FT891::get_split() { cmd = rsp = "ST"; cmd += ";"; wait_char(';', 4, 100, "Get split", ASC); gett("get split()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int split = replystr[p+2] - '0'; return (split > 0); } int RIG_FT891::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; get_trace(1, "get_smeter()"); wait_char(';',7, FL891_WAIT_TIME, "get smeter", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr = mtr / 2.56; return mtr; } int RIG_FT891::get_swr() { cmd = rsp = "RM6"; cmd += ';'; get_trace(1, "get_swr()"); wait_char(';',7, FL891_WAIT_TIME, "get swr", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } int RIG_FT891::get_alc() { cmd = rsp = "RM4"; cmd += ';'; get_trace(1, "get_alc()"); wait_char(';',7, FL891_WAIT_TIME, "get alc", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } int RIG_FT891::get_power_out() { cmd = rsp = "RM5"; get_trace(1, "get_power_out()"); sendCommand(cmd.append(";")); gett(""); wait_char(';',7, FL891_WAIT_TIME, "get pout", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; // this needs to be measured and adjusted int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } // Transceiver power level double RIG_FT891::get_power_control() { cmd = rsp = "PC"; cmd += ';'; get_trace(1, "get_power_control()"); wait_char(';',6, FL891_WAIT_TIME, "get power", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FT891::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } set_trace(1, "set_power_control()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET power", cmd, replystr); } // Volume control return 0 ... 100 int RIG_FT891::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; get_trace(1, "get_volume_control()"); wait_char(';',7, FL891_WAIT_TIME, "get vol", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = round(atoi(&replystr[p+3]) / 2.55); if (val > 100) val = 100; return ceil(val); } void RIG_FT891::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } set_trace(1, "set_volume_control()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET vol", cmd, replystr); } // Tranceiver PTT on/off void RIG_FT891::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; set_trace(1, "set_PTT_control()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; } int RIG_FT891::get_PTT() { cmd = "TX;"; rsp = "TX"; get_trace(1, "get_PTT()"); waitN(4, 100, "get PTT", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } // internal or external tune mode void RIG_FT891::tune_rig(int) { cmd = "AC012;"; set_trace(1, "tune_rig()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "tune rig", cmd, replystr); } int RIG_FT891::get_tune() { cmd = rsp = "AC"; cmd += ';'; get_trace(1, "get_tune()"); waitN(5, 100, "get tune", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return !(val < 2); } void RIG_FT891::set_attenuator(int val) { if (val) cmd = "RA01;"; else cmd = "RA00;"; set_trace(1, "set_attenuator()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET att", cmd, replystr); } int RIG_FT891::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; get_trace(1, "get_attenuator()"); wait_char(';',5, FL891_WAIT_TIME, "get att", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } void RIG_FT891::set_preamp(int val) { if (val) cmd = "PA01;"; else cmd = "PA00;"; preamp_level = val; set_trace(1, "set_preamp()"); sendCommand (cmd); sett(""); showresp(WARN, ASC, "SET preamp", cmd, replystr); } int RIG_FT891::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; get_trace(1, "get_preamp()"); wait_char(';',5, FL891_WAIT_TIME, "get pre", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FT891::ATT_label() { if (atten_level == 1) return "12 dB"; return "ATT"; } const char *RIG_FT891::PRE_label() { if (preamp_level == 1) return "Amp"; return "IPO"; } int RIG_FT891::adjust_bandwidth(int val) { switch (val) { case mCW : case mCWR : case mTTYL : case mTTYU : bandwidths_ = FT891_widths_CW; bw_vals_ = FT891_wvals_CW; break; case mFM : case mAM : bandwidths_ = FT891_widths_AMFMnorm; bw_vals_ = FT891_wvals_AMFM; break; case mFMN : case mAMN : bandwidths_ = FT891_widths_AMFMnar; bw_vals_ = FT891_wvals_AMFM; break; case mDATAL : case mDATAU : bandwidths_ = FT891_widths_SSBD; bw_vals_ = FT891_wvals_SSBD; break; default: bandwidths_ = FT891_widths_SSB; bw_vals_ = FT891_wvals_SSB; } return FT891_def_bw[val]; } int RIG_FT891::def_bandwidth(int val) { return FT891_def_bw[val]; } std::vector& RIG_FT891::bwtable(int n) { switch (n) { case mFM : case mAM : return FT891_widths_AMFMnorm; case mFMN : case mAMN : return FT891_widths_AMFMnar; case mCW : case mCWR : case mTTYL : case mTTYU : return FT891_widths_CW; case mDATAL : case mDATAU : return FT891_widths_SSBD; default : break; } return FT891_widths_SSB; } void RIG_FT891::set_sideband(int md) { set_trace(1, "set_sideband()"); switch (md) { case mLSB: case mUSB: cmd = "EX1107"; cmd += (md == mLSB ? '1' : '0'); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET SSB sideband", cmd, replystr); break; case mCW: case mCWR: cmd = "EX0707"; cmd += (md == mCWR ? '1' : '0'); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET CW sideband", cmd, replystr); break; case mTTYL: case mTTYU: cmd = "EX1011"; cmd += (md == mTTYL ? '1' : '0'); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET TTY sideband", cmd, replystr); break; case mDATAL: case mDATAU: cmd = "EX0812"; cmd += (md == mDATAL ? '1' : '0'); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET DATA sideband", cmd, replystr); break; default: break; } gett(""); return; } int RIG_FT891::get_sideband(int md) { size_t p; get_trace(1, "get_sideband()"); switch (md) { case mLSB: case mUSB: cmd = "EX1107;"; wait_char(';', 8, FL891_WAIT_TIME, "GET SSB sideband", ASC); p = replystr.find("EX"); if (p != std::string::npos) { gett(""); return replystr[p+6] - '0'; } break; case mCW: case mCWR: cmd = "EX0707;"; wait_char(';', 8, FL891_WAIT_TIME, "GET CW sideband", ASC); p = replystr.find("EX"); if (p != std::string::npos) { gett(""); return replystr[p+6] - '0'; } break; case mTTYL: case mTTYU: cmd = "EX1011;"; wait_char(';', 8, FL891_WAIT_TIME, "GET TTY sideband", ASC); p = replystr.find("EX"); if (p != std::string::npos) { gett(""); return replystr[p+6] - '0'; } break; case mDATAL: case mDATAU: cmd = "EX0812;"; wait_char(';', 8, FL891_WAIT_TIME, "GET DATA sideband", ASC); p = replystr.find("EX"); if (p != std::string::npos) { gett(""); return replystr[p+6] - '0'; } break; default: break; } gett(""); return 1; } void RIG_FT891::set_modeA(int val) { modeA = val; if (inuse == onB) { LOG_WARN("set_modeA, but on B. Call selectA() first."); return; } adjust_bandwidth(modeA); cmd = "MD0"; cmd += FT891_mode_chr[val]; cmd += ';'; set_trace(1, "set_modeA()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET mode A", cmd, replystr); set_sideband(modeA); } int RIG_FT891::get_modeA() { if (inuse == onB) { //LOG_WARN("get_modeA, but on B. Call selectA() first."); return modeA; } cmd = rsp = "MD0"; cmd += ';'; get_trace(1, "get_modeA()"); wait_char(';',5, FL891_WAIT_TIME, "get mode A", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = 0; switch (replystr[p+3]) { case '1': case '2': md = (get_sideband(mLSB) ? mLSB : mUSB); break; case '3': case '7': md = (get_sideband(mCW) ? mCWR : mCW); break; case '6': case '9': md = (get_sideband(mTTYU) ? mTTYL : mTTYU); break; case '8': case 'C': md = (get_sideband(mDATAU) ? mDATAL : mDATAU); break; case '4': md = mFM; break; case '5': md = mAM; break; case 'B': md = mFMN; break; case 'D': md = mAMN; break; } modeA = md; } } adjust_bandwidth(modeA); return modeA; } void RIG_FT891::set_modeB(int val) { modeB = val; if (inuse == onB) { LOG_WARN("set_modeB, but on A. Call selectB() first."); return; } adjust_bandwidth(modeB); cmd = "MD0"; cmd += FT891_mode_chr[val]; cmd += ';'; set_trace(1, "set_modeB()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET mode B", cmd, replystr); set_sideband(modeB); } int RIG_FT891::get_modeB() { if (inuse == onA) { //LOG_WARN("set_modeB, but on A. Call selectB() first."); return modeB; } cmd = rsp = "MD0"; cmd += ';'; get_trace(1, "get_modeB()"); wait_char(';',5, FL891_WAIT_TIME, "get mode B", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = 0; switch (replystr[p+3]) { case '1': case '2': md = (get_sideband(mLSB) ? mLSB : mUSB); break; case '3': case '7': md = (get_sideband(mCW) ? mCWR : mCW); break; case '6': case '9': md = (get_sideband(mTTYU) ? mTTYL : mTTYU); break; case '8': case 'C': md = (get_sideband(mDATAU) ? mDATAL : mDATAU); break; case '4': md = mFM; break; case '5': md = mAM; break; case 'B': md = mFMN; break; case 'D': md = mAMN; break; } modeB = md; } } adjust_bandwidth(modeB); return modeB; } void RIG_FT891::set_bwA(int val) { bwA = val; if (inuse == onB) { LOG_WARN("set_bwA, but on B. Call selectA() first."); return; } int bw_indx = bw_vals_[val]; if (modeA == mFM || modeA == mAM || modeA == mFMN || modeA == mAMN) return; cmd = "NA00;"; if ((((modeA == mLSB || modeA == mUSB) && val < 8)) || ((modeA == mCW || modeA == mCWR || modeA == mTTYL || modeA == mTTYU || modeA == mDATAL || modeA == mDATAU) && val < 9) ) cmd = "NA01;"; cmd.append("SH01"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; set_trace(1, "set_bwA()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET bw A", cmd, replystr); } int RIG_FT891::get_bwA() { size_t p; if (inuse == onB) { //LOG_WARN("get_bwA, but on B. Call selectA() first."); return bwA; } if (modeA == mFM || modeA == mAM || modeA == mFMN || modeA == mAMN) { bwA = 0; return bwA; } cmd = rsp = "SH0"; cmd += ';'; get_trace(1, "get_bwA()"); wait_char(';',7, FL891_WAIT_TIME, "get bw A", ASC); gett(""); p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; if (p + 6 >= replystr.length()) return bwA; replystr[p+6] = 0; int bw_idx = fm_decimal(replystr.substr(p+4), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; return bwA; } void RIG_FT891::set_bwB(int val) { bwB = val; if (inuse == onA) { LOG_WARN("set_bwB, but on A. Call selectB() first."); return; } int bw_indx = bw_vals_[val]; if (modeB == mFM || modeB == mAM || modeB == mFMN || modeB == mAMN) return; cmd = "NA00;"; if ((((modeB == mLSB || modeB == mUSB) && val < 8)) || ((modeB == mCW || modeB == mCWR || modeB == mTTYL || modeB == mTTYU || modeB == mDATAL || modeB == mDATAU) && val < 9) ) cmd = "NA01;"; cmd.append("SH01"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; set_trace(1, "set_bwB()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET bw B", cmd, replystr); } int RIG_FT891::get_bwB() { size_t p; if (inuse == onA) { //LOG_WARN("get_bwB, but on A. Call selectB() first."); return bwB; } if (modeB == mFM || modeB == mAM || modeB == mFMN || modeB == mAMN) { bwB = 0; return bwB; } cmd = rsp = "SH0"; cmd += ';'; get_trace(1, "get_bwB()"); wait_char(';',7, FL891_WAIT_TIME, "get bw B", ASC); gett(""); p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; if (p + 6 >= replystr.length()) return bwB; replystr[p+6] = 0; int bw_idx = fm_decimal(replystr.substr(p+4), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; return bwB; } int RIG_FT891::get_modetype(int n) { return FT891_mode_type[n]; } void RIG_FT891::set_if_shift(int val) { cmd = "IS01+0000;"; if (val == 0) cmd[3] = '0'; if (val < 0) cmd[4] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[4+i] += val % 10; val /= 10; } set_trace(1, "set_if_shift()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET if shift", cmd, replystr); } bool RIG_FT891::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; get_trace(1, "get_if_shift()"); wait_char(';',10, FL891_WAIT_TIME, "get if shift", ASC); gett(""); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+5]); if (replystr[p+4] == '-') val = -val; return (replystr[3] == '1'); } void RIG_FT891::set_notch(bool on, int val) { // set notch frequency if (on) { cmd = "BP00001;"; set_trace(1, "set_notch ON"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET notch on", cmd, replystr); cmd = "BP01000;"; if (val % 10 >= 5) val += 10; val /= 10; for (int i = 3; i > 0; i--) { cmd[3 + i] += val % 10; val /=10; } set_trace(1, "set notch value"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET notch val", cmd, replystr); return; } // set notch off cmd = "BP00000;"; set_trace(1, "set_notch OFF"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET notch off", cmd, replystr); } bool RIG_FT891::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; get_trace(1, "get_notch ON/OFF"); wait_char(';',8, FL891_WAIT_TIME, "get notch on/off", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; if (replystr[p+6] == '1') { // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; get_trace(1, "get notch value()"); wait_char(';',8, FL891_WAIT_TIME, "get notch val", ASC); gett(""); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; } return ison; } void RIG_FT891::set_auto_notch(int v) { cmd.assign("BC0").append(v ? "1" : "0" ).append(";"); set_trace(1, "set auto notch"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET DNF Auto Notch Filter", cmd, replystr); } int RIG_FT891::get_auto_notch() { cmd = "BC0;"; get_trace(1, "get auto notch"); wait_char(';',5, FL891_WAIT_TIME, "get auto notch", ASC); gett(""); size_t p = replystr.rfind("BC0"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } void RIG_FT891::set_noise(bool b) { if (b) cmd = "NR01;"; else cmd = "NR00;"; set_trace(1, "set_noise()"); sendCommand (cmd); sett(""); showresp(WARN, ASC, "SET NR", cmd, replystr); } int RIG_FT891::get_noise() { cmd = "NR0;"; get_trace(1, "get_noise()"); wait_char(';',5, FL891_WAIT_TIME, "get NR", ASC); gett(""); size_t p = replystr.rfind("NR0"); if (p == std::string::npos) return 0; return replystr[p+3] - '0'; } void RIG_FT891::set_nb_level(int val) { cmd = "RL000;"; for (int i = 4; i > 2; i--) { cmd[i] += val % 10; val /= 10; } set_trace(1, "set_nb_level()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set RL level", cmd, replystr); } int RIG_FT891::get_nb_level() { cmd = "RL0;"; get_trace(1, "get_nb_level()"); wait_char(';', 7, FL891_WAIT_TIME, "get RL level", ASC); gett(""); size_t p = replystr.rfind("RL0"); if (p == std::string::npos) return 0; int val = atoi(&replystr[p+3]); return val; } void RIG_FT891::set_noise_reduction(int val) { if (val) cmd = "NB01;"; else cmd = "NB00;"; set_trace(1, "set_noise_reduction()"); sendCommand (cmd); sett(""); showresp(WARN, ASC, "Set NB on/off", cmd, replystr); } int RIG_FT891::get_noise_reduction() { cmd = "NB0;"; set_trace(1, "get_noise_reduction()"); wait_char(';', 5, FL891_WAIT_TIME, "get NB", ASC); gett(""); size_t p = replystr.rfind("NB0"); if (p == std::string::npos) return 0; return replystr[p+3] - '0'; } void RIG_FT891::set_noise_reduction_val(int val) { cmd = "NL0000;"; for (int i = 5; i > 2; i--) { cmd[i] += val % 10; val /= 10; } set_trace(1, "set_noise_reduction_val()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set NB level", cmd, replystr); } int RIG_FT891::get_noise_reduction_val() { cmd = "NL0;"; get_trace(1, "get_noise_reduction_val()"); wait_char(';', 7, FL891_WAIT_TIME, "get NB level", ASC); gett(""); size_t p = replystr.rfind("NL0"); if (p == std::string::npos) return 0; int val = atoi(&replystr[p+3]); return val; } // val 0 .. 100 void RIG_FT891::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 4; i > 1; i--) { cmd[i] = val % 10 + '0'; val /= 10; } set_trace(1, "set_mic_gain()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET mic", cmd, replystr); } int RIG_FT891::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; get_trace(1, "get_mic_gain()"); wait_char(';',6, FL891_WAIT_TIME, "get mic", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); if (val > 100) val = 100; return ceil(val); } void RIG_FT891::set_rf_gain(int val) { cmd = "RG0000;"; for (int i = 5; i > 2; i--) { cmd[i] = val % 10 + '0'; val /= 10; } set_trace(1, "set_rf_gain()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET rfgain", cmd, replystr); } int RIG_FT891::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; get_trace(1, "get_rf_gain()"); wait_char(';',7, FL891_WAIT_TIME, "get rfgain", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } return ceil(rfval); } void RIG_FT891::set_squelch(int val) { cmd = "SQ0000;"; for (int i = 5; i > 2; i--) { cmd[i] = val % 10 + '0'; val /= 10; } set_trace(1, "set_squelch()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET squelch", cmd, replystr); } int RIG_FT891::get_squelch() { int rfval = 0; cmd = rsp = "SQ0"; cmd += ';'; get_trace(1, "get_squelch()"); wait_char(';',7, FL891_WAIT_TIME, "get squelch", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } return ceil(rfval); } // NEED // bool RIG_FT891::get_vox_onoff() // EX1616 VOX SELECT 0: MIC 1: DATA // EX1617 VOX GAIN 0 - 100 (P2= 000 - 100) // VG VOX GAIN 0 - 100 (P2= 000 - 100) // EX1618 VOX DELAY 30 - 3000 msec (P2= 0030 - 3000) (10 msec/step) // EX1619 ANTI VOX GAIN 0 - 100 (P2= 000 - 100) // EX1620 DATA VOX GAIN 0 - 100 (P2= 000 - 100) // EX1621 DATA VOX DELAY 30 - 3000 msec (P2= 0030 - 3000) // EX1622 ANTI DVOX GAIN 0 - 100 (P2= 000 - 100) void RIG_FT891::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; set_trace(1, "set_vox_onoff()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET vox", cmd, replystr); } void RIG_FT891::set_vox_gain() { if (progStatus.vox_on_dataport) cmd = "EX1620"; else cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); set_trace(1, "set_vox_gain()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FT891::set_vox_anti() { if (progStatus.vox_on_dataport) cmd = "EX1622"; else cmd = "EX1619"; cmd.append(to_decimal(progStatus.vox_anti, 3)).append(";"); set_trace(1, "set_vox_anti()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET anti-vox", cmd, replystr); } void RIG_FT891::set_vox_hang() { if (progStatus.vox_on_dataport) cmd = "EX1621"; else cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); set_trace(1, "set_vox_hang()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FT891::set_vox_on_dataport() { cmd = "EX16160;"; if (progStatus.vox_on_dataport) cmd[6] = '1'; set_trace(1, "set_vox_on_dataport()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); } void RIG_FT891::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); set_trace(1, "set_cw_wpm()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FT891::enable_keyer() { if (progStatus.enable_keyer) cmd = "KR1;"; else cmd = "KR0;"; set_trace(1,"enable_keyer()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FT891::set_cw_spot() { if (vfo->imode == mCW || vfo->imode == mCWR) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; set_trace(1, "set_cw_spot()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FT891::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX0403").append(to_decimal(n, 2)).append(";"); set_trace(1, "set_cw_weight()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FT891::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX0713").append(to_decimal(n, 1)).append(";"); set_trace(1, "set_cw_qsk()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); } // 00: 300 Hz to 75: 1050 Hz (10Hz steps) void RIG_FT891::set_cw_spot_tone() { int n = progStatus.cw_spot_tone / 10 - 30; if (n < 0) n = 0; if (n > 75) n = 75; cmd.assign("KP").append(to_decimal(n, 2)).append(";"); set_trace(1, "set_cw_spot_tone()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET cw tone", cmd, replystr); } void RIG_FT891::set_xcvr_auto_on() { if (!progStatus.xcvr_auto_on) return; cmd = rsp = "PS"; cmd.append(";"); get_trace(1, "xcvr ON? ()"); wait_char(';',4, FL891_WAIT_TIME, "Test: Is Rig ON", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) { // rig is off, power on cmd = "PS1;"; set_trace(1, "set xcvr ON()"); sendCommand(cmd); sett(""); // wake up time for initialization for (int i = 0; i < 1500; i += 100) { MilliSleep(100); update_progress(100 * i / 6000); Fl::awake(); } for (int i = 1500; i < 3000; i += 100) { MilliSleep(100); update_progress(100 * i / 6000); Fl::awake(); } sendCommand(cmd); for (int i = 3000; i < 6000; i += 100) { MilliSleep(100); update_progress(100 * i / 6000); Fl::awake(); } } } void RIG_FT891::set_xcvr_auto_off() { if (!progStatus.xcvr_auto_off) return; cmd = "PS0;"; set_trace(1, "set_xcvr_OFF()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET xcvr auto on/off", cmd, replystr); } void RIG_FT891::set_compression(int on, int val) { cmd = "PL"; cmd.append(to_decimal(val, 3)).append(";"); set_trace(1, "set_compression()"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set Comp PL", cmd, replystr); // Can only send PR command in SSB mode. Other modes will cause 891 to // return ?; in response to sending this int curMode = rigbase::isOnA() ? modeA : modeB; if ( curMode == mLSB || curMode == mUSB ) { if (on) cmd = "PR01;"; else cmd = "PR00;"; set_trace(2, "set Comp", cmd.c_str()); set_trace(1, "set_comp_level"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set Comp", cmd, replystr); } } void RIG_FT891::get_compression(int &on, int &val) { on = 0; val = 0; cmd = rsp = "PL"; cmd += ';'; get_trace(1, "get_compression()"); wait_char(';',6, FL891_WAIT_TIME, "get Comp PL", ASC); gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return; val = atoi(&replystr[p+2]); if (val > 100) val = 100; val = ceil(val); // Can only send PR command in SSB mode. Other modes will cause 891 to // return ?; in response to sending this int curMode = rigbase::isOnA() ? modeA : modeB; if ( curMode == mLSB || curMode == mUSB ) { cmd = "PR0;"; get_trace(1, "get comp level"); wait_char(';', 7, FL891_WAIT_TIME, "get PR level", ASC); gett(""); size_t p = replystr.rfind("PR0"); if (p == std::string::npos) return; on = replystr[p+3] - '0'; } std::stringstream s; s << "get_compression: " << (on ? "ON" : "OFF") << "(" << on << "), comp PL=" << val; get_trace(1, s.str().c_str()); } void RIG_FT891::get_band_selection(int v) { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); get_trace(1, "get_band_selection()"); sendCommand(cmd); gett(""); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); set_trace(2, "get band", cmd.c_str()); } flrig-2.0.04/src/rigs/yaesu/FT767.cxx0000664000175000017500000000520314502041135014000 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FT767.h" static const char FT767name_[] = "FT-767"; static std::vectorFT767modes_; static const char *vFT767modes_[] = { "LSB", "USB", "CW", "AM", "FM", "FSK"}; static const char FT767_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'U' }; RIG_FT767::RIG_FT767() { // base class values name_ = FT767name_; modes_ = FT767modes_; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 50; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; has_mode_control = true; precision = 10; ndigits = 8; }; void RIG_FT767::initialize() { VECTOR(FT767modes_, vFT767modes_); modes_ = FT767modes_; } void RIG_FT767::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } bool RIG_FT767::check() { init_cmd(); cmd[4] = 0x01; // CHECK command int ret = waitN(20, 100, "check", HEX); if (ret >= 20) return true; return false; } unsigned long long RIG_FT767::get_vfoA () { init_cmd(); cmd[4] = 0x01; // CHECK command int ret = waitN(20, 100, "get vfoA", HEX); if (ret < 20) return freqA; freqA = fm_bcd(replystr.substr(14), 8) * 10; // VFO-A in positions 14-17 modeA = replystr[19]; return freqA; } void RIG_FT767::set_vfoA (unsigned long long freq) { freqA = freq; freq /=10; // 767 does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x08; // SET FREQUENCY sendCommand(cmd); } int RIG_FT767::get_modeA() { return modeA; } void RIG_FT767::set_modeA(int val) { modeA = val; init_cmd(); cmd[3] = 0x10 + val; // 0x10 = LSB ... 0x15 = FSK cmd[4] = 0x0A; // MODESEL sendCommand(cmd); } flrig-2.0.04/src/rigs/yaesu/FT1000.cxx0000664000175000017500000002442014502041135014037 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT1000.h" #include "rig.h" #include "stdlib.h" #include "debug.h" #include "support.h" static const char FT1000name_[] = "FT-1000/D"; static std::vectorFT1000modes_; static const char *vFT1000modes_[] = { "LSB", "USB", "CW2.4", "CW500", "AM6.0", "AM2.4", "FM1","FM2", "RTTY(L)", "RTTY(U)", "PKT(L)", "PKT(FM)"}; static const int FT1000_mode_val[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; static std::vectorFT1000widths_; static const char *vFT1000widths_[] = { "2400", "2000", "500", "250", "6000"}; static int FT1000_bw_vals[] = {0,1,2,3,4,WVALS_LIMIT}; //static std::vectorFT1000_US_60m = {"", "126", "127", "128", "130"}; //static std::vector& Channels_60m = FT1000_US_60m; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FT1000::initialize() { VECTOR (FT1000modes_, vFT1000modes_); VECTOR (FT1000widths_, vFT1000widths_); modes_ = FT1000modes_; bandwidths_ = FT1000widths_; bw_vals_ = FT1000_bw_vals; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = btnIFsh; rig_widgets[3].W = sldrIFSHIFT; rig_widgets[4].W = btnNotch; rig_widgets[5].W = sldrNOTCH; rig_widgets[6].W = sldrMICGAIN; rig_widgets[7].W = sldrPOWER; } RIG_FT1000::RIG_FT1000() { name_ = FT1000name_; modes_ = FT1000modes_; bandwidths_ = FT1000widths_; bw_vals_ = FT1000_bw_vals; can_change_alt_vfo = true; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 5; serial_timeout = 100; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; afreq = bfreq = A.freq = B.freq = 7100000ULL; //amode = bmode = A.imode = B.imode = 1; aBW = bBW = A.iBW = B.iBW = 0; widgets = rig_widgets; // m_60m_indx = 0; has_band_selection = has_extras = has_split_AB = true; has_get_info = true; has_smeter = true; has_power_out = true; has_mode_control = true; has_bandwidth_control = true; has_ptt_control = true; has_tune_control = true; precision = 10; ndigits = 7; max_power = 200; } int RIG_FT1000::adjust_bandwidth(int m) { if (m == 0 || m == 1 || m == 2 || m == 5 || m == 8 || m == 9 || m == 10) return 0; // 0 1 5 2 if (m == 3) return 2; // 2 3 1 if (m == 4 || m == 6 || m == 11) return 4; // 4 6 7 3 return 2; } void RIG_FT1000::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; replystr.clear(); } // void RIG_FT1000::post_initialize() // { // enable_bandselect_btn(12, false); // enable_bandselect_btn(13, true); // } //void RIG_FT1000::set_band_selection(int v) //{ //int inc_60m = false; //} bool RIG_FT1000::check () { init_cmd(); cmd[3] = 0x00; cmd[4] = 0xFA; int ret = waitN(5, 100, "check"); if (ret < 5) return false; getthex("check"); return true; } bool RIG_FT1000::get_info() { int alt = 0; int md = 0; init_cmd(); cmd[3] = 0x00; cmd[4] = 0xFA; int ret = waitN(5, 100, "Read flags"); if (ret >= 5) { getthex("Read flags"); size_t p = ret - 5; split = ((replystr[p] & 0x01) == 0x01); // SPLIT is ON or OFF receive operation } init_cmd(); cmd[3] = 0x03; // read 32 bytes of data for status of both vfos cmd[4] = 0x10; ret = waitN(32, 100, "get info", ASC); getthex("Get info"); std::string d; if (ret >= 32) { d = replystr.substr(replystr.length() - 32); // vfo A data std::string A.freq = ((((d[1]<<8) + d[2])<<8) + d[3]) *10; md = d[7] & 0x07; alt = d[8] & 0x80; switch (md) { case 0 : A.imode = 0; break; // LSB case 1 : A.imode = 1; break; // USB case 2 : A.imode = 2; break; // CW case 3 : A.imode = 4; break; // AM case 4 : A.imode = 6; break; // FM case 5 : A.imode = 8; break; // RTTY case 6 : A.imode = 10; break; // PKT default: A.imode = 1; } A.imode = A.imode + ((alt == 128) ? 1 : 0); A.iBW = 5*((d[8] & 0x70) >> 4) + (d[8] & 0x07); if (A.iBW > 4) A.iBW = 4; if (A.imode == 2 && A.iBW == 2) { A.imode = 3; } if (A.imode == 4 && A.iBW == 4) {A.imode = 5; A.iBW = 0; } if (A.imode == 4 && A.iBW == 0) {A.imode = 4; A.iBW = 4; } if (A.imode == 6 && A.iBW == 0) {A.iBW = 4; } if (A.imode == 11 && A.iBW == 0) {A.iBW = 4; } d += 16; // vfo B data std::string B.freq = ((((d[1]<<8) + d[2])<<8) + d[3]) *10; md = d[7] & 0x07; alt = d[8] & 0x80; switch (md) { case 0 : B.imode = 0; break; // LSB case 1 : B.imode = 1; break; // USB case 2 : B.imode = 2; break; // CW case 3 : B.imode = 4; break; // AM case 4 : B.imode = 6; break; // FM case 5 : B.imode = 8; break; // RTTY case 6 : B.imode = 10; break; // PKT default : B.imode = 1; } B.imode = B.imode + ((alt == 128) ? 1 : 0); B.iBW = 5*((d[8] & 0x70) >> 4) + (d[8] & 0x07); if (B.iBW >= 4) B.iBW = 4; if (B.imode == 2 && B.iBW == 2) B.imode = 3; if (B.imode == 4 && B.iBW == 4) {B.imode = 5; B.iBW = 0; } if (B.imode == 4 && B.iBW == 0) {B.imode = 4; B.iBW = 4; } if (B.imode == 6 && B.iBW == 0) { B.iBW = 4; } if (B.imode == 11 && B.iBW == 0) { B.iBW = 4; } return true; } return false; } unsigned long long RIG_FT1000::get_vfoA () { return A.freq; } int RIG_FT1000::get_modeA() { return A.imode; } int RIG_FT1000::get_bwA() { return A.iBW; } void RIG_FT1000::set_vfoA (unsigned long long freq) { A.freq = freq; freq /=10; // cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); setthex("Set freq A"); } void RIG_FT1000::set_modeA(int val) { A.imode = val; init_cmd(); cmd[3] = FT1000_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); setthex("Set mode A"); MilliSleep(25); } void RIG_FT1000::set_bwA (int val) { //if (A.imode == 5) {val = 4;} if (A.imode == 2) return; if (A.imode == 3) return; if (A.imode == 4) return; if (A.imode == 5) return; A.iBW = val; init_cmd(); cmd[3] = FT1000_bw_vals[val]; cmd[4] = 0x8C; sendCommand(cmd); setthex("Set BW A"); //MilliSleep(25); } unsigned long long RIG_FT1000::get_vfoB() { return B.freq; } int RIG_FT1000::get_modeB() { return B.imode; } int RIG_FT1000::get_bwB() { return B.iBW; } void RIG_FT1000::set_vfoB(unsigned long long freq) { B.freq = freq; freq /=10; cmd = to_bcd_be(freq, 8); cmd += 0x8A; sendCommand(cmd); setthex("Set freq B"); } void RIG_FT1000::set_modeB(int val) { B.imode = val; init_cmd(); cmd[3] = FT1000_mode_val[val] + 0x80; cmd[4] = 0x0C; sendCommand(cmd); MilliSleep(25); setthex("Set mode B"); } void RIG_FT1000::set_bwB(int val) { if (B.imode == 2) return; if (B.imode == 3) return; if (B.imode == 4) return; if (B.imode == 5) return; B.iBW = val; init_cmd(); cmd[3] = FT1000_bw_vals[val] + 0x80; cmd[4] = 0x8C; sendCommand(cmd); setthex("Set bw B"); } void RIG_FT1000::selectA() { init_cmd(); cmd[3] = 0x00; cmd[4] = 0x05; sendCommand(cmd); setthex("Set bw B"); } void RIG_FT1000::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); setthex("Select B"); } void RIG_FT1000::swapAB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; //cmd[4] = 0x85; sendCommand(cmd); setthex("Swap AB"); MilliSleep(25); } void RIG_FT1000::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) { setthex("Set split ON"); } else { setthex("Set split OFF"); } } int RIG_FT1000::get_split() { return split; } void RIG_FT1000::set_PTT_control(int val) { init_cmd(); if (val) cmd[3] = 1; cmd[4] = 0x0F; sendCommand(cmd); if (val) { setthex("Ptt ON"); } else { setthex("Ptt OFF"); } } void RIG_FT1000::tune_rig(int) { init_cmd(); cmd[4] = 0x82; // initiate tuner cycle sendCommand(cmd,0); setthex("Tune xcvr"); // LOG_INFO("%s", str2hex(cmd.c_str(), 5)); } int RIG_FT1000::get_smeter() { float val = 0; init_cmd(); //cmd[0] = 0x00; cmd[4] = 0xF7; int ret = waitN(5, 100, "get smeter", HEX); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]); if (val <= 15) val = 5; else if (val <=154) val = 5 + 80 * (val - 15) / (154 - 15); else val = 50 + 50 * (val - 154.0) / (255.0 - 154.0); // LOG_INFO("%s => %d",str2hex(replystr.c_str(), 1), (int)val); char szmeter[5]; snprintf(szmeter, sizeof(szmeter), "%d", (int)val); get_trace(3, "Smeter", str2hex(replystr.c_str(), 1), szmeter); return (int)val; } int RIG_FT1000::get_power_out() { float pwr; init_cmd(); cmd[4] = 0xF7; int ret = waitN(5, 100, "Power out"); if (ret < 5) return 0; pwr = (unsigned char)(replystr[ret - 5]); if (pwr <=53) {pwr /= 53; pwr = 20 * pwr * pwr; } else if (pwr <= 77) {pwr /= 77; pwr = 40 * pwr * pwr; } else if (pwr <= 98) {pwr /= 98; pwr = 60 * pwr * pwr; } else if (pwr <= 114) {pwr /= 114; pwr = 80 * pwr * pwr; } else if (pwr <= 130) {pwr /= 130; pwr = 105 * pwr * pwr; } else {pwr /= 177; pwr = 160 * pwr * pwr; } // LOG_INFO("%s => %d",str2hex(replystr.c_str(), 1), (int)pwr); char szmeter[5]; snprintf(szmeter, sizeof(szmeter), "%d", (int)pwr); get_trace(3, "Smeter", str2hex(replystr.c_str(), 1), szmeter); return (int)pwr; } flrig-2.0.04/src/rigs/yaesu/FT2000.cxx0000664000175000017500000005124314502041135014043 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FT2000.h" #include "debug.h" #include "support.h" static const char FT2000name_[] = "FT-2000"; #undef NUM_MODES #define NUM_MODES 12 static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFT2000modes_; static const char *vFT2000modes_[] = { "LSB", "USB", "CW", "FM", "AM", "RTTY-L", "CW-R", "PKT-L", "RTTY-U", "PKT-FM", "FM-N", "PKT-U"}; static const char FT2000_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C' }; static const char FT2000_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U' }; static std::vectorFT2000_SSBwidths; static const char *vFT2000_SSBwidths[] = { "NORM", "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", "2100", "2250"}; static int FT2000_wvals_SSBwidths[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13, WVALS_LIMIT}; static std::vectorFT2000_CWwidths; static const char *vFT2000_CWwidths[] = { "NORM", "50", "100", "200", "300", "400", "500", "800", "1200", "1400", "1700", "2000"}; static int FT2000_wvals_CWwidths[] = { 1,2,3,4,5,6,7,8,9,10,11,12, WVALS_LIMIT}; static std::vectorFT2000_PKT_RTTYwidths; static const char *vFT2000_PKT_RTTYwidths[] = { "NORM", "25", "50", "100", "200", "300", "400"}; static int FT2000_wvals_PKT_RTTYwidths[] = { 1,2,3,4,5,6,7, WVALS_LIMIT}; static std::vectorFT2000_AMFMwidths; static const char *vFT2000_AMFMwidths[] = { "NORM", "NARR"}; static int FT2000_wvals_AMFMwidths[] = { 1,2, WVALS_LIMIT}; static std::vectorFT2000_US_60m; static const char *vFT2000_US_60m[] = {"", "126", "127", "128", "130"}; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. static std::vector& Channels_60m = FT2000_US_60m; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 54, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FT2000::initialize() { VECTOR (FT2000modes_, vFT2000modes_); VECTOR (FT2000_SSBwidths, vFT2000_SSBwidths); VECTOR (FT2000_CWwidths, vFT2000_CWwidths); VECTOR (FT2000_PKT_RTTYwidths, vFT2000_PKT_RTTYwidths); VECTOR (FT2000_AMFMwidths, vFT2000_AMFMwidths); VECTOR (FT2000_US_60m, vFT2000_US_60m); modes_ = FT2000modes_; bandwidths_ = FT2000_SSBwidths; bw_vals_ = FT2000_wvals_SSBwidths; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = btnIFsh; rig_widgets[3].W = sldrIFSHIFT; rig_widgets[4].W = btnNotch; rig_widgets[5].W = sldrNOTCH; rig_widgets[6].W = sldrMICGAIN; rig_widgets[7].W = sldrPOWER; } RIG_FT2000::RIG_FT2000() { // base class values name_ = FT2000name_; modes_ = FT2000modes_; bandwidths_ = FT2000_SSBwidths; bw_vals_ = FT2000_wvals_SSBwidths; widgets = rig_widgets; serial_baudrate = BR4800; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 2; def_mode = 1; def_bw = 2; def_freq = 14070000ULL; has_band_selection = has_extras = has_smeter = has_power_out = has_power_control = has_volume_control = has_mode_control = has_noise_control = has_bandwidth_control = has_micgain_control = has_notch_control = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = has_cw_break_in = has_swr_control = has_idd_control = has_voltmeter = true; // derived specific notch_on = false; m_60m_indx = 0; precision = 10; ndigits = 7; } void RIG_FT2000::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; wait_char(';', 27, 100, "get band", ASC); set_trace(2, "get band", replystr.c_str()); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+21] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0].empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx > (int)Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } void RIG_FT2000::selectA() { cmd = "VS0;"; sendCommand(cmd); inuse = onA; } void RIG_FT2000::selectB() { cmd = "VS1;"; sendCommand(cmd); inuse = onB; } bool RIG_FT2000::check () { cmd = "FA;"; int ret = wait_char(';', 11, 100, "check", ASC); rig_trace(2, "check()", replystr.c_str()); if (ret >= 11) return true; return false; } unsigned long long RIG_FT2000::get_vfoA () { cmd = "FA;"; int ret = wait_char(';', 11, 100, "get vfoA", ASC); rig_trace(2, "get_vfoA()", replystr.c_str()); if (ret < 11) return freqA; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_FT2000::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd, 0); } unsigned long long RIG_FT2000::get_vfoB () { cmd = "FB;"; int ret = wait_char(';', 11, 100, "get vfoB", ASC); rig_trace(2, "get_vfoB()", replystr.c_str()); if (ret < 11) return freqB; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_FT2000::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd, 0); } int RIG_FT2000::get_smeter() { cmd = "SM0;"; int ret = wait_char(';', 7, 100, "get smeter", ASC); rig_trace(2, "get_smeter()", replystr.c_str()); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int mtr = atoi(&replystr[p + 3]); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FT2000::get_swr() { cmd = "RM6;"; int ret = wait_char(';', 7, 100, "get swr", ASC); rig_trace(2, "get_swr()", replystr.c_str()); if (ret < 7) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int mtr = atoi(&replystr[p + 3]); return mtr / 2.56; } int RIG_FT2000::get_power_out() { cmd = "RM5;"; int ret = wait_char(';', 7, 100, "get pwr out", ASC); rig_trace(2, "get_power_out()", replystr.c_str()); if (ret < 7) return 0; size_t p = replystr.rfind("RM"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; double mtr = (double)(atoi(&replystr[p + 3])); mtr = -6.6263535 + .11813178 * mtr + .0013607405 * mtr * mtr; return (int)mtr; } double RIG_FT2000::get_power_control() { cmd = "PC;"; int ret = wait_char(';', 6, 100, "get pwr ctl", ASC); rig_trace(2, "get_power_control()", replystr.c_str()); if (ret < 6) return 0; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; int mtr = atoi(&replystr[p + 2]); return mtr; } // Volume control return 0 ... 100 int RIG_FT2000::get_volume_control() { cmd = "AG0;"; int ret = wait_char(';', 7, 100, "get vol", ASC); rig_trace(2, "get_volume_control()", replystr.c_str()); if (ret < 7) return 0; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 6] = 0; int val = atoi(&replystr[p + 3]); return (int)(val / 2.55); } void RIG_FT2000::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd, 0); } // Transceiver power level void RIG_FT2000::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd, 0); } // Tranceiver PTT on/off void RIG_FT2000::set_PTT_control(int val) { if (val) sendCommand("TX1;", 0); else sendCommand("TX0;", 0); ptt_ = val; } int RIG_FT2000::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, 100, "get PTT", ASC); rig_trace(2, "get_PTT()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FT2000::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FT2000::get_tune() { cmd = rsp = "AC"; cmd += ';'; waitN(5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return !(val < 2); } int RIG_FT2000::next_attenuator() { switch(atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FT2000::set_attenuator(int val) { atten_level = val; switch (val) { case 1 : cmd = "RA01;"; break; case 2 : cmd = "RA02;"; break; case 3 : cmd = "RA03;"; break; case 0 : default : cmd = "RA00;"; } sendCommand(cmd, 0); } int RIG_FT2000::get_attenuator() { cmd = "RA0;"; int ret = wait_char(';', 5, 100, "get att", ASC); rig_trace(2, "get_attenuator()", replystr.c_str()); if (ret < 5) { return 0; } size_t p = replystr.rfind("RA"); if (p == std::string::npos) { atten_level = 0; return 0; } int reply = replystr[p + 3]; switch (reply) { case '1' : atten_level = 1; break; case '2' : atten_level = 2; break; case '3' : atten_level = 3; break; default : atten_level = 0; break; } return atten_level; } int RIG_FT2000::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FT2000::set_preamp(int val) { preamp_level = val; switch (preamp_level) { case 1 : cmd = "PA01;"; break; case 2 : cmd = "PA02;"; break; case 0 : default : cmd = "PA00;"; } sendCommand(cmd, 0); } int RIG_FT2000::get_preamp() { cmd = "PA0;"; int ret = wait_char(';', 5, 100, "get pre", ASC); rig_trace(2, "get_preamp()", replystr.c_str()); if (ret < 5) { preamp_level = 0; return 0; } size_t p = replystr.rfind("PA"); if (p == std::string::npos) { preamp_level = 0; return 0; } int reply = replystr[p + 3]; switch (reply) { case '1' : preamp_level = 1; break; case '2' : preamp_level = 2; break; case '0' : default : preamp_level = 0; } return preamp_level; } const char *RIG_FT2000::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FT2000::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "PRE"; } void RIG_FT2000::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FT2000_mode_chr[val]; cmd += ';'; sendCommand(cmd, 0); } int RIG_FT2000::get_modeA() { cmd = "MD0;"; int ret = wait_char(';', 5, 100, "get modeA", ASC); rig_trace(2, "get_modeA()", replystr.c_str()); if (ret < 5) return modeA; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return modeA; modeA = replystr[p + 3] - '1'; return modeA; } void RIG_FT2000::set_modeB(int val) { modeA = val; cmd = "MD1"; cmd += FT2000_mode_chr[val]; cmd += ';'; sendCommand(cmd, 0); } int RIG_FT2000::get_modeB() { cmd = "MD1;"; int ret = wait_char(';', 5, 100, "get modeB", ASC); rig_trace(2, "get_modeB()", replystr.c_str()); if (ret < 5) return modeB; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return modeB; modeB = replystr[p + 3] - '1'; return modeB; } int RIG_FT2000::adjust_bandwidth(int m) { switch (m) { case 0 : case 1 : bandwidths_ = FT2000_SSBwidths; bw_vals_ = FT2000_wvals_SSBwidths; bwA = 0; break; case 2 : case 6 : bandwidths_ = FT2000_CWwidths; bw_vals_ = FT2000_wvals_CWwidths; bwA = 0; break; case 5 : case 7 : case 8 : case 11 : bandwidths_ = FT2000_PKT_RTTYwidths; bw_vals_ = FT2000_wvals_PKT_RTTYwidths; bwA = 0; break; case 3 : case 4 : case 9 : case 10 : bandwidths_ = FT2000_AMFMwidths; bw_vals_ = FT2000_wvals_AMFMwidths; bwA = 0; break; } return bwA; } int RIG_FT2000::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FT2000::bwtable(int m) { switch (m) { case 0 : case 1 : return FT2000_SSBwidths; break; case 2 : case 6 : return FT2000_CWwidths; break; case 5 : case 7 : case 8 : case 11 : return FT2000_PKT_RTTYwidths; break; case 3 : case 4 : case 9 : case 10 : return FT2000_AMFMwidths; break; } return FT2000_SSBwidths; } void RIG_FT2000::set_bwA(int val) { bwA = val; if (val == 0) { sendCommand("NA00;", 0); return; } val--; switch (modeA) { //SSB case 0 : case 1 : cmd = "EX106"; if (val > 9) cmd += '1'; else cmd += '0'; val %= 10; cmd += val + '0'; cmd += ';'; sendCommand(cmd, 0); break; //CW case 2 : case 6 : cmd = "EX097"; if (val > 9) cmd += '1'; else cmd += '0'; val %= 10; cmd += val + '0'; cmd += ';'; sendCommand(cmd, 0); break; //PKT-RTTY case 5 : case 7 : case 8 : case 11 : cmd = "EX1030"; cmd += val + '0'; cmd += ';'; sendCommand(cmd, 0); break; //AM-FM case 3 : case 4 : case 9 : case 10 : break; } sendCommand("NA01;", 0); mode_bwA[modeA] = val; } int RIG_FT2000::get_bwA() { return bwA; } void RIG_FT2000::set_bwB(int val) { bwB = val; if (val == 0) { sendCommand("NA10;", 0); mode_bwA[modeA] = val; return; } val--; switch (modeA) { //SSB case 0 : case 1 : cmd = "EX106"; if (val > 9) cmd += '1'; else cmd += '0'; val %= 10; cmd += val + '0'; cmd += ';'; sendCommand(cmd, 0); break; //CW case 2 : case 6 : cmd = "EX097"; if (val > 9) cmd += '1'; else cmd += '0'; val %= 10; cmd += val + '0'; cmd += ';'; sendCommand(cmd, 0); break; //PKT-RTTY case 5 : case 7 : case 8 : case 11 : cmd = "EX1030"; cmd += val + '0'; cmd += ';'; sendCommand(cmd, 0); break; //AM-FM case 3 : case 4 : case 9 : case 10 : break; } sendCommand("NA11;", 0); mode_bwA[modeA] = val; } int RIG_FT2000::get_bwB() { return bwB; } std::string RIG_FT2000::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FT2000::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FT2000::get_modetype(int n) { return FT2000_mode_type[n]; } void RIG_FT2000::set_if_shift(int val) { cmd = "IS0+0000;"; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd, 0); } bool RIG_FT2000::get_if_shift(int &val) { static int oldval = 0; cmd = "IS0;"; int ret = wait_char(';', 9, 100, "get if shift", ASC); rig_trace(2, "get_if_shift()", replystr.c_str()); if (ret < 9) return false; size_t p = replystr.rfind("IS"); if (p == std::string::npos) return false; replystr[p + 8] = 0; val = atoi(&replystr[p + 3]); if (val != 0 || oldval != val) { oldval = val; return true; } oldval = val; return false; } void RIG_FT2000::get_if_min_max_step(int &min, int &max, int &step) { min = -1000; max = 1000; step = 100; } void RIG_FT2000::set_notch(bool on, int val) { cmd = "BP00000;"; if (on == false) { sendCommand(cmd, 0); notch_on = false; return; } if (!notch_on) { cmd[6] = '1'; // notch ON sendCommand(cmd, 0); cmd[6] = '0'; notch_on = true; } cmd[3] = '1'; // manual NOTCH position // set notch value offset by 200, ie: 001 -> 400 val = (-val / 9) + 200; if (val < 1) val = 1; if (val > 400) val = 400; for (int i = 3; i > 0; i--) { cmd[3 + i] += val % 10; val /=10; } sendCommand(cmd, 0); } bool RIG_FT2000::get_notch(int &val) { bool ison = false; cmd = "BP00;"; int ret = wait_char(';', 8, 100, "get notch", ASC); rig_trace(2, "get_notch()", replystr.c_str()); if (ret < 8) return ison; size_t p = replystr.rfind("BP"); if (p == std::string::npos) return ison; if (replystr[p + 6] == '1') { ison = true; cmd = "BP01;"; ret = wait_char(';', 8, 100, "get notch freq", ASC); rig_trace(2, "get_notch_val()", replystr.c_str()); if (ret < 8) return ison; p = replystr.rfind("BP"); if (p == std::string::npos) return ison; replystr[p + 7] = 0; val = atoi(&replystr[p + 4]); val -= 200; val *= -9; } return ison; } void RIG_FT2000::get_notch_min_max_step(int &min, int &max, int &step) { min = -1143; max = +1143; step = 9; } void RIG_FT2000::set_noise(bool b) { if (b) cmd = "NB01;"; else cmd = "NB00;"; sendCommand(cmd, 0); } // val 0 .. 100 void RIG_FT2000::set_mic_gain(int val) { cmd = "MG000;"; val = (int)(val * 2.50); for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); } int RIG_FT2000::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); rig_trace(2, "get_mic_gain()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); val = (int)(val / 2.50); if (val > 100) val = 100; return ceil(val); } void RIG_FT2000::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; 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; } double RIG_FT2000::get_voltmeter() { cmd = "RM8;"; std::string resp = "RM"; int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); wait_char(';',7, 100, "get vdd", ASC); gett("get_voltmeter"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = atoi(&replystr[p+3]); val = 10 * mtr / 170; return val; } return -1; } double RIG_FT2000::get_idd() { cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_idd"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 9 >= replystr.length()) return 0; replystr[6] = '\x00'; double mtr = atoi(&replystr[p+3]); return mtr / 10.0; } flrig-2.0.04/src/rigs/yaesu/FTdx101D.cxx0000664000175000017500000010756414502041135014433 00000000000000 // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FTdx101D.h" #include "debug.h" #include "support.h" enum mFTdx101D { mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPKT, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index static const char FTdx101Dname_[] = "FTdx101D"; #undef NUM_MODES #define NUM_MODES 15 static int defBW_narrow[NUM_MODES] = { // mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPKT, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index 6, 6, 9, 0, 0, 10, 9, 6, 10, 0, 0, 6, 0, 5, 0 }; static int defBW_wide[NUM_MODES] = { // mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPKT, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index 13, 13, 16, 0, 0, 10, 16, 17, 10, 0, 0, 17, 0, 9, 0 }; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFTdx101Dmodes_; static const char *vFTdx101Dmodes_[] = { "LSB", "USB", "CW-U", "FM", "AM", "RTTY-L", "CW-L", "DATA-L", "RTTY-U", "DATA-FM", "FM-N", "DATA-U", "AM-N", "PKT", "DATA-FMN"}; static const char FTdx101D_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; static const char FTdx101D_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U', 'U', 'U', 'U' }; static std::vectorFTdx101D_widths_SSB; static const char *vFTdx101D_widths_SSB[] = { "Default", "300", "400", "600", "850", "1100", "1200", "1500", "1650", "1800", "1950", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3200", "3500", "4000" }; static int FTdx101D_wvals_SSB[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, WVALS_LIMIT}; static std::vectorFTdx101D_widths_CW; static const char *vFTdx101D_widths_CW[] = { "Default", "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FTdx101D_wvals_CW[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, WVALS_LIMIT }; static std::vectorFTdx101D_widths_RTTY; static const char *vFTdx101D_widths_RTTY[] = { "Default", "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FTdx101D_wvals_RTTY[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, WVALS_LIMIT }; static std::vectorFTdx101D_widths_DATA; static const char *vFTdx101D_widths_DATA[] = { "Default", "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "600", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FTdx101D_wvals_PSK[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static const int FTdx101D_wvals_AMFM[] = { 0, WVALS_LIMIT }; static std::vectorFTdx101D_widths_AMwide; static const char *vFTdx101D_widths_AMwide[] = { "9000" }; static std::vectorFTdx101D_widths_AMnar; static const char *vFTdx101D_widths_AMnar[] = { "6000" }; static std::vectorFTdx101D_widths_FMnar; static const char *vFTdx101D_widths_FMnar[] = { "9000" }; static std::vectorFTdx101D_widths_FMwide; static const char *vFTdx101D_widths_FMwide[] = { "16000" }; static std::vectorFTdx101D_widths_DATA_FM; static const char *vFTdx101D_widths_DATA_FM[] = { "16000" }; static std::vectorFTdx101D_widths_DATA_FMN; static const char *vFTdx101D_widths_DATA_FMN[] = { "9000" }; static std::vectorFTdx101D_US_60m; static const char *vFTdx101D_US_60m[] = {"", "126", "127", "128", "130"}; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. // // UK has 7 60M presets. Using dummy numbers for all. If you want support, // Maybe someone can do a cat command MC; on all 7 presets and add returned numbers below. // static std::vectorFTdx101D_UK_60m = {"", "126", "127", "128", "130", "131", "132"}; static std::vector& Channels_60m = FTdx101D_US_60m; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FTdx101D::initialize() { VECTOR (FTdx101Dmodes_, vFTdx101Dmodes_); VECTOR (FTdx101D_widths_SSB, vFTdx101D_widths_SSB); VECTOR (FTdx101D_widths_CW, vFTdx101D_widths_CW); VECTOR (FTdx101D_widths_RTTY, vFTdx101D_widths_RTTY); VECTOR (FTdx101D_widths_DATA, vFTdx101D_widths_DATA); VECTOR (FTdx101D_widths_AMwide, vFTdx101D_widths_AMwide); VECTOR (FTdx101D_widths_AMnar, vFTdx101D_widths_AMnar); VECTOR (FTdx101D_widths_FMnar, vFTdx101D_widths_FMnar); VECTOR (FTdx101D_widths_FMwide, vFTdx101D_widths_FMwide); VECTOR (FTdx101D_widths_DATA_FM, vFTdx101D_widths_DATA_FM); VECTOR (FTdx101D_widths_DATA_FMN, vFTdx101D_widths_DATA_FMN); VECTOR (FTdx101D_US_60m, vFTdx101D_US_60m); modes_ = FTdx101Dmodes_; bandwidths_ = FTdx101D_widths_SSB; bw_vals_ = FTdx101D_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; cmd = "AI0;"; sendCommand(cmd); showresp(WARN, ASC, "Auto Info OFF", cmd, replystr); sett("Auto Info OFF"); } RIG_FTdx101D::RIG_FTdx101D() { // base class values IDstr = "ID"; name_ = FTdx101Dname_; modes_ = FTdx101Dmodes_; bandwidths_ = FTdx101D_widths_SSB; bw_vals_ = FTdx101D_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 0; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; notch_on = false; has_band_selection = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = // has_cw_spot_tone = // does not exist??? has_cw_qsk = has_cw_weight = has_cw_break_in = has_split_AB = can_change_alt_vfo = has_smeter = has_swr_control = has_alc_control = has_idd_control = has_voltmeter = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = has_xcvr_auto_on_off = can_synch_clock = true; // derived specific atten_level = 0; preamp_level = 0; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 8; } void RIG_FTdx101D::set_xcvr_auto_on() { // send dummy data request for ID (see pg 12 CAT reference book) cmd = "ID;"; sendCommand(cmd); // wait 1 to 2 seconds for (int i = 0; i < 1500; i += 100) { MilliSleep(100); update_progress(100 * i / 1500); Fl::awake(); } cmd = "PS1;"; sendCommand(cmd); // wait for power on status cmd = "PS;"; waitN(4, 500, "Xcvr ON?", ASC); } void RIG_FTdx101D::set_xcvr_auto_off() { cmd = "PS0;"; sendCommand(cmd); sett("set_xcvr_auto_off"); } void RIG_FTdx101D::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; wait_char(';', 28, 100, "get band", ASC); sett("get band"); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+22 ] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0].empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx > (int)Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } //static std::string Avfo = "FA014070000;"; //static std::string Bvfo = "FB007070000;"; bool RIG_FTdx101D::check () { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';', 12 , 100, "check", ASC); gett("check()"); if (ret >= 12) return true; return false; } unsigned long long RIG_FTdx101D::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';', 12, 100, "get vfo A", ASC); gett("get_vfoA()"); //replystr = Avfo; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 11; n++) f = f*10 + replystr[p+n] - '0'; freqA = f; return freqA; } void RIG_FTdx101D::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA000000000;"; for (int i = 10; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); sett("SET vfo A"); } unsigned long long RIG_FTdx101D::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';', 12, 100, "get vfo B", ASC); gett("get_vfoB()"); //replystr = Bvfo; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 11; n++) f = f*10 + replystr[p+n] - '0'; freqB = f; return freqB; } void RIG_FTdx101D::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB000000000;"; for (int i = 10; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); sett("SET vfo B"); } bool RIG_FTdx101D::twovfos() { return true; } void RIG_FTdx101D::selectA() { cmd = "FT2;FR01;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); sett("selectA()"); inuse = onA; } void RIG_FTdx101D::selectB() { cmd = "FT3;FR10;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); sett("selectB()"); inuse = onB; } void RIG_FTdx101D::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); sett("A2B()"); } bool RIG_FTdx101D::can_split() { return true; } void RIG_FTdx101D::set_split(bool val) { split = val; if (val) { cmd = "ST1;"; sendCommand(cmd); sett("Split ON"); } else { cmd = "ST0;"; sendCommand(cmd); sett("Split OFF"); } } int RIG_FTdx101D::get_split() { cmd = rsp = "ST"; cmd += ";"; wait_char(';', 4, 100, "Get split", ASC); gett("get split()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int split = replystr[p+2] - '0'; return (split > 0); } void RIG_FTdx101D::swapAB() { cmd = "SV;"; sendCommand(cmd); sett("swapAB()"); } int RIG_FTdx101D::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';', 7, 100, "get smeter", ASC); gett("get_smeter()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FTdx101D::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';', 10, 100, "get swr", ASC); gett("get_swr()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; replystr[p+6] = 0; int mtr = atoi(&replystr[p+3]); return mtr / 2.56; } struct pwrpair {int mtr; float pwr;}; int RIG_FTdx101D::get_power_out() { static pwrpair pwrtbl[] = { { 0, 0.0 }, { 27, 5.0 }, { 94, 25.0 }, {147, 50.0 }, {176, 75.0 }, {205,100.0 } }; cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';', 10, 100, "get pout", ASC); gett("get_power_out()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; replystr.erase(p, p + rsp.length()); replystr.erase(3); int mtr = atoi(replystr.c_str()); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 205) mtr = 205; int pwr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (pwr > 100) pwr = 100; return (int)pwr; } int RIG_FTdx101D::get_alc() { cmd = rsp = "RM4"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_alc"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 9 >= replystr.length()) return 0; replystr[6] = '\x00'; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } // Transceiver power level double RIG_FTdx101D::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';', 6, 100, "get power", ASC); gett("get_power_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FTdx101D::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); } // Volume control return 0 ... 100 int RIG_FTdx101D::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';', 7, 100, "get vol", ASC); gett("get_volume_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = atoi(&replystr[p+3]) * 100 / 250; if (val > 100) val = 100; return val; } void RIG_FTdx101D::set_volume_control(int val) { int ivol = (int)(val * 250 / 100); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); } // Tranceiver PTT on/off void RIG_FTdx101D::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; } int RIG_FTdx101D::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, 100, "get PTT", ASC); gett("get_PTT()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FTdx101D::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FTdx101D::get_tune() { cmd = rsp = "AC"; cmd += ';'; waitN(5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (replystr[p+4] == '0') return 0; return 1; } int RIG_FTdx101D::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FTdx101D::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); } int RIG_FTdx101D::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, 100, "get att", ASC); gett("get_attenuator()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FTdx101D::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FTdx101D::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); } int RIG_FTdx101D::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';', 5, 100, "get pre", ASC); gett("get_preamp()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FTdx101D::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FTdx101D::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } static bool narrow = 0; // 0 - wide, 1 - narrow int RIG_FTdx101D::adjust_bandwidth(int val) { int bw = 0; if (val == mCW_U || val == mCW_L) { bandwidths_ = FTdx101D_widths_CW; bw_vals_ = FTdx101D_wvals_CW; } else if (val == mFM || val == mAM || val == mFM_N || val == mDATA_FM || val == mAM_N) { if (val == mFM) bandwidths_ = FTdx101D_widths_FMwide; else if (val == mAM) bandwidths_ = FTdx101D_widths_AMwide; else if (val == mAM_N) bandwidths_ = FTdx101D_widths_AMnar; else if (val == mFM_N) bandwidths_ = FTdx101D_widths_FMnar; else if (val == mDATA_FM) bandwidths_ = FTdx101D_widths_DATA_FM; else if (val == mDATA_FMN) bandwidths_ = FTdx101D_widths_DATA_FMN; bw_vals_ = FTdx101D_wvals_AMFM; } else if (val == mRTTY_L || val == mRTTY_U) { // RTTY bandwidths_ = FTdx101D_widths_RTTY; bw_vals_ = FTdx101D_wvals_RTTY; } else if (val == mDATA_L || val == mDATA_U) { // PSK bandwidths_ = FTdx101D_widths_DATA; bw_vals_ = FTdx101D_wvals_PSK; } else { bandwidths_ = FTdx101D_widths_SSB; bw_vals_ = FTdx101D_wvals_SSB; } if (narrow) bw = defBW_narrow[val]; else bw = defBW_wide[val]; return bw; } int RIG_FTdx101D::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FTdx101D::bwtable(int n) { switch (n) { case mCW_U: case mCW_L: return FTdx101D_widths_CW; case mFM: return FTdx101D_widths_FMwide; case mAM: return FTdx101D_widths_AMwide; case mAM_N : return FTdx101D_widths_AMnar; case mRTTY_L: case mRTTY_U: return FTdx101D_widths_RTTY; case mDATA_L: case mDATA_U: return FTdx101D_widths_DATA; case mFM_N: return FTdx101D_widths_DATA_FMN; case mDATA_FM: return FTdx101D_widths_DATA_FM; default: ; } return FTdx101D_widths_SSB; } void RIG_FTdx101D::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FTdx101D_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); adjust_bandwidth(modeA); } int RIG_FTdx101D::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode A", ASC); gett("get_modeA()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; int n = 0; for (n = 0; n < NUM_MODES; n++) if (md == FTdx101D_mode_chr[n]) break; modeA = n; } } adjust_bandwidth(modeA); return modeA; } void RIG_FTdx101D::set_modeB(int val) { modeB = val; cmd = "MD1"; cmd += FTdx101D_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); adjust_bandwidth(modeA); } int RIG_FTdx101D::get_modeB() { cmd = rsp = "MD1"; cmd += ';'; wait_char(';', 5, 100, "get mode B", ASC); gett("get_modeB()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; int n = 0; for (n = 0; n < NUM_MODES; n++) if (md == FTdx101D_mode_chr[n]) break; modeB = n; } } adjust_bandwidth(modeB); return modeB; } void RIG_FTdx101D::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mDATA_FM ) { return; } if ((((modeA == mLSB || modeA == mUSB) && val < 9)) || ((modeA == mCW_U || modeA == mCW_L) && val < 10) || ((modeA == mRTTY_L || modeA == mRTTY_U) && val < 10) || ((modeA == mDATA_L || modeA == mDATA_U) && val < 10)) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH00"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); mode_bwA[modeA] = val; } int RIG_FTdx101D::get_bwA() { if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mDATA_FM) { bwA = 0; mode_bwA[modeA] = bwA; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 7, 100, "get bw A", ASC); gett("get_bwA()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; replystr[p+6] = 0; int bw_idx = fm_decimal(replystr.substr(p+4), 2); if (bw_idx == 0) { cmd = rsp = "NA0"; cmd += ';'; wait_char(';', 5, 100, "get narrow", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) return mode_bwA[modeA] = bwA; narrow = (replystr[3] == '1'); bwA = adjust_bandwidth(modeA); mode_bwA[modeA] = bwA; return bwA; } const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; mode_bwA[modeA] = bwA; return bwA; } void RIG_FTdx101D::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mDATA_FM) { mode_bwB[modeB] = 0; return; } if ((((modeB == mLSB || modeB == mUSB) && val < 8)) || ((modeB == mCW_U || modeB == mCW_L) && val < 10) || ((modeB == mRTTY_L || modeB == mRTTY_U) && val < 10) || ((modeB == mDATA_L || modeB == mDATA_U) && val < 10)) cmd = "NA11;"; else cmd = "NA10;"; cmd.append("SH10"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); mode_bwB[modeB] = bwB; showresp(WARN, ASC, "SET bw B", cmd, replystr); } int RIG_FTdx101D::get_bwB() { if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mDATA_FM) { bwB = 0; mode_bwB[modeB] = bwB; return bwB; } cmd = rsp = "SH1"; cmd += ';'; wait_char(';', 7, 100, "get bw B", ASC); gett("get_bwB()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; replystr[p+6] = 0; int bw_idx = fm_decimal(replystr.substr(p+4),2); if (bw_idx == 0) { cmd = rsp = "NA1"; cmd += ';'; wait_char(';', 5, 100, "get narrow", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) return mode_bwB[modeB] = bwB; narrow = (replystr[3] == 1); bwB = adjust_bandwidth(modeB); mode_bwB[modeB] = bwB; return bwB; } const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FTdx101D::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FTdx101D::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FTdx101D::get_modetype(int n) { return FTdx101D_mode_type[n]; } void RIG_FTdx101D::set_if_shift(int val) { if (inuse == onB) cmd = "IS10+0000;"; else cmd = "IS00+0000;"; if (val != 0) progStatus.shift = true; else progStatus.shift = false; if (val < 0) cmd[4] = '-'; val = abs(val); for (int i = 8; i > 4; i--) { cmd[i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); } bool RIG_FTdx101D::get_if_shift(int &val) { if (inuse == onB) cmd = rsp = "IS1"; else cmd = rsp = "IS0"; cmd += ';'; wait_char(';', 10, 100, "get if shift", ASC); gett("get_if_shift()"); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+5]); if (replystr[p+4] == '-') val = -val; return (val != 0); } void RIG_FTdx101D::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1200; if_shift_max = max = 1200; if_shift_step = step = 20; if_shift_mid = 0; } void RIG_FTdx101D::set_notch(bool on, int val) { if (on && !notch_on) { notch_on = true; if (inuse == onB) cmd = "BP10001;"; else cmd = "BP00001;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); if (inuse == onB) cmd = "BP11000;"; else cmd = "BP01000;"; val /= 10; for (int n = 6; n > 3; n--) { cmd[n] = val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET notch freq", cmd, replystr); } else if (!on && notch_on) { notch_on = false; if (inuse == onB) cmd = "BP10000;"; else cmd = "BP00000;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch off", cmd, replystr); return; } } bool RIG_FTdx101D::get_notch(int &val) { bool ison = false; if (inuse == onB) cmd = rsp = "BP10"; else cmd = rsp = "BP00"; cmd += ';'; wait_char(';', 8, 100, "get notch on/off", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; gett("get_notch()"); if (replystr[p+6] == '1') // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; wait_char(';', 8, 100, "get notch val", ASC); gett("get_notch_val()"); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; return (notch_on = ison); } void RIG_FTdx101D::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3200; step = 10; } void RIG_FTdx101D::set_auto_notch(int v) { if (inuse == onB) cmd = "BC10;"; else cmd = "BC00;"; if (v) cmd[3] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET auto notch", cmd, replystr); } int RIG_FTdx101D::get_auto_notch() { if (inuse == onB) cmd = "BC1;"; else cmd = "BC0;"; wait_char(';', 5, 100, "get auto notch", ASC); gett("get_auto_notch()"); size_t p = replystr.rfind("BC"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } int FTdx101D_blanker_level = 0; void RIG_FTdx101D::set_noise(bool b) { if (inuse == onB) cmd = "NB10;"; else cmd = "NB00;"; if (b) { cmd[3] = '1'; nb_label("NB on", true); } else nb_label("NB", false); sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); } int RIG_FTdx101D::get_noise() { if (inuse == onB) cmd = rsp = "NB1"; else cmd = rsp = "NB0"; cmd += ';'; wait_char(';', 5, 100, "get NB", ASC); gett("get_noise()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return FTdx101D_blanker_level; FTdx101D_blanker_level = replystr[p+3] - '0'; if (FTdx101D_blanker_level) { nb_label("NB on", true); } else nb_label("NB", false); return FTdx101D_blanker_level; } // val 0 .. 100 void RIG_FTdx101D::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); } int RIG_FTdx101D::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); gett("get_mic_gain()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); return val; } void RIG_FTdx101D::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx101D::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = val * 250 / 100; for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); } int RIG_FTdx101D::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, 100, "get rfgain", ASC); gett("get_rf_gain()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = rfval * 100 / 250; if (rfval > 100) rfval = 100; return rfval; } void RIG_FTdx101D::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx101D::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); } void RIG_FTdx101D::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FTdx101D::set_vox_anti() { } void RIG_FTdx101D::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FTdx101D::set_vox_on_dataport() { cmd = "EX0304050;"; if (progStatus.vox_on_dataport) cmd[8] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); } void RIG_FTdx101D::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FTdx101D::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FTdx101D::set_cw_spot() { if (vfo->imode == 2 || vfo->imode == 6) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FTdx101D::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX020205").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FTdx101D::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX0202116").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); 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; } // --------------------------------------------------------------------- // set date and time // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_FTdx101D::sync_date(char *dt) { cmd.assign("DT0"); cmd.append(dt); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_date", cmd, replystr); sett("sync_date"); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_FTdx101D::sync_clock(char *tm) { cmd.assign("DT1"); cmd += tm[0]; cmd += tm[1]; cmd += tm[3]; cmd += tm[4]; cmd += tm[6]; cmd += tm[7]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_time", cmd, replystr); sett("sync_time"); } double RIG_FTdx101D::get_voltmeter() { // RM8155000; cmd = "RM8;"; std::string resp = "RM"; int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); wait_char(';',10, 100, "get vdd", ASC); gett("get_voltmeter"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { replystr[6] = 0; mtr = atoi(&replystr[p+3]); val = 0.066 * mtr + 0.78; return val; } return -1; } double RIG_FTdx101D::get_idd() { cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_idd"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 9 >= replystr.length()) return 0; replystr[6] = '\x00'; double mtr = atoi(&replystr[p+3]); return mtr / 10.0; } //====================================================================== // FTdx101MP //====================================================================== static const char FTdx101MPname_[] = "FTdx101MP"; RIG_FTdx101MP::RIG_FTdx101MP() { // base class values IDstr = "ID"; name_ = FTdx101MPname_; } int RIG_FTdx101MP::get_power_out() { static pwrpair pwrtbl[] = { { 32, 10.0 }, { 53, 20.0 }, { 80, 40.0 }, { 97, 60.0 }, {119, 80.0 }, {137, 100.0 }, {154, 120.0 }, {167, 140.0 }, {177, 160.0 }, {188, 180.0 }, {197, 200.0 } }; cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';', 7, 100, "get pout", ASC); gett("get_power_out()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; replystr.erase(p, p + rsp.length()); replystr.erase(3); int mtr = atoi(replystr.c_str()); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 197) mtr = 197; int pwr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (pwr > 200) pwr = 200; return (int)pwr; } double RIG_FTdx101MP::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';', 6, 100, "get power", ASC); gett("get_power_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FTdx101MP::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); } double RIG_FTdx101MP::get_voltmeter() { // RM8155000; cmd = "RM8;"; std::string resp = "RM"; int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); wait_char(';',10, 100, "get vdd", ASC); gett("get_voltmeter"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { replystr[6] = 0; mtr = atoi(&replystr[p+3]); val = 50 * mtr / 196; if (val < 47) val = 47; if (val > 52) val = 52; return val; } return -1; } flrig-2.0.04/src/rigs/yaesu/FT817BB.cxx0000664000175000017500000002155414502041135014207 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // this uses an undocumented CAT READ command which // reads but does not set the byte located at 0x0055 in the xcvr EEPROM // bit 7 set == Vfo A/B in use, unset == Memory operation // bit 0 set == Vfo A, unset == Vfo B #include #include #include "yaesu/FT817BB.h" #include "rigpanel.h" static const char FT817BBname_[] = "FT-817BB"; static std::vectorFT817BBmodes_; static const char *vFT817BBmodes_[] = { "LSB", "USB", "CW", "CW-R", "AM", "FM", "DIG", "PKT"}; static const int FT817BB_mode_val[] = { 0, 1, 2, 3, 4, 8, 0x0A, 0x0C }; static const char FT817BB_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U' }; /* PARAMETER DEFAULT SUGGESTED ========= ======= ========= Retries 2 4 Timeout 50 50 Cmds 5 10 Poll int 200 333 Byte int 0 1 */ RIG_FT817BB::RIG_FT817BB() { // base class values name_ = FT817BBname_; modes_ = FT817BBmodes_; serial_baudrate = BR4800; stopbits = 2; serial_retries = 4; serial_write_delay = 1; serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; has_split = has_split_AB = has_swr_control = has_alc_control = has_getvfoAorB = has_smeter = has_power_out = has_ptt_control = has_mode_control = true; precision = 10; ndigits = 8; inuse = onNIL; } static void settle(int n) { for (int i = 0; i < n/50; i++) {MilliSleep(50); Fl::awake();} } void RIG_FT817BB::initialize() { VECTOR(FT817BBmodes_, vFT817BBmodes_); modes_ = FT817BBmodes_; } void RIG_FT817BB::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; MilliSleep(5); } static bool ft817BB_memory_mode = false; void memory_label(void *) { if (ft817BB_memory_mode) labelMEMORY->show(); else labelMEMORY->hide(); } int ab = 0; int RIG_FT817BB::get_vfoAorB() { init_cmd(); cmd[1] = 0x55; cmd[4] = 0xBB; getr("get_vfoAorB()"); int ret = waitN(2, 100, "get A/B", HEX); int i = 0; while (ret != 2 && i++ < 10) { ret = waitN(2, 100, "get A/B", HEX); } if (i == 10) { return inuse; } getthex("get A/B"); int tbyte = replystr[0] & 0xFF; ft817BB_memory_mode = ( (tbyte & 0x80) == 0x00); Fl::awake(memory_label); tbyte &= 0x01; if (tbyte == 0x01) inuse = onB; else inuse = onA; get_trace(2, (inuse ? "vfoB" : "vfoA"), " in use"); return inuse; } void RIG_FT817BB::selectA() { setr("selectA()"); if (inuse == onA) return; init_cmd(); cmd[4] = 0x81; sendCommand(cmd); setr("cmd: selectA()"); get_vfoAorB(); } void RIG_FT817BB::selectB() { setr("selectB()"); if (inuse == onB) return; init_cmd(); cmd[4] = 0x81; sendCommand(cmd); setr("cmd selectB()"); get_vfoAorB(); } bool RIG_FT817BB::check () { get_vfoAorB(); if (inuse == onNIL) return false; return true; } unsigned long long RIG_FT817BB::get_vfoA () { if (inuse == onB) return freqA; init_cmd(); cmd[4] = 0x03; int ret = 0; int repeat = 5; do { ret = waitN(5, 100, "get vfoA"); getthex("get_vfoA"); MilliSleep(100); } while (ret < 5 && repeat--); if (ret < 5) { gett("get vfoA FAILED"); return freqA; } freqA = fm_bcd(replystr, 8) * 10; int mode = (replystr[4] & 0x0F); int i = 0; for (; i < 8; i++) if (FT817BB_mode_val[i] == mode) { modeA = i; break; } static char msg[50]; snprintf(msg, sizeof(msg), "get vfoA: %llu, %s", freqA, FT817BBmodes_[i].c_str()); getr(msg); return freqA; } void RIG_FT817BB::set_vfoA (unsigned long long freq) { if (inuse == onB || ft817BB_memory_mode) return; freq /=10; // 817 does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; sendCommand(cmd); settle(150); setthex("set_vfoA"); } int RIG_FT817BB::get_modeA() { return modeA; } int RIG_FT817BB::get_modetype(int n) { return FT817BB_mode_type[n]; } void RIG_FT817BB::set_modeA(int val) { if (inuse == onB || ft817BB_memory_mode) return; init_cmd(); cmd[0] = FT817BB_mode_val[val]; cmd[4] = 0x07; sendCommand(cmd); setthex("set_modeA"); settle(150); get_vfoA(); int n = 0; while (modeA != val && n++ < 10) { MilliSleep(50); get_vfoB(); } if (n == 10) LOG_ERROR("set_modeA failed"); } // VFO B =============================================================== unsigned long long RIG_FT817BB::get_vfoB () { if (inuse == onA) return freqB; init_cmd(); cmd[4] = 0x03; int ret = 0; int repeat = 5; do { ret = waitN(5, 100, "get vfoB"); getthex("get_vfoB"); MilliSleep(100); } while (ret < 5 && repeat--); if (ret < 5) { gett("get vfoB FAILED"); return freqB; } freqB = fm_bcd(replystr, 8) * 10; int mode = (replystr[4] & 0x0F); int i = 0; for ( ; i < 8; i++ ) if (FT817BB_mode_val[i] == mode) { modeB = i; break; } static char msg[50]; snprintf(msg, sizeof(msg), "get vfoB: %llu, %s", freqB, FT817BBmodes_[i].c_str()); getr(msg); return freqB; } void RIG_FT817BB::set_vfoB (unsigned long long freq) { if (inuse == onA || ft817BB_memory_mode) return; freqB = freq; freq /=10; // 817BB does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; sendCommand(cmd); settle(150); setthex("set_vfoB"); } int RIG_FT817BB::get_modeB() { return modeB; } void RIG_FT817BB::set_modeB(int val) { if (inuse == onA || ft817BB_memory_mode) return; init_cmd(); cmd[0] = FT817BB_mode_val[val]; cmd[4] = 0x07; sendCommand(cmd); setthex("set_modeB"); settle(150); get_vfoB(); int n = 0; while (modeB != val && n++ < 10) { MilliSleep(50); get_vfoB(); } if (n == 10) LOG_ERROR("set_modeB failed"); } //====================================================================== // Tranceiver PTT on/off void RIG_FT817BB::set_PTT_control(int val) { init_cmd(); if (val) cmd[4] = 0x08; else cmd[4] = 0x88; sendCommand(cmd); setthex("set_PTT_control"); ptt_ = val; } // mapping for smeter and power out static int smeter_map[] = { 0, 7, 13, 19, 25, 30, 35, 40, 45, 50, 55, 61, 68, 77, 88, 100 }; // power out is scaled by 10 to allow display on flrig power scales static int pmeter_map[] = { 0, 5, 7, 10, 17, 25, 33, 41, 50 }; //0, 0.5, 0.75, 1.0, 1.7, 2.5, 3.3, 4.1, 5.0 static int swr_map[] = { 0, 4, 8, 13, 25, 37, 60, 70, 80, 90, 100, 100, 100, 100, 100, 100}; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 static int alc_map[] = { 0, 20, 40, 60, 80, 100, 100, 100, 100, 100, 100, 100, 100, 100}; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 static int swr; static int alc; // uses undocumented command 0xBD // returns two bytes b0 b1 // b0 PWR|SWR // b1 ALC|MOD int RIG_FT817BB::get_power_out() { init_cmd(); cmd[4] = 0xBD; int ret = waitN(2, 100, "get PWR/SWR/ALC"); getthex("get_power_out"); if (ret != 2) return 0; int fwdpwr = (replystr[0] & 0xF0) >> 4; swr = (replystr[1] & 0xF0) >> 4; alc = (replystr[0] & 0x0F); if (fwdpwr > 8) fwdpwr = 8; if (fwdpwr < 0) fwdpwr = 0; return pmeter_map[fwdpwr]; } int RIG_FT817BB::get_swr() { return swr_map[swr]; } int RIG_FT817BB::get_alc() { return alc_map[alc]; } int RIG_FT817BB::get_smeter() { init_cmd(); cmd[4] = 0xE7; int ret = waitN(1, 100, "get smeter"); getthex("get_smeter"); if (!ret) return 0; int sval = replystr[0] & 0x0F; if (sval < 0) sval = 0; if (sval > 15) sval = 15; return smeter_map[sval]; } void RIG_FT817BB::set_split(bool val) { init_cmd(); if (val) cmd[4] = 0x02; else cmd[4] = 0x82; split = val; sendCommand(cmd); setthex("set_split"); return; } extern bool PTT; int RIG_FT817BB::get_split() { init_cmd(); if (PTT) { cmd[4] = 0xF7; // get transmit status int ret = waitN(1, 100, "get TX status"); getthex("get_split"); if (ret != 0) split = (replystr[0] & 0x20) == 0x20; return split; } // read eeprom address 007A cmd[1] = 0x7A; cmd[4] = 0xBB; int ret = waitN(1, 100, "get eeprom @ 007A"); getthex("get eeprom data @ 007A"); if (ret != 0) split = ((replystr[0] & 0x80) == 0x80); return split; } int RIG_FT817BB::power_scale() { return 10; } flrig-2.0.04/src/rigs/yaesu/FTdx10.cxx0000664000175000017500000010720614502041135014237 00000000000000 // ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // comment out for distribution //#define TESTING 1 #include #include #include "yaesu/FTdx10.h" #include "debug.h" #include "support.h" enum mFTdx10 { mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPSK, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index static const char FTdx10name_[] = "FTdx10"; #undef NUM_MODES #define NUM_MODES 15 static int defBW_narrow[NUM_MODES] = { // mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPSK, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index 6, 6, 9, 0, 0, 10, 9, 6, 10, 0, 0, 6, 0, 5, 0 }; static int defBW_wide[NUM_MODES] = { // mLSB, mUSB, mCW_U, mFM, mAM, mRTTY_L, mCW_L, mDATA_L, mRTTY_U, mDATA_FM, mFM_N, mDATA_U, mAM_N, mPSK, mDATA_FMN }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 // mode index 13, 13, 16, 0, 0, 10, 16, 17, 10, 0, 0, 17, 0, 9, 0 }; static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFTdx10modes_; static const char *vFTdx10modes_[] = { "LSB", "USB", "CW-U", "FM", "AM", "RTTY-L", "CW-L", "DATA-L", "RTTY-U", "DATA-FM", "FM-N", "DATA-U", "AM-N", "PSK", "DATA-FMN"}; static const char FTdx10_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; static const char FTdx10_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U', 'U', 'U', 'U' }; static std::vectorFTdx10_widths_SSB; static const char *vFTdx10_widths_SSB[] = { //"Default", // default width for mode "300", "400", "600", "850", "1100", // 1 ... 5 "1200", "1500", "1650", "1800", "1950", // 6 ... 10 "2100", "2250", "2400", "2450", "2500", // 7 ... 15 "2600", "2700", "2800", "2900", "3000", // 16 ... 20 "3200", "3500", "4000" }; // 21 ... 23 static int FTdx10_wvals_SSB[] = { //0, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, WVALS_LIMIT}; static std::vectorFTdx10_widths_CW; static const char *vFTdx10_widths_CW[] = { //"Default", // default for mode "50", "100", "150", "200", "250", // 1 ... 5 "300", "350", "400", "450", "500", // 6 ... 10 "600", "800", "1200", "1400", "1700", // 11 ... 15 "2000", "2400", "3000" }; // 16 ... 18 static int FTdx10_wvals_CW[] = { //0, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, WVALS_LIMIT }; static std::vectorFTdx10_widths_RTTY; static const char *vFTdx10_widths_RTTY[] = { //"Default", // default for mode "50", "100", "150", "200", "250", // 1 ... 5 "300", "350", "400", "450", "500", // 6 ... 10 "600", "800", "1200", "1400", "1700", // 11 ... 15 "2000", "2400", "3000" }; // 16 ... 18 static int FTdx10_wvals_RTTY[] = { //0, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, WVALS_LIMIT }; static std::vectorFTdx10_widths_DATA; static const char *vFTdx10_widths_DATA[] = { //"Default", // default for mode "50", "100", "150", "200", "250", // 1 ... 5 "300", "350", "400", "450", "500", // 6 ... 10 "600", "800", "1200", "1400", "1700", // 11 ... 15 "2000", "2400", "3000" }; // 16 ... 18 static int FTdx10_wvals_PSK[] = { //0, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, WVALS_LIMIT }; static const int FTdx10_wvals_AMFM[] = { 0, WVALS_LIMIT }; static std::vectorFTdx10_widths_AMwide; static const char *vFTdx10_widths_AMwide[] = { "9000" }; static std::vectorFTdx10_widths_AMnar; static const char *vFTdx10_widths_AMnar[] = { "6000" }; static std::vectorFTdx10_widths_FMnar; static const char *vFTdx10_widths_FMnar[] = { "9000" }; static std::vectorFTdx10_widths_FMwide; static const char *vFTdx10_widths_FMwide[] = { "16000" }; static std::vectorFTdx10_widths_DATA_FM; static const char *vFTdx10_widths_DATA_FM[] = { "16000" }; static std::vectorFTdx10_widths_DATA_FMN; static const char *vFTdx10_widths_DATA_FMN[] = { "9000" }; static std::vectorFTdx10_US_60m; static const char *vFTdx10_US_60m[] = {"", "126", "127", "128", "130"}; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. // // UK has 7 60M presets. Using dummy numbers for all. If you want support, // Maybe someone can do a cat command MC; on all 7 presets and add returned numbers below. // static std::vectorFTdx10_UK_60m = {"", "126", "127", "128", "130", "131", "132"}; static std::vector& Channels_60m = FTdx10_US_60m; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FTdx10::initialize() { VECTOR (FTdx10modes_, vFTdx10modes_); VECTOR (FTdx10_widths_SSB, vFTdx10_widths_SSB); VECTOR (FTdx10_widths_CW, vFTdx10_widths_CW); VECTOR (FTdx10_widths_RTTY, vFTdx10_widths_RTTY); VECTOR (FTdx10_widths_DATA, vFTdx10_widths_DATA); VECTOR (FTdx10_widths_AMwide, vFTdx10_widths_AMwide); VECTOR (FTdx10_widths_AMnar, vFTdx10_widths_AMnar); VECTOR (FTdx10_widths_FMnar, vFTdx10_widths_FMnar); VECTOR (FTdx10_widths_FMwide, vFTdx10_widths_FMwide); VECTOR (FTdx10_widths_DATA_FM, vFTdx10_widths_DATA_FM); VECTOR (FTdx10_widths_DATA_FMN, vFTdx10_widths_DATA_FMN); VECTOR (FTdx10_US_60m, vFTdx10_US_60m); modes_ = FTdx10modes_; bandwidths_ = FTdx10_widths_SSB; bw_vals_ = FTdx10_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; rig_widgets[9].W = btnNR; rig_widgets[10].W = sldrNR; return; cmd = "AI0;"; sendCommand(cmd); showresp(WARN, ASC, "Auto Info OFF", cmd, replystr); sett("Auto Info OFF"); set_cw_spot(); get_vfoAorB(); } RIG_FTdx10::RIG_FTdx10() { // base class values IDstr = "ID"; name_ = FTdx10name_; modes_ = FTdx10modes_; bandwidths_ = FTdx10_widths_SSB; bw_vals_ = FTdx10_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 0; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; notch_on = false; has_band_selection = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = // has_cw_spot_tone = // does not exist??? has_cw_qsk = has_cw_weight = has_cw_break_in = has_split = can_change_alt_vfo = has_smeter = has_swr_control = has_alc_control = has_idd_control = has_voltmeter = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_noise_reduction = has_noise_reduction_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = has_xcvr_auto_on_off = true; // derived specific atten_level = 0; preamp_level = 0; notch_on = false; m_60m_indx = 0; inuse = onA; can_synch_clock = true; precision = 1; ndigits = 8; } void RIG_FTdx10::set_xcvr_auto_on() { cmd = "ID;"; wait_char(';', 7 , 100, "check", ASC); //std::cout << "check: " << replystr << std::endl; if (replystr.find("ID") != std::string::npos) return; //std::cout << "Xcvr not ON ... power ON cycle" << std::endl; // wait 1.2 seconds for (int i = 0; i < 12; i++) { MilliSleep(100); update_progress(i * 10); Fl::awake(); } cmd = "PS1;"; // std::cout << "power ON" << std::endl; RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); update_progress(0); // wait 7 seconds // std::cout << "wait 10 seconds" << std::endl; for (int i = 0; i < 140; i++) { MilliSleep(50); update_progress(i); Fl::awake(); } update_progress(0); // std::cout << "restart serial port" << std::endl; RigSerial->OpenPort(); cmd = "PS;"; wait_char(';', 4, 100, "closed/reopened port", ASC); if (replystr.find("PS1;") == std::string::npos) { // std::cout << "Reply to reopen port: " << replystr << std::endl; exit(3); } return; } void RIG_FTdx10::set_xcvr_auto_off() { cmd = "PS0;"; sendCommand(cmd); sett("set_xcvr_auto_off"); } void RIG_FTdx10::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; wait_char(';', 28, 100, "get band", ASC); sett("get band"); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+22 ] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0].empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx > (int)Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } //static std::string Avfo = "FA014070000;"; //static std::string Bvfo = "FB007070000;"; bool RIG_FTdx10::check () { #ifdef TESTING return true; #endif cmd = "ID;"; wait_char(';', 7 , 500, "check", ASC); //std::cout << "check: " << replystr << std::endl; if (replystr.find("ID") == std::string::npos) return false; return true; } unsigned long long RIG_FTdx10::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';', 12, 100, "get vfo A", ASC); gett("get_vfoA()"); //replystr = "XXXFA014025500;"; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; char scolon = 0; int n = sscanf(&replystr[p + 2], "%lld%c", &f, &scolon); if (n == 2) freqA = f; return freqA; } void RIG_FTdx10::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA000000000;"; for (int i = 10; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); sett("SET vfo A"); } unsigned long long RIG_FTdx10::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';', 12, 100, "get vfo B", ASC); gett("get_vfoB()"); // replystr = "YYYYYFB7300000;"; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; char scolon = 0; int n = sscanf(&replystr[p + 2], "%lld%c", &f, &scolon); if (n == 2) freqB = f; return freqB; } void RIG_FTdx10::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB000000000;"; for (int i = 10; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); sett("SET vfo B"); } bool RIG_FTdx10::twovfos() { return true; } int RIG_FTdx10::get_vfoAorB() { cmd = "VS;"; rsp = "VS"; wait_char(';', 4, 100, "get vfoAorB()", ASC); gett("get vfoAorB()"); size_t p = replystr.rfind(rsp); // inuse = onA; if (p != std::string::npos) inuse = (replystr[p + 2] == '1') ? onB : onA; return inuse; } void RIG_FTdx10::selectA() { cmd = "VS0;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); sett("selectA()"); inuse = onA; } void RIG_FTdx10::selectB() { cmd = "VS1;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); sett("selectB()"); inuse = onB; } void RIG_FTdx10::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); sett("A2B()"); } bool RIG_FTdx10::can_split() { return true; } void RIG_FTdx10::set_split(bool val) { split = val; if (val) { cmd = "ST1;"; sendCommand(cmd); sett("Split ON"); } else { cmd = "ST0;"; sendCommand(cmd); sett("Split OFF"); } } int RIG_FTdx10::get_split() { cmd = rsp = "FT"; cmd += ";"; wait_char(';', 4, 100, "Get split", ASC); gett("get split()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int split = replystr[p+2] - '0'; return (split > 0); } void RIG_FTdx10::swapAB() { cmd = "SV;"; sendCommand(cmd); sett("swapAB()"); } int RIG_FTdx10::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';', 7, 100, "get smeter", ASC); gett("get_smeter()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int mtr = atoi(replystr.substr(p + 3, 3).c_str()); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FTdx10::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';', 10, 100, "get swr", ASC); gett("get_swr()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int mtr = atoi(replystr.substr(p + 3, 3).c_str()); return mtr / 2.56; } struct pwrpair {int mtr; float pwr;}; int RIG_FTdx10::get_power_out() { static pwrpair pwrtbl[] = { { 35, 5.0 }, { 94, 25.0 }, {147, 50.0 }, {176, 75.0 }, {205,100.0 } }; cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';', 7, 100, "get pout", ASC); gett("get_power_out()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int mtr = atoi(replystr.substr(p + 3, 3).c_str()); size_t i = 0; for (i = 0; i < sizeof(pwrtbl) / sizeof(pwrpair) - 1; i++) if (mtr >= pwrtbl[i].mtr && mtr < pwrtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 205) mtr = 205; double pwr = (int)ceil(pwrtbl[i].pwr + (pwrtbl[i+1].pwr - pwrtbl[i].pwr)*(mtr - pwrtbl[i].mtr) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr)); if (pwr > 100) pwr = 100; return pwr; } int RIG_FTdx10::get_alc() { cmd = rsp = "RM4"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_alc"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int mtr = atoi(replystr.substr(p + 3, 3).c_str()); return (int)ceil(mtr / 2.56); } struct mtrpair {int mtr; float val;}; double RIG_FTdx10::get_idd() { static mtrpair iddtbl[] = { { 52, 5.0 }, { 70, 7.0 }, { 96, 10.0 }, { 116, 12.0 }, { 125, 13.0 }, { 134, 14.0 }, { 143, 15.0 }, { 152, 16.0 }, { 161, 17.0 }, { 171, 18.0 }, { 191, 20.0 } }; cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_idd"); int mtr = 0, dmy = 0; double idd = 0; size_t p = replystr.rfind("RM7"); if (p != std::string::npos) { sscanf(&replystr[p], "RM7%3d%3d", &mtr, &dmy); size_t i = 0; for (i = 0; i < sizeof(iddtbl) / sizeof(mtrpair) - 1; i++) if (mtr >= iddtbl[i].mtr && mtr < iddtbl[i+1].mtr) break; if (mtr < 0) mtr = 0; if (mtr > 191) mtr = 191; idd = iddtbl[i].val + (iddtbl[i+1].val - iddtbl[i].val)*(mtr - iddtbl[i].mtr) / (iddtbl[i+1].mtr - iddtbl[i].mtr); if (idd > 25) idd = 25; } return idd; } double RIG_FTdx10::get_voltmeter() { cmd = "RM8;"; std::string resp = "RM"; get_trace(1, "get_voltmeter()"); wait_char(';',10, 100, "get vdd", ASC); gett("get_voltmeter"); int mtr = 0, dmy = 0; double val = 0; size_t p = replystr.rfind("RM8"); if (p != std::string::npos) { sscanf(&replystr[p], "RM8%3d%3d", &mtr, &dmy); val = 13.8 * mtr / 190; return val; } return -1; } // Transceiver power level double RIG_FTdx10::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';', 6, 100, "get power", ASC); gett("get_power_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FTdx10::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); } // Volume control return 0 ... 100 int RIG_FTdx10::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';', 7, 100, "get vol", ASC); gett("get_volume_control()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = atoi(&replystr[p+3]) * 100 / 250; if (val > 100) val = 100; return val; } void RIG_FTdx10::set_volume_control(int val) { int ivol = (int)(val * 250 / 100); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); } // Tranceiver PTT on/off void RIG_FTdx10::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; } int RIG_FTdx10::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, 100, "get PTT", ASC); gett("get_PTT()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FTdx10::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FTdx10::get_tune() { cmd = rsp = "AC"; cmd += ';'; wait_char(';', 5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (replystr[p+4] == '0') return 0; return 1; } int RIG_FTdx10::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FTdx10::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); } int RIG_FTdx10::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, 100, "get att", ASC); gett("get_attenuator()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FTdx10::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FTdx10::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); } int RIG_FTdx10::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';', 5, 100, "get pre", ASC); gett("get_preamp()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FTdx10::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FTdx10::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } static bool narrow = 0; // 0 - wide, 1 - narrow int RIG_FTdx10::adjust_bandwidth(int val) { int bw = 0; if (val == mCW_U || val == mCW_L) { bandwidths_ = FTdx10_widths_CW; bw_vals_ = FTdx10_wvals_CW; } else if (val == mFM || val == mAM || val == mFM_N || val == mDATA_FM || val == mAM_N) { if (val == mFM) bandwidths_ = FTdx10_widths_FMwide; else if (val == mAM) bandwidths_ = FTdx10_widths_AMwide; else if (val == mAM_N) bandwidths_ = FTdx10_widths_AMnar; else if (val == mFM_N) bandwidths_ = FTdx10_widths_FMnar; else if (val == mDATA_FM) bandwidths_ = FTdx10_widths_DATA_FM; else if (val == mDATA_FMN) bandwidths_ = FTdx10_widths_DATA_FMN; bw_vals_ = FTdx10_wvals_AMFM; } else if (val == mRTTY_L || val == mRTTY_U) { // RTTY bandwidths_ = FTdx10_widths_RTTY; bw_vals_ = FTdx10_wvals_RTTY; } else if (val == mDATA_L || val == mDATA_U) { // PSK bandwidths_ = FTdx10_widths_DATA; bw_vals_ = FTdx10_wvals_PSK; } else { bandwidths_ = FTdx10_widths_SSB; bw_vals_ = FTdx10_wvals_SSB; } if (narrow) bw = defBW_narrow[val]; else bw = defBW_wide[val]; return bw; } int RIG_FTdx10::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FTdx10::bwtable(int n) { switch (n) { case mCW_U: case mCW_L: return FTdx10_widths_CW; case mFM: return FTdx10_widths_FMwide; case mAM: return FTdx10_widths_AMwide; case mAM_N : return FTdx10_widths_AMnar; case mRTTY_L: case mRTTY_U: return FTdx10_widths_RTTY; case mDATA_L: case mDATA_U: return FTdx10_widths_DATA; case mFM_N: return FTdx10_widths_DATA_FMN; case mDATA_FM: return FTdx10_widths_DATA_FM; default: ; } return FTdx10_widths_SSB; } void RIG_FTdx10::set_modeA(int val) { modeA = val; if (inuse == onB) cmd = rsp = "MD1"; else cmd = rsp = "MD0"; cmd += FTdx10_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); adjust_bandwidth(modeA); } int RIG_FTdx10::get_modeA() { if (inuse == onB) cmd = rsp = "MD1"; else cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode A", ASC); gett("get_modeA()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; int n = 0; for (n = 0; n < NUM_MODES; n++) if (md == FTdx10_mode_chr[n]) break; modeA = n; } } adjust_bandwidth(modeA); return modeA; } void RIG_FTdx10::set_modeB(int val) { modeB = val; if (inuse == onA) cmd = rsp = "MD1"; else cmd = rsp = "MD0"; cmd += FTdx10_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); adjust_bandwidth(modeA); } int RIG_FTdx10::get_modeB() { if (inuse == onA) cmd = rsp = "MD1"; else cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode B", ASC); gett("get_modeB()"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; int n = 0; for (n = 0; n < NUM_MODES; n++) if (md == FTdx10_mode_chr[n]) break; modeB = n; } } adjust_bandwidth(modeB); return modeB; } void RIG_FTdx10::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mDATA_FM ) { return; } cmd.clear(); cmd.append("SH00"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); sett("SET bwA"); mode_bwA[modeA] = val; } int RIG_FTdx10::get_bwA() { if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mDATA_FM) { bwA = 0; mode_bwA[modeA] = bwA; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 7, 100, "get bw A", ASC); gett("get_bwA()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; replystr[p+6] = 0; int bw_idx = fm_decimal(replystr.substr(p+4), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i = 0; bwA = i; mode_bwA[modeA] = bwA; return bwA; } void RIG_FTdx10::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mDATA_FM) { mode_bwB[modeB] = 0; return; } cmd.clear(); cmd.append("SH00"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw B", cmd, replystr); sett("SET bwB"); mode_bwB[modeB] = bwB; } int RIG_FTdx10::get_bwB() { if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mDATA_FM) { bwB = 0; mode_bwB[modeB] = bwB; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 7, 100, "get bw B", ASC); gett("get_bwB()"); size_t p = replystr.rfind(rsp); p = replystr.find(rsp); if (p == std::string::npos) return bwB; replystr[p+6] = 0; int bw_idx = fm_decimal(replystr.substr(p+4),2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i = 0; bwB = i; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FTdx10::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FTdx10::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FTdx10::get_modetype(int n) { return FTdx10_mode_type[n]; } void RIG_FTdx10::set_if_shift(int val) { if (inuse == onB) cmd = "IS10+0000;"; else cmd = "IS00+0000;"; if (val != 0) progStatus.shift = true; else progStatus.shift = false; if (val < 0) cmd[4] = '-'; val = abs(val); for (int i = 8; i > 4; i--) { cmd[i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); } bool RIG_FTdx10::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';', 10, 100, "get if shift", ASC); gett("get_if_shift()"); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+5]); if (replystr[p+4] == '-') val = -val; return (val != 0); } void RIG_FTdx10::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1200; if_shift_max = max = 1200; if_shift_step = step = 20; if_shift_mid = 0; } /* BPabcde; a: Fixed, '0' b: Manual NOTCH ON/OFF, 1/0 cde: 001 - 320, (NOTCH Frequency : x 10 Hz ) */ static std::string notch_str_on = "BP00001;"; static std::string notch_str_off = "BP00000;"; static std::string notch_str_val = "BP01000;"; static int notch_val = 1500; void RIG_FTdx10::set_notch(bool on, int val) { if (notch_val != val) { cmd = notch_str_on; sendCommand(cmd); showresp(WARN, ASC, "SET notch ON", cmd, replystr); set_trace(3,"set_notch ON", cmd.c_str(), replystr.c_str()); // set notch frequency notch_val = val; val /= 10; for (int i = 0; i < 3; i++) { notch_str_val[6 - i] = '0' + (val % 10); val /= 10; } cmd = notch_str_val; // set notch ON sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); set_trace(3,"set_notch val", cmd.c_str(), replystr.c_str()); } if (on) cmd = notch_str_on; else cmd = notch_str_off; sendCommand(cmd); set_trace(3,"set_notch OFF", cmd.c_str(), replystr.c_str()); showresp(WARN, ASC, "SET notch OFF", cmd, replystr); } bool RIG_FTdx10::get_notch(int &val) { bool ison = false; cmd = "BP00;"; rsp = "BP"; wait_char(';', 8, 100, "get notch on/off", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; gett("get_notch()"); if (replystr[p+6] == '1') // manual notch enabled ison = true; val = progStatus.notch_val; cmd = "BP01;"; rsp = "BP"; wait_char(';', 8, 100, "get notch val", ASC); gett("get_notch_val()"); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; return (notch_on = ison); } void RIG_FTdx10::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3200; step = 10; } void RIG_FTdx10::set_auto_notch(int v) { if (inuse == onB) cmd = "BC10;"; else cmd = "BC00;"; if (v) cmd[3] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET auto notch", cmd, replystr); } int RIG_FTdx10::get_auto_notch() { cmd = "BC0;"; wait_char(';', 5, 100, "get auto notch", ASC); gett("get_auto_notch()"); size_t p = replystr.rfind("BC"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } int FTdx10_blanker_level = 0; void RIG_FTdx10::set_noise(bool b) { if (inuse == onB) cmd = "NB10;"; else cmd = "NB00;"; if (b) { cmd[3] = '1'; nb_label("NB on", true); } else nb_label("NB", false); sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); } int RIG_FTdx10::get_noise() { cmd = rsp = "NB0"; cmd += ';'; wait_char(';', 5, 100, "get NB", ASC); gett("get_noise()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return FTdx10_blanker_level; FTdx10_blanker_level = replystr[p+3] - '0'; if (FTdx10_blanker_level) { nb_label("NB on", true); } else nb_label("NB", false); return FTdx10_blanker_level; } // val 0 .. 100 void RIG_FTdx10::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); } int RIG_FTdx10::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); gett("get_mic_gain()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); return val; } void RIG_FTdx10::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx10::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = val * 250 / 100; for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); } int RIG_FTdx10::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, 100, "get rfgain", ASC); gett("get_rf_gain()"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = rfval * 100 / 250; if (rfval > 100) rfval = 100; return rfval; } void RIG_FTdx10::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx10::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); } void RIG_FTdx10::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FTdx10::set_vox_anti() { } void RIG_FTdx10::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FTdx10::set_vox_on_dataport() { cmd = "EX0304050;"; if (progStatus.vox_on_dataport) cmd[8] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); } void RIG_FTdx10::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FTdx10::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FTdx10::set_cw_spot() { if (vfo->imode == 2 || vfo->imode == 6) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FTdx10::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX020205").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FTdx10::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX0202116").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); } void RIG_FTdx10::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_FTdx10::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; } // DNR void RIG_FTdx10::set_noise_reduction_val(int val) { cmd.assign("RL0").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, replystr); sett("set_noise_reduction_val"); } int RIG_FTdx10::get_noise_reduction_val() { int val = 1; cmd = rsp = "RL0"; cmd.append(";"); wait_char(';',6, 100, "GET noise reduction val", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = atoi(&replystr[p+3]); return val; } // DNR void RIG_FTdx10::set_noise_reduction(int val) { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET noise reduction", cmd, replystr); sett("set_noise_reduction_on/off"); } int RIG_FTdx10::get_noise_reduction() { int val; cmd = rsp = "NR0"; cmd.append(";"); wait_char(';',5, 100, "GET noise reduction", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; val = replystr[p+3] - '0'; return val; } // --------------------------------------------------------------------- // set date and time // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_FTdx10::sync_date(char *dt) { cmd.assign("DT0"); cmd.append(dt); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_date", cmd, replystr); sett("sync_date"); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_FTdx10::sync_clock(char *tm) { cmd.assign("DT1"); cmd += tm[0]; cmd += tm[1]; cmd += tm[3]; cmd += tm[4]; cmd += tm[6]; cmd += tm[7]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_time", cmd, replystr); sett("sync_time"); } flrig-2.0.04/src/rigs/yaesu/FT990.cxx0000664000175000017500000002271214502041135014002 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT990.h" #include "rig.h" static const char FT990name_[] = "FT-990"; enum { FT990_LSB, FT990_USB, FT990_CW1, FT990_CW2, FT990_AM1, FT990_AM2, FT990_FM1, FT990_FM2, FT990_TTYL, FT990_TTYU, FT990_PKTL, FT990_PKTU }; static std::vectorFT990modes_; static const char *vFT990modes_[] = { "LSB", "USB", "CW2.4", "CW500", "AM6.0", "AM2.4", "FM(1)", "FM(2)", "RTTY(L)", "RTTY(U)", "PKT(L)", "PKT(FM)" }; static const int FT990_def_bw[] = { 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0 }; static const int FT990_mode_val[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; static const char FT990_mode_type[] = { 'L', 'U', 'L', 'L', 'U', 'U', 'U', 'U', 'L', 'U', 'L', 'U' }; static std::vectorFT990widths_; static const char *vFT990widths_[] = { "2400", "2000", "500", "250"}; static int FT990_bw_vals[] = { 0,1,2,3,WVALS_LIMIT}; static const int FT990_bw_val[] = { 0, 1, 2, 3, 4 }; RIG_FT990::RIG_FT990() { name_ = FT990name_; modes_ = FT990modes_; bandwidths_ = FT990widths_; bw_vals_ = FT990_bw_vals; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 50; serial_post_write_delay = 5; serial_timeout = 100; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; afreq = bfreq = A.freq = B.freq = 14070000ULL; amode = bmode = A.imode = B.imode = 1; aBW = bBW = A.iBW = B.iBW = 2; precision = 10; ndigits = 9; has_split = has_split_AB = has_get_info = has_smeter = has_power_out = has_swr_control = has_mode_control = has_bandwidth_control = has_getvfoAorB = has_ptt_control = has_tune_control = true; } int RIG_FT990::adjust_bandwidth(int m) { if (m == 0 || m == 1 || m == 5) return 2; if (m == 2 || m == 3 ) return 1; if (m == 4 || m == 6 || m == 7) return 3; return 2; } void RIG_FT990::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; replystr.clear(); } void RIG_FT990::initialize() { VECTOR (FT990modes_, vFT990modes_); VECTOR (FT990widths_, vFT990widths_); modes_ = FT990modes_; bandwidths_ = FT990widths_; bw_vals_ = FT990_bw_vals; } void RIG_FT990::selectA() { init_cmd(); cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select A", cmd, replystr); setthex("select A"); inuse = onA; } void RIG_FT990::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select B", cmd, replystr); setthex("select B"); inuse = onB; } void RIG_FT990::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) showresp(WARN, HEX, "set split ON", cmd, replystr); else showresp(WARN, HEX, "set split OFF", cmd, replystr); setthex("set split On/OFF"); } bool RIG_FT990::check() { init_cmd(); cmd[3] = 0x00; cmd[4] = 0xFA; int ret = waitN(5, 100, "check", HEX); if (ret >= 5) return true; return false; } int RIG_FT990::get_vfoAorB() { bool memmode = false; int vfobmode = onA; init_cmd(); cmd[3] = 0x00; cmd[4] = 0xFA; int ret = waitN(5, 100, "Read flags", HEX); getthex("read flags"); if (ret >= 5) { size_t p = ret - 5; memmode = ((replystr[p+1] & 0x10) == 0x10); vfobmode = ((replystr[p] & 0x02) == 0x02) ? onB : onA; if (memmode) return inuse; inuse = vfobmode; } return inuse; } bool RIG_FT990::get_info() { int pmode, pbw; init_cmd(); cmd[3] = 0x03; // read 32 bytes of data for status of both vfos cmd[4] = 0x10; int ret = waitN(32, 100, "get info", ASC); getthex("Get info"); if (ret >= 32) { size_t da = ret - 32; size_t db = ret - 16; // vfo A data std::string A.freq = (replystr[da + 1] & 0xFF); A.freq <<= 8; A.freq += (replystr[da + 2]) & 0xFF; A.freq <<= 8; A.freq += (replystr[da + 3] & 0xFF); A.freq *= 10; int rmode = replystr[da + 7] & 0x07; switch (rmode) { case 0 : pmode = 0; break; // LSB case 1 : pmode = 1; break; // USB case 2 : pmode = 2; break; // CW case 3 : pmode = 5; break; // AM case 4 : pmode = 6; break; // FM case 5 : pmode = 8; break; // RTTY case 6 : pmode = 9; break; // PKT default : pmode = 1; break; } int rpbw = replystr[da + 8]; pbw = rpbw & 0x05; if (pbw > 4) pbw = 4; if ((rpbw & 0x80) == 0x80) { if (pmode == 10) pmode = 11; if (pmode == 8) pmode = 9; } if (pmode == 6) pbw = 0; A.imode = pmode; A.iBW = pbw; // vfo B data std::string B.freq = (replystr[db + 1] & 0xFF); B.freq <<= 8; B.freq += (replystr[db + 2]) & 0xFF; B.freq <<= 8; B.freq += (replystr[db + 3] & 0xFF); B.freq *= 10; rmode = replystr[db + 7] & 0x07; switch (rmode) { case 0 : pmode = 0; break; // LSB case 1 : pmode = 1; break; // USB case 2 : pmode = 2; break; // CW case 3 : pmode = 5; break; // AM case 4 : pmode = 6; break; // FM case 5 : pmode = 8; break; // RTTY case 6 : pmode = 9; break; // PKT default : pmode = 1; break; } rpbw = replystr[db + 8]; pbw = rpbw & 0x05; if (pbw > 4) pbw = 4; if ((rpbw & 0x80) == 0x80) { if (pmode == 10) pmode = 11; if (pmode == 8) pmode = 9; } if (pmode == 6) pbw = 0; B.imode = pmode; B.iBW = pbw; return true; } return false; } unsigned long long RIG_FT990::get_vfoA () { return A.freq; } void RIG_FT990::set_vfoA (unsigned long long freq) { int current_vfo = inuse; if (current_vfo == onB) selectA(); A.freq = freq; freq /=10; cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set freq A", cmd, replystr); setthex("Set freq A"); if (current_vfo == onB) selectB(); } int RIG_FT990::get_modeA() { return A.imode; } void RIG_FT990::set_modeA(int val) { int current_vfo = inuse; if (current_vfo == onB) selectA(); A.imode = val; init_cmd(); cmd[3] = FT990_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode A", cmd, replystr); setthex("set mode A"); if (current_vfo == onB) selectB(); } void RIG_FT990::set_bwA (int val) { int current_vfo = inuse; if (current_vfo == onB) selectA(); A.iBW = val; init_cmd(); cmd[3] = FT990_bw_val[val]; cmd[4] = 0x8C; sendCommand(cmd); showresp(WARN, HEX, "set BW A", cmd, replystr); setthex("set BW A"); if (current_vfo == onB) selectB(); } int RIG_FT990::get_bwA() { return A.iBW; } unsigned long long RIG_FT990::get_vfoB() { return B.freq; } void RIG_FT990::set_vfoB(unsigned long long freq) { int current_vfo = inuse; if (current_vfo == onA) selectB(); B.freq = freq; freq /=10; cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set freq B", cmd, replystr); setthex("Set freq B"); if (current_vfo == onA) selectA(); } void RIG_FT990::set_modeB(int val) { int current_vfo = inuse; if (current_vfo == onA) selectB(); B.imode = val; init_cmd(); cmd[3] = FT990_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode B", cmd, replystr); setthex("set mode B"); if (current_vfo == onA) selectA(); } int RIG_FT990::get_modeB() { return B.imode; } void RIG_FT990::set_bwB(int val) { int current_vfo = inuse; if (current_vfo == onA) selectB(); B.iBW = val; init_cmd(); cmd[3] = FT990_bw_val[val]; cmd[4] = 0x8C; sendCommand(cmd); showresp(WARN, HEX, "set bw B", cmd, replystr); setthex("set BW B"); if (current_vfo == onA) selectA(); } int RIG_FT990::get_bwB() { return B.iBW; } int RIG_FT990::def_bandwidth(int m) { return FT990_def_bw[m]; } // Tranceiver PTT on/off void RIG_FT990::set_PTT_control(int val) { init_cmd(); if (val) cmd[3] = 1; cmd[4] = 0x0F; sendCommand(cmd); if (val) showresp(WARN, HEX, "set PTT ON", cmd, replystr); else showresp(WARN, HEX, "set PTT OFF", cmd, replystr); ptt_ = val; setthex("set PTT On/Off"); } void RIG_FT990::tune_rig(int) { init_cmd(); cmd[4] = 0x82; // initiate tuner cycle sendCommand(cmd,0); setthex("Tune xcvr"); } int RIG_FT990::get_smeter() { float val = 0; init_cmd(); //cmd[0] = 0x00; cmd[4] = 0xF7; int ret = waitN(5, 100, "get smeter", HEX); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]); if (val <= 15) val = 5; else if (val <=154) val = 5 + 80 * (val - 15) / (154 - 15); else val = 50 + 50 * (val - 154.0) / (255.0 - 154.0); char szmeter[5]; snprintf(szmeter, sizeof(szmeter), "%d", (int)val); get_trace(3, "Smeter", str2hex(replystr.c_str(), 1), szmeter); return (int)val; } int RIG_FT990::get_swr() { return 0; } int RIG_FT990::get_power_out() { init_cmd(); cmd[4] = 0xF7; int ret = waitN(5, 100, "Power out", HEX); getthex("get power out"); if (ret < 5) return 0; int sval = (unsigned char)replystr[0]; if (sval < 90) sval = 90; if (sval > 200) sval = 200; if (sval < 120) sval = 250 - 5 * sval / 3; else sval = 125 - 5 * sval / 8; return sval; } flrig-2.0.04/src/rigs/yaesu/FT817.cxx0000664000175000017500000001627714502041135014011 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FT817.h" #include "rigpanel.h" //============================================================================= // FT817 //============================================================================= static const char FT817name_[] = "FT-817"; static std::vectorFT817modes_; static const char *vFT817modes_[] = { "LSB", "USB", "CW", "CW-R", "AM", "FM", "DIG", "PKT"}; static const int FT817_mode_val[] = { 0, 1, 2, 3, 4, 8, 0x0A, 0x0C }; static const char FT817_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U' }; RIG_FT817::RIG_FT817() { name_ = FT817name_; modes_ = FT817modes_; serial_baudrate = BR4800; stopbits = 2; serial_retries = 4; serial_write_delay = 1; serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; has_split = has_split_AB = has_swr_control = has_alc_control = has_smeter = has_power_out = has_ptt_control = has_mode_control = true; precision = 10; ndigits = 8; inuse = onNIL; } void RIG_FT817::initialize() { VECTOR(FT817modes_, vFT817modes_); modes_ = FT817modes_; } void RIG_FT817::init_cmd() { cmd = "00000"; replystr = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = replystr[i] = 0; MilliSleep(5); // Needed for the old slow '817 } void RIG_FT817::selectA() { if (inuse == onA) return; init_cmd(); cmd[4] = 0x81; sendCommand(cmd); inuse = onA; get_vfoA(); } void RIG_FT817::selectB() { if (inuse == onB) return; init_cmd(); cmd[4] = 0x81; sendCommand(cmd); inuse = onB; get_vfoB(); } bool RIG_FT817::check () { return true; } unsigned long long RIG_FT817::get_vfoA() { if (inuse == onB) return freqA; init_cmd(); cmd[4] = 0x03; int ret = 0; int repeat = 5; do { ret = waitN(5, 100, "get vfoA", HEX); getthex("get_vfoA"); MilliSleep(100); } while (ret < 5 && repeat--); if (ret < 5) { gett("get vfoA FAILED"); return freqA; } freqA = fm_bcd(replystr, 8) * 10; int mode = (replystr[4] & 0x0F); int i = 0; for (; i < 8; i++) if (FT817_mode_val[i] == mode) { modeA = i; break; } static char msg[50]; snprintf(msg, sizeof(msg), "get vfoA: %llu, %s", freqA, FT817modes_[i].c_str()); getr(msg); return freqA; } void RIG_FT817::set_vfoA (unsigned long long freq) { freqA = freq; freq /=10; // 817 does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; sendCommand(cmd); setthex("set_vfoA"); } int RIG_FT817::get_modeA() { return modeA; } int RIG_FT817::get_modetype(int n) { return FT817_mode_type[n]; } void RIG_FT817::set_modeA(int val) { init_cmd(); cmd[0] = FT817_mode_val[val]; cmd[4] = 0x07; sendCommand(cmd); setthex("set_modeA"); get_vfoA(); int n = 0; while (modeA != val && n++ < 10) { MilliSleep(50); get_vfoA(); } if (n == 10) LOG_ERROR("set_modeA failed"); } // VFO B =============================================================== unsigned long long RIG_FT817::get_vfoB () { if (inuse == onA) return freqB; init_cmd(); cmd[4] = 0x03; int ret = 0; int repeat = 5; do { ret = waitN(5, 100, "get vfoB", HEX); getthex("get_vfoB"); MilliSleep(100); } while (ret < 5 && repeat--); if (ret < 5) { gett("get vfoB FAILED"); return freqB; } freqB = fm_bcd(replystr, 8) * 10; int mode = (replystr[4] & 0x0F); int i = 0; for ( ; i < 8; i++ ) if (FT817_mode_val[i] == mode) { modeB = i; break; } static char msg[50]; snprintf(msg, sizeof(msg), "get vfoB: %llu, %s", freqB, FT817modes_[i].c_str()); getr(msg); return freqB; } void RIG_FT817::set_vfoB (unsigned long long freq) { freqB = freq; freq /=10; // 817 does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; sendCommand(cmd); setthex("set_vfoB"); } int RIG_FT817::get_modeB() { return modeB; } void RIG_FT817::set_modeB(int val) { init_cmd(); cmd[0] = FT817_mode_val[val]; cmd[4] = 0x07; sendCommand(cmd); setthex("set_modeB"); get_vfoB(); int n = 0; while (modeB != val && n++ < 10) { MilliSleep(50); get_vfoB(); } if (n == 10) LOG_ERROR("set_modeB failed"); } //====================================================================== // Tranceiver PTT on/off void RIG_FT817::set_PTT_control(int val) { init_cmd(); if (val) cmd[4] = 0x08; else cmd[4] = 0x88; sendCommand(cmd); setthex("set_PTT_control"); ptt_ = val; } // mapping for smeter and power out static int smeter_map[] = { 0, 7, 13, 19, 25, 30, 35, 40, 45, 50, 55, 61, 68, 77, 88, 100 }; // power out is scaled by 10 to allow display on flrig power scales static int pmeter_map[] = { 0, 5, 7, 10, 17, 25, 33, 41, 50 }; //0, 0.5, 0.75, 1.0, 1.7, 2.5, 3.3, 4.1, 5.0 static int swr_map[] = { 0, 4, 8, 13, 25, 37, 60, 70, 80, 90, 100, 100, 100, 100, 100, 100}; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 static int alc_map[] = { 0, 20, 40, 60, 80, 100, 100, 100, 100, 100, 100, 100, 100, 100}; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 static int swr; static int alc; // uses undocumented command 0xBD // returns two bytes b0 b1 // b0 PWR|SWR // b1 ALC|MOD int RIG_FT817::get_power_out() { init_cmd(); cmd[4] = 0xBD; int ret = waitN(2, 100, "get PWR/SWR/ALC", HEX); getthex("get_power_out"); if (ret < 2) return 0; int fwdpwr = (replystr[0] & 0xF0) >> 4; swr = (replystr[1] & 0xF0) >> 4; alc = (replystr[0] & 0x0F); if (fwdpwr > 8) fwdpwr = 8; if (fwdpwr < 0) fwdpwr = 0; return pmeter_map[fwdpwr]; } int RIG_FT817::get_swr() { return swr_map[swr]; } int RIG_FT817::get_alc() { return alc_map[alc]; } int RIG_FT817::get_smeter() { init_cmd(); cmd[4] = 0xE7; int ret = waitN(1, 100, "get smeter", HEX); getthex("get_smeter"); if (!ret) return 0; int sval = replystr[0] & 0x0F; if (sval < 0) sval = 0; if (sval > 15) sval = 15; return smeter_map[sval]; } void RIG_FT817::set_split(bool val) { init_cmd(); if (val) cmd[4] = 0x02; else cmd[4] = 0x82; split = val; sendCommand(cmd); setthex("set_split"); return; } extern bool PTT; int RIG_FT817::get_split() { if (!PTT) return split; init_cmd(); cmd[4] = 0xF7; // get transmit status int ret = waitN(1, 100, "get TX status", HEX); getthex("get_split"); if (ret == 0) return 0; split = (replystr[0] & 0x20) == 0x20; return split; } int RIG_FT817::power_scale() { return 10; } flrig-2.0.04/src/rigs/yaesu/FT757GX2.cxx0000664000175000017500000001450614502041135014326 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // Michael Keitz, KD4QDM // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // with this program. If not, see . // ---------------------------------------------------------------------------- // // Functions supported by this driver: // Read VFO A and B frequencies and mode. Mode may be different in each VFO. // Read which VFO is controlling the on-air frequency. This properly follows the transmit during split operation. // Select VFO A or B. This must be done before entering a frequency // Enter frequency or mode into a VFO. There are two routines for this but only work if the target VFO is active. // Read / set split mode. // Read S meter (receiving only). The radio does not digitize the power meter during transmit. // #include #include #include "debug.h" #include "util.h" #include "yaesu/FT757GX2.h" static const char FT757GX2name_[] = "FT-757GX2"; static std::vectorFT757GX2modes_; static const char *vFT757GX2modes_[] = { "LSB", "USB", "CW", "CWN", "AM", "FM"}; static const char FT757GX2_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'U' }; RIG_FT757GX2::RIG_FT757GX2() { // base class values name_ = FT757GX2name_; modes_ = FT757GX2modes_; serial_baudrate = BR4800; stopbits = 2; serial_retries = 3; // UI: "Retry intvl" serial_write_delay = 50; serial_post_write_delay = 5; serial_timeout = 200; serloop_timing = 500; // UI: "Poll Interval" serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = true; serial_dtrptt = false; modeA = 1; bwA = 0; has_split = true; has_split_AB = false; has_getvfoAorB = true; has_get_info = true; has_ptt_control = false; has_mode_control = true; has_smeter = true; precision = 10; ndigits = 8; }; void RIG_FT757GX2::initialize() { VECTOR(FT757GX2modes_, vFT757GX2modes_); modes_ = FT757GX2modes_; } void RIG_FT757GX2::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT757GX2::selectA() { init_cmd(); cmd[3] = 0x00; cmd[4] = 0x05; sendCommand(cmd); showresp(INFO, HEX, "select A", cmd, replystr); inuse = onA; } void RIG_FT757GX2::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); showresp(INFO, HEX, "select B", cmd, replystr); inuse = onB; } int RIG_FT757GX2::get_vfoAorB() { return inuse; } void RIG_FT757GX2::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) showresp(INFO, HEX, "set split ON", cmd, replystr); else showresp(INFO, HEX, "set split OFF", cmd, replystr); } int RIG_FT757GX2::get_split() { return split; } bool RIG_FT757GX2::check() { init_cmd(); cmd[3] = 0x01; // dummy poll the S-meter, see if rig responds. cmd[4] = 0x10; int ret = waitN(1, 100, "check", HEX); if (ret >= 1) return true; return false; } int RIG_FT757GX2::get_smeter() { // return value of this routine should be 0 to 100. // the radio outputs 10 with no signal and 0 with full signal. int meter; init_cmd(); cmd[3] = 0x01; // Poll the S-meter, should return one byte. cmd[4] = 0x10; int ret = waitN(1, 100, "S meter", HEX); if (ret >= 1) { meter = (int)(replystr[0] & 0x0f); if (meter > 10) meter = 10; return 100 - (meter * 10); } return -1; } bool RIG_FT757GX2::get_info() { init_cmd(); cmd[4] = 0x10; // Returns 75 bytes; we only care about the first 20 int ret = waitN(75, 250, "get info", HEX); // 75 bytes at 4800-8-N-2 takes at least 172 ms. showresp(DEBUG, HEX, "get info", cmd, replystr); if (ret >= 20) { // returned frequency is same as set freq -- 4 bytes packed BCD 10 Hz resolution. A.freq = fm_bcd_be(replystr.substr(10), 8) * 10; A.imode = replystr[14]; B.freq = fm_bcd_be(replystr.substr(15), 8) * 10; B.imode = replystr[19]; // not sure if needed to support legacy API? freqA = A.freq; freqB = B.freq; modeA = A.imode; modeB = B.imode; // parse the radio status flags. (we also get dial lock, clarifier, M/VFO, Ham/Gen, and Scan Mode) split = (replystr[0] & 0x02) ? 1 : 0; inuse = (replystr[0] & 0x08) ? 1 : 0; // VFO B or A selected? // CAT cannot initiate PTT on the FT757GX2, but it can poll if rig is in TX mode. // But Do not set ptt_ It causes flrig to stop polling when PTT (ptt_) goes active. // ptt_ = (replystr[0] & 0x20) ? 1 : 0; return true; } return false; } unsigned long long RIG_FT757GX2::get_vfoA () { return A.freq; } void RIG_FT757GX2::set_vfoA (unsigned long long freq) { if (inuse) return; // B is in use, don't set it. A.freq = freq; freq /=10; // set with 10 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x0A; // SET FREQUENCY (This will load the active VFO-- either A or B) SLOG_INFO("cmd: %s", str2hex(cmd.c_str(), cmd.length())); sendCommand(cmd); } int RIG_FT757GX2::get_modeA() { return A.imode; } void RIG_FT757GX2::set_modeA(int val) { if (inuse) return; // B in use, don't set. A.imode = val; init_cmd(); cmd[3] = val; cmd[4] = 0x0C; // MODESEL -- affects active VFO SLOG_INFO("cmd: %s", str2hex(cmd.c_str(), cmd.length())); sendCommand(cmd); } unsigned long long RIG_FT757GX2::get_vfoB () { return B.freq; } void RIG_FT757GX2::set_vfoB (unsigned long long freq) { if (!inuse) return; // inuse = A, so don't set. B.freq = freq; freq /=10; cmd = to_bcd_be(freq, 8); cmd += 0x0A; // SET FREQUENCY SLOG_INFO("cmd: %s", str2hex(cmd.c_str(), cmd.length())); sendCommand(cmd); } int RIG_FT757GX2::get_modeB() { return B.imode; } void RIG_FT757GX2::set_modeB(int val) { if (!inuse) return; B.imode = val; init_cmd(); cmd[3] = val; cmd[4] = 0x0C; // MODESEL SLOG_INFO("cmd: %s", str2hex(cmd.c_str(), cmd.length())); sendCommand(cmd); } flrig-2.0.04/src/rigs/yaesu/FT736R.cxx0000664000175000017500000001242514502041135014122 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014-2020 // David Freese, W1HKJ // David Baxter, G0WBX // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include "yaesu/FT736R.h" // transceiver DOES NOT return any operating parameters other than // S-meter // ( and Squelch status. *** G0WBX ) static const char FT736Rname_[] = "FT-736R"; static std::vectorFT736Rmodes_; static const char *vFT736Rmodes_[] = { "LSB", "USB", "CW", "CW-N", "FM", "FM-N"}; static const int FT736Rmode_val_[] = { 0x00, 0x01, 0x02, 0x82, 0x08, 0x88 }; static const char FT736R_mode_type[] = { 'L', 'U', 'L', 'L', 'U', 'U' }; RIG_FT736R::RIG_FT736R() { // base class values name_ = FT736Rname_; modes_ = FT736Rmodes_; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 5; serial_post_write_delay = 50; serial_timeout = 200; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_rtsptt = false; serial_dtrptt = false; serloop_timing = 500; serial_catptt = true; A.freq = 144070000ULL; A.imode = 1; B.freq = 430001000ULL; B.imode = 2; has_mode_control = true; has_ptt_control = true; has_smeter = true; // (this was missing ) ***G0WBX precision = 10; ndigits = 10; }; void RIG_FT736R::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT736R::send() { sendCommand(cmd); } void RIG_FT736R::initialize() { VECTOR(FT736Rmodes_, vFT736Rmodes_); modes_ = FT736Rmodes_; rig_smin = 0x11; rig_smax = 0x8A; init_cmd(); send(); MilliSleep(200); set_PTT_control(0); } void RIG_FT736R::shutdown() { init_cmd(); cmd[4] = 0x80; send(); } bool RIG_FT736R::check() { return true; } void RIG_FT736R::selectA() { inuse = onA; set_vfo(A.freq); MilliSleep(200); set_mode(A.imode); inuse = onA; } void RIG_FT736R::selectB() { inuse = onB; set_vfo(B.freq); MilliSleep(200); set_mode(B.imode); inuse = onB; } // transceiver supports frequency ranges: // 50.0 <= f < 54.0 MHz // 144.0 <= f < 148.0 MHz // 220.0 <= f < 225.0 MHz // 430.0 <= f < 450.0 MHz // 1.24 <= f < 1.30 GHz void RIG_FT736R::set_vfo(unsigned long long freq) { if ( freq < 50000000ULL ) return; if ( freq >= 54000000ULL && freq < 144000000ULL ) return; if ( freq >= 148000000ULL && freq < 220000000ULL ) return; if ( freq >= 225000000ULL && freq < 430000000ULL ) return; if ( freq >= 450000000ULL && freq < 1240000000ULL ) return; if ( freq > 1300000000ULL ) return; init_cmd(); freq /=10; // 736R does not support 1 Hz resolution for (int i = 3; i >= 0; i--) { cmd[i] = freq % 10; freq /= 10; if (i == 0 && freq >= 12) cmd[i] |= 0xC0; else cmd[i] |= (freq % 10) << 4; freq /= 10; } cmd[4] = 0x01; send(); } void RIG_FT736R::set_vfoA (unsigned long long freq) { A.freq = freq; if (inuse == onB) return; set_vfo(freq); } unsigned long long RIG_FT736R::get_vfoA () { return A.freq; } void RIG_FT736R::set_mode(int val) { init_cmd(); cmd[0] = FT736Rmode_val_[val]; cmd[4] = 0x07; send(); } void RIG_FT736R::set_modeA(int val) { A.imode = val; if (inuse == onB) return; set_mode(val); } int RIG_FT736R::get_modeA() { return A.imode; } void RIG_FT736R::set_vfoB (unsigned long long freq) { B.freq = freq; if (inuse == onA) return; set_vfo(freq); } unsigned long long RIG_FT736R::get_vfoB () { return B.freq; } void RIG_FT736R::set_modeB(int val) { B.imode = val; if (inuse == onA) return; set_mode(val); } int RIG_FT736R::get_modeB() { return B.imode; } int RIG_FT736R::get_modetype(int n) // was missing, added G0WBX { // Fldigi now happy in LSB. return FT736R_mode_type[n]; } void RIG_FT736R::set_PTT_control(int val) { ptt_ = val; init_cmd(); if (val) cmd[4] = 0x08; else cmd[4] = 0x88; send(); } int RIG_FT736R::get_PTT() { return ptt_; } int RIG_FT736R::get_smeter() { int sval = 0; // cures the prepended data issue. Thanks Dave HKJ! init_cmd(); // presets to 5 null bytes cmd[4] = 0xF7; // the 'command' is always the last byte send(); // send it. (this was missing) ***G0WBX int ret = waitN(5, 100, "get smeter", HEX); // returns the num' of bytes received. // 5 bytes should be received, first 4 all the same data value. // The last byte == the command. if (ret >1) { sval = replystr[ret-2] - rig_smin; // get the data value, and offset. sval = sval * 100 / (rig_smax - rig_smin); // needed values deffined in FT736R.h } return sval; // UI Display range is from 0..100? (A test showed sval == 50 == 'S'9) } flrig-2.0.04/src/rigs/yaesu/FT100D.cxx0000664000175000017500000001734314502041135014071 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT100D.h" #include "rig.h" #include "support.h" static const char FT100Dname_[] = "FT-100D"; static std::vectorFT100Dmodes_; static const char *vFT100Dmodes_[] = { "LSB", "USB", "CW", "CW-R", "AM", "DIG", "FM", "W-FM"}; static const int FT100D_def_bw[] = { 2, 2, 1, 1, 3, 1, 2, 3 }; static const int FT100D_mode_val[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; static const char FT100D_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U' }; static std::vectorFT100Dwidths_; static const char *vFT100Dwidths_[] = { "300", "500", "2400", "6000"}; static const int FT100D_bw_val[] = { 0, 1, 2, 3 }; RIG_FT100D::RIG_FT100D() { name_ = FT100Dname_; modes_ = FT100Dmodes_; bandwidths_ = FT100Dwidths_; bw_vals_ = FT100D_bw_val; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 5; serial_timeout = 100; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; afreq = bfreq = A.freq = B.freq = 14070000ULL; amode = bmode = A.imode = B.imode = 1; aBW = bBW = A.iBW = B.iBW = 2; precision = 10; ndigits = 9; has_split = has_split_AB = has_get_info = has_smeter = has_power_out = has_swr_control = has_mode_control = has_bandwidth_control = has_ptt_control = true; } int RIG_FT100D::adjust_bandwidth(int m) { if (m == 0 || m == 1 || m == 5) return 2; if (m == 2 || m == 3 ) return 1; if (m == 4 || m == 6 || m == 7) return 3; return 2; } void RIG_FT100D::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; replystr.clear(); } void RIG_FT100D::initialize() { VECTOR (FT100Dmodes_, vFT100Dmodes_); VECTOR (FT100Dwidths_, vFT100Dwidths_); modes_ = FT100Dmodes_; bandwidths_ = FT100Dwidths_; bw_vals_ = FT100D_bw_val; } void RIG_FT100D::selectA() { init_cmd(); cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select A", cmd, replystr); inuse = onA; } void RIG_FT100D::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select B", cmd, replystr); inuse = onB; } void RIG_FT100D::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) showresp(WARN, HEX, "set split ON", cmd, replystr); else showresp(WARN, HEX, "set split OFF", cmd, replystr); } //====================================================================== // response to get_info() /* D: sendCommand: cmd: 5, 00 00 00 01 FA D: readResponse: rsp: 8, 28 20 04 00 00 00 88 04 W:07:47:40: status OK 50 ms cmd 00 00 00 01 FA ans 28 20 04 00 00 00 88 04 D: sendCommand: cmd: 5, 00 00 00 00 10 D: readResponse: rsp: 32, 07 00 56 CB E8 11 08 00 03 81 00 00 03 33 21 22 0B 00 AB C0 C0 11 13 00 84 A0 00 00 03 33 01 21 W:07:47:40: info OK 50 ms cmd 00 00 00 00 10 ans 07 00 56 CB E8 11 08 00 03 81 00 00 03 33 21 22 0B 00 AB C0 C0 11 13 00 84 A0 00 00 03 33 01 21 W: get_info: Vfo A = 14070000 */ //====================================================================== bool RIG_FT100D::check() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0xFA; int ret = waitN(8, 100, "check"); if (ret >= 8) return true; return false; } bool RIG_FT100D::get_info() { bool memmode = false, vfobmode = false; int pfreq, pmode, pbw; init_cmd(); cmd[3] = 0x01; cmd[4] = 0xFA; int ret = waitN(8, 100, "status"); if (ret >= 8) { size_t p = ret - 8; memmode = ((replystr[p+1] & 0x40) == 0x40); vfobmode = ((replystr[p+1] & 0x24) == 0x24); if (memmode) return false; if (vfobmode && inuse == onA) { inuse = onB; Fl::awake(highlight_vfo, (void *)0); } else if (!vfobmode && inuse == onB) { inuse = onA; Fl::awake(highlight_vfo, (void *)0); } } init_cmd(); cmd[4] = 0x10; ret = waitN(32, 100, "info"); if (ret == 32) { // primary pfreq = 0; for (size_t n = 1; n < 5; n++) pfreq = pfreq * 256 + (unsigned char)replystr[n]; pfreq = pfreq * 1.25; // 100D resolution is 1.25 Hz / bit for read pmode = replystr[5] & 0x07; if (pmode > 7) pmode = 7; pbw = (replystr[5] >> 4) & 0x03; pbw = 3 - pbw; if (inuse == onB) { B.freq = (unsigned long long)pfreq; B.imode = pmode; B.iBW = pbw; } else { A.freq = (unsigned long long)pfreq; A.imode = pmode; A.iBW = pbw; } return true; } return false; } unsigned long long RIG_FT100D::get_vfoA () { return A.freq; } void RIG_FT100D::set_vfoA (unsigned long long freq) { A.freq = freq; freq /=10; // 100D does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set freq A", cmd, replystr); } int RIG_FT100D::get_modeA() { return A.imode; } void RIG_FT100D::set_modeA(int val) { A.imode = val; init_cmd(); cmd[3] = FT100D_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode A", cmd, replystr); } void RIG_FT100D::set_bwA (int val) { A.iBW = val; init_cmd(); cmd[3] = FT100D_bw_val[val]; cmd[4] = 0x8C; sendCommand(cmd); showresp(WARN, HEX, "set BW A", cmd, replystr); } int RIG_FT100D::get_bwA() { return A.iBW; } unsigned long long RIG_FT100D::get_vfoB() { return B.freq; } void RIG_FT100D::set_vfoB(unsigned long long freq) { B.freq = freq; freq /=10; // 100D does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set freq B", cmd, replystr); } void RIG_FT100D::set_modeB(int val) { B.imode = val; init_cmd(); cmd[3] = FT100D_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode B", cmd, replystr); } int RIG_FT100D::get_modeB() { return B.imode; } void RIG_FT100D::set_bwB(int val) { B.iBW = val; init_cmd(); cmd[3] = FT100D_bw_val[val]; cmd[4] = 0x8C; sendCommand(cmd); showresp(WARN, HEX, "set bw B", cmd, replystr); } int RIG_FT100D::get_bwB() { return B.iBW; } int RIG_FT100D::def_bandwidth(int m) { return FT100D_def_bw[m]; } // Tranceiver PTT on/off void RIG_FT100D::set_PTT_control(int val) { init_cmd(); if (val) cmd[3] = 1; cmd[4] = 0x0F; sendCommand(cmd); if (val) showresp(WARN, HEX, "set PTT ON", cmd, replystr); else showresp(WARN, HEX, "set PTT OFF", cmd, replystr); ptt_ = val; } int RIG_FT100D::get_smeter() { init_cmd(); cmd[4] = 0xF7; int ret = waitN(9, 100, "S-meter"); if (ret < 9) return 0; int sval = (unsigned char)replystr[ret - 6]; if (sval < 90) sval = 90; if (sval > 200) sval = 200; if (sval < 120) sval = 250 - 5 * sval / 3; else sval = 125 - 5 * sval / 8; return sval; } int RIG_FT100D::get_swr() { double swr = (fwdpwr + refpwr) / (fwdpwr - refpwr + .0001); swr -= 1.0; swr *= 25.0; if (swr < 0) swr = 0; if (swr > 100) swr = 100; return (int) swr; } int RIG_FT100D::get_power_out() { init_cmd(); cmd[4] = 0xF7; int ret = waitN(9, 100, "P-out"); if (ret < 9) return 0; fwdpwr = (100 * (replystr[ret - 9 + 1] & 0xFF) / 256); refpwr = (100 * (replystr[ret - 9 + 2] & 0xFF) / 256); return (int) fwdpwr; } flrig-2.0.04/src/rigs/yaesu/FT920.cxx0000664000175000017500000001533614502041135013777 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT920.h" #include "rig.h" static const char FT920name_[] = "FT-920"; static std::vectorFT920modes_; static const char *vFT920modes_[] = { "LSB", "USB", "CW-USB", "CW-LSB", "AM", "AM-2", "FM", "FM-N", "DATA-LSB", "DATA2-LSB", "DATA-USB", "DATA-FM"}; static const int FT920_def_bw[] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; static const int FT920_mode_val[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; static const char FT920_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'U', 'U' }; static std::vectorFT920widths_; static const char *vFT920widths_[] = { "wide", "narr"}; static const int FT920_bw_val[] = { 0, 1 }; RIG_FT920::RIG_FT920() { name_ = FT920name_; modes_ = FT920modes_; bandwidths_ = FT920widths_; bw_vals_ = FT920_bw_val; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 80; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; afreq = bfreq = A.freq = B.freq = 14070000ULL; amode = bmode = A.imode = B.imode = 1; aBW = bBW = A.iBW = B.iBW = 0; precision = 10; has_get_info = has_mode_control = has_bandwidth_control = true; precision = 1; ndigits = 8; } int RIG_FT920::adjust_bandwidth(int m) { return FT920_def_bw[m]; } int RIG_FT920::def_bandwidth(int m) { return FT920_def_bw[m]; } void RIG_FT920::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT920::initialize() { VECTOR(FT920modes_, vFT920modes_); VECTOR(FT920widths_, vFT920widths_); modes_ = FT920modes_; bandwidths_ = FT920widths_; bw_vals_ = FT920_bw_val; } void RIG_FT920::selectA() { init_cmd(); cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select A", cmd, replystr); inuse = onA; } void RIG_FT920::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select B", cmd, replystr); inuse = onB; } void RIG_FT920::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) showresp(INFO, HEX, "set split ON", cmd, replystr); else showresp(INFO, HEX, "set split OFF", cmd, replystr); } bool RIG_FT920::check() { init_cmd(); cmd[3] = 0x03; cmd[4] = 0x10; int ret = waitN(28, 100, "get info", HEX); if (ret >= 28) return true; return false; } bool RIG_FT920::get_info() { init_cmd(); cmd[3] = 0x03; cmd[4] = 0x10; int ret = waitN(28, 100, "get info", HEX); if (ret >= 28) { size_t p = ret - 28; afreq = 0; bfreq = 0; for (size_t n = 1; n < 5; n++) { afreq = afreq * 256 + (unsigned char)replystr[p + n]; bfreq = bfreq * 256 + (unsigned char)replystr[p + 14 + n]; } afreq *= 10; bfreq *= 10; int md = replystr[p+5]; switch (md) { case 0 : amode = (md & 0x40) ? 1 : 0; break; case 1 : amode = (md & 0x40) ? 2 : 3; break; case 2 : amode = 4; break; case 3 : amode = (md & 0x80) ? 7 : 6; break; case 4 : amode = (md & 0x40) ? 8 : 10; break; case 6 : amode = 11; break; default : amode = 1; } aBW = (md & 0x80) ? 0 : 1; md = replystr[p + 19]; switch (md) { case 0 : bmode = (md & 0x40) ? 1 : 0; break; case 1 : bmode = (md & 0x40) ? 2 : 3; break; case 2 : bmode = 4; break; case 3 : bmode = (md & 0x80) ? 7 : 6; break; case 4 : bmode = (md & 0x40) ? 8 : 10; break; case 6 : bmode = 11; break; default : bmode = 1; } bBW = (md & 0x80) ? 0 : 1; A.freq = afreq; A.imode = amode; A.iBW = aBW; B.freq = bfreq; B.imode = bmode; B.iBW = bBW; return true; } return false; } unsigned long long RIG_FT920::get_vfoA () { return A.freq; } void RIG_FT920::set_vfoA (unsigned long long freq) { A.freq = freq; freq /=10; // 920 does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set vfo A", cmd, replystr); } int RIG_FT920::get_modeA() { return A.imode; } void RIG_FT920::set_modeA(int val) { A.imode = val; init_cmd(); cmd[3] = FT920_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode A", cmd, replystr); } void RIG_FT920::set_bwA (int val) { A.iBW = val; init_cmd(); cmd[3] = FT920_bw_val[val]; cmd[4] = 0x8C; sendCommand(cmd); showresp(WARN, HEX, "set bw A", cmd, replystr); } int RIG_FT920::get_bwA() { return A.iBW; } unsigned long long RIG_FT920::get_vfoB() { return B.freq; } void RIG_FT920::set_vfoB(unsigned long long freq) { B.freq = freq; freq /=10; // 920 does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x8A; sendCommand(cmd); showresp(WARN, HEX, "set vfo B", cmd, replystr); } void RIG_FT920::set_modeB(int val) { B.imode = val; init_cmd(); cmd[3] = FT920_mode_val[val] | 0x80; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode B", cmd, replystr); } int RIG_FT920::get_modeB() { return B.imode; } void RIG_FT920::set_bwB(int val) { B.iBW = val; init_cmd(); cmd[3] = FT920_bw_val[val] | 0x80; cmd[4] = 0x8C; sendCommand(cmd); showresp(WARN, HEX, "set bw B", cmd, replystr); } int RIG_FT920::get_bwB() { return B.iBW; } /* int RIG_FT920::get_smeter() { init_cmd(); cmd[4] = 0xF7; int ret = sendCommand(cmd, 9); if (ret < 9) return 0; int sval = (200 - (unsigned char)replystr[ret - 9 + 3]) / 1.1; if (sval < 0) sval = 0; if (sval > 100) sval = 100; return sval; } int RIG_FT920::get_swr() { double swr = (fwdpwr + refpwr) / (fwdpwr - refpwr + .0001); swr -= 1.0; swr *= 25.0; if (swr < 0) swr = 0; if (swr > 100) swr = 100; return (int) swr; } int RIG_FT920::get_power_out() { init_cmd(); cmd[4] = 0xF7; int ret = sendCommand(cmd); if (ret < 9) return 0; fwdpwr = replystr[ret - 9 + 1] / 2.56; refpwr = replystr[ret - 9 + 2] / 2.56; return (int) fwdpwr; } */ flrig-2.0.04/src/rigs/yaesu/FT890.cxx0000664000175000017500000001372714502041135014007 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT890.h" const char FT890name_[] = "FT-890"; static std::vectorFT890modes_; static const char *vFT890modes_[] = { "LSB", "USB", "CW", "CW-N", "AM", "AM-N", "FM"}; static const int FT890_mode_val[] = { 0, 1, 2, 3, 4, 5, 6 }; static const char FT890_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'U', 'U' }; static std::vectorFT890widths_; static const char *vFT890widths_[] = { "wide", "narr"}; static const int FT890_bw_val[] = { 0, 1 }; RIG_FT890::RIG_FT890() { name_ = FT890name_; modes_ = FT890modes_; bandwidths_ = FT890widths_; bw_vals_ = FT890_bw_val; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 5; serial_post_write_delay = 50; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; afreq = bfreq = A.freq = B.freq = 14070000ULL; amode = bmode = A.imode = B.imode = 1; aBW = bBW = A.iBW = B.iBW = 0; precision = 10; has_smeter = has_power_out = has_get_info = has_ptt_control = has_mode_control = true; precision = 10; ndigits = 7; } void RIG_FT890::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT890::initialize() { VECTOR (FT890modes_, vFT890modes_); VECTOR (FT890widths_, vFT890widths_); modes_ = FT890modes_; bandwidths_ = FT890widths_; bw_vals_ = FT890_bw_val; } void RIG_FT890::selectA() { init_cmd(); cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select A", cmd, replystr); inuse = onA; } void RIG_FT890::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select B", cmd, replystr); inuse = onB; } void RIG_FT890::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) showresp(INFO, HEX, "set split ON", cmd, replystr); else showresp(INFO, HEX, "set split OFF", cmd, replystr); } bool RIG_FT890::check() { init_cmd(); cmd[3] = 0x03; cmd[4] = 0x10; int ret = waitN(28, 100, "check", HEX); if (ret >= 28) return true; return false; } bool RIG_FT890::get_info() { init_cmd(); cmd[3] = 0x03; cmd[4] = 0x10; int ret = waitN(28, 100, "get info", HEX); if (ret >= 28) { size_t p = ret - 28; afreq = 0; bfreq = 0; for (size_t n = 1; n < 5; n++) { afreq = afreq * 256 + (unsigned char)replystr[p + n]; bfreq = bfreq * 256 + (unsigned char)replystr[p + 14 + n]; } afreq *= 10; bfreq *= 10; int md = replystr[p+5]; switch (md) { case 0 : amode = (md & 0x40) ? 1 : 0; break; case 1 : amode = (md & 0x40) ? 2 : 3; break; case 2 : amode = 4; break; case 3 : amode = (md & 0x80) ? 7 : 6; break; case 4 : amode = (md & 0x40) ? 8 : 10; break; case 6 : amode = 11; break; default : amode = 1; } aBW = (md & 0x80) ? 0 : 1; md = replystr[p + 19]; switch (md) { case 0 : bmode = (md & 0x40) ? 1 : 0; break; case 1 : bmode = (md & 0x40) ? 2 : 3; break; case 2 : bmode = 4; break; case 3 : bmode = (md & 0x80) ? 7 : 6; break; case 4 : bmode = (md & 0x40) ? 8 : 10; break; case 6 : bmode = 11; break; default : bmode = 1; } bBW = (md & 0x80) ? 0 : 1; A.freq = afreq; A.imode = amode; A.iBW = aBW; B.freq = bfreq; B.imode = bmode; B.iBW = bBW; return true; } return false; } unsigned long long RIG_FT890::get_vfoA () { return A.freq; } void RIG_FT890::set_vfoA (unsigned long long freq) { A.freq = freq; freq /=10; // 890 does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set vfo A", cmd, replystr); } int RIG_FT890::get_modeA() { return A.imode; } void RIG_FT890::set_modeA(int val) { A.imode = val; init_cmd(); cmd[3] = FT890_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode A", cmd, replystr); } unsigned long long RIG_FT890::get_vfoB() { return B.freq; } void RIG_FT890::set_vfoB(unsigned long long freq) { B.freq = freq; freq /=10; // 890 does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x8A; sendCommand(cmd); showresp(WARN, HEX, "set vfo B", cmd, replystr); } void RIG_FT890::set_modeB(int val) { B.imode = val; init_cmd(); cmd[3] = FT890_mode_val[val] | 0x80; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode B", cmd, replystr); } int RIG_FT890::get_modeB() { return B.imode; } // Tranceiver PTT on/off void RIG_FT890::set_PTT_control(int val) { init_cmd(); if (val) cmd[3] = 1; else cmd[3] = 0; cmd[4] = 0x0F; sendCommand(cmd, 0); LOG_INFO("%s", str2hex(cmd.c_str(), 5)); ptt_ = val; } int RIG_FT890::get_smeter() { init_cmd(); cmd[4] = 0xF7; int ret = waitN(5, 100, "get smeter", HEX); if (ret < 5) return 0; int sval = (unsigned char)(replystr[ret - 2]); sval = sval * 100 / 255; return sval; } int RIG_FT890::get_power_out() { init_cmd(); cmd[4] = 0xF7; int ret = waitN(5, 100, "get pwr out", HEX); if (ret < 5) return 0; int sval = (unsigned char)(replystr[ret - 2]); sval = sval * 100 / 255; return sval; } flrig-2.0.04/src/rigs/yaesu/FT857D.cxx0000664000175000017500000002316314505023024014111 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include #include "yaesu/FT857D.h" #include "support.h" #include "trace.h" static const char FT857Dname_[] = "FT-857D"; static std::vectorFT857Dmodes_; static const char *vFT857Dmodes_[] = { "LSB", "USB", "CW", "CW-R", "AM", "FM", "FM-N", "DIG", "PKT"}; static const int FT857D_mode_val[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x08, 0X88, 0x0A, 0x0C }; static const char FT857D_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U', 'U' }; static const char FT897Dname_[] = "FT-897D"; static std::vectorFT897Dmodes_; static const char *vFT897Dmodes_[] = { "LSB", "USB", "CW", "CW-R", "AM", "FM", "FM-N", "DIG", "PKT"}; static const int FT897D_mode_val[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x08, 0x88, 0x0A, 0x0C }; static const char FT897D_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U', 'U' }; // note: // 897D returns 0xFC for 9600 baud pkt, 0x0C for 1200 pkt // ONLY accepts 0x0C for PKT mode selection ... go figure static int num_modes = 9; static const int *mode_vals; static const char *mode_type; RIG_FT857D::RIG_FT857D() { // base class values name_ = FT857Dname_; modes_ = FT857Dmodes_; num_modes = 9; mode_vals = FT857D_mode_val; mode_type = FT857D_mode_type; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; has_ptt_control = has_split = has_split_AB = has_smeter = has_power_out = has_mode_control = has_band_selection = true; precision = 10; ndigits = 9; }; void RIG_FT857D::initialize() { VECTOR (FT857Dmodes_, vFT857Dmodes_); modes_ = FT857Dmodes_; mode_vals = FT857D_mode_val; mode_type = FT857D_mode_type; }; RIG_FT897D::RIG_FT897D() { name_ = FT897Dname_; modes_ = FT897Dmodes_; mode_vals = FT897D_mode_val; mode_type = FT897D_mode_type; num_modes = 9; } void RIG_FT897D::initialize() { VECTOR (FT897Dmodes_, vFT897Dmodes_); modes_ = FT897Dmodes_; mode_vals = FT897D_mode_val; mode_type = FT897D_mode_type; } static void settle(int n) { for (int i = 0; i < n/50; i++) {MilliSleep(50); Fl::awake();} } void RIG_FT857D::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } bool RIG_FT857D::check () { int wait = 5, ret = 0; init_cmd(); cmd[4] = 0x03; // get vfo while ((ret = waitN(5, 100, "check")) < 5 && wait > 0) { init_cmd(); cmd[4] = 0x03; wait--; } getthex("check"); if (ret < 5) return false; return true; } unsigned long long RIG_FT857D::get_vfoA () { if (inuse == onB) return freqA; init_cmd(); cmd[4] = 0x03; getr("get vfoA"); int ret = waitN(5, 100, "get vfo A", HEX); getthex(" : "); if (ret == 5) { freqA = fm_bcd(replystr, 8) * 10; int mode = replystr[4] & 0xFF; for (int i = 0; i < num_modes; i++) { if (i == (num_modes - 1)) mode &= 0x0F; if (mode_vals[i] == mode) { modeA = i; break; } } } static char msg[50]; snprintf(msg, sizeof(msg), "get vfoA: %d, %s", (int)freqA, modes_[modeA].c_str()); getr(msg); return freqA; } void RIG_FT857D::set_vfoA (unsigned long long freq) { freqA = freq; freq /=10; // 857D does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; replystr.clear(); sendCommand(cmd, 0, 50); settle(200); setthex("set_vfoA"); } unsigned long long RIG_FT857D::get_vfoB () { if (inuse == onA) return freqB; init_cmd(); cmd[4] = 0x03; getr("get vfoB"); int ret = waitN(5, 100, "get vfo B", HEX); getthex(" : "); if (ret == 5) { freqB = fm_bcd(replystr, 8) * 10; int mode = replystr[4] & 0xFF; for (int i = 0; i < num_modes; i++) { if (i == (num_modes - 1)) mode &= 0x0F; if (mode_vals[i] == mode) { modeB = i; break; } } } static char msg[50]; snprintf(msg, sizeof(msg), "get vfoB: %d, %s", (int)freqA, modes_[modeB].c_str()); getr(msg); return freqB; } void RIG_FT857D::set_vfoB (unsigned long long freq) { freqB = freq; freq /=10; // 857D does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; replystr.clear(); sendCommand(cmd, 0, 50); settle(200); setthex("set_vfoB"); } int RIG_FT857D::get_modeA() { // read by get_vfoA getr("get modeA"); return modeA; } int RIG_FT857D::get_modeB() { // read by get_vfoB getr("get modeB"); return modeB; } int RIG_FT857D::get_modetype(int n) { return mode_type[n]; } void RIG_FT857D::set_modeA(int val) { modeA = val; init_cmd(); cmd[0] = mode_vals[val]; cmd[4] = 0x07; replystr.clear(); sendCommand(cmd, 0, 50); settle(200); setthex("set_modeA"); } void RIG_FT857D::set_modeB(int val) { modeB = val; init_cmd(); cmd[0] = mode_vals[val]; cmd[4] = 0x07; replystr.clear(); sendCommand(cmd, 0, 50); settle(200); setthex("set_modeB"); } // Tranceiver PTT on/off void RIG_FT857D::set_PTT_control(int val) { init_cmd(); if (val) cmd[4] = 0x08; else cmd[4] = 0x88; replystr.clear(); sendCommand(cmd, 0, 20); setthex("set_PTT"); ptt_ = val; } // mod submitted by Rich, WA4SXZ, for power_out and smeter int RIG_FT857D::get_power_out(void) { init_cmd(); cmd[4] = 0xF7; int ret = waitN(1, 100, "get pout", HEX); getthex("get pout"); if (ret == 1) { int fwdpwr = replystr[0] & 0x0F; fwdpwr = fwdpwr * 100 / 15; return fwdpwr; } return 0; } int RIG_FT857D::get_smeter(void) { init_cmd(); cmd[4] = 0xE7; int ret = waitN(1, 100, "get smeter", HEX); getthex("get smeter"); if (ret == 1) { int sval = replystr[0] & 0x0F; sval = (sval-1) * 100 / 15; return sval; } return 0; } void RIG_FT857D::selectA() { bool isA = true; init_cmd(); cmd[1] = 0x68; cmd[4] = 0xBB; int ret = waitN(1, 100, "get eeprom @ 0068"); getthex("get eeprom data @ 0068"); if (ret != 0) isA = ((replystr[0] & 0x01) == 0); if (isA) { inuse = onA; return; } init_cmd(); cmd[4] = 0x81; sendCommand(cmd); setthex("Select VFO A"); check(); inuse = onA; } void RIG_FT857D::selectB() { bool isB = true; init_cmd(); cmd[1] = 0x68; cmd[4] = 0xBB; int ret = waitN(1, 100, "get eeprom @ 0068"); getthex("get eeprom data @ 0068"); if (ret != 0) isB = ((replystr[0] & 0x01) == 0x01); if (isB) { inuse = onB; return; } init_cmd(); cmd[4] = 0x81; sendCommand(cmd); setthex("Select VFO B"); check(); inuse = onB; } void RIG_FT857D::set_split(bool val) { split = val; replystr.clear(); init_cmd(); if (val) { cmd[4] = 0x02; sendCommand(cmd, 0, 100); showresp(INFO, HEX, "set split ON", cmd, ""); } else { cmd[4] = 0x82; sendCommand(cmd, 0, 100); showresp(INFO, HEX, "set split OFF", cmd, ""); } setthex("set_split"); } extern bool PTT; int RIG_FT857D::get_split() { init_cmd(); if (PTT) { cmd[4] = 0xF7; // get transmit status int ret = waitN(1, 100, "get TX status"); getthex("get_split"); if (ret != 0) split = (replystr[0] & 0x20) == 0x20; return split; } // read eeprom address 008D cmd[1] = 0x8D; cmd[4] = 0xBB; int ret = waitN(1, 100, "get eeprom @ 008D"); getthex("get eeprom data @ 008D"); if (ret != 0) split = ((replystr[0] & 0x80) == 0x80); return split; } void RIG_FT857D::set_band_selection(int v) { unsigned long long freq = 14070000ULL; int mode = 0; switch (v) { case 1: freq = progStatus.f160; mode = progStatus.m160; break; // 160 meters case 2: freq = progStatus.f80; mode = progStatus.m80; break; // 80 meters case 3: freq = progStatus.f40; mode = progStatus.m40; break; // 40 meters case 4: freq = progStatus.f30; mode = progStatus.m30; break; // 30 meters case 5: freq = progStatus.f20; mode = progStatus.m20; break; // 20 meters case 6: freq = progStatus.f17; mode = progStatus.m17; break; // 17 meters case 7: freq = progStatus.f15; mode = progStatus.m15; break; // 15 meters case 8: freq = progStatus.f12; mode = progStatus.m12; break; // 12 meters case 9: freq = progStatus.f10; mode = progStatus.m10; break; // 10 meters case 10: freq = progStatus.f6; mode = progStatus.m6; break; // 6 meters case 11: freq = progStatus.f2; mode = progStatus.m2; break; // 2 meters case 12: freq = progStatus.f70; mode = progStatus.m70; break; // 70 cent' } if (inuse == onB) { set_modeB(mode); set_vfoB(freq); } else { set_modeA(mode); set_vfoA(freq); } } void RIG_FT857D::set_tones(int tx, int rx) { cmd.clear(); cmd.assign(to_bcd(tx, 4)); cmd.append(to_bcd(rx, 4)); cmd += 0x0B; sendCommand(cmd, 0, 50); setthex("set tones"); } // 0 - simplex, 1 - minus, 2 - plus void RIG_FT857D::set_offset(int indx, int offset) { cmd.clear(); cmd += (indx == 0) ? 0x89 : (indx == 1) ? 0x09 : 0x49; cmd.append(" "); cmd += 0x09; sendCommand(cmd, 0, 50); setthex("set offset 1"); offset *= 100; cmd.clear(); cmd.assign(to_bcd(offset - (offset % 100), 8)); cmd += 0xF9; sendCommand(cmd, 0, 50); setthex("set offset 2"); } flrig-2.0.04/src/rigs/yaesu/FT1000MP.cxx0000664000175000017500000005304014502041135014274 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "status.h" #include "trace.h" #include "yaesu/FT1000MP.h" static const char FT1000MPname_[] = "FT-1000MP"; static std::vectorFT1000MP_modes; static const char *vFT1000MP_modes[] = { "LSB", "USB", "CW-U", "CW-L", "AM", "AM-syn", "FM", "FM-W", "RTTY-L", "RTTY-U", "PKT-L", "PKT-U", "PKT-FM" }; static const char FT1000MP_setmode[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0X07, 0x08, 0x09, 0x0A, 0x0A, 0x0B }; static const int FT1000MP_def_bw[] = { 6, 6, 18, 18, 0, 0, 0, 0, 18, 18, 6, 6, 0 }; static const char FT1000MP_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U', 'L', 'U', 'L', 'U' }; struct mode_pair { char a; char b;}; static const mode_pair FT1000MP_mode[] = { { '\x00', '\x00' }, // LSB { '\x01', '\x00' }, // USB { '\x02', '\x00' }, // CW-U { '\x02', '\x80' }, // CW-L { '\x03', '\x00' }, // AM { '\x03', '\x80' }, // AM-syn { '\x04', '\x00' }, // FM { '\x07', '\x00' }, // FM-W { '\x05', '\x00' }, // RTTY-L { '\x05', '\x80' }, // RTTY-U { '\x06', '\x00' }, // PKT-L { '\x86', '\x00' }, // PKT-U { '\x06', '\x80' }, // PKT-FM { '\xFF', '\xFF' } // end of list }; //LSB : 11 01 57 81 80 00 00 00 11 20 11 31 91 11 11 00 //USB : 11 01 57 81 80 00 00 01 11 20 11 31 91 11 11 00 //CW-L : 11 01 57 81 80 00 00 02 91 20 11 11 91 11 11 00 //CW-U : 11 01 57 81 80 00 00 02 11 20 11 91 91 11 11 00 //RTTY-L : 11 01 57 81 80 00 00 05 11 20 11 11 91 11 11 00 //RTTY-U : 11 01 57 81 80 00 00 05 91 20 11 11 11 11 11 00 //PKT-FM : 11 01 57 81 80 00 00 06 91 20 11 31 11 11 11 00 // 11 01 57 81 80 00 00 06 91 20 11 11 91 11 11 00 //PKT-L : 11 01 57 81 80 00 00 06 11 20 11 31 11 91 11 00 // 11 01 57 81 80 00 00 06 11 20 11 11 91 91 11 00 //PKT-U : 11 01 57 81 80 00 00 86 11 20 11 31 11 91 11 00 // 11 01 57 81 80 00 00 86 11 20 11 11 91 11 11 00 static std::vectorFT1000MP_widths; static const char *vFT1000MP_widths[] = { "---/6.0", "---/2.4", "---/2.0", "---/500", "---/250", "2.4/6.0", "2.4/2.4", "2.4/2.0", "2.4/500", "2.4/250", "2.0/6.0", "2.0/2.4", "2.0/2.0", "2.0/500", "2.0/250", "500/6.0", "500/2.4", "500/2.0", "500/500", "500/250", "250/6.0", "250/2.4", "250/2.0", "250/500", "250/250" }; static int FT1000MP_bw_vals[] = { 1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, WVALS_LIMIT}; RIG_FT1000MP::RIG_FT1000MP() { // base class values name_ = FT1000MPname_; modes_ = FT1000MP_modes; bandwidths_ = FT1000MP_widths; bw_vals_ = FT1000MP_bw_vals; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 5; serial_post_write_delay = 5; serial_timeout = 50; serloop_timing = 200; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.freq = 14070000ULL; A.imode = 1; A.iBW = 1; B.freq = 3580000ULL; B.imode = 1; B.iBW = 1; precision = 10; max_power = 200; tuner_on = false; has_smeter = has_power_out = has_swr_control = has_alc_control = has_mode_control = has_bandwidth_control = has_ptt_control = has_tune_control = has_split = has_get_info = true; has_auto_notch = true; precision = 10; ndigits = 7; progStatus.gettrace = progStatus.settrace = progStatus.serialtrace = progStatus.rigtrace = progStatus.xmltrace = progStatus.trace = false; progStatus.gettrace = true; // progStatus.settrace = true; // progStatus.serialtrace = true; // progStatus.rigtrace = true; // progStatus.xmltrace = true; // progStatus.trace = true; }; void RIG_FT1000MP::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT1000MP::initialize() { VECTOR (FT1000MP_modes, vFT1000MP_modes); VECTOR (FT1000MP_widths, vFT1000MP_widths); modes_ = FT1000MP_modes; bandwidths_ = FT1000MP_widths; bw_vals_ = FT1000MP_bw_vals; } /* returns 32 bytes first 16 for vfo-A 0 - band selection 1,2,3,4 operating frequency 5,6 clarifier offset 7 operating mode 8 if filter selection 9 vfo/mem operating flags a,b,c,d,e,f NOT used repeated for vfo-B Data captured by AF2M, Mitch Mode changes bytes 7 / 8; counting from 0 ---------------------||-||--------------------------------------------------------------------- LSB : 08 00 57 71 00 00 00 00 11 00 11 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 USB : 08 00 57 71 00 00 00 01 11 00 11 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 CW-L : 08 00 57 75 10 00 00 02 01 00 11 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 CW-U : 08 00 57 75 10 00 00 02 11 00 11 91 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 LSB : 08 00 57 71 00 00 00 00 11 00 11 11 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 RTTY-L : 08 00 57 63 B8 00 00 05 11 00 11 11 11 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 RTTY-U : 08 00 57 7E 48 00 00 05 91 00 11 11 91 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 Data captured by Peter, PA1POS Query 0x00 0x00 0x00 0x02 0x10 | | | LSB : 11 01 57 81 80 00 00 00 11 20 11 31 91 11 11 00 USB : 11 01 57 81 80 00 00 01 11 20 11 31 91 11 11 00 CW-L : 11 01 57 81 80 00 00 02 91 20 11 11 91 11 11 00 CW-U : 11 01 57 81 80 00 00 02 11 20 11 91 91 11 11 00 RTTY-L : 11 01 57 81 80 00 00 05 11 20 11 11 91 11 11 00 RTTY-U : 11 01 57 81 80 00 00 05 91 20 11 11 11 11 11 00 PKT-FM : 11 01 57 81 80 00 00 06 91 20 11 31 11 11 11 00 11 01 57 81 80 00 00 06 91 20 11 11 91 11 11 00 PKT-L : 11 01 57 81 80 00 00 06 11 20 11 31 11 91 11 00 11 01 57 81 80 00 00 06 11 20 11 11 91 91 11 00 PKT-U : 11 01 57 81 80 00 00 86 11 20 11 31 11 91 11 00 11 01 57 81 80 00 00 86 11 20 11 11 91 11 11 00 |______________________ IF SELECTOR (BW) |_________________________ MODE |__|____________________________ CLARIFIER OFFSET |__|__|__|__________________________________ FREQ |______________________________________________ BAND Bandwidth changes (in LSB MODE) 8.215 filter is in thru mode Only changing 455 filter, cycling thru from 6k, 2.4k, 2.0k,500, 250. ------------------------||--------------------------------------------------------------------- 6k : 08 00 57 71 00 00 00 00 00 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 2.4k : 08 00 57 71 00 00 00 00 01 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 2.0k : 08 00 57 71 00 00 00 00 02 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 500 : 08 00 57 71 00 00 00 00 03 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 250 : 08 00 57 71 00 00 00 00 04 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 8.215 filter is in 500 hz mode. ------------------------||--------------------------------------------------------------------- 6k : 08 00 57 71 00 00 00 00 40 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 2.4k : 08 00 57 71 00 00 00 00 41 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 2.0k : 08 00 57 71 00 00 00 00 42 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 500 : 08 00 57 71 00 00 00 00 43 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 250 : 08 00 57 71 00 00 00 00 44 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 Mode changes bytes 7 / 8; counting from 0 |byte 7| |byte 8| LSB : 00000000 00010001 USB : 00000001 00010001 CW-L : 00000010 00000001 CW-U : 00000010 00010001 LSB : 00000000 00010001 RTTY-L : 00000101 00010001 RTTY-U : 00000101 10010001 |byte 8| 6k : 00000000 2.4k : 00000001 2.0k : 00000010 500 : 00000011 250 : 00000100 8.215 filter is in 500 hz mode. |byte 8| 6k : 01000000 2.4k : 01000001 2.0k : 01000010 500 : 01000011 250 : 01000100 */ /* const std::string LSBstr = { '\x08', '\x00', '\x50', '\x42', '\x01', '\x00', '\x00', '\x00', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string USBstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x01', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string CWUstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x02', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string CWLstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x02', '\x91', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string AMIstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x03', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string AMSstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x03', '\x91', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string FMstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x04', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string FMWstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x07', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string RTTYLstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x05', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string RTTYUstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x05', '\x91', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string PKLstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x06', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string PKUstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x86', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string PKFstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x06', '\x91', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string BOGUSstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x24', '\x99', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; */ /* const std::string data1 = { 0x08, 0x00, 0x57, 0x71, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x01, 0x81, 0x81, 0x11, 0x0A, 0x08, 0x00, 0x57, 0x72, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x91, 0x11, 0x11, 0x11, 0x48 }; const std::string data2[] = { 0x08, 0x00, 0x57, 0x71, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x81, 0x81, 0x11, 0x0A, 0x08, 0x00, 0x57, 0x72, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x91, 0x11, 0x11, 0x11, 0x48 }; const std::string data3[] = { 0x08, 0x00, 0x57, 0x71, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x01, 0x81, 0x81, 0x11, 0x0A, 0x08, 0x00, 0x57, 0x72, 0x60, 0x00, 0x00, 0x03, 0xB0, 0x00, 0x30, 0x91, 0x11, 0x11, 0x11, 0x48 }; const std::string amsync[] = { 0x08, 0x00, 0x57, 0x67, 0x01, 0x00, 0x00, 0x03, 0x80, 0x00, 0x11, 0x11, 0x91, 0x91, 0x11, 0x08, 0x08, 0x00, 0x57, 0x67, 0x02, 0x00, 0x00, 0x01, 0x11, 0x00, 0x11, 0x91, 0x11, 0x11, 0x11, 0xFA }; */ /* * Ken Rawlings tests Band Radio Flrig Fldigi 160m 1.840.00 29449.08 29.440.080 80m 3.547.92 56776.72 56766.720 40m 7.036.00 112576.00 112576.000 30m 10.113.25 161812.06 161812.060 20m 14.052.16 224834.60 224834.600 17m 18.076.25 289220.12 289220.120 15m 21.009.30 336148.94 336148.940 12m 24.900.00 398400.00 398400.000 10m 28.072.10 449153.64 449153.640 10m 29.099.40 465590.40 465590.400 08 00 55 73 04 00 00 06 11 00 11 B3 33 0B 00 AA E6 0A 00 00 02 B3 00 11 B4 11 11 01 55 CC 02 00 00 02 B3 00 22 33 11 3.500.00 08 00 55 73 0E 00 00 01 00 00 11 B3 33 7.000.00 0B 00 AA E6 0C 00 00 02 B3 00 11 B3 33 14.000.00 11 01 55 CC 06 00 00 02 B3 00 11 B3 33 const unsigned int testints[] = {\ 0x08,0x00,0x55,0x73,0x0E,0x00,0x00,0x01,0x00,0x00,0x11,0xB3,0x33,0x91,0x11,0x08,\ 0x08,0x01,0x55,0xCC,0x06,0x00,0x00,0x01,0x11,0x00,0x11,0x91,0x11,0x11,0x11,0x00 }; 11 01 5B E8 10 00 00 02 B3 00 11 B3 11 11 11 00 0B 00 AB 4E B0 00 00 02 B3 00 11 B3 11 91 11 00 -- -- -- -- frequency A = */ bool RIG_FT1000MP::check() { init_cmd(); cmd[3] = 0x03; cmd[4] = 0x10; getr("check"); int ret = waitN(32, 100, "check", ASC); geth(); if (ret >= 32) return true; return false; } inline int hex2freq(std::string hex) { int freq = 0; freq = ((hex[3] >> 4) & 0x0F)*10 + (hex[3] & 0x0F); freq *= 100; freq += ((hex[2] >> 4) & 0x0F)*10 + (hex[2] & 0x0F); freq *= 100; freq += ((hex[1] >> 4) & 0x0F)*10 + (hex[1] & 0x0F); freq *= 100; freq += ((hex[0] >> 4) & 0x0F)*10 + (hex[0] & 0x0F); freq *= 10; return freq; } bool RIG_FT1000MP::get_info(void) { int ret = 0; int md = 0; init_cmd(); cmd[3] = 0x03; // read both vfo's cmd[4] = 0x10; getr("get info"); ret = waitN(32, 100, "get info", ASC); geth(); if (ret >= 32) { size_t p = replystr.length() - 32; // vfo A data std::string A.freq = (unsigned long long)hex2freq(replystr.substr(p + 1, 4)); for (md = 0; md < 14; md++) { if ( ((FT1000MP_mode[md].a & 0xFF) == (replystr[p + 7] & 0xFF)) && ((FT1000MP_mode[md].b & 0xFF) == (replystr[p + 8] & 0x80))) break; } if (md == 13) md = 0; A.imode = md; A.iBW = 5*((replystr[p + 8] & 0x70) >> 4) + (replystr[p + 8] & 0x07); if (A.iBW > 24) A.iBW = 24; B.freq = (unsigned long long)hex2freq(replystr.substr(p + 17, 4)); for (md = 0; md < 14; md++) { if ( ((FT1000MP_mode[md].a & 0xFF) == (replystr[p + 23] & 0xFF)) && ((FT1000MP_mode[md].b & 0xFF) == (replystr[p + 24] & 0x80))) break; } if (md == 13) md = 0; B.imode = md; B.iBW = 5*((replystr[p + 24] & 0x70) >> 4) + (replystr[p + 24] & 0x07); if (B.iBW > 24) B.iBW = 24; return true; } return false; } unsigned long long RIG_FT1000MP::get_vfoA () { get_info(); return A.freq; } unsigned long long RIG_FT1000MP::get_vfoB () { get_info(); return B.freq; } void RIG_FT1000MP::set_vfoA (unsigned long long freq) { A.freq = freq; init_cmd(); freq /=10; // 1000MP does not support 1 Hz resolution for (int i = 0; i < 4; i++) { cmd[i] = (unsigned char)(freq % 10); freq /= 10; cmd[i] |= (unsigned char)((freq % 10) * 16); freq /= 10; } cmd[4] = 0x0A; setr("set vfo A"); sendCommand(cmd, 0); seth(); } void RIG_FT1000MP::set_vfoB (unsigned long long freq) { B.freq = freq; init_cmd(); freq /=10; // 1000MP does not support 1 Hz resolution for (int i = 0; i < 4; i++) { cmd[i] = (unsigned char)(freq % 10); freq /= 10; cmd[i] |= (unsigned char)((freq % 10) * 16); freq /= 10; } cmd[4] = 0x8A; setr("set vfo B"); sendCommand(cmd, 0); seth(); } int RIG_FT1000MP::get_modeA() { return A.imode; } int RIG_FT1000MP::get_modeB() { return B.imode; } void RIG_FT1000MP::set_modeA(int val) { A.imode = val; init_cmd(); cmd[3] = val; if (val > 6) cmd[3]++; cmd[4] = 0x0C; setr("set mode A"); sendCommand(cmd, 0); seth(); get_info(); } void RIG_FT1000MP::set_modeB(int val) { B.imode = val; init_cmd(); cmd[3] = val; if (val > 6) cmd[3]++; cmd[4] = 0x0C; setr("set mode B"); sendCommand(cmd, 0); seth(); get_info(); } int RIG_FT1000MP::get_modetype(int n) { return FT1000MP_mode_type[n]; } int RIG_FT1000MP::get_bwA() { return A.iBW; } void RIG_FT1000MP::set_bwA(int val) { int first_if = val / 5; int second_if = val % 5; if (!first_if) first_if += 5; --first_if; if (!second_if) second_if += 5; --second_if; A.iBW = val; init_cmd(); cmd[0] = 0x01; // 1st IF cmd[3] = first_if; cmd[4] = 0x8C; setr("set bw A 1st IF"); sendCommand(cmd, 0); seth(); cmd[0] = 0x02; // 2nd IF cmd[3] = second_if; setr("set bw A 2nd IF"); sendCommand(cmd, 0); seth(); } int RIG_FT1000MP::get_bwB() { return B.iBW; } void RIG_FT1000MP::set_bwB(int val) { B.iBW = val; int first_if = val / 5; int second_if = val % 5; if (!first_if) first_if += 5; --first_if; first_if += 0x80; // vfo-B if (!second_if) second_if += 5; --second_if; second_if += 0x80; // vfo-B init_cmd(); cmd[0] = 0x01; // 1st IF cmd[3] = first_if; cmd[4] = 0x8C; setr("set bw B 1st IF"); sendCommand(cmd, 0); seth(); cmd[0] = 0x02; // 2nd IF cmd[3] = second_if; setr("set bw B 2nd IF"); sendCommand(cmd, 0); seth(); } int RIG_FT1000MP::def_bandwidth(int m) { return FT1000MP_def_bw[m]; } int RIG_FT1000MP::adjust_bandwidth(int m) { return FT1000MP_def_bw[m]; } void RIG_FT1000MP::selectA() { init_cmd(); cmd[4] = 0x05; setr("select A"); sendCommand(cmd, 0); seth(); } void RIG_FT1000MP::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; setr("select B"); sendCommand(cmd, 0); seth(); } void RIG_FT1000MP::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; setr("set split"); sendCommand(cmd, 0); seth(); } // Tranceiver PTT on/off void RIG_FT1000MP::set_PTT_control(int val) { init_cmd(); if (val) cmd[3] = 1; else cmd[3] = 0; cmd[4] = 0x0F; setr("set PTT"); sendCommand(cmd, 0); seth(); ptt_ = val; } void RIG_FT1000MP::tune_rig() { init_cmd(); cmd[4] = 0x82; // initiate tuner cycle setr("tune"); sendCommand(cmd,0); seth(); } // used to turn tuner ON/OFF void RIG_FT1000MP::set_auto_notch(int v) { tuner_on = v; init_cmd(); cmd[3] = v ? 0x01 : 0x00; cmd[4] = 0x81; // start antenna tuner setr("tuner on/off"); sendCommand(cmd,0); seth(); } int RIG_FT1000MP::get_auto_notch() { return tuner_on; } int RIG_FT1000MP::get_power_out(void) { float pwr; init_cmd(); cmd[0] = 0x80; cmd[4] = 0xF7; getr("get power out"); int ret = sendCommand(cmd); geth(); if (ret < 5) return 0; pwr = (unsigned char)(replystr[ret - 5]); if (pwr <=53) {pwr /= 53; pwr = 10 * pwr * pwr; } else if (pwr <= 77) {pwr /= 77; pwr = 20 * pwr * pwr; } else if (pwr <= 98) {pwr /= 98; pwr = 30 * pwr * pwr; } else if (pwr <= 114) {pwr /= 114; pwr = 40 * pwr * pwr; } else if (pwr <= 130) {pwr /= 130; pwr = 50 * pwr * pwr; } else {pwr /= 177; pwr = 100 * pwr * pwr; } return (int)pwr; } int RIG_FT1000MP::get_smeter(void) { float val = 0; init_cmd(); cmd[0] = 0x00; cmd[4] = 0xF7; getr("get smeter"); int ret = waitN(5, 100, "get smeter", HEX); geth(); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]); if (val <= 15) val = 5; else if (val <=154) val = 5 + 45 * (val - 15) / (154 - 15); else val = 50 + 50 * (val - 154.0) / (255.0 - 154.0); return (int)val; } int RIG_FT1000MP::get_swr(void) { float val = 0; init_cmd(); cmd[0] = 0x85; cmd[4] = 0xF7; getr("get swr"); int ret = waitN(5, 100, "get swr", HEX); geth(); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]) - 10; val *= (50.0 / 122.0); if (val < 0) val = 0; if (val > 100) val = 100; return (int)val; } int RIG_FT1000MP::get_alc(void) { unsigned char val = 0; init_cmd(); cmd[0] = 0x81; cmd[4] = 0xF7; getr("get alc"); int ret = waitN(5, 100, "get alc", HEX); geth(); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]); return val * 100 / 255; } flrig-2.0.04/src/rigs/yaesu/FT5000.cxx0000664000175000017500000007670214502041135014055 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FT5000.h" #include "debug.h" #include "support.h" enum mFTdx5000 { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U }; // mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 // mode index // 19, 19, 9, 0, 0, 10, 9, 15, 10, 0, 0, 15 // FTdx5000_def_bw static const char FT5000name_[] = "FTdx5000"; static std::vectorFT5000modes_; static const char *vFT5000modes_[] = { "LSB", "USB", "CW", "FM", "AM", "RTTY-L", "CW-R", "PKT-L", "RTTY-U", "PKT-FM", "FM-N", "PKT-U"}; #undef NUM_MODES #define NUM_MODES 12 static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static const int FT5000_def_bw[] = { 19, 19, 9, 0, 0, 10, 9, 15, 10, 0, 0, 15 }; static const char FT5000_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C' }; static const char FT5000_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U' }; static std::vectorFT5000_widths_SSB; static const char *vFT5000_widths_SSB[] = { "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", // 0..9 "2100", "2250", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3200", // 10..19 "3400", "3600", "3800", "4000"}; static int FT5000_wvals_SSB[] = { 1,2,3,4,5,6,7, 8,9,10,11,12,13, 15,16,17,18,19,20, 21,22,23,24,25, WVALS_LIMIT}; static std::vectorFT5000_widths_CW; static const char *vFT5000_widths_CW[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", // NA1 "800", "1200", "1400", "1700", "2000", "2400"}; static int FT5000_wvals_CW[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static std::vectorFT5000_widths_RTTY; static const char *vFT5000_widths_RTTY[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", // NA1 "800", "1200", "1400", "1700", "2000", "2400"}; static int FT5000_wvals_RTTY[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static std::vectorFT5000_widths_PSK; static const char *vFT5000_widths_PSK[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", // NA1 "800", "1200", "1400", "1700", "2000", "2400"}; static int FT5000_wvals_PSK[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT }; static const int FT5000_wvals_AMFM[] = { 0, WVALS_LIMIT }; static std::vectorFT5000_widths_AMwide; static const char *vFT5000_widths_AMwide[] = { "AM-bw" }; static std::vectorFT5000_widths_FMnar; static const char *vFT5000_widths_FMnar[] = { "FM-nar" }; static std::vectorFT5000_widths_FMwide; static const char * vFT5000_widths_FMwide[] = { "FM-wid" }; static std::vectorFT5000_widths_FMpkt; static const char *vFT5000_widths_FMpkt[] = { "FM-pkt" }; static std::vectorFT5000_US_60m; static const char *vFT5000_US_60m[] = {"", "126", "127", "128", "130"}; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. // // UK has 7 60M presets. Using dummy numbers for all. If you want support, // Maybe someone can do a cat command MC; on all 7 presets and add returned numbers below. // static std::vectorFT5000_UK_60m = {"", "126", "127", "128", "130", "131", "132"}; static std::vector& Channels_60m = FT5000_US_60m; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 54, 165, 368 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_FT5000::initialize() { VECTOR (FT5000modes_, vFT5000modes_); VECTOR (FT5000_widths_SSB, vFT5000_widths_SSB); VECTOR (FT5000_widths_CW, vFT5000_widths_CW); VECTOR (FT5000_widths_RTTY, vFT5000_widths_RTTY); VECTOR (FT5000_widths_PSK, vFT5000_widths_PSK); VECTOR (FT5000_widths_AMwide, vFT5000_widths_AMwide); VECTOR (FT5000_widths_FMnar, vFT5000_widths_FMnar); VECTOR (FT5000_widths_FMwide, vFT5000_widths_FMwide); VECTOR (FT5000_widths_FMpkt, vFT5000_widths_FMpkt); VECTOR (FT5000_US_60m, vFT5000_US_60m); modes_ = FT5000modes_; bandwidths_ = FT5000_widths_SSB; bw_vals_ = FT5000_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; cmd = "AI0;"; sendCommand(cmd); showresp(WARN, ASC, "Auto Info OFF", cmd, replystr); sett("Auto Info OFF"); } RIG_FT5000::RIG_FT5000() { // base class values IDstr = "ID"; name_ = FT5000name_; modes_ = FT5000modes_; bandwidths_ = FT5000_widths_SSB; bw_vals_ = FT5000_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 1; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 19; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; notch_on = false; has_band_selection = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = // has_cw_spot_tone = // does not exist??? has_cw_qsk = has_cw_weight = has_cw_break_in = has_split_AB = can_change_alt_vfo = has_smeter = has_swr_control = has_idd_control = has_voltmeter = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = true; // derived specific atten_level = 0; preamp_level = 0; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 8; } void RIG_FT5000::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; wait_char(';',27, 100, "get band", ASC); gett("get band"); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+21] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0].empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx > (int)Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); sett("get band stacks"); } bool RIG_FT5000::check () { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';', 11, 100, "get vfo A", ASC); sett("check"); if (ret >= 11) return true; return false; } unsigned long long RIG_FT5000::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';', 11, 100, "get vfo A", ASC); gett("get_vfoA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqA = f; return freqA; } void RIG_FT5000::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); sett("set_vfoA"); } unsigned long long RIG_FT5000::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';', 11, 100, "get vfo B", ASC); gett("get_vfoB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqB = f; return freqB; } void RIG_FT5000::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); sett("set_vfoB"); } bool RIG_FT5000::twovfos() { return true; } void RIG_FT5000::selectA() { cmd = "FR2;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); sett("selectA"); inuse = onA; } void RIG_FT5000::selectB() { cmd = "FR3;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); sett("selectB"); inuse = onB; } void RIG_FT5000::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); sett("A2B"); } bool RIG_FT5000::can_split() { return true; } void RIG_FT5000::set_split(bool val) { split = val; if (val) { cmd = "FR2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A", cmd, replystr); sett("set_split RX"); cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on B", cmd, replystr); sett("set_split TX"); } else { cmd = "FR2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A", cmd, replystr); sett("set_split RX"); cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Tx on A", cmd, replystr); sett("set_split TX"); } Fl::awake(highlight_vfo, (void *)0); } int RIG_FT5000::get_split() { return split; } int RIG_FT5000::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';', 7, 100, "get smeter", ASC); gett("get_smeter"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr *= 100; mtr /= 255; // mtr = mtr * 100.0 / 256.0; return mtr; } struct meterpair {int mtr; float val;}; struct meterpair swrtbl[] = { {0, 0.0}, // 1.0 {39, 7.5}, // 1.3 {52, 12.0}, // 1.5 {65, 17.0}, // 1.7 {77, 19.5}, // 1.8 {89, 24.0}, // 2.0 {102, 36.0}, // 2.5 {119, 47.0}, // 2.9 {198, 77.0}, // 4.0 {255, 100.0} // 5.0 }; int RIG_FT5000::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';', 7, 100, "get swr", ASC); gett("get_swr"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int rcvd = atoi(&replystr[p+3]); size_t i = 0; while (rcvd > swrtbl[i].mtr) i++; double mtr = (swrtbl[i+1].val - swrtbl[i].val ) / (swrtbl[i+1].mtr - swrtbl[i].mtr); mtr *= (rcvd - swrtbl[i].mtr); mtr += swrtbl[i].val; if (mtr < 0) mtr = 0; if (mtr > 100) mtr = 100; return (int)mtr; } // Po Conversion Table static meterpair pwrtbl[] = { {0,0}, {55,10}, {75,20}, {90,30}, {101,40}, {115,50}, {125,60}, {136,70}, {144,80}, {152,90}, {161,100}, {168,110}, {177,120}, {184,130}, {190,140}, {197,150}, {202,160}, {209,170}, {215,180}, {220,190}, {225,200}, {230,210}, {237,220}, {242,230}, {248,240}, {255,250} }; int RIG_FT5000::get_power_out() { cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';', 7, 100, "get pout", ASC); gett("get_power_out"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); size_t i = 0; while (mtr > pwrtbl[i].mtr) i++; double val = (pwrtbl[i+1].val - pwrtbl[i].val) / (pwrtbl[i+1].mtr - pwrtbl[i].mtr); val *= (mtr - pwrtbl[i].mtr); val += pwrtbl[i].val; if (val > 255) val = 255; if (val < 10) val = 10; return (int)val; } // Transceiver power level double RIG_FT5000::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';', 6, 100, "get power", ASC); gett("get_power_control"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); mtr *= 200; mtr /= 255; return mtr; } void RIG_FT5000::set_power_control(double val) { int ival = (int) val; ival *= 255; ival /= 200; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); sett("set_power_control"); } // Volume control return 0 ... 100 int RIG_FT5000::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';', 7, 100, "get vol", ASC); gett("get_volume_control"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = atoi(&replystr[p+3]) * 100 / 255; if (val > 100) val = 100; return val; } void RIG_FT5000::set_volume_control(int val) { int ivol = (int)(val * 255 / 100); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); sett("set_volume_control"); } // Tranceiver PTT on/off void RIG_FT5000::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); sett("set_PTT_control"); ptt_ = val; } int RIG_FT5000::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, 100, "get PTT", ASC); gett("get_PTT"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FT5000::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FT5000::get_tune() { cmd = rsp = "AC"; cmd += ';'; waitN(5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return !(val < 2); } int RIG_FT5000::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FT5000::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); sett("set_attenuator"); } int RIG_FT5000::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, 100, "get att", ASC); gett("get_attenuator"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FT5000::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FT5000::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); sett("set_preamp"); } int RIG_FT5000::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';', 5, 100, "get pre", ASC); gett("get_preamp"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FT5000::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FT5000::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; if (preamp_level == 3) return "IPO2"; return "IPO1"; } int RIG_FT5000::adjust_bandwidth(int val) { int bw = 0; if (val == mCW || val == mCW_R) { bandwidths_ = FT5000_widths_CW; bw_vals_ = FT5000_wvals_CW; } else if (val == mFM || val == mAM || val == mFM_N || val == mPKT_FM) { if (val == mFM) bandwidths_ = FT5000_widths_FMwide; else if (val == mAM) bandwidths_ = FT5000_widths_AMwide; else if (val == mFM_N) bandwidths_ = FT5000_widths_FMnar; else if (val == mPKT_FM) bandwidths_ = FT5000_widths_FMpkt; bw_vals_ = FT5000_wvals_AMFM; } else if (val == mRTTY_L || val == mRTTY_U) { // RTTY bandwidths_ = FT5000_widths_RTTY; bw_vals_ = FT5000_wvals_RTTY; } else if (val == mPKT_L || val == mPKT_U) { // PSK bandwidths_ = FT5000_widths_PSK; bw_vals_ = FT5000_wvals_PSK; } else { bandwidths_ = FT5000_widths_SSB; bw_vals_ = FT5000_wvals_SSB; } bw = FT5000_def_bw[val]; return bw; } int RIG_FT5000::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FT5000::bwtable(int n) { switch (n) { case mCW: case mCW_R: return FT5000_widths_CW; case mFM: return FT5000_widths_FMwide; case mAM: return FT5000_widths_AMwide; case mRTTY_L: case mRTTY_U: return FT5000_widths_RTTY; case mPKT_L: case mPKT_U: return FT5000_widths_PSK; case mFM_N: return FT5000_widths_FMnar; case mPKT_FM: return FT5000_widths_FMpkt; default: ; } return FT5000_widths_SSB; } void RIG_FT5000::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FT5000_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); sett("set_modeA"); adjust_bandwidth(modeA); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); sett("set spot off"); btnSpot->value(0); } } int RIG_FT5000::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode A", ASC); gett("get_modeA"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeA = md; } } adjust_bandwidth(modeA); return modeA; } void RIG_FT5000::set_modeB(int val) { modeB = val; cmd = "MD0"; cmd += FT5000_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); sett("set_modeB"); adjust_bandwidth(modeA); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); sett("set spot off"); btnSpot->value(0); } } int RIG_FT5000::get_modeB() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode B", ASC); gett("get_modeB"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeB = md; } } adjust_bandwidth(modeB); return modeB; } void RIG_FT5000::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mPKT_FM ) { mode_bwA[modeA] = val; return; } if ((((modeA == mLSB || modeA == mUSB) && val < 8)) || ((modeA == mCW || modeA == mCW_R) && val < 11) || ((modeA == mRTTY_L || modeA == mRTTY_U) && val < 11) || ((modeA == mPKT_L || modeA == mPKT_U) && val < 11)) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); mode_bwA[modeA] = val; showresp(WARN, ASC, "SET bw A", cmd, replystr); sett("set_bwA"); } int RIG_FT5000::get_bwA() { if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mPKT_FM) { bwA = 0; mode_bwA[modeA] = bwA; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 100, "get bw A", ASC); gett("get_bwA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; if (p + 5 >= replystr.length()) return bwA; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3),2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; mode_bwA[modeA] = bwA; return bwA; } void RIG_FT5000::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mPKT_FM) { mode_bwB[modeB] = val; return; } if ((((modeB == mLSB || modeB == mUSB) && val < 8)) || ((modeB == mCW || modeB == mCW_R) && val < 11) || ((modeB == mRTTY_L || modeB == mRTTY_U) && val < 11) || ((modeB == mPKT_L || modeB == mPKT_U) && val < 11)) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); mode_bwB[modeB] = val; showresp(WARN, ASC, "SET bw B", cmd, replystr); sett("set_bwB"); } int RIG_FT5000::get_bwB() { if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mPKT_FM) { bwB = 0; mode_bwB[modeB] = bwB; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 100, "get bw B", ASC); gett("get_bwB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; if (p + 5 >= replystr.length()) return bwB; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3),2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FT5000::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FT5000::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FT5000::get_modetype(int n) { return FT5000_mode_type[n]; } void RIG_FT5000::set_if_shift(int val) { cmd = "IS0+0000;"; if (val != 0) progStatus.shift = true; else progStatus.shift = false; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); } bool RIG_FT5000::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';', 9, 100, "get if shift", ASC); gett("get_if_shift"); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FT5000::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1000; if_shift_max = max = 1000; if_shift_step = step = 50; if_shift_mid = 0; } void RIG_FT5000::set_notch(bool on, int val) { if (on && !notch_on) { notch_on = true; cmd = "BP00001;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); } else if (!on && notch_on) { notch_on = false; cmd = "BP00000;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch off", cmd, replystr); return; } cmd = "BP01"; val /= 10; cmd.append(to_decimal(val,3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); } bool RIG_FT5000::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; wait_char(';', 8, 100, "get notch on/off", ASC); gett("get_notch"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; if (replystr[p+6] == '1') // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; wait_char(';', 8, 100, "get notch val", ASC); gett("get_notch_val"); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4),3) * 10; return (notch_on = ison); } void RIG_FT5000::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3000; step = 10; } void RIG_FT5000::set_auto_notch(int v) { cmd = "BC00;"; if (v) cmd[3] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET auto notch", cmd, replystr); } int RIG_FT5000::get_auto_notch() { cmd = "BC0;"; wait_char(';', 5, 100, "get auto notch", ASC); gett("get_auto_notch"); size_t p = replystr.rfind("BC0"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } int FT5000_blanker_level = 0; void RIG_FT5000::set_noise(bool b) { cmd = "NB00;"; if (FT5000_blanker_level == 0) { FT5000_blanker_level = 1; nb_label("NB 1", true); } else if (FT5000_blanker_level == 1) { FT5000_blanker_level = 2; nb_label("NB 2", true); } else if (FT5000_blanker_level == 2) { FT5000_blanker_level = 0; nb_label("NB", false); } cmd[3] = '0' + FT5000_blanker_level; sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); } int RIG_FT5000::get_noise() { cmd = rsp = "NB0"; cmd += ';'; wait_char(';', 5, 100, "get NB", ASC); gett("get_noise"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return FT5000_blanker_level; FT5000_blanker_level = replystr[p+3] - '0'; if (FT5000_blanker_level == 1) { nb_label("NB 1", true); } else if (FT5000_blanker_level == 2) { nb_label("NB 2", true); } else { nb_label("NB", false); FT5000_blanker_level = 0; } return FT5000_blanker_level; } // val 0 .. 100 void RIG_FT5000::set_mic_gain(int val) { cmd = "MG000;"; val = (int)(val * 255 / 100); // convert to 0 .. 255 for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); sett("set mic gain"); } int RIG_FT5000::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); gett("get_mic_gain"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); return val * 100 / 255; } void RIG_FT5000::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT5000::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = val * 255 / 100; for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); sett("set rf gain"); } int RIG_FT5000::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, 100, "get rfgain", ASC); gett("get_rf_gain"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = rfval * 100 / 255; if (rfval > 100) rfval = 100; return rfval; } void RIG_FT5000::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT5000::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); sett("set vox on/off"); } void RIG_FT5000::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); sett("set vox gain"); } void RIG_FT5000::set_vox_anti() { cmd = "EX175"; cmd.append(to_decimal(progStatus.vox_anti, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET anti-vox", cmd, replystr); sett("set vox anti"); } void RIG_FT5000::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); sett("set vox hang"); } void RIG_FT5000::set_vox_on_dataport() { cmd = "EX1140;"; if (progStatus.vox_on_dataport) cmd[5] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); sett("set vox on data port"); } void RIG_FT5000::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); sett("set cw wpm"); } void RIG_FT5000::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); sett("enable keyer"); } bool RIG_FT5000::set_cw_spot() { if (vfo->imode == 2 || vfo->imode == 6) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); sett("set cw spot on/off"); return true; } else return false; } void RIG_FT5000::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX065").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); sett("set cw weight"); } void RIG_FT5000::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX068").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); 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; } double RIG_FT5000::get_voltmeter() { cmd = "RM8;"; std::string resp = "RM"; int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); wait_char(';',7, 100, "get vdd", ASC); gett("get_voltmeter"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = atoi(&replystr[p+3]); val = 13.8 * mtr / 190; return val; } return -1; } double RIG_FT5000::get_idd() { cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_idd"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 9 >= replystr.length()) return 0; replystr[6] = '\x00'; double mtr = atoi(&replystr[p+3]); return mtr / 10.0; } /* void RIG_FT5000::set_cw_spot_tone() { int n = (progStatus.cw_spot_tone - 300) / 50; cmd = "EX045"; cmd.append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); } void RIG_FT5000::set_cw_vol() { } */ flrig-2.0.04/src/rigs/yaesu/FT900.cxx0000664000175000017500000002117214502041135013770 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // 2015-10-04 adapted from FT890.cxx by Ernst F. Schroeder DJ7HS // the FT-900 has two vfos and can work split // but it cannot change the (hidden) alternate vfo // 2015-12-03 1st stable version DJ7HS // 2016-04-03 call get_info() within get_vfoA and get_vfoB DJ7HS // 2017-06-16 changes in support.cxx made adaptations necessary DJ7HS // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "yaesu/FT900.h" #include "status.h" #include "support.h" const char FT900name_[] = "FT-900"; std::vectorFT900modes_; static const char *vFT900modes_[] = { "LSB", "USB", "CW", "CW-N", "AM", "AM-N", "FM"}; static const int FT900_mode_val[] = { 0, 1, 2, 3, 4, 5, 6 }; static const char FT900_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'U', 'U' }; static std::vectorFT900widths_; static const char *vFT900widths_[] = { "wide", "narr"}; static const int FT900_bw_val[] = { 0, 1 }; RIG_FT900::RIG_FT900() { name_ = FT900name_; modes_ = FT900modes_; bandwidths_ = FT900widths_; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 5; serial_post_write_delay = 50; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; afreq = bfreq = A.freq = B.freq = 14070000ULL; amode = bmode = A.imode = B.imode = 1; aBW = bBW = A.iBW = B.iBW = 0; precision = 10; has_smeter = has_power_out = has_ptt_control = has_split = has_split_AB = has_getvfoAorB = has_get_info = has_mode_control = true; precision = 10; ndigits = 7; } void RIG_FT900::initialize() { VECTOR (FT900modes_, vFT900modes_); VECTOR (FT900widths_, vFT900widths_); modes_ = FT900modes_; bandwidths_ = FT900widths_; progStatus.poll_split = 1; // allow pollimg for split info // progStatus.poll_vfoAorB = 1; // allow pollimg for vfo info } void RIG_FT900::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT900::selectA() { init_cmd(); cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select vfo A", cmd, replystr); inuse = onA; } void RIG_FT900::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; sendCommand(cmd); showresp(WARN, HEX, "select vfo B", cmd, replystr); inuse = onB; } void RIG_FT900::set_split(bool val) { init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; sendCommand(cmd); if (val) showresp(WARN, HEX, "set split ON", cmd, replystr); else showresp(WARN, HEX, "set split OFF", cmd, replystr); } int RIG_FT900::get_split() { return splitison; } int RIG_FT900::get_vfoAorB() { // get flags for vfoAorB and split init_cmd(); cmd[4] = 0xFA; int ret = waitN(5, 100, "get flags info", HEX); // after this command the FT-900 replies with 3 bytes of flags and 2 bytes of dummy data if (ret >= 5) { size_t p = ret - 5; int sp = replystr[p]; splitison = (sp & 0x04) ? 1 : 0; // 1 if split is set vfoAorB = (sp & 0x40) ? 1 : 0; // 0 if vfoA, 1 if vfoB is in use return vfoAorB; } return -1; // -1 signals error } //void RIG_FT900::swapAB() // works with a simple trick //{ // init_cmd(); // cmd[4] = 0x85; // copy active vfo to background vfo // sendCommand(cmd); // showresp(WARN, HEX, "copy active vfo to background vfo", cmd, replystr); // if (inuse == onA) { // queA.push(vfoB); // B = vfoA; // } else { // queB.push(vfoA); // A = vfoB; // } //} bool RIG_FT900::check() { init_cmd(); cmd[3] = 0x03; cmd[4] = 0x10; int ret = waitN(18, 100, "check", HEX); if (ret >= 18) return true; return false; } bool RIG_FT900::get_info() { // get the vfo, mode and bandwidth information init_cmd(); cmd[3] = 0x03; cmd[4] = 0x10; // after this command the FT-900 replies with 2 x 9 bytes of data // bytes 1..3 contain binary data for vfoA with 10 Hz resolution // bytes 10..12 contain binary data for vfoB with 10 Hz resolution // bytes 6 and 15 contain the mode and bytes 8 and 17 contain the bandwidth int ret = waitN(18, 100, "get info", HEX); if (ret >= 18) { size_t p = ret - 18; afreq = 0; bfreq = 0; for (size_t n = 1; n < 4; n++) { afreq = afreq * 256 + (unsigned char)replystr[p + n]; bfreq = bfreq * 256 + (unsigned char)replystr[p + 9 + n]; } afreq = afreq * 10.0; bfreq = bfreq * 10.0; aBW = 0; // normal BW // mode data for vfoA is in byte 6 // bandwidth data is in byte 8 int md = replystr[p + 6]; int bw = replystr[p + 8]; switch (md) { case 0 : // LSB amode = 0; break; case 1 : // USB amode = 1; break; case 2 : // CW amode = (bw & 0x80) ? 3 : 2; aBW = (bw & 0x80) ? 1 : 0; break; case 3 : // AM amode = (bw & 0x40) ? 5 : 4; aBW = (bw & 0x40) ? 1 : 0; break; case 4 : // FM amode = 6; break; default : amode = 1; } bBW = 0; // mode data for vfoB is in byte 15 // bandwidth data is in byte 17 md = replystr[p + 15]; bw = replystr[p + 17]; switch (md) { case 0 : // LSB bmode = 0; break; case 1 : // USB bmode = 1; break; case 2 : // CW bmode = (bw & 0x80) ? 3 : 2; bBW = (bw & 0x80) ? 1 : 0; break; case 3 : // AM bmode = (bw & 0x40) ? 5 : 4; bBW = (bw & 0x40) ? 1 : 0; break; case 4 : // FM bmode = 6; break; default : bmode = 1; } A.freq = afreq; A.imode = amode; A.iBW = aBW; B.freq = bfreq; B.imode = bmode; B.iBW = bBW; return true; } return false; } unsigned long long RIG_FT900::get_vfoA () { return A.freq; } void RIG_FT900::set_vfoA (unsigned long long freq) { A.freq = freq; freq /=10; // FT-900 does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set vfo A", cmd, replystr); } int RIG_FT900::get_modeA() { return A.imode; } void RIG_FT900::set_modeA(int val) { A.imode = val; init_cmd(); cmd[3] = FT900_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode A", cmd, replystr); } unsigned long long RIG_FT900::get_vfoB() { return B.freq; } void RIG_FT900::set_vfoB(unsigned long long freq) { B.freq = freq; freq /=10; // FT-900 does not support 1 Hz resolution cmd = to_bcd_be(freq, 8); cmd += 0x0A; sendCommand(cmd); showresp(WARN, HEX, "set vfo B", cmd, replystr); } void RIG_FT900::set_modeB(int val) { B.imode = val; init_cmd(); cmd[3] = FT900_mode_val[val]; cmd[4] = 0x0C; sendCommand(cmd); showresp(WARN, HEX, "set mode B", cmd, replystr); } int RIG_FT900::get_modeB() { return B.imode; } // Transceiver PTT on/off void RIG_FT900::set_PTT_control(int val) { // make sure no other vfo except either vfoA or vfoB is used for transmit if (val) { if (inuse == onA) { selectA(); } else { selectB(); } } // make sure that in case of split the transmit mode is shown correctly if (splitison) { if (val) { if (inuse == onA) { vfo = &vfoB; } else { vfo = &vfoA; } } else { if (inuse == onA) { vfo = &vfoA; } else { vfo = &vfoB; } } Fl::awake(setModeControl); } init_cmd(); if (val) cmd[3] = 1; else cmd[3] = 0; cmd[4] = 0x0F; sendCommand(cmd, 0); LOG_INFO("%s", str2hex(cmd.c_str(), 5)); ptt_ = val; } int RIG_FT900::get_smeter() { init_cmd(); cmd[4] = 0xF7; int ret = waitN(5, 100, "get smeter", HEX); if (ret < 5) return 0; int sval = (unsigned char)(replystr[ret - 2]); sval = sval * 100 / 255; return sval; } int RIG_FT900::get_power_out() { init_cmd(); cmd[4] = 0xF7; int ret = waitN(5, 100, "get pwr out", HEX); if (ret < 5) return 0; int sval = (unsigned char)(replystr[ret - 2]); sval = sval * 100 / 255; return sval; } flrig-2.0.04/src/rigs/yaesu/FT818.cxx0000664000175000017500000001670614502041135014007 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FT818.h" #include "rigpanel.h" //============================================================================= // FT818ND //============================================================================= static const char FT818NDname_[] = "FT-818ND"; static std::vectorFT818NDmodes_; static const char *vFT818NDmodes_[] = { "LSB", "USB", "CW", "CW-R", "AM", "FM", "DIG", "PKT"}; static const int FT818ND_mode_val[] = { 0, 1, 2, 3, 4, 8, 0x0A, 0x0C }; static const char FT818ND_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U' }; RIG_FT818ND::RIG_FT818ND() { name_ = FT818NDname_; modes_ = FT818NDmodes_; serial_baudrate = BR4800; stopbits = 2; serial_retries = 4; serial_write_delay = 1; serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 0; has_split = has_split_AB = has_swr_control = has_alc_control = has_smeter = has_power_out = has_ptt_control = has_mode_control = true; precision = 10; ndigits = 8; inuse = onNIL; } void RIG_FT818ND::initialize() { VECTOR (FT818NDmodes_, vFT818NDmodes_); modes_ = FT818NDmodes_; } static void settle(int n) { for (int i = 0; i < n/50; i++) {MilliSleep(50); Fl::awake();} } void RIG_FT818ND::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; MilliSleep(5); // K0OG } void RIG_FT818ND::selectA() { if (inuse == onA) return; init_cmd(); cmd[4] = 0x81; sendCommand(cmd); inuse = onA; get_vfoA(); } void RIG_FT818ND::selectB() { if (inuse == onB) return; init_cmd(); cmd[4] = 0x81; sendCommand(cmd); inuse = onB; get_vfoB(); } bool RIG_FT818ND::check () { return true; } unsigned long long RIG_FT818ND::get_vfoA () { if (inuse == onB) return freqA; init_cmd(); cmd[4] = 0x03; int ret = 0; int repeat = 5; do { ret = waitN(5, 100, "get vfoA"); getthex("get_vfoA"); MilliSleep(100); } while (ret < 5 && repeat--); if (ret < 5) { gett("get vfoA FAILED"); return freqA; } freqA = fm_bcd(replystr, 8) * 10; int mode = (replystr[4] & 0x0F); int i = 0; for ( ; i < 8; i++) if (FT818ND_mode_val[i] == mode) { modeA = i; break; } static char msg[50]; snprintf(msg, sizeof(msg), "get vfoA: %llu, %s", freqA, FT818NDmodes_[i].c_str()); gett(msg); return freqA; } void RIG_FT818ND::set_vfoA (unsigned long long freq) { freqA = freq; freq /=10; // 818 does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; sendCommand(cmd); settle(150); setthex("set_vfoA"); } int RIG_FT818ND::get_modeA() { return modeA; } int RIG_FT818ND::get_modetype(int n) { return FT818ND_mode_type[n]; } void RIG_FT818ND::set_modeA(int val) { init_cmd(); cmd[0] = FT818ND_mode_val[val]; cmd[4] = 0x07; sendCommand(cmd); setthex("set_modeA"); settle(150); get_vfoA(); int n = 0; while (modeA != val && n++ < 10) { MilliSleep(50); get_vfoA(); } if (n == 10) LOG_ERROR("set_modeA failed"); } // VFO B =============================================================== unsigned long long RIG_FT818ND::get_vfoB () { if (inuse == onA) return freqB; init_cmd(); cmd[4] = 0x03; int ret = 0; int repeat = 5; do { ret = waitN(5, 100, "get vfoB"); getthex("get_vfoB"); MilliSleep(100); } while (ret < 5 && repeat--); if (ret < 5) { gett("get vfoB FAILED"); return freqB; } freqB = fm_bcd(replystr, 8) * 10; int mode = (replystr[4] & 0x0F); int i = 0; for ( ; i < 8; i++) if (FT818ND_mode_val[i] == mode) { modeB = i; break; } static char msg[50]; snprintf(msg, sizeof(msg), "get vfoB: %llu, %s", freqB, FT818NDmodes_[i].c_str()); gett(msg); return freqB; } void RIG_FT818ND::set_vfoB (unsigned long long freq) { freqB = freq; freq /=10; // 817 does not support 1 Hz resolution cmd = to_bcd(freq, 8); cmd += 0x01; sendCommand(cmd); settle(150); setthex("set_vfoB"); } int RIG_FT818ND::get_modeB() { return modeB; } void RIG_FT818ND::set_modeB(int val) { init_cmd(); cmd[0] = FT818ND_mode_val[val]; cmd[4] = 0x07; sendCommand(cmd); setthex("set_modeB"); settle(150); get_vfoB(); int n = 0; while (modeB != val && n++ < 10) { MilliSleep(50); get_vfoB(); } if (n == 10) LOG_ERROR("set_modeB failed"); } //====================================================================== // Tranceiver PTT on/off void RIG_FT818ND::set_PTT_control(int val) { init_cmd(); if (val) cmd[4] = 0x08; else cmd[4] = 0x88; sendCommand(cmd); setthex("set_PTT_control"); ptt_ = val; } // mapping for smeter and power out static int smeter_map[] = { 0, 7, 13, 19, 25, 30, 35, 40, 45, 50, 55, 61, 68, 77, 88, 100 }; // power out is scaled by 10 to allow display on flrig power scales static int pmeter_map[] = { 0, 5, 7, 10, 17, 25, 33, 41, 50 }; //0, 0.5, 0.75, 1.0, 1.7, 2.5, 3.3, 4.1, 5.0 static int swr_map[] = { 0, 4, 8, 13, 25, 37, 60, 70, 80, 90, 100, 100, 100, 100, 100, 100}; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 static int alc_map[] = { 0, 20, 40, 60, 80, 100, 100, 100, 100, 100, 100, 100, 100, 100}; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 static int swr; static int alc; // It is unclear if undocumented command 0xBD is supported on FT-818BD, // but this seems to still work // uses undocumented command 0xBD // returns two bytes b0 b1 // b0 PWR|SWR // b1 ALC|MOD int RIG_FT818ND::get_power_out() { init_cmd(); cmd[4] = 0xBD; int ret = waitN(2, 100, "get PWR/SWR/ALC"); getthex("get_power_out"); if (ret != 2) return 0; int fwdpwr = (replystr[0] & 0xF0) >> 4; swr = (replystr[1] & 0xF0) >> 4; alc = (replystr[0] & 0x0F); if (fwdpwr > 8) fwdpwr = 8; if (fwdpwr < 0) fwdpwr = 0; return pmeter_map[fwdpwr]; } int RIG_FT818ND::get_swr() { return swr_map[swr]; } int RIG_FT818ND::get_alc() { return alc_map[alc]; } int RIG_FT818ND::get_smeter() { init_cmd(); cmd[4] = 0xE7; int ret = waitN(1, 100, "get smeter"); getthex("get_smeter"); if (!ret) return 0; int sval = replystr[0] & 0x0F; if (sval < 0) sval = 0; if (sval > 15) sval = 15; return smeter_map[sval]; } void RIG_FT818ND::set_split(bool val) { init_cmd(); if (val) cmd[4] = 0x02; else cmd[4] = 0x82; split = val; sendCommand(cmd); setthex("set_split"); return; } extern bool PTT; int RIG_FT818ND::get_split() { if (!PTT) return split; init_cmd(); cmd[4] = 0xF7; // get transmit status int ret = waitN(1, 100, "get TX status"); getthex("get_split"); if (ret == 0) return 0; split = (replystr[0] & 0x20) == 0x20; return split; } int RIG_FT818ND::power_scale() { return 10; } flrig-2.0.04/src/rigs/yaesu/FT991A.cxx0000664000175000017500000011256114502041135014106 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "yaesu/FT991A.h" #include "debug.h" #include "support.h" #define FL991A_WAIT_TIME 200 enum mFT991 { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N, mC4FM }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 // mode index static const char FT991Aname_[] = "FT-991A"; static std::vectorFT991Amodes_; static const char *vFT991Amodes_[] = { "LSB", "USB", "CW-U", "FM", "AM", "RTTY-L", "CW-L", "DATA-L", "RTTY-U", "DATA-FM", "FM-N", "DATA-U", "AM-N", "C4FM"}; static const char FT991A_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E' }; static const char FT991A_mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U', 'U', 'U', 'U' }; static const int FT991A_def_bw[] = { 17, 17, 5, 0, 0, 10, 5, 16, 10, 0, 0, 16, 0, 0 }; // mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mPKT_L, mRTTY_U, mPKT_FM, mFM_N, mPKT_U, mAM_N, mC4FM static std::vectorFT991A_widths_SSB; static const char *vFT991A_widths_SSB[] = { "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3200" }; static int FT991A_wvals_SSB[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, WVALS_LIMIT}; static std::vectorFT991A_widths_SSBD; static const char *vFT991A_widths_SSBD[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FT991A_wvals_SSBD[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, WVALS_LIMIT}; static std::vectorFT991A_widths_CW; static const char *vFT991A_widths_CW[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400", "3000" }; static int FT991A_wvals_CW[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, WVALS_LIMIT}; // Single bandwidth modes static std::vectorFT991A_widths_AMFMnar; static const char *vFT991A_widths_AMFMnar[] = { "NARR" }; static std::vectorFT991A_widths_AMFMnorm; static const char *vFT991A_widths_AMFMnorm[] = { "NORM" }; static const int FT991A_wvals_AMFM[] = { 0, WVALS_LIMIT }; // mPKT_FM Multi bandwidth mode static std::vectorFT991A_widths_NN; static const char *vFT991A_widths_NN[] = {"NORM", "NARR" }; static const int FT991A_wvals_NN[] = {0, 1, WVALS_LIMIT}; // US 60M 5-USB, 5-CW static std::vectorUS_60m_chan; static const char *vUS_60m_chan[] = {"000","125","126","127","128","130","141","142","143","144","146"}; static std::vectorUS_60m_label; static const char *vUS_60m_label[] = {"VFO","U51","U52","U53","U54","U55","U56","U57","U58","U59","U50"}; // UK 60m channel numbers by Brian, G8SEZ //static std::vectorUK_60m_chan = {"000","118","120","121","127","128","129","130"}; //static std::vectorUK_60m_label = {"VFO","U51","U52","U53","U54","U55","U56","U57"}; //static std::vector& Channels_60m = US_60m_chan; //static std::vector& label_60m = US_60m_label; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)btnAGC, 2, 145, 50 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_FT991A::RIG_FT991A() { // base class values IDstr = "ID"; name_ = FT991Aname_; modes_ = FT991Amodes_; bandwidths_ = FT991A_widths_SSB; bw_vals_ = FT991A_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 25; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 12; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; has_compON = has_compression = has_a2b = has_ext_tuner = has_xcvr_auto_on_off = has_split = has_split_AB = has_band_selection = has_noise_reduction = has_noise_reduction_control = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_vfo_adj = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_weight = has_cw_break_in = can_change_alt_vfo = has_smeter = has_alc_control = has_swr_control = has_agc_control = has_idd_control = has_voltmeter = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = can_synch_clock = true; // derived specific atten_level = 1; preamp_level = 2; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 9; } void RIG_FT991A::initialize() { VECTOR (FT991Amodes_, vFT991Amodes_); VECTOR (FT991A_widths_SSB, vFT991A_widths_SSB); VECTOR (FT991A_widths_SSBD, vFT991A_widths_SSBD); VECTOR (FT991A_widths_CW, vFT991A_widths_CW); VECTOR (FT991A_widths_AMFMnar, vFT991A_widths_AMFMnar); VECTOR (FT991A_widths_AMFMnorm, vFT991A_widths_AMFMnorm); VECTOR (FT991A_widths_NN, vFT991A_widths_NN); VECTOR (US_60m_chan, vUS_60m_chan); VECTOR (US_60m_label, vUS_60m_label); modes_ = FT991Amodes_; bandwidths_ = FT991A_widths_SSB; bw_vals_ = FT991A_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = btnAGC; rig_widgets[3].W = sldrRFGAIN; rig_widgets[4].W = btnIFsh; rig_widgets[5].W = sldrIFSHIFT; rig_widgets[6].W = btnNotch; rig_widgets[7].W = sldrNOTCH; rig_widgets[8].W = sldrMICGAIN; rig_widgets[9].W = sldrPOWER; rig_widgets[10].W = btnNR; rig_widgets[11].W = sldrNR; // set progStatus defaults if (progStatus.notch_val < 10) progStatus.notch_val = 1500; if (progStatus.noise_reduction_val < 1) progStatus.noise_reduction_val = 1; if (progStatus.power_level < 5) progStatus.power_level = 5; // first-time-thru, or reset if (progStatus.cw_qsk < 15) { progStatus.cw_qsk = 15; progStatus.cw_spot_tone = 700; progStatus.cw_weight = 3.0; progStatus.cw_wpm = 18; progStatus.vox_on_dataport = false; progStatus.vox_gain = 50; progStatus.vox_anti = 50; progStatus.vox_hang = 500; } // Disable Auto Information mode sendCommand("AI0;"); /* // "MRnnn;" if valid, returns last channel used, "mrlll...;", along with channel nnn info. cmd = "MR118;"; wait_char(';', 27, FL991A_WAIT_TIME, "Read UK 60m Channel Mem", ASC); size_t p = replystr.rfind("MR"); if (p == std::string::npos) { Channels_60m = US_60m_chan; label_60m = US_60m_label; op_yaesu_select60->clear(); char **p = (char **)US_60m_label; while (*p) op_yaesu_select60->add(*p++); } else { Channels_60m = UK_60m_chan; label_60m = UK_60m_label; op_yaesu_select60->clear(); char **p = (char **)UK_60m_label; while (*p) op_yaesu_select60->add(*p++); } op_yaesu_select60->index(m_60m_indx); */ } void RIG_FT991A::post_initialize() { // enable_yaesu_bandselect(12, false); // enable_yaesu_bandselect(13, false); } bool RIG_FT991A::check () { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';',12, FL991A_WAIT_TIME, "check", ASC); if (ret >= 12) return true; return false; } unsigned long long RIG_FT991A::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';',12, FL991A_WAIT_TIME, "get vfo A", ASC); gett("get_vfoA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; p += 2; unsigned long long f = 0; for (int n = 0; n < ndigits; n++) f = f * 10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_FT991A::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA000000000;"; for (int i = 0; i < ndigits; i++) { cmd[ndigits + 1 - i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); sett("set_vfoA"); } unsigned long long RIG_FT991A::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';',12, FL991A_WAIT_TIME, "get vfo B", ASC); gett("get_vfoB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; p += 2; unsigned long long f = 0; for (int n = 0; n < ndigits; n++) f = f * 10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_FT991A::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB000000000;"; for (int i = 0; i < ndigits; i++) { cmd[ndigits + 1 - i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); sett("set_vfoB"); } void RIG_FT991A::selectA() { cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); sett("selectA"); inuse = onA; } void RIG_FT991A::selectB() { cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); sett("selectB"); inuse = onB; } void RIG_FT991A::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A->B", cmd, replystr); sett("A2B"); } void RIG_FT991A::B2A() { cmd = "BA;"; sendCommand(cmd); showresp(WARN, ASC, "vfo B->A", cmd, replystr); sett("B2A"); } void RIG_FT991A::swapAB() { cmd = "SV;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A<>B", cmd, replystr); sett("swapAB"); } bool RIG_FT991A::can_split() { return true; } void RIG_FT991A::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, replystr); } else { cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, replystr); } } else { if (val) { cmd = "FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, replystr); } else { cmd = "FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, replystr); } } sett("set_split"); Fl::awake(highlight_vfo, (void *)0); } int RIG_FT991A::get_split() { size_t p; char rx, tx; // tx vfo cmd = rsp = "RI6"; cmd.append(";"); wait_char(';', 5, FL991A_WAIT_TIME, "get split tx vfo", ASC); gett("get split tx"); p = replystr.rfind(rsp); if (p == std::string::npos) return false; tx = replystr[p+3] - '0'; // rx vfo // The FT991/A doesn't support FR so use RI7 // Radio Information -> VFO-A RX -> 0 : 1 cmd = rsp = "RI7"; cmd.append(";"); wait_char(';', 5, FL991A_WAIT_TIME, "get split rx vfo", ASC); gett("get split rx"); p = replystr.rfind(rsp); if (p == std::string::npos) return false; rx = replystr[p+3] - '0'; // If tx & rx are different: not running split if (tx == rx) return true; return false; } int RIG_FT991A::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';',7, FL991A_WAIT_TIME, "get smeter", ASC); gett("get_smeter"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FT991A::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';',7, FL991A_WAIT_TIME, "get swr", ASC); gett("get_swr"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } int RIG_FT991A::get_alc() { cmd = rsp = "RM4"; cmd += ';'; wait_char(';',7, FL991A_WAIT_TIME, "get alc", ASC); gett("get_alc"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } double RIG_FT991A::get_voltmeter() { cmd = "RM8;"; std::string resp = "RM"; int mtr = 0; double val = 0; get_trace(1, "get_voltmeter()"); wait_char(';',7, 100, "get vdd", ASC); gett("get_voltmeter"); size_t p = replystr.rfind(resp); if (p != std::string::npos) { mtr = atoi(&replystr[p+3]); val = 13.8 * mtr / 190; return val; } return -1; } double RIG_FT991A::get_idd() { cmd = rsp = "RM7"; cmd += ';'; wait_char(';',10, 100, "get alc", ASC); gett("get_idd"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 9 >= replystr.length()) return 0; replystr[6] = '\x00'; double mtr = atoi(&replystr[p+3]); return mtr / 10.0; } int RIG_FT991A::get_power_out() { cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';',7, FL991A_WAIT_TIME, "get pout", ASC); gett("get_power_out"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; double mtr = (double)(atoi(&replystr[p+3])); mtr = 3.8 - 0.0047 * mtr + .0022257 * mtr * mtr; return (int)ceil(mtr); } // Transceiver power level double RIG_FT991A::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';',6, FL991A_WAIT_TIME, "get power", ASC); gett("get_power_control"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FT991A::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); sett("set_power_control"); } // Volume control return 0 ... 100 int RIG_FT991A::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';',7, FL991A_WAIT_TIME, "get vol", ASC); gett("get_volume_control"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = round(atoi(&replystr[p+3]) / 2.55); if (val > 100) val = 100; return ceil(val); } void RIG_FT991A::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); sett("set_volume_control"); } // Tranceiver PTT on/off void RIG_FT991A::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); MilliSleep(50); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; sett("set_ptt_control"); } int RIG_FT991A::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, FL991A_WAIT_TIME, "get PTT", ASC); gett("get PTT"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; switch (replystr[p+2]) { default: case '0' : ptt_ = false; break; case '1': case '2': ptt_ = true; break; } return ptt_; } // internal or external tune mode void RIG_FT991A::tune_rig(int how) { cmd = "AC000;"; if (how == 1) cmd[4] = '1'; else if (how == 2) cmd[4] = '2'; sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FT991A::get_tune() { cmd = "AC;"; wait_char(';',6, FL991A_WAIT_TIME, "Tuner Enabled?", ASC); gett("get_tune"); size_t p = replystr.rfind("AC"); if (p == std::string::npos) return 0; if ((p + 5) >= replystr.length()) return 0; if (replystr[p+4] == '0') { return 0; } return 1; } int RIG_FT991A::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 0; } return 0; } void RIG_FT991A::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); sett("set_attenuator"); } int RIG_FT991A::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';',5, FL991A_WAIT_TIME, "get att", ASC); gett("get_attenuator"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FT991A::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FT991A::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); sett("set_preamp"); } int RIG_FT991A::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';',5, FL991A_WAIT_TIME, "get pre", ASC); gett("get_preamp"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FT991A::ATT_label() { if (atten_level == 1) return "12 dB"; return "ATT"; } const char *RIG_FT991A::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } int RIG_FT991A::adjust_bandwidth(int val) { switch (val) { case mCW : case mCW_R : case mRTTY_L : case mRTTY_U : bandwidths_ = FT991A_widths_CW; bw_vals_ = FT991A_wvals_CW; break; case mFM : case mAM : bandwidths_ = FT991A_widths_AMFMnorm; bw_vals_ = FT991A_wvals_AMFM; break; case mFM_N : case mAM_N : bandwidths_ = FT991A_widths_AMFMnar; bw_vals_ = FT991A_wvals_AMFM; break; case mPKT_FM : bandwidths_ = FT991A_widths_NN; bw_vals_ = FT991A_wvals_NN; break; case mPKT_L : case mPKT_U : bandwidths_ = FT991A_widths_SSBD; bw_vals_ = FT991A_wvals_SSBD; break; default: bandwidths_ = FT991A_widths_SSB; bw_vals_ = FT991A_wvals_SSB; } return FT991A_def_bw[val]; } int RIG_FT991A::def_bandwidth(int val) { return FT991A_def_bw[val]; } std::vector& RIG_FT991A::bwtable(int n) { switch (n) { case mPKT_FM : return FT991A_widths_NN; case mFM : case mAM : return FT991A_widths_AMFMnorm; case mFM_N : case mAM_N : return FT991A_widths_AMFMnar; case mCW : case mCW_R : case mRTTY_L : case mRTTY_U : return FT991A_widths_CW; case mPKT_L : case mPKT_U : return FT991A_widths_SSBD; default : break; } return FT991A_widths_SSB; } void RIG_FT991A::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FT991A_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); adjust_bandwidth(modeA); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } sett("set_modeA"); } int RIG_FT991A::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';',5, FL991A_WAIT_TIME, "get mode A", ASC); gett("get_modeA"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeA = md; } } adjust_bandwidth(modeA); return modeA; } void RIG_FT991A::set_modeB(int val) { modeB = val; // Need to swap the vfos for the MD command to work on VFO B cmd = "SV;MD0"; cmd += FT991A_mode_chr[val]; cmd += ";SV;"; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); if (val == mCW || val == mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } sett("set_modeB"); } int RIG_FT991A::get_modeB() { // Use Opposite Information command to read VFO B mode int n = 21; cmd = rsp = "OI"; cmd += ';'; wait_char(';',28, FL991A_WAIT_TIME, "get mode B", ASC); gett("get_modeB"); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { // JBA - n tells us where to start in the response if (p + n < replystr.length()) { int md = replystr[p+n]; if (md <= '9') md = md - '1'; else md = 9 + md - 'A'; modeB = md; } } return modeB; } void RIG_FT991A::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mAM_N) return; if (modeA == mPKT_FM) { if (val == 1) cmd = "NA01;"; else cmd = "NA00;"; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); return; } if ((((modeA == mLSB || modeA == mUSB) && val < 8)) || ((modeA == mCW || modeA == mCW_R || modeA == mRTTY_L || modeA == mRTTY_U || modeA == mPKT_L || modeA == mPKT_U) && val < 4) ) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); sett("set_bwA"); } int RIG_FT991A::get_bwA() { size_t p; if (modeA == mFM || modeA == mAM || modeA == mFM_N || modeA == mAM_N) { bwA = 0; return bwA; } if (modeA == mPKT_FM) { cmd = rsp = "NA0"; cmd += ';'; wait_char(';',5, FL991A_WAIT_TIME, "get bw A narrow", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) { bwA = 0; return bwA; } if (p + 4 >= replystr.length()) { bwA = 0; return bwA; } if (replystr[p+3] == '1') bwA = 1; // narrow on else bwA = 0; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';',6, FL991A_WAIT_TIME, "get bw A", ASC); gett("get_bwA"); p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; if (p + 5 >= replystr.length()) return bwA; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; return bwA; } void RIG_FT991A::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mAM_N) return; if (modeB == mPKT_FM) { if (val == 1) cmd = "NA01;"; else cmd = "NA00;"; sendCommand(cmd); showresp(WARN, ASC, "SET bw B", cmd, replystr); return; } if ((((modeB == mLSB || modeB == mUSB) && val < 8)) || ((modeB == mCW || modeB == mCW_R || modeB == mRTTY_L || modeB == mRTTY_U || modeB == mPKT_L || modeB == mPKT_U) && val < 4) ) cmd = "NA01;"; else cmd = "NA00;"; cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw B", cmd, replystr); sett("set_bwB"); } int RIG_FT991A::get_bwB() { size_t p; if (modeB == mFM || modeB == mAM || modeB == mFM_N || modeB == mAM_N) { bwB = 0; return bwB; } if (modeB == mPKT_FM) { cmd = rsp = "NA0"; cmd += ';'; wait_char(';',5, FL991A_WAIT_TIME, "get bw B narrow", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) { bwB = 0; return bwB; } if (p + 4 >= replystr.length()) { bwB = 0; return bwB; } if (replystr[p+3] == '1') bwB = 1; // narrow on else bwB = 0; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';',6, FL991A_WAIT_TIME, "get bw B", ASC); gett("get_bwB"); p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; if (p + 5 >= replystr.length()) return bwB; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; return bwB; } int RIG_FT991A::get_modetype(int n) { return FT991A_mode_type[n]; } void RIG_FT991A::set_if_shift(int val) { cmd = "IS0+0000;"; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); sett("set_if_shift"); } bool RIG_FT991A::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';',9, FL991A_WAIT_TIME, "get if shift", ASC); gett("get_if_shift"); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FT991A::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1000; if_shift_max = max = 1000; if_shift_step = step = 20; if_shift_mid = 0; } void RIG_FT991A::set_notch(bool on, int val) { // set notch frequency if (on) { cmd = "BP00001;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); cmd = "BP01000;"; if (val % 10 >= 5) val += 10; val /= 10; for (int i = 3; i > 0; i--) { cmd[3 + i] += val % 10; val /=10; } sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); sett("set_notch_val"); return; } // set notch off cmd = "BP00000;"; sendCommand(cmd); sett("set_notch_on/off"); showresp(WARN, ASC, "SET notch off", cmd, replystr); } bool RIG_FT991A::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; wait_char(';',8, FL991A_WAIT_TIME, "get notch on/off", ASC); gett("get_notch"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; if (replystr[p+6] == '1') { // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; wait_char(';',8, FL991A_WAIT_TIME, "get notch val", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; } return ison; } void RIG_FT991A::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3000; step = 10; } void RIG_FT991A::set_auto_notch(int v) { cmd.assign("BC0").append(v ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET DNF Auto Notch Filter", cmd, replystr); sett("set_auto_notch"); } int RIG_FT991A::get_auto_notch() { cmd = "BC0;"; wait_char(';',5, FL991A_WAIT_TIME, "get auto notch", ASC); gett("get_auto_notch"); size_t p = replystr.rfind("BC0"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } void RIG_FT991A::set_noise(bool b) { if (b) cmd = "NB01;"; else cmd = "NB00;"; sendCommand (cmd); showresp(WARN, ASC, "SET noise blanker", cmd, replystr); sett("set_noise"); } int RIG_FT991A::get_noise() { cmd = "NB0;"; wait_char(';',5, FL991A_WAIT_TIME, "get NB", ASC); gett("get_noise"); size_t p = replystr.rfind("NB0"); if (p == std::string::npos) return 0; return replystr[p+3] - '0'; } // val 0 .. 100 void RIG_FT991A::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); sett("set_mic_gain"); } int RIG_FT991A::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';',6, FL991A_WAIT_TIME, "get mic", ASC); gett("get_mic_gain"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); if (val > 100) val = 100; return val; } void RIG_FT991A::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT991A::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = (int)(val * 2.50); for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); sett("set_rf_gain"); } int RIG_FT991A::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';',7, FL991A_WAIT_TIME, "get rfgain", ASC); gett("get_rf_gain"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = (int)(rfval / 2.50); if (rfval > 100) rfval = 100; return ceil(rfval); } void RIG_FT991A::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FT991A::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); sett("set_vox_onoff"); } void RIG_FT991A::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); sett("set_vox_gain"); } void RIG_FT991A::get_vox_gain() { cmd = "VG;"; wait_char(';', 6, FL991A_WAIT_TIME, "get VOX gain", ASC); gett("get_vox_gain"); size_t p = replystr.rfind("VG"); if (p == std::string::npos) return; replystr[p+5] = 0; progStatus.vox_gain = atoi(&replystr[p+2]); } void RIG_FT991A::set_vox_anti() { cmd = "EX117"; cmd.append(to_decimal(progStatus.vox_anti, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET anti-vox", cmd, replystr); sett("set_vox_anti"); } void RIG_FT991A::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); sett("set_vox_hang"); } void RIG_FT991A::get_vox_hang() { cmd = "VD;"; wait_char(';', 7, FL991A_WAIT_TIME, "get VOX delay", ASC); gett("get_vox_hang"); size_t p = replystr.rfind("VD"); if (p == std::string::npos) return; replystr[p+6] = 0; progStatus.vox_hang = atoi(&replystr[p+2]); } void RIG_FT991A::set_vox_on_dataport() { cmd = "EX1420;"; if (progStatus.vox_on_dataport) cmd[5] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); sett("set_vox_on_dataport"); } void RIG_FT991A::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); sett("set_cw_wpm"); } void RIG_FT991A::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); sett("enable_keyer"); } bool RIG_FT991A::set_cw_spot() { if (vfo->imode == mCW || vfo->imode == mCW_R) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); sett("set_cw_spot"); return true; } else return false; } void RIG_FT991A::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX014").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); sett("set_cw_weight"); } void RIG_FT991A::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX056").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); sett("set_cw_qsk"); } void RIG_FT991A::set_cw_spot_tone() { int n = (progStatus.cw_spot_tone - 300) / 50; cmd.assign("EX059").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); sett("set_cw_spot_tone"); } /* void RIG_FT991A::set_cw_vol() { } */ // DNR void RIG_FT991A::set_noise_reduction_val(int val) { cmd.assign("RL0").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, replystr); sett("set_noise_reduction_val"); } int RIG_FT991A::get_noise_reduction_val() { int val = 1; cmd = rsp = "RL0"; cmd.append(";"); wait_char(';',6, FL991A_WAIT_TIME, "GET noise reduction val", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = atoi(&replystr[p+3]); return val; } // DNR void RIG_FT991A::set_noise_reduction(int val) { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET noise reduction", cmd, replystr); sett("set_noise_reduction_on/off"); } int RIG_FT991A::get_noise_reduction() { int val; cmd = rsp = "NR0"; cmd.append(";"); wait_char(';',5, FL991A_WAIT_TIME, "GET noise reduction", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; val = replystr[p+3] - '0'; return val; } void RIG_FT991A::set_xcvr_auto_on() { if (!progStatus.xcvr_auto_on) return; cmd = rsp = "PS"; cmd.append(";"); wait_char(';',4, FL991A_WAIT_TIME, "Test: Is Rig ON", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) { // rig is off, power on cmd = "PS1;"; sendCommand(cmd); for (int i = 0; i < 1500; i += 100) { MilliSleep(100); update_progress(100 * i / 4500); Fl::awake(); } sendCommand(cmd); for (int i = 2500; i < 3000; i += 100) { MilliSleep(100); update_progress(100 * i / 4500); Fl::awake(); } sendCommand(cmd); for (int i = 3000; i < 4500; i += 100) { MilliSleep(100); update_progress(100 * i / 4500); Fl::awake(); } } sett("set_xcvr_auto_on"); } void RIG_FT991A::set_xcvr_auto_off() { if (!progStatus.xcvr_auto_off) return; cmd = "PS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET xcvr auto on/off", cmd, replystr); sett("set_xcvr_auto_off"); } void RIG_FT991A::set_compression(int on, int val) { if (on) { if (val == 0) { cmd.assign("PR2;"); // mic eq on sendCommand(cmd); showresp(WARN, ASC, "set Comp EQ on", cmd, replystr); } else { cmd.assign("PR1;PL").append(to_decimal(val, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set Comp on", cmd, replystr); } } else{ cmd.assign("PR0;"); sendCommand(cmd); showresp(WARN, ASC, "set Comp off", cmd, replystr); } sett("set_comression"); } void RIG_FT991A::setVfoAdj(double v) { char cmdstr[20]; int iv = fabs(v); snprintf(cmdstr, sizeof(cmdstr), "%02d", iv); cmd = "EX039"; if (v < 0) cmd += '-'; else cmd += '+'; cmd.append(cmdstr); cmd.append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vfo adjust", cmd, replystr); sett("set_VfoAdj"); } double RIG_FT991A::getVfoAdj() { cmd = rsp = "EX039"; sendCommand(cmd.append(";")); wait_char(';',9, FL991A_WAIT_TIME, "get Vfo Adjust", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; return (double)(atoi(&replystr[p+5])); } void RIG_FT991A::get_vfoadj_min_max_step(double &min, double &max, double &step) { min = -25; max = 25; step = 1; } void RIG_FT991A::get_band_selection(int v) { const char *bands[] = {"00", "01", "03", "04", "05", "06", "07", "08", "09", "10", "15", "16", "11"}; cmd.assign("BS").append(bands[v-1]).append(";"); 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; } // --------------------------------------------------------------------- // set date and time // 1A 05 00 95 HH MM : set time // 1A 05 00 94 YY YY MM DD : set date // --------------------------------------------------------------------- // dt formated as YYYYMMDD // --------------------------------------------------------------------- void RIG_FT991A::sync_date(char *dt) { cmd.assign("DT0"); cmd.append(dt); cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_date", cmd, replystr); sett("sync_date"); } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_FT991A::sync_clock(char *tm) { cmd.assign("DT1"); cmd += tm[0]; cmd += tm[1]; cmd += tm[3]; cmd += tm[4]; cmd += tm[6]; cmd += tm[7]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_time", cmd, replystr); sett("sync_time"); } static int agcval = 0; int RIG_FT991A::get_agc() { cmd = "GT0;"; wait_char(';', 6, FL991A_WAIT_TIME, "get agc", ASC); gett("get_agc"); size_t p = replystr.rfind("GT"); if (p == std::string::npos) return agcval; switch (replystr[3]) { default: case '0': agcval = 0; break; case '1': agcval = 1; break; case '2': agcval = 2; break; case '3': agcval = 3; break; case '4': case 5: case '6': agcval = 4; break; } return agcval; } int RIG_FT991A::incr_agc() { static const char ch[] = {'0', '1', '2', '3', '4'}; agcval++; if (agcval > 4) agcval = 0; cmd = "GT00;"; cmd[3] = ch[agcval]; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); sett("set_agc"); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "MED", "SLO", "AUT"}; const char *RIG_FT991A::agc_label() { return agcstrs[agcval]; } int RIG_FT991A::agc_val() { return (agcval); } flrig-2.0.04/src/rigs/yaesu/FTdx1200.cxx0000664000175000017500000011745714502041135014412 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FTdx1200.h" #include "debug.h" #include "support.h" enum mFTdx1200 { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mDATA_L, mRTTY_U, mFM_N, mDATA_U }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 // mode index static const char FTdx1200name_[] = "FTdx1200"; #undef NUM_MODES #define NUM_MODES 11 static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFTdx1200modes_; static const char *vFTdx1200modes_[] = { "LSB", "USB", "CW", "FM", "AM", "RTTY-L", "CW-R", "DATA-L", "RTTY-U", "FM-N", "DATA-U"}; static const char FTdx1200_mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'B', 'C' }; static const char FTdx1200_mode_type[] = { 'L', 'U', 'L', 'U', 'U', 'L', 'U', 'L', 'U', 'U', 'U' }; // lsb usb cw fm am ttyL cwR datL ttyU fmN datU static const int FTdx1200_def_bw[] = { 18, 18, 10, 0, 0, 6, 10, 15, 6, 0, 15 }; // mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mDATA_L, mRTTY_U, mFM_N, mDATA_U static std::vectorFTdx1200_widths_SSB; static const char *vFTdx1200_widths_SSB[] = { "200", "400", "600", "850", "1100", "1350", "1500", "1650", "1800", "1950", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3200", "3400", "3600", "3800", "4000" }; // def_bw = 18 static int FTdx1200_wvals_SSB[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23, 24, 25, WVALS_LIMIT}; static std::vectorFTdx1200_widths_SSBD; static const char *vFTdx1200_widths_SSBD[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400" }; // def_bw = 16 for DATA, 6 for RTTY static int FTdx1200_wvals_SSBD[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT}; static std::vectorFTdx1200_widths_CW; static const char *vFTdx1200_widths_CW[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "800", "1200", "1400", "1700", "2000", "2400" }; // def_bw = 10 static int FTdx1200_wvals_CW[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, WVALS_LIMIT}; // Single bandwidth modes static std::vectorFTdx1200_widths_FMnar; static const char *vFTdx1200_widths_FMnar[] = { "NARR" }; static std::vectorFTdx1200_widths_AMFM; static const char *vFTdx1200_widths_AMFM[] = { "NORM" }; static const int FTdx1200_wvals_AMFM[] = { 0, WVALS_LIMIT }; // US 60M 5-USB, 5-CW static std::vectorUS_60m_chan; static const char *vUS_60m_chan[] = {"000","125","126","127","128","130","141","142","143","144","146"}; static std::vectorUS_60m_label; static const char *vUS_60m_label[] = {"VFO","U51","U52","U53","U54","U55","U56","U57","U58","U59","U50"}; // UK 60m channel numbers by Brian, G8SEZ static std::vectorUK_60m_chan; static const char *vUK_60m_chan[] = {"000","118","120","121","127","128","129","130"}; static std::vectorUK_60m_label; static const char *vUK_60m_label[] = {"VFO","U51","U52","U53","U54","U55","U56","U57"}; static std::vector& Channels_60m = US_60m_chan; static std::vector& label_60m = US_60m_label; static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_FTdx1200::RIG_FTdx1200() { // base class values IDstr = "ID"; name_ = FTdx1200name_; modes_ = FTdx1200modes_; bandwidths_ = FTdx1200_widths_SSB; bw_vals_ = FTdx1200_wvals_SSB; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 5; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.imode = B.imode = modeB = modeA = def_mode = 1; A.iBW = B.iBW = bwA = bwB = def_bw = 12; A.freq = B.freq = freqA = freqB = def_freq = 14070000ULL; has_compON = has_compression = has_a2b = has_xcvr_auto_on_off = has_split = has_split_AB = has_band_selection = has_noise_reduction = has_noise_reduction_control = has_extras = has_vox_onoff = has_vox_gain = has_vox_anti = has_vox_hang = has_vox_on_dataport = has_vfo_adj = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_weight = has_cw_break_in = can_change_alt_vfo = has_smeter = has_alc_control = has_swr_control = has_power_out = has_power_control = has_volume_control = has_rf_control = has_micgain_control = has_mode_control = has_noise_control = has_bandwidth_control = has_notch_control = has_auto_notch = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = true; // derived specific atten_level = 3; preamp_level = 2; notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 8; } void RIG_FTdx1200::initialize() { VECTOR (FTdx1200modes_, vFTdx1200modes_); VECTOR (FTdx1200_widths_SSB, vFTdx1200_widths_SSB); VECTOR (FTdx1200_widths_SSBD, vFTdx1200_widths_SSBD); VECTOR (FTdx1200_widths_CW, vFTdx1200_widths_CW); VECTOR (FTdx1200_widths_FMnar, vFTdx1200_widths_FMnar); VECTOR (FTdx1200_widths_AMFM, vFTdx1200_widths_AMFM); VECTOR (US_60m_chan, vUS_60m_chan); VECTOR (US_60m_label, vUS_60m_label); VECTOR (UK_60m_chan, vUK_60m_chan); VECTOR (UK_60m_label, vUK_60m_label); modes_ = FTdx1200modes_; bandwidths_ = FTdx1200_widths_SSB; bw_vals_ = FTdx1200_wvals_SSB; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = sldrRFGAIN; rig_widgets[3].W = btnIFsh; rig_widgets[4].W = sldrIFSHIFT; rig_widgets[5].W = btnNotch; rig_widgets[6].W = sldrNOTCH; rig_widgets[7].W = sldrMICGAIN; rig_widgets[8].W = sldrPOWER; rig_widgets[9].W = btnNR; rig_widgets[10].W = sldrNR; // set progStatus defaults if (progStatus.notch_val < 10) progStatus.notch_val = 1500; if (progStatus.noise_reduction_val < 1) progStatus.noise_reduction_val = 1; if (progStatus.power_level < 5) progStatus.power_level = 5; // first-time-thru, or reset if (progStatus.cw_qsk < 15) { progStatus.cw_qsk = 15; progStatus.cw_spot_tone = 700; progStatus.cw_weight = 3.0; progStatus.cw_wpm = 18; progStatus.vox_on_dataport = false; progStatus.vox_gain = 50; progStatus.vox_anti = 50; progStatus.vox_hang = 500; } // Disable Auto Information mode sendCommand("AI0;"); // "MRnnn;" if valid, returns last channel used, "mrlll...;", along with channel nnn info. cmd = "MR118;"; wait_char(';', 27, 100, "Read UK 60m Channel Mem", ASC); size_t p = replystr.rfind("MR"); if (p == std::string::npos) { Channels_60m = US_60m_chan; label_60m = US_60m_label; op_yaesu_select60->clear(); for (size_t n = 0; n < US_60m_label.size(); n++) op_yaesu_select60->add(US_60m_label.at(n).c_str()); } else { Channels_60m = UK_60m_chan; label_60m = UK_60m_label; op_yaesu_select60->clear(); for (size_t n = 0; n < UK_60m_label.size(); n++) op_yaesu_select60->add(UK_60m_label.at(n).c_str()); } op_yaesu_select60->index(m_60m_indx); // cmd = "EX035;"; // wait_char(';', 11,100,"Read Vfo Adjust", ASC); // size_t p = replystr.rfind("EX035"); } void RIG_FTdx1200::post_initialize() { enable_yaesu_bandselect(12, false); enable_yaesu_bandselect(13, true); } void RIG_FTdx1200::shutdown() { } bool RIG_FTdx1200::check () { cmd = "FA;"; rsp = "FA"; int tries = 10; MilliSleep(200); int ret = wait_char(';', 11, 100, "check", ASC); get_trace(3, "check()", cmd.c_str(), replystr.c_str()); while (ret < 11 && tries--) { MilliSleep(200); ret = wait_char(';', 11, 100, "check", ASC); get_trace(3, "check()", cmd.c_str(), replystr.c_str()); } if (ret < 11) return false; return true; } unsigned long long RIG_FTdx1200::get_vfoA () { cmd = "FA;"; rsp = "FA"; wait_char(';', 11, 100, "get vfo A", ASC); get_trace(3, "get_vfoA()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqA = f; return freqA; } void RIG_FTdx1200::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); set_trace(3,"set_vfoA", cmd.c_str(), replystr.c_str()); } unsigned long long RIG_FTdx1200::get_vfoB () { cmd = "FB;"; rsp = "FB"; wait_char(';', 11, 100, "get vfo B", ASC); get_trace(3, "get_vfoB()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqB = f; return freqB; } void RIG_FTdx1200::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); set_trace(3,"set_vfoB", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::setVfoAdj(double v) { char cmdstr[20]; snprintf(cmdstr, sizeof(cmdstr), "EX035%+03d;", (int)v); cmd = cmdstr; sendCommand(cmd); set_trace(3,"setVfoAdj", cmd.c_str(), replystr.c_str()); } double RIG_FTdx1200::getVfoAdj() { cmd = rsp = "EX035"; sendCommand(cmd.append(";")); wait_char(';', 9, 100, "get Vfo Adjust", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; return (double)(atoi(&replystr[p+5])); } void RIG_FTdx1200::get_vfoadj_min_max_step(double &min, double &max, double &step) { min = -25; max = 25; step = 1; } bool RIG_FTdx1200::twovfos() { return true; } void RIG_FTdx1200::selectA() { cmd = "FR0;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "select A", cmd, replystr); set_trace(3,"selectA", cmd.c_str(), replystr.c_str()); inuse = onA; } void RIG_FTdx1200::selectB() { cmd = "FR4;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "select B", cmd, replystr); set_trace(3,"selectB", cmd.c_str(), replystr.c_str()); inuse = onB; } void RIG_FTdx1200::A2B() { cmd = "AB;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); set_trace(3,"A2B", cmd.c_str(), replystr.c_str()); } bool RIG_FTdx1200::can_split() { return true; } void RIG_FTdx1200::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR4;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, replystr); set_trace(3,"set_split", cmd.c_str(), replystr.c_str()); } else { cmd = "FR4;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, replystr); set_trace(3,"set_split", cmd.c_str(), replystr.c_str()); } } else { if (val) { cmd = "FR0;FT3;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, replystr); set_trace(3,"set_split", cmd.c_str(), replystr.c_str()); } else { cmd = "FR0;FT2;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, replystr); set_trace(3,"set_split", cmd.c_str(), replystr.c_str()); } } Fl::awake(highlight_vfo, (void *)0); } int RIG_FTdx1200::get_split() { size_t p; int split = 0; char rx, tx; // tx vfo cmd = rsp = "FT"; cmd.append(";"); wait_char(';', 4, 100, "get split tx vfo", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) return false; tx = replystr[p+2] - '0'; // rx vfo cmd = rsp = "FR"; cmd.append(";"); wait_char(';', 4, 100, "get split rx vfo", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) return false; rx = replystr[p+2] - '0'; split = (tx == 1 ? 2 : 0) + (rx >= 4 ? 1 : 0); return split; } int RIG_FTdx1200::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; wait_char(';', 7, 100, "get smeter", ASC); get_trace(3, "get_smeter()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); mtr = mtr * 100.0 / 256.0; return mtr; } int RIG_FTdx1200::get_swr() { cmd = rsp = "RM6"; cmd += ';'; wait_char(';', 7, 100, "get swr", ASC); get_trace(3, "get_swr()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } int RIG_FTdx1200::get_alc() { cmd = rsp = "RM4"; cmd += ';'; wait_char(';', 7, 100, "get alc", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; int mtr = atoi(&replystr[p+3]); return (int)ceil(mtr / 2.56); } int RIG_FTdx1200::get_power_out() { cmd = rsp = "RM5"; sendCommand(cmd.append(";")); wait_char(';', 7, 100, "get pout", ASC); get_trace(3, "get_power_out()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; if (p + 6 >= replystr.length()) return 0; double mtr = (double)(atoi(&replystr[p+3])); // following conversion iaw data measured by Terry, KJ4EED mtr = (.06 * mtr) + (.002 * mtr * mtr); return (int)ceil(mtr); } // Transceiver power level double RIG_FTdx1200::get_power_control() { cmd = rsp = "PC"; cmd += ';'; wait_char(';', 6, 100, "get power", ASC); get_trace(3, "get_power_control()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.power_level; if (p + 5 >= replystr.length()) return progStatus.power_level; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FTdx1200::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); set_trace(3,"set_power_control", cmd.c_str(), replystr.c_str()); } // Volume control return 0 ... 100 int RIG_FTdx1200::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; wait_char(';', 7, 100, "get vol", ASC); get_trace(3, "get_volume_control()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = round(atoi(&replystr[p+3]) / 2.55); if (val > 100) val = 100; return ceil(val); } void RIG_FTdx1200::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); set_trace(3,"set_volume_control", cmd.c_str(), replystr.c_str()); } // Tranceiver PTT on/off void RIG_FTdx1200::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; set_trace(3,"set_PTT_control", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_PTT() { cmd = "TX;"; rsp = "TX"; wait_char(';', 4, 100, "get PTT", ASC); get_trace(3, "get_PTT()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FTdx1200::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FTdx1200::get_tune() { cmd = rsp = "AC"; cmd += ';'; waitN(5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return !(val < 2); } /* // internal or external tune mode void RIG_FTdx1200::tune_rig(int) { static bool extun_on = false; static int rmd = modeA; static int rbw = bwA; static int rpwr = 100; static unsigned long long rfreq = freqA; // fix for menu 047 OFSt default int use_int_tuner = true; // On-The-Fly bandstack by bandstack int/ext tuner // if rig "Tuner" light is on internal else external cmd = rsp = "AC"; cmd.append(";"); wait_char(';', 6, 100, "is Int. Tuner Enabled", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return; if ((p + 5) >= replystr.length()) return; if (replystr[p+4] == '0') { use_int_tuner = false; } if (use_int_tuner) { cmd = "AC002;"; sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); } else { if (extun_on == false) { if (btnPTT->value() == true) return; if (get_split() == 1 || get_split() == 2) return; // no split extune inuse == onB ?rmd = modeB : rmd = modeA; inuse == onB ?rbw = bwB : rbw = bwA; inuse == onB ?rfreq = freqB : rfreq = freqA; inuse == onB ?set_modeB(mAM) : set_modeA(mAM); inuse == onB ?set_vfoB(rfreq) : set_vfoA(rfreq); rpwr = get_power_control(); set_power_control(10); sendCommand("EX0360000;"); // AM mic off // sendCommand("EX0560000;"); // FM mic off extun_on = true; btnPTT->value(true); sendCommand("MX1;"); } else { extun_on = false; btnPTT->value(false); sendCommand("MX0;"); sendCommand("EX0361000;"); // AM mic default // sendCommand("EX0560050;"); // FM mic default set_power_control(rpwr); inuse == onB ?set_modeB(rmd) : set_modeA(rmd); inuse == onB ?set_bwB(rbw) : set_bwA(rbw); inuse == onB ?set_vfoB(rfreq) : set_vfoA(rfreq); } } } */ int RIG_FTdx1200::next_attenuator() { switch (atten_level) { case 0: return 1; case 1: return 2; case 2: return 3; case 3: return 0; } return 0; } void RIG_FTdx1200::set_attenuator(int val) { atten_level = val; cmd = "RA00;"; cmd[3] += atten_level; sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); set_trace(3,"set_attenuator", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, 100, "get att", ASC); get_trace(3, "get_attenuator()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.attenuator; if (p + 3 >= replystr.length()) return progStatus.attenuator; atten_level = replystr[p+3] - '0'; return atten_level; } int RIG_FTdx1200::next_preamp() { switch (preamp_level) { case 0: return 1; case 1: return 2; case 2: return 0; } return 0; } void RIG_FTdx1200::set_preamp(int val) { preamp_level = val; cmd = "PA00;"; cmd[3] = '0' + preamp_level; sendCommand (cmd); showresp(WARN, ASC, "SET preamp", cmd, replystr); set_trace(3,"set_preamp", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';', 5, 100, "get pre", ASC); get_trace(3, "get_preamp()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p != std::string::npos) preamp_level = replystr[p+3] - '0'; return preamp_level; } const char *RIG_FTdx1200::ATT_label() { if (atten_level == 1) return "6 dB"; if (atten_level == 2) return "12 dB"; if (atten_level == 3) return "18 dB"; return "ATT"; } const char *RIG_FTdx1200::PRE_label() { if (preamp_level == 1) return "Amp 1"; if (preamp_level == 2) return "Amp 2"; return "IPO"; } int RIG_FTdx1200::adjust_bandwidth(int val) { switch (val) { case mCW : case mCW_R : bandwidths_ = FTdx1200_widths_CW; bw_vals_ = FTdx1200_wvals_CW; break; case mFM : case mAM : bandwidths_ = FTdx1200_widths_AMFM; bw_vals_ = FTdx1200_wvals_AMFM; break; case mFM_N : bandwidths_ = FTdx1200_widths_FMnar; bw_vals_ = FTdx1200_wvals_AMFM; break; case mDATA_L : case mDATA_U : case mRTTY_L : case mRTTY_U : bandwidths_ = FTdx1200_widths_SSBD; bw_vals_ = FTdx1200_wvals_SSBD; break; default: bandwidths_ = FTdx1200_widths_SSB; bw_vals_ = FTdx1200_wvals_SSB; } return FTdx1200_def_bw[val]; } int RIG_FTdx1200::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } std::vector& RIG_FTdx1200::bwtable(int n) { switch (n) { case mFM : return FTdx1200_widths_AMFM; case mAM : return FTdx1200_widths_AMFM; case mFM_N : return FTdx1200_widths_FMnar; case mCW : return FTdx1200_widths_CW; case mCW_R : return FTdx1200_widths_CW; case mRTTY_L : return FTdx1200_widths_SSBD; case mRTTY_U : return FTdx1200_widths_SSBD; case mDATA_L : return FTdx1200_widths_SSBD; case mDATA_U : return FTdx1200_widths_SSBD; } return FTdx1200_widths_SSB; } void RIG_FTdx1200::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += FTdx1200_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); set_trace(3,"set_modeA", cmd.c_str(), replystr.c_str()); adjust_bandwidth(modeA); if (val != mCW && val != mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FTdx1200::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode A", ASC); get_trace(3, "get_modeA()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md -= '1'; else md = md - 'B' + 9; modeA = md; } } adjust_bandwidth(modeA); return modeA; } void RIG_FTdx1200::set_modeB(int val) { modeB = val; cmd = "MD0"; cmd += FTdx1200_mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); set_trace(3,"set_modeB", cmd.c_str(), replystr.c_str()); adjust_bandwidth(modeB); if (val != mCW && val != mCW_R) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FTdx1200::get_modeB() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 100, "get mode B", ASC); get_trace(3, "get_modeB()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p != std::string::npos) { if (p + 3 < replystr.length()) { int md = replystr[p+3]; if (md <= '9') md -= '1'; else md = md - 'B' + 9; modeB = md; } } adjust_bandwidth(modeB); return modeB; } void RIG_FTdx1200::set_bwA(int val) { int bw_indx = bw_vals_[val]; bwA = val; int md = modeA; if (md == mFM || md == mAM || md == mFM_N ) return; cmd = "NA00;"; switch (md) { case mLSB : case mUSB : if (val < 8 ) ++cmd[3]; break; case mCW : case mCW_R : if (val < 9) ++cmd[3]; break; case mRTTY_L : case mRTTY_U : case mDATA_L : case mDATA_U : if (val < 9) ++cmd[3]; break; } cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET bw A", cmd, replystr); mode_bwA[modeA] = val; set_trace(3,"set_bwA", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_bwA() { size_t p; if (modeA == mFM || modeA == mAM || modeA == mFM_N) { bwA = 0; mode_bwA[modeA] = bwA; return bwA; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 100, "get bw A", ASC); get_trace(3, "get_bwA()", cmd.c_str(), replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; if (p + 5 >= replystr.length()) return bwA; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwA = i; mode_bwA[modeA] = bwA; return bwA; } void RIG_FTdx1200::set_bwB(int val) { int bw_indx = bw_vals_[val]; bwB = val; int md = modeB; if (md == mFM || md == mAM || md == mFM_N ) return; cmd = "NA00;"; switch (md) { case mLSB : case mUSB : if (val < 8 ) ++cmd[3]; break; case mCW : case mCW_R : if (val < 9) ++cmd[3]; break; case mRTTY_L : case mRTTY_U : case mDATA_L : case mDATA_U : if (val < 9) ++cmd[3]; break; } cmd.append("SH0"); cmd += '0' + bw_indx / 10; cmd += '0' + bw_indx % 10; cmd += ';'; sendCommand(cmd); mode_bwB[modeB] = bwB; showresp(WARN, ASC, "SET bw B", cmd, replystr); set_trace(3,"set_bwB", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_bwB() { size_t p; if (modeB == mFM || modeB == mAM || modeB == mFM_N) { bwB = 0; mode_bwB[modeB] = bwB; return bwB; } cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 100, "get bw B", ASC); get_trace(3, "get_bwB()", cmd.c_str(), replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; if (p + 5 >= replystr.length()) return bwB; replystr[p+5] = 0; int bw_idx = fm_decimal(replystr.substr(p+3), 2); const int *idx = bw_vals_; int i = 0; while (*idx != WVALS_LIMIT) { if (*idx == bw_idx) break; idx++; i++; } if (*idx == WVALS_LIMIT) i--; bwB = i; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FTdx1200::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FTdx1200::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FTdx1200::get_modetype(int n) { return FTdx1200_mode_type[n]; } void RIG_FTdx1200::set_if_shift(int val) { cmd = "IS0+0000;"; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET if shift", cmd, replystr); set_trace(3,"set_if_shift", cmd.c_str(), replystr.c_str()); } bool RIG_FTdx1200::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; wait_char(';', 9, 100, "get if shift", ASC); get_trace(3, "get_if_shift()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FTdx1200::get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1000; if_shift_max = max = 1000; if_shift_step = step = 20; if_shift_mid = 0; } void RIG_FTdx1200::set_notch(bool on, int val) { // set notch frequency if (on) { cmd = "BP00001;"; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); set_trace(3,"set_notch on", cmd.c_str(), replystr.c_str()); cmd = "BP01000;"; if (val % 10 >= 5) val += 10; val /= 10; for (int i = 3; i > 0; i--) { cmd[3 + i] += val % 10; val /=10; } sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); set_trace(3,"set_notch val", cmd.c_str(), replystr.c_str()); return; } // set notch off cmd = "BP00000;"; sendCommand(cmd); set_trace(3,"set_notch off", cmd.c_str(), replystr.c_str()); showresp(WARN, ASC, "SET notch off", cmd, replystr); } bool RIG_FTdx1200::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; wait_char(';', 8, 100, "get notch on/off", ASC); get_trace(3, "get_notch()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ison; if (replystr[p+6] == '1') { // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; wait_char(';', 8, 100, "get notch val", ASC); get_trace(3, "get_notch_val()", cmd.c_str(), replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) val = 10; else val = fm_decimal(replystr.substr(p+4), 3) * 10; } return ison; } void RIG_FTdx1200::get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3000; step = 10; } void RIG_FTdx1200::set_auto_notch(int v) { cmd.assign("BC0").append(v ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET DNF Auto Notch Filter", cmd, replystr); set_trace(3,"set_auto_notch", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_auto_notch() { cmd = "BC0;"; wait_char(';', 5, 100, "get auto notch", ASC); get_trace(3, "get_auto_notch()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind("BC0"); if (p == std::string::npos) return 0; if (replystr[p+3] == '1') return 1; return 0; } int FTdx1200_blanker_level = 2; void RIG_FTdx1200::set_noise(bool b) { cmd = "NB00;"; if (FTdx1200_blanker_level == 0) { FTdx1200_blanker_level = 1; nb_label("NB 1", true); } else if (FTdx1200_blanker_level == 1) { FTdx1200_blanker_level = 2; nb_label("NB 2", true); } else if (FTdx1200_blanker_level == 2) { FTdx1200_blanker_level = 0; nb_label("NB", false); } cmd[3] = '0' + FTdx1200_blanker_level; sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); set_trace(3,"set_noise", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_noise() { cmd = rsp = "NB0"; cmd += ';'; wait_char(';', 5, 100, "get NB", ASC); get_trace(3, "get_noise()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return FTdx1200_blanker_level; FTdx1200_blanker_level = replystr[p+3] - '0'; if (FTdx1200_blanker_level == 1) { nb_label("NB 1", true); } else if (FTdx1200_blanker_level == 2) { nb_label("NB 2", true); } else { nb_label("NB", false); FTdx1200_blanker_level = 0; } return FTdx1200_blanker_level; } // val 0 .. 100 void RIG_FTdx1200::set_mic_gain(int val) { cmd = "MG000;"; for (int i = 3; i > 0; i--) { cmd[1+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); set_trace(3,"set_mic_gain", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); get_trace(3, "get_mic_gain()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.mic_gain; int val = atoi(&replystr[p+2]); if (val > 100) val = 100; return val; } void RIG_FTdx1200::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx1200::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = (int)(val * 2.50); for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); set_trace(3,"set_rf_gain", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_rf_gain() { int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, 100, "get rfgain", ASC); get_trace(3, "get_rf_gain()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; for (int i = 3; i < 6; i++) { rfval *= 10; rfval += replystr[p+i] - '0'; } rfval = (int)(rfval / 2.50); if (rfval > 100) rfval = 100; return ceil(rfval); } void RIG_FTdx1200::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void RIG_FTdx1200::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox", cmd, replystr); set_trace(3,"set_vox_onoff", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); set_trace(3,"set_vox_gain", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::set_vox_anti() { cmd = "EX117"; cmd.append(to_decimal(progStatus.vox_anti, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET anti-vox", cmd, replystr); set_trace(3,"set_vox_anti", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); set_trace(3,"set_vox_hang", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::set_vox_on_dataport() { cmd = "EX1140;"; if (progStatus.vox_on_dataport) cmd[5] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on data port", cmd, replystr); set_trace(3,"set_vox_on_dataport", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); set_trace(3,"set_cw_wpm", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); set_trace(3,"enable_keyer", cmd.c_str(), replystr.c_str()); } bool RIG_FTdx1200::set_cw_spot() { if (vfo->imode == mCW || vfo->imode == mCW_R) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); set_trace(3,"set_cw_spot", cmd.c_str(), replystr.c_str()); return true; } else return false; } void RIG_FTdx1200::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX046").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); set_trace(3,"set_cw_weight", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX049").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); set_trace(3,"set_cw_qsk", cmd.c_str(), replystr.c_str()); } void RIG_FTdx1200::set_cw_spot_tone() { int n = (progStatus.cw_spot_tone - 300) / 50; cmd.assign("EX045").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); set_trace(3,"set_cw_spot_tone", cmd.c_str(), replystr.c_str()); } /* void RIG_FTdx1200::set_cw_vol() { } */ void RIG_FTdx1200::get_band_selection(int v) { int chan_mem_on = false; cmd = "IF;"; wait_char(';', 27, 100, "get vfo mode in get_band_selection", ASC); get_trace(3, "get set_band vfo_mode()", cmd.c_str(), replystr.c_str()); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if ((p + 26) >= replystr.length()) return; if (replystr[p+21] != '0') { // vfo 60M memory mode chan_mem_on = true; } if (v == 13) { m_60m_indx = op_yaesu_select60->index(); if (m_60m_indx) cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); else if (chan_mem_on) cmd = "VM;"; } else { // v == 1..11 band selection OR return to vfo mode == 0 if (chan_mem_on) { cmd = "VM;"; op_yaesu_select60->index(m_60m_indx = 0); } else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); get_trace(3, "get band", cmd.c_str(), replystr.c_str()); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } // DNR void RIG_FTdx1200::set_noise_reduction_val(int val) { cmd.assign("RL0").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, replystr); set_trace(3,"set_noise_reduction_val", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_noise_reduction_val() { int val = 1; cmd = rsp = "RL0"; cmd.append(";"); wait_char(';', 6, 100, "GET noise reduction val", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = atoi(&replystr[p+3]); return val; } // DNR void RIG_FTdx1200::set_noise_reduction(int val) { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET noise reduction", cmd, replystr); set_trace(3,"set_noise_reduction", cmd.c_str(), replystr.c_str()); } int RIG_FTdx1200::get_noise_reduction() { int val; cmd = rsp = "NR0"; cmd.append(";"); wait_char(';', 5, 100, "GET noise reduction", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; val = replystr[p+3] - '0'; return val; } void RIG_FTdx1200::set_xcvr_auto_on() { if (!progStatus.xcvr_auto_on) return; cmd = rsp = "PS"; cmd.append(";"); wait_char(';', 4, 100, "Test: Is Rig ON", ASC); size_t p = replystr.rfind(rsp); if (p == std::string::npos) { // rig is off, power on cmd = "PS1;"; sendCommand(cmd); for (int i = 0; i < 1500; i += 100) { MilliSleep(100); update_progress(100 * i / 4500); Fl::awake(); } sendCommand(cmd); for (int i = 1500; i < 4500; i += 100) { MilliSleep(100); update_progress(100 * i / 4500); Fl::awake(); } } } void RIG_FTdx1200::set_xcvr_auto_off() { if (!progStatus.xcvr_auto_off) return; cmd = "PS0;"; sendCommand(cmd); } void RIG_FTdx1200::set_compression(int on, int val) { if (on) { if (val == 0) { cmd.assign("PR2;"); // mic eq on sendCommand(cmd); showresp(WARN, ASC, "set Comp EQ on", cmd, replystr); set_trace(3,"set_compression EQ on", cmd.c_str(), replystr.c_str()); } else { cmd.assign("PR1;PL").append(to_decimal(val, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "set Comp on", cmd, replystr); set_trace(3,"set_compression on", cmd.c_str(), replystr.c_str()); } } else{ cmd.assign("PR0;"); sendCommand(cmd); showresp(WARN, ASC, "set Comp off", cmd, replystr); set_trace(3,"set_compression off", cmd.c_str(), replystr.c_str()); } } 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() { if (vfo->imode == mCW || vfo->imode == mCW_R) { cmd = "CO0000;"; if (progStatus.apf_onoff) cmd[5] = '2'; sendCommand(cmd); showresp(WARN, ASC, "SET APF on/off", cmd, replystr); return true; } else return false; } */ // --------------------------------------------------------------------- // set date and time // --------------------------------------------------------------------- // tm formated as HH:MM:SS // --------------------------------------------------------------------- void RIG_FTdx1200::sync_clock(char *tm) { cmd.assign("DT1"); cmd += tm[0]; cmd += tm[1]; cmd += tm[3]; cmd += tm[4]; cmd += tm[6]; cmd += tm[7]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "sync_time", cmd, replystr); sett("sync_time"); } flrig-2.0.04/src/rigs/yaesu/FT450.cxx0000664000175000017500000006465414502041135014004 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "yaesu/FT450.h" #include "rig.h" #include "support.h" static const char FT450name_[] = "FT-450"; #undef NUM_MODES #define NUM_MODES 11 enum mFT450 { mLSB, mUSB, mCW, mFM, mAM, mRTTY_L, mCW_R, mDATA_L, mRTTY_U, mFM_N, mDATA_U }; // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 mode index static int mode_bwA[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static int mode_bwB[NUM_MODES] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; static std::vectorFT450modes_; static const char *vFT450modes_[] = { "LSB", "USB", "CW", "FM", "AM", "RTTY-L", "CW-R", "USER-L", "RTTY-U", "FM-N", "USER-U"}; static const char mode_chr[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'B', 'C' }; static const char mode_type[] = { 'L', 'U', 'U', 'U', 'U', 'L', 'L', 'L', 'U', 'U', 'U' }; static std::vectorFT450_ssb_widths; static const char *vFT450_ssb_widths[] = {"1800", "2400", "3000"}; static int FT450_wvals_ssb_widths[] = {1, 2, 3, WVALS_LIMIT}; static std::vectorFT450_cw_widths; static const char *vFT450_cw_widths[] = {"300", "500", "2400"}; static int FT450_wvals_cw_widths[] = {1, 2, 3, WVALS_LIMIT}; static std::vectorFT450_data_widths; static const char *vFT450_data_widths[] = {"300", "2400", "3000"}; static int FT450_wvals_data_widths[] = {1, 2, 3, WVALS_LIMIT}; static std::vectorFT450_am_widths; static const char *vFT450_am_widths[] = {"3000", "6000", "9000"}; static int FT450_wvals_am_widths[] = {1, 2, 3, WVALS_LIMIT}; static std::vectorFT450_fm_widths; static const char *vFT450_fm_widths[] = {"2500", "5000"}; static int FT450_wvals_fm_widths[] = {1, 2, WVALS_LIMIT}; static const int FT450_def_bw[] = { 2, 2, 0, 1, 1, 0, 0, 1, 0, 1, 1 }; /* static std::vectorFT450_US_60m = {"", "126", "127", "128", "130"}; // US has 5 60M presets. Using dummy numbers for all. // First "" means skip 60m sets in get_band_selection(). // Maybe someone can do a cat command MC; on all 5 presets and add returned numbers above. // To send cat commands in flrig goto menu Config->Xcvr select->Send Cmd. static std::vector& Channels_60m = FT450_US_60m; */ static GUI rig_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)btnAGC, 2, 145, 50 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)btnNotch, 214, 125, 50 }, { (Fl_Widget *)sldrNOTCH, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 266, 165, 156 }, { (Fl_Widget *)btnNR, 2, 165, 50 }, { (Fl_Widget *)sldrNR, 54, 165, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_FT450::RIG_FT450() { // base class values IDstr = "ID"; name_ = FT450name_; modes_ = FT450modes_; bandwidths_ = FT450_ssb_widths; bw_vals_ = FT450_wvals_ssb_widths; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 2; serial_write_delay = 0; serial_post_write_delay = 5; serial_timeout = 50; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeA = 1; bwA = 2; def_mode = 10; def_bw = 2; def_freq = 14070000ULL; precision = 10; ndigits = 8; has_a2b = can_change_alt_vfo = has_xcvr_auto_on_off = has_noise_reduction = has_noise_reduction_control = has_extras = has_vox_onoff = has_vox_gain = has_vox_hang = has_cw_wpm = has_cw_keyer = // has_cw_vol = has_cw_spot = has_cw_spot_tone = has_cw_qsk = has_cw_weight = has_split = has_smeter = has_swr_control = has_power_out = has_power_control = has_volume_control = has_mode_control = has_noise_control = has_band_selection = has_bandwidth_control = has_agc_control = has_rf_control = has_micgain_control = has_notch_control = has_attenuator_control = has_preamp_control = has_ifshift_control = has_ptt_control = has_tune_control = true; // derived specific notch_on = false; m_60m_indx = 0; precision = 1; ndigits = 8; } void RIG_FT450::initialize() { VECTOR( FT450modes_, vFT450modes_); VECTOR( FT450_ssb_widths, vFT450_ssb_widths); VECTOR( FT450_cw_widths, vFT450_cw_widths); VECTOR( FT450_data_widths, vFT450_data_widths); VECTOR( FT450_am_widths, vFT450_am_widths); VECTOR( FT450_fm_widths, vFT450_fm_widths); modes_ = FT450modes_; bandwidths_ = FT450_ssb_widths; bw_vals_ = FT450_wvals_ssb_widths; rig_widgets[0].W = btnVol; rig_widgets[1].W = sldrVOLUME; rig_widgets[2].W = btnAGC; rig_widgets[3].W = sldrRFGAIN; rig_widgets[4].W = btnIFsh; rig_widgets[5].W = sldrIFSHIFT; rig_widgets[6].W = btnNotch; rig_widgets[7].W = sldrNOTCH; rig_widgets[8].W = sldrMICGAIN; rig_widgets[9].W = sldrPOWER; rig_widgets[10].W = btnNR; rig_widgets[11].W = sldrNR; // set progStatus defaults if (progStatus.noise_reduction_val < 1) progStatus.noise_reduction_val = 1; // first-time-thru, or reset if (progStatus.cw_qsk < 15) { progStatus.cw_qsk = 15; progStatus.cw_spot_tone = 700; progStatus.cw_weight = 3.0; progStatus.cw_wpm = 18; progStatus.vox_gain = 50; progStatus.vox_hang = 500; } op_yaesu_select60->deactivate(); // turn off auto information mode sendCommand("AI0;"); selectA(); } void RIG_FT450::selectA() { cmd = "VS0;"; sendCommand(cmd); inuse = onA; } void RIG_FT450::selectB() { cmd = "VS1;"; sendCommand(cmd); inuse = onB; } void RIG_FT450::A2B() { cmd = "VV;"; sendCommand(cmd); showresp(WARN, ASC, "vfo A --> B", cmd, replystr); } bool RIG_FT450::check() { cmd = rsp = "FA"; cmd += ';'; int ret = wait_char(';',11, 100, "check", ASC); rig_trace(2, "check()", replystr.c_str()); if (ret >= 11) return true; return false; } unsigned long long RIG_FT450::get_vfoA () { cmd = rsp = "FA"; cmd += ';'; wait_char(';',11, 200, "get vfo A", ASC); gett("get_vfoA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqA = f; return freqA; } void RIG_FT450::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); } unsigned long long RIG_FT450::get_vfoB () { cmd = rsp = "FB"; cmd += ';'; wait_char(';',11, 200, "get vfo B", ASC); gett("get_vfoB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 10; n++) f = f*10 + replystr[p+n] - '0'; freqB = f; return freqB; } void RIG_FT450::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000;"; for (int i = 9; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); } int RIG_FT450::get_vfoAorB() { size_t p; cmd = rsp = "VS"; cmd.append(";"); wait_char(';', 4, 200, "get vfo A/B", ASC); gett("get vfo A/B"); p = replystr.rfind(rsp); if (p == std::string::npos) return onNIL; if (replystr[p+2] == '1') inuse = onB; else inuse = onA; return inuse; } void RIG_FT450::set_split(bool on) { if (on) cmd = "FT1;"; else cmd = "FT0;"; sendCommand(cmd); showresp(WARN, ASC, "SET split", cmd, replystr); } int RIG_FT450::get_split() { size_t p; int split = 0; char tx; // tx vfo cmd = rsp = "FT"; cmd.append(";"); wait_char(';',4, 100, "get split tx vfo", ASC); p = replystr.rfind(rsp); if (p == std::string::npos) return false; tx = replystr[p+2] - '0'; split = (tx == 1 ? 2 : 0); return split; } int RIG_FT450::get_smeter() { cmd = rsp = "SM0"; cmd += ';'; get_trace(1, "get_smeter()"); wait_char(';',7, 200, "get smeter", ASC); // sets replystr via rigbase gett(""); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; replystr[p+6] = 0; int mtr = atoi(&replystr[p+3]); mtr = mtr * 100.0 / 256.0; return mtr; } // measured by W3NR // SWR..... mtr ... display // 6:1..... 255 ... 100 // 3:1..... 132 ... 50 // 2:1..... 066 ... 26 // 2.5:1... 099 ... 39 // 1.5:1... 033 ... 13 // 1.1:1... 008 ... 3 int RIG_FT450::get_swr() { cmd = rsp = "RM6"; cmd += ';'; waitN(7, 100, "get swr", ASC); rig_trace(2, "get_swr()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; replystr[p+6] = 0; int mtr = atoi(&replystr[p+3]); return mtr / 2.55; } int RIG_FT450::get_power_out() { cmd = rsp = "RM5"; sendCommand(cmd.append(";")); waitN(7, 100, "get pout", ASC); rig_trace(2, "get_power_out()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; replystr[p+6] = 0; double mtr = (double)(atoi(&replystr[p+3])); mtr = -6.6263535 + .11813178 * mtr + .0013607405 * mtr * mtr; return (int)mtr; } double RIG_FT450::get_power_control() { cmd = rsp = "PC"; cmd += ';'; waitN(6, 100, "get power", ASC); rig_trace(2, "get_power_control()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; replystr[p+5] = 0; int mtr = atoi(&replystr[p+2]); return mtr; } void RIG_FT450::set_power_control(double val) { int ival = (int)val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET power", cmd, replystr); } // Volume control return 0 ... 100 int RIG_FT450::get_volume_control() { cmd = rsp = "AG0"; cmd += ';'; waitN(7, 100, "get vol", ASC); rig_trace(2, "get_volume_control()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.volume; if (p + 6 >= replystr.length()) return progStatus.volume; int val = atoi(&replystr[p+3]) * 100 / 250; if (val > 100) val = 100; return val; } void RIG_FT450::set_volume_control(int val) { int ivol = (int)(val * 250 / 100); cmd = "AG0000;"; for (int i = 5; i > 2; i--) { cmd[i] += ivol % 10; ivol /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET vol", cmd, replystr); } void RIG_FT450::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } // Tranceiver PTT on/off void RIG_FT450::set_PTT_control(int val) { cmd = val ? "TX1;" : "TX0;"; sendCommand(cmd); showresp(WARN, ASC, "SET PTT", cmd, replystr); ptt_ = val; } int RIG_FT450::get_PTT() { cmd = "TX;"; rsp = "TX"; waitN(4, 100, "get PTT", ASC); rig_trace(2, "get_PTT()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return ptt_; ptt_ = (replystr[p+2] != '0' ? 1 : 0); return ptt_; } void RIG_FT450::tune_rig(int val) { switch (val) { case 0: cmd = "AC000;"; break; case 1: cmd = "AC001;"; break; case 2: default: cmd = "AC002;"; break; } sendCommand(cmd); showresp(WARN, ASC, "tune rig", cmd, replystr); sett("tune_rig"); } int RIG_FT450::get_tune() { cmd = rsp = "AC"; cmd += ';'; waitN(5, 100, "get tune", ASC); rig_trace(2, "get_tuner status()", replystr.c_str()); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int val = replystr[p+4] - '0'; return (val > 0); } void RIG_FT450::set_attenuator(int val) { if (val) cmd = "RA01;"; else cmd = "RA00;"; sendCommand(cmd); showresp(WARN, ASC, "get att", cmd, replystr); } int RIG_FT450::get_attenuator() { cmd = rsp = "RA0"; cmd += ';'; wait_char(';', 5, 200, "get att", ASC); gett("get_attenuator"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; return (replystr[p+3] == '3' ? 1 : 0); } void RIG_FT450::set_preamp(int val) { if (val) cmd = "PA00;"; else cmd = "PA01;"; sendCommand(cmd); showresp(WARN, ASC, "set preamp", cmd, replystr); } int RIG_FT450::get_preamp() { cmd = rsp = "PA0"; cmd += ';'; wait_char(';', 5, 200, "get pre", ASC); gett("get_preamp"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; return (replystr[p+3] == '1' ? 1 : 0); } std::vector& RIG_FT450::bwtable(int n) { switch (n) { case mCW : case mCW_R : return FT450_cw_widths; case mFM : case mFM_N : return FT450_fm_widths; case mAM : return FT450_am_widths; case mRTTY_L : case mRTTY_U : case mDATA_L : case mDATA_U : return FT450_data_widths; } return FT450_ssb_widths; } void RIG_FT450::set_modeA(int val) { modeA = val; cmd = "MD0"; cmd += mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); if (val == 2 || val == 6) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FT450::get_modeA() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 200, "get mode A", ASC); gett("get_modeA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return modeA; int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'B'; modeA = md; return modeA; } int RIG_FT450::adjust_bandwidth(int val) { switch (val) { case mCW : case mCW_R : bandwidths_ = FT450_cw_widths; bw_vals_ = FT450_wvals_cw_widths; break; case mFM : case mFM_N : bandwidths_ = FT450_fm_widths; bw_vals_ = FT450_wvals_fm_widths; break; case mAM : bandwidths_ = FT450_am_widths; bw_vals_ = FT450_wvals_am_widths; break; case mRTTY_L : case mRTTY_U : case mDATA_L : case mDATA_U : bandwidths_ = FT450_data_widths; bw_vals_ = FT450_wvals_data_widths; break; default: bandwidths_ = FT450_ssb_widths; bw_vals_ = FT450_wvals_ssb_widths; break; } return FT450_def_bw[val]; } int RIG_FT450::def_bandwidth(int m) { int bw = adjust_bandwidth(m); if (inuse == onB) { if (mode_bwB[m] == -1) mode_bwB[m] = bw; return mode_bwB[m]; } if (mode_bwA[m] == -1) mode_bwA[m] = bw; return mode_bwA[m]; } void RIG_FT450::set_bwA(int val) { bwA = val; switch (val) { case 0 : cmd = "SH000;"; break; case 1 : cmd = "SH016;"; break; case 2 : cmd = "SH031;"; break; default: cmd = "SH031;"; } sendCommand(cmd); mode_bwA[modeA] = bwA; showresp(WARN, ASC, "SET bwA", cmd, replystr); } int RIG_FT450::get_bwA() { cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 200, "get bw A", ASC); gett("get_bwA"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwA; std::string bws = replystr.substr(p+3,2); if (bws == "00") bwA = 0; else if (bws == "16") bwA = 1; else if (bws == "31") bwA = 2; mode_bwA[modeA] = bwA; return bwA; } void RIG_FT450::set_modeB(int val) { modeB = val; cmd = "MD0"; cmd += mode_chr[val]; cmd += ';'; sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); if (val == 2 || val == 6) return; if (progStatus.spot_onoff) { progStatus.spot_onoff = false; set_spot_onoff(); cmd = "CS0;"; sendCommand(cmd); showresp(WARN, ASC, "SET spot off", cmd, replystr); btnSpot->value(0); } } int RIG_FT450::get_modeB() { cmd = rsp = "MD0"; cmd += ';'; wait_char(';', 5, 200, "get mode B", ASC); gett("get_modeB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return modeB; int md = replystr[p+3]; if (md <= '9') md = md - '1'; else md = 9 + md - 'B'; modeB = md; return modeB; } void RIG_FT450::set_bwB(int val) { bwB = val; switch (val) { case 0 : cmd = "SH000;"; break; case 1 : cmd = "SH016;"; break; case 2 : cmd = "SH031;"; break; default: cmd = "SH031;"; } sendCommand(cmd); mode_bwB[modeB] = bwB; showresp(WARN, ASC, "SET bwB", cmd, replystr); } int RIG_FT450::get_bwB() { cmd = rsp = "SH0"; cmd += ';'; wait_char(';', 6, 200, "get bw B", ASC); gett("get_bwB"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return bwB; std::string bws = replystr.substr(p+3,2); if (bws == "00") bwB = 0; else if (bws == "16") bwB = 1; else if (bws == "31") bwB = 2; mode_bwB[modeB] = bwB; return bwB; } std::string RIG_FT450::get_BANDWIDTHS() { std::stringstream s; for (int i = 0; i < NUM_MODES; i++) s << mode_bwA[i] << " "; for (int i = 0; i < NUM_MODES; i++) s << mode_bwB[i] << " "; return s.str(); } void RIG_FT450::set_BANDWIDTHS(std::string s) { std::stringstream strm; strm << s; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwA[i]; for (int i = 0; i < NUM_MODES; i++) strm >> mode_bwB[i]; } int RIG_FT450::get_modetype(int n) { return mode_type[n]; } void RIG_FT450::set_if_shift(int val) { cmd = "IS0+0000;"; if (val < 0) cmd[3] = '-'; val = abs(val); for (int i = 4; i > 0; i--) { cmd[3+i] += val % 10; val /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET ifshift", cmd, replystr); } bool RIG_FT450::get_if_shift(int &val) { cmd = rsp = "IS0"; cmd += ';'; waitN(9, 100, "get if shift", ASC); rig_trace(2, "get_if_shift()", replystr.c_str()); size_t p = replystr.rfind(rsp); val = progStatus.shift_val; if (p == std::string::npos) return progStatus.shift; val = atoi(&replystr[p+4]); if (replystr[p+3] == '-') val = -val; return (val != 0); } void RIG_FT450::get_if_min_max_step(int &min, int &max, int &step) { min = -1000; max = 1000; step = 100; } void RIG_FT450::set_notch(bool on, int val) { cmd = "BP00000;"; if (on == false) { sendCommand(cmd); showresp(WARN, ASC, "SET notch off", cmd, replystr); notch_on = false; return; } cmd[6] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET notch on", cmd, replystr); notch_on = true; cmd[3] = '1'; // manual NOTCH position cmd[6] = '0'; val = val / 10 + 200; for (int i = 3; i > 0; i--) { cmd[3 + i] += val % 10; val /=10; } sendCommand(cmd); showresp(WARN, ASC, "SET notch val", cmd, replystr); } bool RIG_FT450::get_notch(int &val) { bool ison = false; cmd = rsp = "BP00"; cmd += ';'; waitN(8, 100, "get notch on/off", ASC); rig_trace(2, "get_notch()", replystr.c_str()); size_t p = replystr.rfind(rsp); val = progStatus.notch_val = 0; // disabled default slider position if (p == std::string::npos) return ison; if (replystr[p+6] == '1') { // manual notch enabled ison = true; val = progStatus.notch_val; cmd = rsp = "BP01"; cmd += ';'; waitN(8, 100, "get notch val", ASC); rig_trace(2, "get_notch_val()", replystr.c_str()); p = replystr.rfind(rsp); if (p == std::string::npos) return ison; val = atoi(&replystr[p+4]); val = (val - 200) * 10; } return ison; } void RIG_FT450::get_notch_min_max_step(int &min, int &max, int &step) { min = -1990; max = +2000; step = 100; } void RIG_FT450::set_noise(bool b) { if (b) cmd = "NB01;"; else cmd = "NB00;"; sendCommand (cmd); showresp(WARN, ASC, "SET NB", cmd, replystr); } void RIG_FT450::set_xcvr_auto_on() { // send dummy data request for ID (see pg 12 CAT reference book) cmd = "ID;"; sendCommand(cmd); // wait 1 to 2 seconds // wake up time for initialization for (int i = 0; i < 1500; i += 100) { MilliSleep(100); update_progress(100 * i / 5000); Fl::awake(); } cmd = "PS1;"; sendCommand(cmd); // wait for power on status cmd = "PS;"; waitN(4, 500, "Xcvr ON?", ASC); } void RIG_FT450::set_xcvr_auto_off() { cmd = "PS0;"; sendCommand(cmd); } static int mg = 0; void RIG_FT450::set_mic_gain(int val) { cmd = "MG000;"; if (val == 1) cmd = "MG000;"; else if (val == 2) cmd = "MG128;"; else cmd = "MG255;"; mg = val; sendCommand(cmd); showresp(WARN, ASC, "SET mic", cmd, replystr); sett("set_mic_gain"); } int RIG_FT450::get_mic_gain() { cmd = rsp = "MG"; cmd += ';'; wait_char(';', 6, 100, "get mic", ASC); gett("get_mic_gain"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return mg; replystr[p+5] = 0; int val = atoi(&replystr[p+2]); if (val < 86) return 1; if (val < 127) return 2; return 3; } void RIG_FT450::get_mic_min_max_step(int &min, int &max, int &step) { min = 1; max = 3; step = 1; }void RIG_FT450::set_special(int v) { if (v) cmd = "VR1;"; else cmd = "VR0;"; sendCommand(cmd); showresp(WARN, ASC, "Set special", cmd, replystr); } void RIG_FT450::set_vox_onoff() { cmd = "VX0;"; if (progStatus.vox_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET vox on/off", cmd, replystr); } void RIG_FT450::set_vox_gain() { cmd = "VG"; cmd.append(to_decimal(progStatus.vox_gain, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } void RIG_FT450::set_vox_hang() { cmd = "VD"; cmd.append(to_decimal(progStatus.vox_hang, 4)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET vox delay", cmd, replystr); } void RIG_FT450::set_cw_wpm() { cmd = "KS"; if (progStatus.cw_wpm > 60) progStatus.cw_wpm = 60; if (progStatus.cw_wpm < 4) progStatus.cw_wpm = 4; cmd.append(to_decimal(progStatus.cw_wpm, 3)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw wpm", cmd, replystr); } void RIG_FT450::enable_keyer() { cmd = "KR0;"; if (progStatus.enable_keyer) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET keyer on/off", cmd, replystr); } bool RIG_FT450::set_cw_spot() { if (vfo->imode == 2 || vfo->imode == 6) { cmd = "CS0;"; if (progStatus.spot_onoff) cmd[2] = '1'; sendCommand(cmd); showresp(WARN, ASC, "SET spot on/off", cmd, replystr); return true; } else return false; } void RIG_FT450::set_cw_weight() { int n = round(progStatus.cw_weight * 10); cmd.assign("EX024").append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw weight", cmd, replystr); } void RIG_FT450::set_cw_qsk() { int n = progStatus.cw_qsk / 5 - 3; cmd.assign("EX018").append(to_decimal(n, 1)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw qsk", cmd, replystr); } void RIG_FT450::set_cw_spot_tone() { int n = (progStatus.cw_spot_tone - 400) / 50 + 1; cmd = "EX020"; cmd.append(to_decimal(n, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET cw tone", cmd, replystr); } // DNR void RIG_FT450::set_noise_reduction_val(int val) { cmd.assign("RL0").append(to_decimal(val, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET_noise_reduction_val", cmd, replystr); } int RIG_FT450::get_noise_reduction_val() { int val = 1; cmd = rsp = "RL0"; cmd.append(";"); wait_char(';', 6, 200, "GET noise reduction level", ASC); gett("get_noise_reduction_val"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return val; val = atoi(&replystr[p+3]); return val; } // DNR void RIG_FT450::set_noise_reduction(int val) { cmd.assign("NR0").append(val ? "1" : "0" ).append(";"); sendCommand(cmd); showresp(WARN, ASC, "SET noise reduction", cmd, replystr); } int RIG_FT450::get_noise_reduction() { int val; cmd = rsp = "NR0"; cmd.append(";"); wait_char(';', 5, 200, "GET noise reduction", ASC); gett("get_noise_reduction"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; val = replystr[p+3] - '0'; return val; } void RIG_FT450::get_band_selection(int v) { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); set_trace(2, "get band", cmd.c_str()); } void RIG_FT450::set_rf_gain(int val) { cmd = "RG0000;"; int rfval = (int)(val * 2.55); for (int i = 5; i > 2; i--) { cmd[i] = rfval % 10 + '0'; rfval /= 10; } sendCommand(cmd); showresp(WARN, ASC, "SET rfgain", cmd, replystr); sett("set_rf_gain"); } int RIG_FT450::get_rf_gain() { //int rfval = 0; cmd = rsp = "RG0"; cmd += ';'; wait_char(';', 7, 100, "get rfgain", ASC); gett("get_rf_gain"); size_t p = replystr.rfind(rsp); if (p == std::string::npos) return progStatus.rfgain; // Parse the RF value from the position returned by rfind for the response. // Valid values are 0-255. int rfval = (replystr[p+3] - '0') * 100 + (replystr[p+4] - '0') * 10 + (replystr[p+5] - '0'); // Convert 0-255 to 0-100 for the slider widget. rfval = (int)(rfval / 2.55); if (rfval > 100) rfval = 100; return rfval; } void RIG_FT450::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } /* P1 0: fixed P2 0: AGC “OFF” 1: AGC “FAST” 2: AGC “SLOW” 3: AGC “SLOW” 4: AGC “AUTO” */ static int agcval = 0; int RIG_FT450::get_agc() { cmd = "GT0;"; wait_char(';', 6, 100, "get agc", ASC); gett("get_agc"); size_t p = replystr.rfind("GT"); if (p == std::string::npos) return agcval; switch (replystr[3]) { default: case '0': agcval = 0; break; case '1': agcval = 1; break; case '2': case '3': agcval = 2; break; case '4': case '6': agcval = 3; break; } return agcval; } int RIG_FT450::incr_agc() { static const char ch[] = {'0', '1', '3', '4'}; agcval++; if (agcval > 3) agcval = 0; cmd = "GT00;"; cmd[3] = ch[agcval]; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); sett("set_agc"); return agcval; } static const char *agcstrs[] = {"AGC", "FST", "SLO", "AUT"}; const char *RIG_FT450::agc_label() { return agcstrs[agcval]; } int RIG_FT450::agc_val() { return (agcval); } /* void RIG_FT450::get_band_selection(int v) { int inc_60m = false; cmd = "IF;"; waitN(27, 100, "get band", ASC); set_trace(2, "get band", replystr.c_str()); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return; if (replystr[p+21] != '0') { // vfo 60M memory mode inc_60m = true; } if (v == 12) { // 5MHz 60m presets if (Channels_60m[0].empty()) return; // no 60m Channels so skip if (inc_60m) { if (++m_60m_indx >= Channels_60m.size()) m_60m_indx = 0; } cmd.assign("MC").append(Channels_60m[m_60m_indx]).append(";"); } else { // v == 1..11 band selection OR return to vfo mode == 0 if (inc_60m) cmd = "VM;"; else { if (v < 3) v = v - 1; cmd.assign("BS").append(to_decimal(v, 2)).append(";"); } } sendCommand(cmd); showresp(WARN, ASC, "Select Band Stacks", cmd, replystr); } */ flrig-2.0.04/src/rigs/yaesu/FT1000MP_A.cxx0000664000175000017500000005346114502041135014543 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include #include "status.h" #include "trace.h" #include "yaesu/FT1000MP_A.h" static const char FT1000MP_Aname_[] = "FT-1000MP-A"; static std::vectorFT1000MP_A_modes; static const char *vFT1000MP_A_modes[] = { "LSB", "USB", "CW-U", "CW-L", "AM", "AM-syn", "FM", "FM-W", "RTTY-L", "RTTY-U", "PKT-L", "PKT-U", "PKT-FM" }; static const char FT1000MP_A_setmode[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0X07, 0x08, 0x09, 0x0A, 0x0A, 0x0B }; static const int FT1000MP_A_def_bw[] = { 6, 6, 18, 18, 0, 0, 0, 0, 18, 18, 6, 6, 0 }; static const char FT1000MP_A_mode_type[] = { 'L', 'U', 'U', 'L', 'U', 'U', 'U', 'U', 'L', 'U', 'L', 'U' }; struct mode_pair { char a; char b;}; static const mode_pair FT1000MP_A_mode[] = { { '\x00', '\x00' }, // LSB { '\x01', '\x00' }, // USB { '\x02', '\x00' }, // CW-U { '\x02', '\x80' }, // CW-L { '\x03', '\x00' }, // AM { '\x03', '\x80' }, // AM-syn { '\x04', '\x00' }, // FM { '\x07', '\x00' }, // FM-W { '\x05', '\x00' }, // RTTY-L { '\x05', '\x80' }, // RTTY-U { '\x06', '\x00' }, // PKT-L { '\x86', '\x00' }, // PKT-U { '\x06', '\x80' }, // PKT-FM { '\xFF', '\xFF' } // end of list }; //LSB : 11 01 57 81 80 00 00 00 11 20 11 31 91 11 11 00 //USB : 11 01 57 81 80 00 00 01 11 20 11 31 91 11 11 00 //CW-L : 11 01 57 81 80 00 00 02 91 20 11 11 91 11 11 00 //CW-U : 11 01 57 81 80 00 00 02 11 20 11 91 91 11 11 00 //RTTY-L : 11 01 57 81 80 00 00 05 11 20 11 11 91 11 11 00 //RTTY-U : 11 01 57 81 80 00 00 05 91 20 11 11 11 11 11 00 //PKT-FM : 11 01 57 81 80 00 00 06 91 20 11 31 11 11 11 00 // 11 01 57 81 80 00 00 06 91 20 11 11 91 11 11 00 //PKT-L : 11 01 57 81 80 00 00 06 11 20 11 31 11 91 11 00 // 11 01 57 81 80 00 00 06 11 20 11 11 91 91 11 00 //PKT-U : 11 01 57 81 80 00 00 86 11 20 11 31 11 91 11 00 // 11 01 57 81 80 00 00 86 11 20 11 11 91 11 11 00 static std::vectorFT1000MP_A_widths; static const char *vFT1000MP_A_widths[] = { "---/6.0", "---/2.4", "---/2.0", "---/500", "---/250", "2.4/6.0", "2.4/2.4", "2.4/2.0", "2.4/500", "2.4/250", "2.0/6.0", "2.0/2.4", "2.0/2.0", "2.0/500", "2.0/250", "500/6.0", "500/2.4", "500/2.0", "500/500", "500/250", "250/6.0", "250/2.4", "250/2.0", "250/500", "250/250" }; static int FT1000MP_A_bw_vals[] = { 1,2,3,4,5,6,7,8,9,0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, WVALS_LIMIT}; RIG_FT1000MP_A::RIG_FT1000MP_A() { // base class values name_ = FT1000MP_Aname_; modes_ = FT1000MP_A_modes; bandwidths_ = FT1000MP_A_widths; bw_vals_ = FT1000MP_A_bw_vals; serial_baudrate = BR4800; stopbits = 2; serial_retries = 2; serial_write_delay = 5; serial_post_write_delay = 5; serial_timeout = 50; serloop_timing = 200; serial_rtscts = true; serial_rtsplus = false; serial_dtrplus = true; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; A.freq = 14070000ULL; A.imode = 1; A.iBW = 1; B.freq = 3580000ULL; B.imode = 1; B.iBW = 1; precision = 10; max_power = 200; tuner_on = false; has_smeter = has_power_out = has_swr_control = has_alc_control = has_mode_control = has_bandwidth_control = has_ptt_control = has_tune_control = has_split = has_get_info = true; has_auto_notch = true; precision = 10; ndigits = 7; progStatus.gettrace = progStatus.settrace = progStatus.serialtrace = progStatus.rigtrace = progStatus.xmltrace = progStatus.trace = false; progStatus.gettrace = true; // progStatus.settrace = true; // progStatus.serialtrace = true; // progStatus.rigtrace = true; // progStatus.xmltrace = true; // progStatus.trace = true; }; void RIG_FT1000MP_A::init_cmd() { cmd = "00000"; for (size_t i = 0; i < 5; i++) cmd[i] = 0; } void RIG_FT1000MP_A::initialize() { VECTOR (FT1000MP_A_modes, vFT1000MP_A_modes); VECTOR (FT1000MP_A_widths, vFT1000MP_A_widths); modes_ = FT1000MP_A_modes; bandwidths_ = FT1000MP_A_widths; bw_vals_ = FT1000MP_A_bw_vals; } /* returns 32 bytes first 16 for vfo-A 0 - band selection 1,2,3,4 operating frequency 5,6 clarifier offset 7 operating mode 8 if filter selection 9 vfo/mem operating flags a,b,c,d,e,f NOT used repeated for vfo-B Data captured by AF2M, Mitch Mode changes bytes 7 / 8; counting from 0 ---------------------||-||--------------------------------------------------------------------- LSB : 08 00 57 71 00 00 00 00 11 00 11 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 USB : 08 00 57 71 00 00 00 01 11 00 11 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 CW-L : 08 00 57 75 10 00 00 02 01 00 11 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 CW-U : 08 00 57 75 10 00 00 02 11 00 11 91 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 LSB : 08 00 57 71 00 00 00 00 11 00 11 11 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 RTTY-L : 08 00 57 63 B8 00 00 05 11 00 11 11 11 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 RTTY-U : 08 00 57 7E 48 00 00 05 91 00 11 11 91 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 Data captured by Peter, PA1POS Query 0x00 0x00 0x00 0x02 0x10 | | | LSB : 11 01 57 81 80 00 00 00 11 20 11 31 91 11 11 00 USB : 11 01 57 81 80 00 00 01 11 20 11 31 91 11 11 00 CW-L : 11 01 57 81 80 00 00 02 91 20 11 11 91 11 11 00 CW-U : 11 01 57 81 80 00 00 02 11 20 11 91 91 11 11 00 RTTY-L : 11 01 57 81 80 00 00 05 11 20 11 11 91 11 11 00 RTTY-U : 11 01 57 81 80 00 00 05 91 20 11 11 11 11 11 00 PKT-FM : 11 01 57 81 80 00 00 06 91 20 11 31 11 11 11 00 11 01 57 81 80 00 00 06 91 20 11 11 91 11 11 00 PKT-L : 11 01 57 81 80 00 00 06 11 20 11 31 11 91 11 00 11 01 57 81 80 00 00 06 11 20 11 11 91 91 11 00 PKT-U : 11 01 57 81 80 00 00 86 11 20 11 31 11 91 11 00 11 01 57 81 80 00 00 86 11 20 11 11 91 11 11 00 |______________________ IF SELECTOR (BW) |_________________________ MODE |__|____________________________ CLARIFIER OFFSET |__|__|__|__________________________________ FREQ |______________________________________________ BAND Bandwidth changes (in LSB MODE) 8.215 filter is in thru mode Only changing 455 filter, cycling thru from 6k, 2.4k, 2.0k,500, 250. ------------------------||--------------------------------------------------------------------- 6k : 08 00 57 71 00 00 00 00 00 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 2.4k : 08 00 57 71 00 00 00 00 01 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 2.0k : 08 00 57 71 00 00 00 00 02 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 500 : 08 00 57 71 00 00 00 00 03 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 250 : 08 00 57 71 00 00 00 00 04 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 8.215 filter is in 500 hz mode. ------------------------||--------------------------------------------------------------------- 6k : 08 00 57 71 00 00 00 00 40 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 2.4k : 08 00 57 71 00 00 00 00 41 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 2.0k : 08 00 57 71 00 00 00 00 42 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 500 : 08 00 57 71 00 00 00 00 43 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 250 : 08 00 57 71 00 00 00 00 44 00 00 01 81 81 11 0A 08 00 57 72 60 00 00 00 30 00 30 91 11 11 11 48 Mode changes bytes 7 / 8; counting from 0 |byte 7| |byte 8| LSB : 00000000 00010001 USB : 00000001 00010001 CW-L : 00000010 00000001 CW-U : 00000010 00010001 LSB : 00000000 00010001 RTTY-L : 00000101 00010001 RTTY-U : 00000101 10010001 |byte 8| 6k : 00000000 2.4k : 00000001 2.0k : 00000010 500 : 00000011 250 : 00000100 8.215 filter is in 500 hz mode. |byte 8| 6k : 01000000 2.4k : 01000001 2.0k : 01000010 500 : 01000011 250 : 01000100 */ /* const std::string LSBstr = { '\x08', '\x00', '\x50', '\x42', '\x01', '\x00', '\x00', '\x00', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string USBstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x01', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string CWUstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x02', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string CWLstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x02', '\x91', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string AMIstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x03', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string AMSstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x03', '\x91', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string FMstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x04', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string FMWstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x07', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string RTTYLstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x05', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string RTTYUstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x05', '\x91', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string PKLstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x06', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string PKUstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x86', '\x11', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string PKFstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x06', '\x91', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; const std::string BOGUSstr = { '\x08', '\x00', '\x57', '\x71', '\x00', '\x00', '\x00', '\x24', '\x99', '\x00', '\x11', '\x01', '\x81', '\x81', '\x11', '\x0A', '\x08', '\x00', '\x57', '\x72', '\x60', '\x00', '\x00', '\x00', '\x30', '\x00', '\x30', '\x91', '\x11', '\x11', '\x11', '\x48' }; */ /* const std::string data1 = { 0x08, 0x00, 0x57, 0x71, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x01, 0x81, 0x81, 0x11, 0x0A, 0x08, 0x00, 0x57, 0x72, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x91, 0x11, 0x11, 0x11, 0x48 }; const std::string data2[] = { 0x08, 0x00, 0x57, 0x71, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x81, 0x81, 0x11, 0x0A, 0x08, 0x00, 0x57, 0x72, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x91, 0x11, 0x11, 0x11, 0x48 }; const std::string data3[] = { 0x08, 0x00, 0x57, 0x71, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x01, 0x81, 0x81, 0x11, 0x0A, 0x08, 0x00, 0x57, 0x72, 0x60, 0x00, 0x00, 0x03, 0xB0, 0x00, 0x30, 0x91, 0x11, 0x11, 0x11, 0x48 }; const std::string amsync[] = { 0x08, 0x00, 0x57, 0x67, 0x01, 0x00, 0x00, 0x03, 0x80, 0x00, 0x11, 0x11, 0x91, 0x91, 0x11, 0x08, 0x08, 0x00, 0x57, 0x67, 0x02, 0x00, 0x00, 0x01, 0x11, 0x00, 0x11, 0x91, 0x11, 0x11, 0x11, 0xFA }; */ /* * Ken Rawlings tests Band Radio Flrig Fldigi 160m 1.840.00 29449.08 29.440.080 80m 3.547.92 56776.72 56766.720 40m 7.036.00 112576.00 112576.000 30m 10.113.25 161812.06 161812.060 20m 14.052.16 224834.60 224834.600 17m 18.076.25 289220.12 289220.120 15m 21.009.30 336148.94 336148.940 12m 24.900.00 398400.00 398400.000 10m 28.072.10 449153.64 449153.640 10m 29.099.40 465590.40 465590.400 08 00 55 73 04 00 00 06 11 00 11 B3 33 0B 00 AA E6 0A 00 00 02 B3 00 11 B4 11 11 01 55 CC 02 00 00 02 B3 00 22 33 11 3.500.00 08 00 55 73 0E 00 00 01 00 00 11 B3 33 7.000.00 0B 00 AA E6 0C 00 00 02 B3 00 11 B3 33 14.000.00 11 01 55 CC 06 00 00 02 B3 00 11 B3 33 const unsigned int testints[] = {\ 0x08,0x00,0x55,0x73,0x0E,0x00,0x00,0x01,0x00,0x00,0x11,0xB3,0x33,0x91,0x11,0x08,\ 0x08,0x01,0x55,0xCC,0x06,0x00,0x00,0x01,0x11,0x00,0x11,0x91,0x11,0x11,0x11,0x00 }; 11 01 5B E8 10 00 00 02 B3 00 11 B3 11 11 11 00 0B 00 AB 4E B0 00 00 02 B3 00 11 B3 11 91 11 00 -- -- -- -- frequency A = */ unsigned int info[] = { 0x11, 0x01, 0x5B, 0xE8, 0x10, 0x00, 0x00, 0x02, 0xB3, 0x00, 0x11, 0xB3, 0x11, 0x11, 0x11, 0x00, 0x0B, 0x00, 0xAB, 0x4E, 0xB0, 0x00, 0x00, 0x02, 0xB3, 0x00, 0x11, 0xB3, 0x11, 0x91, 0x11, 0x00 }; bool RIG_FT1000MP_A::check() { init_cmd(); cmd[3] = 0x03; cmd[4] = 0x10; getr("check"); int ret = waitN(32, 100, "check", ASC); geth(); if (ret >= 32) return true; return false; } bool RIG_FT1000MP_A::get_info(void) { int ret = 0; int md = 0; init_cmd(); cmd[3] = 0x03; // read both vfo's cmd[4] = 0x10; getr("get info"); ret = waitN(32, 100, "get info", ASC); geth(); if (ret >= 32) { size_t p = replystr.length() - 32; // vfo A data std::string A.freq = (replystr[p + 1] & 0x7F) << 8; A.freq = (A.freq + (replystr[p + 2] & 0xFF)) << 8; A.freq = (A.freq + (replystr[p + 3] & 0xFF)) <<8; A.freq = ((A.freq + (replystr[p + 4] & 0xF0)) >> 4) * 10; for (md = 0; md < 14; md++) { if ( ((FT1000MP_A_mode[md].a & 0xFF) == (replystr[p + 7] & 0xFF)) && ((FT1000MP_A_mode[md].b & 0xFF) == (replystr[p + 8] & 0x80))) break; } if (md == 13) md = 0; A.imode = md; A.iBW = 5*((replystr[p + 8] & 0x70) >> 4) + (replystr[p + 8] & 0x07); if (A.iBW > 24) A.iBW = 24; B.freq = (replystr[p + 17] & 0x7F) << 8; B.freq = (B.freq + (replystr[p + 18] & 0xFF)) << 8; B.freq = (B.freq + (replystr[p + 19] & 0xFF)) <<8; B.freq = ((B.freq + (replystr[p +20] & 0xF0)) >> 4) * 10; for (md = 0; md < 14; md++) { if ( ((FT1000MP_A_mode[md].a & 0xFF) == (replystr[p + 23] & 0xFF)) && ((FT1000MP_A_mode[md].b & 0xFF) == (replystr[p + 24] & 0x80))) break; } if (md == 13) md = 0; B.imode = md; B.iBW = 5*((replystr[p + 24] & 0x70) >> 4) + (replystr[p + 24] & 0x07); if (B.iBW > 24) B.iBW = 24; return true; } return false; } unsigned long long RIG_FT1000MP_A::get_vfoA () { get_info(); return A.freq; } unsigned long long RIG_FT1000MP_A::get_vfoB () { get_info(); return B.freq; } void RIG_FT1000MP_A::set_vfoA (unsigned long long freq) { A.freq = freq; init_cmd(); freq /=10; // 1000MP does not support 1 Hz resolution for (int i = 0; i < 4; i++) { cmd[i] = (unsigned char)(freq % 10); freq /= 10; cmd[i] |= (unsigned char)((freq % 10) * 16); freq /= 10; } cmd[4] = 0x0A; setr("set vfo A"); sendCommand(cmd, 0); seth(); } void RIG_FT1000MP_A::set_vfoB (unsigned long long freq) { B.freq = freq; init_cmd(); freq /=10; // 1000MP does not support 1 Hz resolution for (int i = 0; i < 4; i++) { cmd[i] = (unsigned char)(freq % 10); freq /= 10; cmd[i] |= (unsigned char)((freq % 10) * 16); freq /= 10; } cmd[4] = 0x8A; setr("set vfo B"); sendCommand(cmd, 0); seth(); } int RIG_FT1000MP_A::get_modeA() { return A.imode; } int RIG_FT1000MP_A::get_modeB() { return B.imode; } void RIG_FT1000MP_A::set_modeA(int val) { A.imode = val; init_cmd(); cmd[3] = val; if (val > 6) cmd[3]++; cmd[4] = 0x0C; setr("set mode A"); sendCommand(cmd, 0); seth(); get_info(); } void RIG_FT1000MP_A::set_modeB(int val) { B.imode = val; init_cmd(); cmd[3] = val; if (val > 6) cmd[3]++; cmd[4] = 0x0C; setr("set mode B"); sendCommand(cmd, 0); seth(); get_info(); } int RIG_FT1000MP_A::get_modetype(int n) { return FT1000MP_A_mode_type[n]; } int RIG_FT1000MP_A::get_bwA() { return A.iBW; } void RIG_FT1000MP_A::set_bwA(int val) { int first_if = val / 5; int second_if = val % 5; if (!first_if) first_if += 5; --first_if; if (!second_if) second_if += 5; --second_if; A.iBW = val; init_cmd(); cmd[0] = 0x01; // 1st IF cmd[3] = first_if; cmd[4] = 0x8C; setr("set bw A 1st IF"); sendCommand(cmd, 0); seth(); cmd[0] = 0x02; // 2nd IF cmd[3] = second_if; setr("set bw A 2nd IF"); sendCommand(cmd, 0); seth(); } int RIG_FT1000MP_A::get_bwB() { return B.iBW; } void RIG_FT1000MP_A::set_bwB(int val) { B.iBW = val; int first_if = val / 5; int second_if = val % 5; if (!first_if) first_if += 5; --first_if; first_if += 0x80; // vfo-B if (!second_if) second_if += 5; --second_if; second_if += 0x80; // vfo-B init_cmd(); cmd[0] = 0x01; // 1st IF cmd[3] = first_if; cmd[4] = 0x8C; setr("set bw B 1st IF"); sendCommand(cmd, 0); seth(); cmd[0] = 0x02; // 2nd IF cmd[3] = second_if; setr("set bw B 2nd IF"); sendCommand(cmd, 0); seth(); } int RIG_FT1000MP_A::def_bandwidth(int m) { return FT1000MP_A_def_bw[m]; } int RIG_FT1000MP_A::adjust_bandwidth(int m) { return FT1000MP_A_def_bw[m]; } void RIG_FT1000MP_A::selectA() { init_cmd(); cmd[4] = 0x05; setr("select A"); sendCommand(cmd, 0); seth(); } void RIG_FT1000MP_A::selectB() { init_cmd(); cmd[3] = 0x01; cmd[4] = 0x05; setr("select B"); sendCommand(cmd, 0); seth(); } void RIG_FT1000MP_A::set_split(bool val) { split = val; init_cmd(); cmd[3] = val ? 0x01 : 0x00; cmd[4] = 0x01; setr("set split"); sendCommand(cmd, 0); seth(); } // Tranceiver PTT on/off void RIG_FT1000MP_A::set_PTT_control(int val) { init_cmd(); if (val) cmd[3] = 1; else cmd[3] = 0; cmd[4] = 0x0F; setr("set PTT"); sendCommand(cmd, 0); seth(); ptt_ = val; } void RIG_FT1000MP_A::tune_rig() { init_cmd(); cmd[4] = 0x82; // initiate tuner cycle setr("tune"); sendCommand(cmd,0); seth(); } // used to turn tuner ON/OFF void RIG_FT1000MP_A::set_auto_notch(int v) { tuner_on = v; init_cmd(); cmd[3] = v ? 0x01 : 0x00; cmd[4] = 0x81; // start antenna tuner setr("tuner on/off"); sendCommand(cmd,0); seth(); } int RIG_FT1000MP_A::get_auto_notch() { return tuner_on; } int RIG_FT1000MP_A::get_power_out(void) { float pwr; init_cmd(); cmd[0] = 0x80; cmd[4] = 0xF7; getr("get power out"); int ret = sendCommand(cmd); geth(); if (ret < 5) return 0; pwr = (unsigned char)(replystr[ret - 5]); if (pwr <=53) {pwr /= 53; pwr = 10 * pwr * pwr; } else if (pwr <= 77) {pwr /= 77; pwr = 20 * pwr * pwr; } else if (pwr <= 98) {pwr /= 98; pwr = 30 * pwr * pwr; } else if (pwr <= 114) {pwr /= 114; pwr = 40 * pwr * pwr; } else if (pwr <= 130) {pwr /= 130; pwr = 50 * pwr * pwr; } else {pwr /= 177; pwr = 100 * pwr * pwr; } return (int)pwr; } int RIG_FT1000MP_A::get_smeter(void) { float val = 0; init_cmd(); cmd[0] = 0x00; cmd[4] = 0xF7; getr("get smeter"); int ret = waitN(5, 100, "get smeter", HEX); geth(); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]); if (val <= 15) val = 5; else if (val <=154) val = 5 + 45 * (val - 15) / (154 - 15); else val = 50 + 50 * (val - 154.0) / (255.0 - 154.0); return (int)val; } int RIG_FT1000MP_A::get_swr(void) { float val = 0; init_cmd(); cmd[0] = 0x85; cmd[4] = 0xF7; getr("get swr"); int ret = waitN(5, 100, "get swr", HEX); geth(); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]) - 10; val *= (50.0 / 122.0); if (val < 0) val = 0; if (val > 100) val = 100; return (int)val; } int RIG_FT1000MP_A::get_alc(void) { unsigned char val = 0; init_cmd(); cmd[0] = 0x81; cmd[4] = 0xF7; getr("get alc"); int ret = waitN(5, 100, "get alc", HEX); geth(); if (ret < 5) return 0; val = (unsigned char)(replystr[ret-5]); return val * 100 / 255; } flrig-2.0.04/src/rigs/elecraft/0000775000175000017500000000000014511461606013227 500000000000000flrig-2.0.04/src/rigs/elecraft/K2.cxx0000664000175000017500000003374614502041135014153 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // Additions by Kent Haase, VE4KEH //----------------------------------------------------------------------------- #include "elecraft/K2.h" #include "support.h" #include "status.h" #define K2_WAIT 200 const char K2name_[] = "K2"; static std::vectorK2modes_; static const char *vK2modes_[] = { "LSB", "USB", "CW", "RTTY", "CW-R", "RTTY-R"}; static const char K2_mode_type[] = { 'L', 'U', 'L', 'L', 'U', 'U' }; static std::vectorK2_mode_str; static const char *vK2_mode_str[] = { "MD1;", "MD2;", "MD3;", "MD6;", "MD7;", "MD9;" }; static int K2_num_modes = 6; static std::vectorK2_widths; static const char *vK2_widths[] = { "FL1", "FL2", "FL3", "FL4"}; static int K2_bw_vals[] = { 1, 2, 3, 4, WVALS_LIMIT}; static GUI k2_widgets[]= { { (Fl_Widget *)sldrPOWER, 266, 105, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_K2::RIG_K2() { // base class values name_ = K2name_; modes_ = K2modes_; bandwidths_ = K2_widths; bw_vals_ = K2_bw_vals; widgets = k2_widgets; serial_baudrate = BR4800; stopbits = 2; serial_retries = 3; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 200; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; modeB = modeA = 1; bwB = bwA = 0; freqB = freqA = 14070000ULL; has_split_AB = has_get_info = has_attenuator_control = has_preamp_control = has_power_control = has_mode_control = // has_bandwidth_control = has_ptt_control = has_split = has_smeter = has_power_out = has_tune_control = true; K2split = has_micgain_control = has_notch_control = has_ifshift_control = has_volume_control = has_swr_control = false; hipower = false; precision = 10; ndigits = 7; } int RIG_K2::adjust_bandwidth(int m) { return 0; } void RIG_K2::initialize() { VECTOR (K2modes_, vK2modes_); VECTOR (K2_mode_str, vK2_mode_str); VECTOR (K2_widths, vK2_widths); modes_ = K2modes_; bandwidths_ = K2_widths; bw_vals_ = K2_bw_vals; k2_widgets[0].W = sldrPOWER; set_trace(1, "disable auto reporting"); sendCommand("AI0;", 0); sett(""); set_trace(1,"enable extended command mode"); sendCommand("K22;", 0); sett(""); //ensure K2 is in VFO A get_power_control(); } bool RIG_K2::check () { rsp = cmd = "FA"; cmd += ';'; get_trace(1, "check"); int ret = wait_char(';', 14, K2_WAIT, "check", ASC); gett(""); if (ret < 14) return false; return true; } /* * IF (Transceiver Information; GET only) * * RSP format: IF[f]*****+yyyyrx*00tmvspb01*; where the fields are defined as follows: * * 0 1 2 3 * 0123456789012345678901234567890123456789 * IFfffffffffff*****+yyyyrx*00tmvspb01*; * 0..1 IF * 2..12 [f] operating frequency, excluding any RIT/XIT offset (11 digits; see FA command) * 13..17 * represents a space (BLANK, or ASCII 0x20) * 18 + either "+" or "-" (sign of RIT/XIT offset) * 19..22 yyyy RIT/XIT offset in Hz (range is -9990 to +9990 Hz when computer-controlled) * 23 r 1 if RIT is on, 0 if off * 24 x 1 if XIT is on, 0 if off * 25..27 fill * 28 t 1 if the K2 is in transmit mode, 0 if receive * 29 m operating mode (see MD command) * 30 v receive-mode VFO selection, 0 for VFO A, 1 for VFO B * 31 s 1 if scan is in progress, 0 otherwise * 32 p 1 if the transeiver is in split mode, 0 otherwise * 33 b basic RSP format: always 0 * extended RSP format: * 1 if the present IF response is due to a K2 band change and * 0 otherwise * 34..35 fill * 37 ; terminator * The fixed-value fields (space, 0, and 1) are provided for syntactic compatibility with existing software. * * received from M1CNK * 01234567890123457890123456789012345678 * FA00014039310; * IF00014039310 +007000 0002000001 ; * IF00014039310 +007000 0002000001 ; * */ // set replystr to teststr to test for various control bytes //const char *teststr = "IFfffffffffff*****+yyyyrx*000m0s1b01*;"; //static void do_selectA(void *) //{ // cb_selectA(); //} //static void do_selectB(void *) //{ // cb_selectB(); //} bool RIG_K2::get_info() { rsp = cmd = "IF"; cmd += ';'; get_trace(1, "get info"); int ret = wait_char(';', 38, K2_WAIT,"get info", ASC); gett(""); if (ret < 38) return false; size_t p = replystr.find(rsp); ptt_ = (replystr[p+28] == '1'); inuse = (replystr[p+30] == '1') ? onB : onA; K2split = replystr[p+32]-'0'; return true; } void RIG_K2::selectA() { cmd = "FR0;FT0"; set_trace(1, "selectA"); sendCommand(cmd); sett(""); K2split = false; showresp(WARN, ASC, "select A", cmd, replystr); inuse = onA; } void RIG_K2::selectB() { cmd = "FR1;FT1"; set_trace(1, "selectB"); sendCommand(cmd); sett(""); K2split = false; showresp(WARN, ASC, "select B", cmd, replystr); inuse = onB; } bool RIG_K2::can_split() { return true; } void RIG_K2::set_split(bool val) { if (val) { if (inuse == onB) cmd = "FR1;FT0;"; else cmd = "FR0;FT1;"; set_trace(1, "set split"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set split ON", cmd, replystr); } else { if (inuse == onB) cmd = "FR1;FT1;"; else cmd = "FR0;FT0;"; set_trace(1, "set split"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set split OFF", cmd, replystr); } cmd = "FA;"; get_trace(1, "get vfoA after set split"); wait_char(';', 14, 1000, "get vfo A", ASC); gett(""); } int RIG_K2::get_split() { return K2split; } unsigned long long RIG_K2::get_vfoA () { rsp = cmd = "FA"; cmd += ';'; get_trace(1, "get vfoA"); int ret = wait_char(';', 14, K2_WAIT,"get vfo A", ASC); gett(""); if (ret < 14) return freqA; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_K2::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoA"); sendCommand(cmd); showresp(WARN, ASC, "SET vfo A", cmd, replystr); sett(""); } unsigned long long RIG_K2::get_vfoB() { rsp = cmd = "FB"; cmd += ';'; get_trace(1, "get vfoB"); int ret = wait_char(';', 14, K2_WAIT,"get vfo B", ASC); gett(""); if (ret < 14) return freqB; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_K2::set_vfoB(unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoB"); sendCommand(cmd); showresp(WARN, ASC, "SET vfo B", cmd, replystr); sett(""); } // LSB MD1; // LSB-rev MD2; // USB MD2; // USB-rev MD1; // RTTY MD6; // RTTY-rev MD9; // CW MD3; // CW-rev MD7; void RIG_K2::set_modeA(int val) { modeA = val; cmd = K2_mode_str[val]; set_trace(1, "set modeA"); sendCommand(cmd); showresp(WARN, ASC, "SET mode A", cmd, replystr); sett(""); } int RIG_K2::get_modeA() { rsp = cmd = "MD"; cmd += ';'; get_trace(1, "get modeA"); int ret = wait_char(';', 4, K2_WAIT,"get mode A", ASC); gett(""); if (ret < 4) return 0; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; for (int i = 0; i < K2_num_modes; i++) { if (replystr.substr(p) == K2_mode_str[i]) { modeA = i; return modeA; } } return modeA; } void RIG_K2::set_modeB(int val) { modeB = val; cmd = K2_mode_str[val]; set_trace(1, "set modeB"); sendCommand(cmd); showresp(WARN, ASC, "SET mode B", cmd, replystr); sett(""); } int RIG_K2::get_modeB() { rsp = cmd = "MD"; cmd += ';'; get_trace(1, "get modeB"); int ret = wait_char(';', 4, K2_WAIT,"get mode B", ASC); gett(""); if (ret < 4) return 0; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; for (int i = 0; i < K2_num_modes; i++) { if (replystr.substr(p) == K2_mode_str[i]) { modeB = i; return modeB; } } return modeB; } int RIG_K2::get_modetype(int n) { return K2_mode_type[n]; } void RIG_K2::set_bwA(int val) { bwA = val; switch (val) { case 0 : cmd = "FW00001;"; break; case 1 : cmd = "FW00002;"; break; case 2 : cmd = "FW00003;"; break; case 3 : cmd = "FW00004;"; break; default: cmd = "FW00001;"; } set_trace(1, "set bwA"); sendCommand(cmd); showresp(WARN, ASC, "set bwA", cmd, replystr); sett(""); } int RIG_K2::get_bwA() { rsp = cmd = "FW"; cmd += ';'; get_trace(1, "get bwA"); int ret = wait_char(';', 9, K2_WAIT,"get bw A", ASC); gett(""); if (ret < 9) return 0; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; bwA = replystr[p + 6] - '1'; return bwA; } void RIG_K2::set_bwB(int val) { bwB = val; switch (val) { case 0 : cmd = "FW00001;"; break; case 1 : cmd = "FW00002;"; break; case 2 : cmd = "FW00003;"; break; case 3 : cmd = "FW00004;"; break; default: cmd = "FW00001;"; } set_trace(1, "set bwB"); sendCommand(cmd); showresp(WARN, ASC, "set bwA", cmd, replystr); sett(""); } int RIG_K2::get_bwB() { rsp = cmd = "FW"; cmd += ';'; get_trace(1, "get bwB"); int ret = wait_char(';', 9, K2_WAIT,"get bw B", ASC); gett(""); if (ret < 9) return 0; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; bwB = replystr[p + 6] - '1'; return bwB; } void RIG_K2::tune_rig(int val) { cmd = "SW20;"; sendCommand(cmd); showresp(WARN, ASC, "tune", cmd, replystr); set_trace(1, "tune rig"); } int RIG_K2::get_smeter() { rsp = cmd = "BG"; cmd += ';'; get_trace(1, "get smeter"); int ret = wait_char(';', 5, K2_WAIT,"get smeter", ASC); gett(""); if (ret < 5) return 0; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int mtr = 10 * (replystr[p + 2] - '0') + replystr[p + 3] - '0'; //assemble two chars into 2 digit int if (mtr > 10) { //if int greater than 10 (bar mode) mtr -= 12; //shift down to 0 thru 10 } mtr *= 10; //normalize to 0 thru 100 return mtr; } int RIG_K2::get_power_out() { rsp = cmd = "BG"; cmd += ';'; int ret = wait_char(';', 5, K2_WAIT,"get power", ASC); gett(""); get_trace(1, "get power out"); if (ret < 5) return 0; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; int mtr = 10 * (replystr[p + 2] - '0') + replystr[p + 3] - '0'; //assemble two chars into 2 digit int if (mtr > 10) { //if int greater than 10 (bar mode) mtr -= 12; //shift down to 0 thru 10 } mtr *= 10; //normalize to 0 thru 100 return mtr; } double RIG_K2::get_power_control() { rsp = cmd = "PC"; // extended mode for get power cmd += ';'; get_trace(1, "get power control"); int ret = wait_char(';', 7, K2_WAIT,"get pwr cont", ASC); gett(""); if (ret < 7) return progStatus.power_level; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; hipower = (replystr[p+5] == '1'); int mtr = fm_decimal(replystr.substr(p+4), 3); if (!hipower) mtr /= 10; return mtr; } void RIG_K2::set_power_control(double val) { int ival = (int)val; cmd = "PC"; //init the cmd std::string if (val > 15) { hipower = true; cmd[5] = '1'; cmd.append(to_decimal(ival,3)).append("1;"); } else { hipower = false; cmd.append(to_decimal((int)(val*10),3)).append("0;"); } set_trace(1, "set power control"); sendCommand(cmd); showresp(WARN, ASC, "SET pwr", cmd, replystr); sett(""); } void RIG_K2::get_pc_min_max_step(double &min, double &max, double &step) { if (hipower) { min = 1.0; max_power = max = 110.0; step = 1.0; } else { min = 0.1; max_power = max = 20; step = 0.1; } } void RIG_K2::set_PTT_control(int val) { if (val) cmd = "TX;"; else cmd = "RX;"; set_trace(1, "set PTT"); sendCommand(cmd); showresp(WARN, ASC, "SET ptt", cmd, replystr); sett(""); ptt_ = val; } int RIG_K2::get_PTT() { rsp = cmd = "IF"; cmd += ';'; get_trace(1, "get info"); int ret = wait_char(';', 38, K2_WAIT,"get info", ASC); gett(""); if (ret < 38) return false; size_t p = replystr.find(rsp); ptt_ = (replystr[p+28] == '1'); return ptt_; } void RIG_K2::set_attenuator(int val) { if (val) cmd = "RA01;"; else cmd = "RA00;"; set_trace(1, "set attenuator"); sendCommand(cmd); showresp(WARN, ASC, "SET att", cmd, replystr); sett(""); } int RIG_K2::get_attenuator() { rsp = cmd = "RA"; cmd += ';'; get_trace(1, "get_attenuator"); int ret = wait_char(';', 5, K2_WAIT,"get att", ASC); gett(""); if (ret < 5) return 0; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; return (replystr[p + 3] == '1' ? 1 : 0); } void RIG_K2::set_preamp(int val) { if (val) cmd = "PA1;"; else cmd = "PA0;"; set_trace(1, "set preamp"); sendCommand(cmd); showresp(WARN, ASC, "SET pre", cmd, replystr); sett(""); } int RIG_K2::get_preamp() { rsp = cmd = "PA"; cmd += ';'; get_trace(1, "get preamp"); int ret = wait_char(';', 4, K2_WAIT,"get pre", ASC); gett(""); if (ret < 4) return 0; size_t p = replystr.rfind(rsp); if (p == std::string::npos) return 0; return (replystr[p + 2] == '1' ? 1 : 0); } flrig-2.0.04/src/rigs/elecraft/K4.cxx0000664000175000017500000006200614502041135014144 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2022 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "elecraft/K4.h" #include "status.h" #include "support.h" const char K4name_[] = "K4"; // 0=N/A, 1=LSB, 2=USB, 3=CW, 4=FM, 5=AM, 6=DATA, 7=CW REV, 8=N/A, 9=DATA REV. static std::vectorK4modes_; static const char *vK4modes_[] = { "LSB", "USB", "CW", "FM", "AM", "DATA", "CW-R", "DATA-R"}; const char modenbr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char K4_mode_type[] = { 'L', 'U', 'L', 'U', 'U', 'U', 'U', 'L' }; static std::vectorK4_widths; static int mode_bwA[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; static int mode_bwB[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; // entry # = (FREQ - 50)/10; FREQ: 50...5000, #: 0...495 static int mode_def_bw[] = { 275, 275, 75, 495, 395, 275, 75, 275 }; static GUI k4_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 125, 156 }, { (Fl_Widget *)sldrPOWER, 266, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; static int agcval = 1; static int agcvalA = 1; static int agcvalB = 1; int RIG_K4::power_scale() { return powerScale; } RIG_K4::RIG_K4() { // base class values name_ = K4name_; modes_ = K4modes_; bandwidths_ = K4_widths; serial_baudrate = BR38400; widgets = k4_widgets; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; def_freq = freqA = freqB = 14070000ULL; def_mode = modeA = modeB = 1; def_bw = bwA = bwB = 3000; can_change_alt_vfo = has_split_AB = true; has_micgain_control = has_rf_control = true; has_bandwidth_control = has_power_control = true; has_volume_control = has_mode_control = has_ptt_control = true; has_noise_control = has_attenuator_control = true; has_smeter = true; has_power_out = true; has_split = true; has_ifshift_control = has_preamp_control = true; has_agc_control = true; has_notch_control = has_tune_control = has_swr_control = false; if_shift_min = 300; if_shift_max = 3000; if_shift_step = 10; if_shift_mid = 300; precision = 1; ndigits = 8; } int RIG_K4::adjust_bandwidth(int m) { return def_bandwidth(m); } int RIG_K4::def_bandwidth(int m) { /* std::cout << vK4modes_[0] << ":" << mode_bwA[0] << ":" << mode_bwB[0] << ", " << vK4modes_[1] << ":" << mode_bwA[1] << ":" << mode_bwB[1] << ", " << vK4modes_[2] << ":" << mode_bwA[2] << ":" << mode_bwB[2] << ", " << vK4modes_[3] << ":" << mode_bwA[3] << ":" << mode_bwB[3] << ", " << vK4modes_[4] << ":" << mode_bwA[4] << ":" << mode_bwB[4] << ", " << vK4modes_[5] << ":" << mode_bwA[5] << ":" << mode_bwB[5] << ", " << vK4modes_[6] << ":" << mode_bwA[6] << ":" << mode_bwB[6] << ", " << vK4modes_[7] << ":" << mode_bwA[7] << ":" << mode_bwB[7] << std::endl; */ if (m < 0 || m > 7) return 0; int width = (inuse == onA ? mode_bwA[m] : mode_bwB[m]); if (width == -1) return mode_def_bw[m]; return width; } #define K4_WAIT_TIME 800 #define VECTOR(a,b) { a.clear(); for (size_t n = 0; n < sizeof(b)/sizeof(*b); n++) {a.push_back(b[n]);} } void RIG_K4::initialize() { VECTOR (K4modes_, vK4modes_); char width[10]; K4_widths.clear(); for (int n = 50; n <= 5000; n += 10) { snprintf(width, sizeof(width), "%d", n); K4_widths.push_back(width); } modes_ = K4modes_; bandwidths_ = K4_widths; LOG_INFO("K4"); k4_widgets[0].W = btnVol; k4_widgets[1].W = sldrVOLUME; k4_widgets[2].W = sldrRFGAIN; k4_widgets[3].W = btnIFsh; k4_widgets[4].W = sldrIFSHIFT; k4_widgets[5].W = sldrMICGAIN; k4_widgets[6].W = sldrPOWER; powerScale = 1; cmd = "AI0;"; // disable auto-info set_trace(1, "disable auto info"); sendCommand(cmd); sett(""); cmd = "K41;"; // K4 advanced mode set_trace(1, "set K4 advanced mode"); sendCommand(cmd); sett(""); // cmd = "SWT49;"; // Fine tuning (1 Hz mode) // set_trace(1, "set 1 Hz fine tuning"); // sendCommand(cmd); // sett(""); cmd = "OM;"; // request options to get power level get_trace(1, "get options"); wait_char(';', 16, K4_WAIT_TIME, "Options", ASC); gett(""); if (replystr.rfind("OM") != std::string::npos) { if (replystr.rfind("P") == std::string::npos) { // KPA4 present minpwr = 0.0; maxpwr = 10.0; steppwr = 0.1; } else { minpwr = 0.0; maxpwr = 110.0; steppwr = 1.0; } } get_vfoA(); get_modeA(); get_bwA(); get_vfoB(); get_modeB(); get_bwB(); set_split(false); // normal ops } void RIG_K4::shutdown() { } bool RIG_K4::check () { return true; cmd = "FA;"; get_trace(1, "check vfoA"); int ret = wait_char(';', 14, 2000, "check", ASC); gett(""); if (ret < 14) return false; return true; } unsigned long long RIG_K4::get_vfoA () { cmd = "FA;"; get_trace(1, "get vfoA"); wait_char(';', 14, K4_WAIT_TIME, "get vfo A", ASC); gett(""); size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = p + 2; n < replystr.length() - 1; n++) f = f*10 + replystr[n] - '0'; freqA = f; return freqA; } void RIG_K4::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoA"); sendCommand(cmd); sett(""); } unsigned long long RIG_K4::get_vfoB () { cmd = "FB;"; get_trace(1, "get vfoB"); wait_char(';', 14, K4_WAIT_TIME, "get vfo B", ASC); gett(""); size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = p + 2; n < replystr.length() - 1; n++) f = f*10 + replystr[n] - '0'; freqB = f; return freqB; } void RIG_K4::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoB"); sendCommand(cmd); sett(""); } // Volume control void RIG_K4::set_volume_control(int val) { if (isOnA()) { cmd = "AG000;"; cmd[4] += val % 10; val /= 10; cmd[3] += val % 10; val /= 10; cmd[2] += val % 10; set_trace(1, "set volume"); sendCommand(cmd); sett(""); } else { cmd = "AG$000;"; cmd[5] += val % 10; val /= 10; cmd[4] += val % 10; val /= 10; cmd[3] += val % 10; set_trace(1, "set volume"); sendCommand(cmd); sett(""); } } int RIG_K4::get_volume_control() { int v; if (isOnA()) { cmd = "AG;"; get_trace(1, "get volume control"); wait_char(';', 7, K4_WAIT_TIME, "get volume", ASC); gett(""); size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; v = atoi(&replystr[p + 3]); } else { cmd = "AG$;"; get_trace(1, "get volume control"); wait_char(';', 8, K4_WAIT_TIME, "get volume", ASC); gett(""); size_t p = replystr.rfind("AG$"); if (p == std::string::npos) return 0; v = atoi(&replystr[p + 4]); } return v; } void RIG_K4::get_vol_min_max_step(double &min, double &max, double &step) { min = 0; max = 60; step = 1; } //---------------------------------------------------------------------- static const char *agcstrs[] = {"AGC", "AG-S", "AG-F"}; const char *RIG_K4::agc_label() { if (agcval >= 0 && agcval <= 2) return agcstrs[agcval]; return "AGC"; } int RIG_K4::get_agc() { if (isOnA()) { cmd = "GT;"; wait_char(';', 4, 100, "get AGC", ASC); gett("get agc"); size_t p = replystr.rfind("GT"); if (p == std::string::npos) return agcvalA; switch (replystr[p+2]) { default: case '0': nb_label("AGC", false); agcvalA = 0; break; case '1': nb_label("AG-S", true); agcvalA = 1; break; case '2': nb_label("AG-F", true); agcvalA = 2; break; } agcval=agcvalA; } else { cmd = "GT$;"; wait_char(';', 5, 100, "get AGC", ASC); gett("get agc"); size_t p = replystr.rfind("GT"); if (p == std::string::npos) return agcvalB; switch (replystr[p+3]) { default: case '0': nb_label("AGC", false); agcvalB = 0; break; case '1': nb_label("AG-S", true); agcvalB = 1; break; case '2': nb_label("AG-F", true); agcvalB = 2; break; } agcval=agcvalB; } if (agcval == 0) agcvalA = agcvalB = 0; return agcval; } void RIG_K4::set_agc_level(int val) { if (isOnA()) { agcvalA = val; cmd = "GT0;"; switch (val) { default: case '0': nb_label("AGC", false); cmd[2] = '0'; break; case '1': nb_label("AG-S", true); cmd[2] = '1'; break; case '2': nb_label("AG-F", true); cmd[2] = '2'; break; } set_trace(1, "set agc"); sendCommand(cmd); sett(""); } else { agcvalB = val; cmd = "GT$0;"; switch (val) { default: case '0': nb_label("AGC", false); cmd[3] = '0'; break; case '1': nb_label("AG-S", true); cmd[3] = '1'; break; case '2': nb_label("AG-F", true); cmd[3] = '2'; break; } set_trace(1, "set agc"); sendCommand(cmd); sett(""); } return; } // Turning off AGC on either A or B results in AGC OFF for BOTH receivers. // // Turning on AGC Fast for either one turns on AGC Slow for the // other one when starting from OFF, but if the Other is ON then // it's fast or slow setting remains. // // Turning on AGC Slow from the OFF state for either one turns // on AGC Slow for the other one. // // Make the AGC button toggle between off and Slow. To set fast use // on screen menus to avoid needing a second AGC button. int RIG_K4::incr_agc() { static const char ch[] = {'0', '1', '2'}; if (isOnA()) { agcvalA++; if (agcvalA > 1) agcvalA = agcvalB = 0; cmd = "GT0;"; cmd[2] = ch[agcvalA]; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); sett("set_agc"); agcval = agcvalA; return agcvalA; } else { agcvalB++; if (agcvalB > 1) agcvalA = agcvalB = 0; cmd = "GT$0;"; cmd[3] = ch[agcvalB]; sendCommand(cmd); showresp(WARN, ASC, "SET agc", cmd, replystr); sett("set_agc"); agcval = agcvalB; return agcvalB; } } void RIG_K4::set_modeA(int val) { modeA = val; cmd = "MD0;"; cmd[2] = modenbr[val]; set_trace(1, "set modeA"); sendCommand(cmd); sett(""); set_pbt_values(val); } int RIG_K4::get_modeA() { cmd = "MD;"; get_trace(1, "get modeA"); wait_char(';', 4, K4_WAIT_TIME, "get mode A", ASC); gett(""); size_t p = replystr.rfind("MD"); // if (replystr[p+2] == '0' || replystr[p+2] == '8') return modeA; if (p == std::string::npos) return modeA; int md = replystr[p + 2] - '1'; if (md < 0 || md > 7) return modeA; if (md != modeA) set_pbt_values(md); return (modeA = md); } void RIG_K4::set_modeB(int val) { modeB = val; cmd = "MD$0;"; cmd[3] = modenbr[val]; set_trace(1, "set modeB"); sendCommand(cmd); sett(""); set_pbt_values(val); } int RIG_K4::get_modeB() { cmd = "MD$;"; get_trace(1, "get modeB"); wait_char(';', 4, K4_WAIT_TIME, "get mode B", ASC); gett(""); size_t p = replystr.rfind("MD$"); // if (replystr[p+3] == '0' || replystr[p+3] == '8') return modeB; if (p == std::string::npos) return modeB; int md = replystr[p + 3] - '1'; if (md < 0 || md > 7) return modeA; if (md != modeB) set_pbt_values(md); return (modeB = md); } int RIG_K4::get_modetype(int n) { return K4_mode_type[n]; } // SET/RESP format: PA$nm; where n is as shown below, and m is 0 (off) or 1 (on). // n = 0 (off) // n = 1 (10 dB regular preamp) // n = 2 (160-15 m: 18 dB regular preamp; 12-6 m: 20 dB LNA) // n = 3 (12-6 m only: 10 dB regular preamp + 20 dB LNA) void RIG_K4::set_preamp(int val) { set_trace(1, "set preamp"); if (isOnA()) cmd = "PA"; else cmd = "PA$"; switch (val) { case 0: cmd.append("00;"); break; case 1: cmd.append("11;"); break; case 2: cmd.append("21;"); break; #ifdef HAVE_LNA case 3: cmd.append("31;"); break; #endif } preamp_level = val; sendCommand(cmd); sett(""); } int RIG_K4::get_preamp() { int val; if (isOnA()) { cmd = "PA;"; get_trace(1, "get_preamp"); wait_char(';', 4, K4_WAIT_TIME, "get preamp", ASC); gett(""); size_t p = replystr.rfind("PA"); if (p == std::string::npos) return progStatus.preamp; val = progStatus.preamp = (replystr[p + 2] - '0'); } else { cmd = "PA$;"; get_trace(1, "get_preamp"); wait_char(';', 5, K4_WAIT_TIME, "get preamp", ASC); gett(""); size_t p = replystr.rfind("PA$"); if (p == std::string::npos) return progStatus.preamp; val = progStatus.preamp = (replystr[p + 3] - '0'); } preamp_level = val; return val; } // THIS IS A DO NOTHING METHOD !! void K4_return(int val) { } int RIG_K4::next_attenuator() { if (atten_level < 7) atten_level++; else atten_level = 0; return atten_level; } int RIG_K4::next_preamp() { #ifdef HAVE_LNA if (preamp_level < 3) preamp_level++; #else if (preamp_level < 2) preamp_level++; #endif else preamp_level = 0; return preamp_level; } const char *RIG_K4::PRE_label() { switch (preamp_level) { default: case 0: break; case 1: return("10 db"); break; case 2: return("18 db"); break; #ifdef HAVE_LNA case 3: return("30 db"); break; #endif } return("PRE"); } const char *RIG_K4::ATT_label() { switch (atten_level) { default: case 0: break; case 1: return("3 db"); break; case 2: return("6 db"); break; case 3: return("9 db"); break; case 4: return("12 db"); break; case 5: return("15 db"); break; case 6: return("18 db"); break; case 7: return("21 db"); break; } return("ATT"); } /* RA$nnm; where nn is 0/3/6/9/12/15/18/21 (dB) and m = 0 (off), 1 (on) */ void RIG_K4::set_attenuator(int val) { sett("set_attenuator(int val)"); if (isOnA()) cmd = "RA"; else cmd = "RA$"; switch (val) { default: case 0: cmd.append("000;"); break; case 1: cmd.append("031;");break; case 2: cmd.append("061;"); break; case 3: cmd.append("091;"); break; case 4: cmd.append("121;"); break; case 5: cmd.append("151;"); break; case 6: cmd.append("181;"); break; case 7: cmd.append("211;"); break; } set_trace(1, "set attenuator"); sendCommand(cmd); sett(""); } int RIG_K4::get_attenuator() { std::string valstr; if (isOnA()) { cmd = "RA;"; get_trace(1, "get attenuator"); wait_char(';', 5, K4_WAIT_TIME, "set ATT", ASC); gett(""); size_t p = replystr.rfind("RA"); if (p == std::string::npos) return 0; valstr = replystr.substr(p + 2, 2); } else { cmd = "RA$;"; get_trace(1, "get attenuator"); wait_char(';', 6, K4_WAIT_TIME, "set ATT", ASC); gett(""); size_t p = replystr.rfind("RA$"); if (p == std::string::npos) return 0; valstr = replystr.substr(p + 3, 2); } if (valstr == "03") return 1; if (valstr == "06") return 2; if (valstr == "09") return 3; if (valstr == "12") return 4; if (valstr == "15") return 5; if (valstr == "18") return 6; if (valstr == "21") return 7; return 0; } // Transceiver power level void RIG_K4::set_power_control(double val) { int ival = val; cmd = "PC000"; if (ival > 10) { for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } } else { for (int i = 3; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } } if ((int)val > 10) cmd.append("H;"); else cmd.append("L;"); set_trace(1, "set power control"); sendCommand(cmd); showresp(INFO, ASC, "set power ctrl", cmd, replystr); sett(""); } double RIG_K4::get_power_control() { cmd = "OM;"; // request options to get power level get_trace(1, "get options/pc_pwr_level"); wait_char(';', 16, K4_WAIT_TIME, "Options", ASC); gett(""); if (replystr.rfind("OM") != std::string::npos) { if (replystr.find("P") == std::string::npos) { minpwr = 0.0; maxpwr = 10.0; steppwr = 0.1; } else { minpwr = 0.0; maxpwr = 110.0; steppwr = 1.0; } } else { minpwr = 0.0; maxpwr = 100.0; steppwr = 1.0; } cmd = "PCX;"; get_trace(1, "get power control"); wait_char(';', 8, K4_WAIT_TIME, "get power level", ASC); gett(""); size_t p = replystr.rfind("PCX"); if (p == std::string::npos) return progStatus.power_level; int level = fm_decimal(replystr.substr(p+3), 4); if (replystr[5] == 'L') { powerScale = 10; return level / 10.0; } powerScale = 1; return level; } void RIG_K4::get_pc_min_max_step(double &min, double &max, double &step) { min = minpwr; max = maxpwr; step = steppwr; } // Transceiver rf control void RIG_K4::set_rf_gain(int val) { if (isOnA()) { int ival = abs(val); cmd = "RG-00;"; cmd[3] += ival / 10; cmd[4] += ival % 10; set_trace(1, "set rf gain"); sendCommand(cmd); sett(""); } else { int ival = abs(val); cmd = "RG$-00;"; cmd[4] += ival / 10; cmd[5] += ival % 10; set_trace(1, "set rf gain"); sendCommand(cmd); sett(""); } } int RIG_K4::get_rf_gain() { int v; if (isOnA()) { cmd = "RG;"; get_trace(1, "get rf gain"); wait_char(';', 6, K4_WAIT_TIME, "get RF gain", ASC); gett(""); size_t p = replystr.rfind("RG"); if (p == std::string::npos) return progStatus.rfgain; replystr[p + 5] = 0; v = atoi(&replystr[p + 2]); } else { cmd = "RG$;"; get_trace(1, "get rf gain"); wait_char(';', 7, K4_WAIT_TIME, "get RF gain", ASC); gett(""); size_t p = replystr.rfind("RG$"); if (p == std::string::npos) return progStatus.rfgain; replystr[p + 6] = 0; v = atoi(&replystr[p + 3]); } return v; } void RIG_K4::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = -60; step = 1; } // Transceiver mic control void RIG_K4::set_mic_gain(int val) { cmd = "MG000;"; cmd[4] += val % 10; val /= 10; cmd[3] += val % 10; val /= 10; cmd[2] += val % 10; set_trace(1, "set mic gain"); sendCommand(cmd); sett(""); } int RIG_K4::get_mic_gain() { cmd = "MG;"; get_trace(1, "get mic gain"); wait_char(';', 6, K4_WAIT_TIME, "get MIC gain", ASC); gett(""); size_t p = replystr.rfind("MG"); if (p == std::string::npos) return progStatus.mic_gain; replystr[p + 5] = 0; int v = atoi(&replystr[p + 2]); return v; } void RIG_K4::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 80; step = 1; } // Tranceiver PTT on/off void RIG_K4::set_PTT_control(int val) { set_trace(1, "set PTT"); if (val) sendCommand("TX;", 0); else sendCommand("RX;", 0); sett(""); ptt_ = val; } int RIG_K4::get_PTT() { cmd = "TQ;"; get_trace(1, "get PTT"); wait_char(';', 4, K4_WAIT_TIME, "get PTT", ASC); gett(""); size_t p = replystr.rfind("TQ"); if (p == std::string::npos) return 0; if (fm_decimal(replystr.substr(p+2), 1) == 1) ptt_ = true; else ptt_ = false; return ptt_; } //SM $ (S-meter Read; GET only) // SM$nn; where nn is 00-42. S9=17; S9+20=25; S9+40=33; S9+60=42. int RIG_K4::get_smeter() { cmd = "SMH;"; get_trace(1, "get smeter"); wait_char(';', 8, K4_WAIT_TIME, "get Smeter", ASC); gett(""); size_t p = replystr.rfind("SMH"); if (p == std::string::npos) return 0; int mtr = fm_decimal(replystr.substr(p+4), 3); mtr = (mtr - 150); // if (mtr <= 9) mtr = (int) (50.0 * mtr / 9.0); // else mtr = (int)(50 + (mtr - 9.0) * 50.0 / 12.0); return mtr; } void RIG_K4::set_noise(bool on) { if (on) sendCommand("NB1;", 0); else sendCommand("NB0;", 0); sett("set noise blanker"); } int RIG_K4::get_noise() { cmd = "NB;"; wait_char(';', 4, K4_WAIT_TIME, "get Noise Blanker", ASC); gett("get noise blanker"); size_t p = replystr.rfind("NB"); if (p == std::string::npos) return progStatus.noise; return (replystr[p+2] == '1' ? 1 : 0); } // BW $ (Filter Bandwidth and Number; GET/SET) // KX3 Extended SET/RSP format (K31): BWxxxx; where xxxx is 0-9999, the bandwidth in 10-Hz units. May be // quantized and/or range limited based on the present operating mode. // BW00050 => BW0005; // 50 - 1000 in 50 Hz increments // 1000 - 3000 in 100 Hz increments // 3000 - 4000 in 200 Hz increments void RIG_K4::set_bwA(int val) { char command[10]; short bw = 0; try { sscanf(K4_widths.at(val).c_str(), "%hd", &bw); } catch (...) { bw = 1800; } snprintf(command, sizeof(command), "BW%04d;", (bw/10)); cmd = command; set_trace(1, "set bwA"); sendCommand(cmd); sett(""); bwA = val; mode_bwA[vfoA.imode] = bwA; } int RIG_K4::get_bwA() { cmd = "BW;"; get_trace(1, "get bwA val"); wait_char(';', 7, K4_WAIT_TIME, "get bwA val", ASC); gett(""); int bw = 0; sscanf(replystr.c_str(), "BW%d", &bw); bw *= 10; int n = 0; try { while (atol(K4_widths.at(n).c_str()) < bw) n++; } catch (...) { n = 0; } return bwA = n; } void RIG_K4::set_bwB(int val) { char command[10]; short bw = 0; try { sscanf(K4_widths.at(val).c_str(), "%hd", &bw); } catch (...) { bw = 1800; } snprintf(command, sizeof(command), "BW$%04d;", (bw/10)); cmd = command; set_trace(1, "set bwB"); sendCommand(cmd); sett(""); bwB = val; mode_bwB[vfoB.imode] = bwB; } int RIG_K4::get_bwB() { cmd = "BW$;"; get_trace(1, "get bwB val"); wait_char(';', 7, K4_WAIT_TIME, "get bwB val", ASC); gett(""); int bw = 0; sscanf(replystr.c_str(), "BW$%d", &bw); bw *= 10; int n = 0; try { while (atol(K4_widths.at(n).c_str()) < bw) n++; } catch (...) { n = 0; } return bwB = n; } int RIG_K4::get_power_out() { cmd = "TM;"; get_trace(1, "get power out"); wait_char(';', 15, K4_WAIT_TIME, "get power out", ASC); gett(""); size_t p = replystr.rfind("TM"); if (p == std::string::npos) return progStatus.power_level; int level = fm_decimal(replystr.substr(p+8), 3); return level; } bool RIG_K4::can_split() { return true; } void RIG_K4::set_split(bool val) { set_trace(1, "set split"); if (val) { cmd = "FT1;"; sendCommand(cmd); } else { cmd = "FT0;"; sendCommand(cmd); } sett(""); split_on = val; } // 01234567890123456789012345678901234567 // 0 1 2 3 7 // IF00014070000*****+yyyyrx*00tmvspbd1*; // |---------| | // vfo a/b split on = '1', off = '0' // IF00014070000 -000000 0002000011 ; OFF // IF00014070000 -000000 0002001011 ; ON int RIG_K4::get_split() { cmd = "IF;"; get_trace(1, "get split"); wait_char(';', 38, K4_WAIT_TIME, "get split", ASC); gett(""); size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split_on; split_on = replystr[p+32] - '0'; return split_on; } void RIG_K4::set_pbt_values(int val) { switch (val) { case 0 : case 1 : case 3 : case 4 : if_shift_min = 300; if_shift_max = 3000; if_shift_step = 10; if_shift_mid = 300; break; case 2 : case 6 : if_shift_min = 300; if_shift_max = 2000; if_shift_step = 10; if_shift_mid = 300; break; case 5 : case 7 : if_shift_min = 300; if_shift_max = 3000; if_shift_step = 10; if_shift_mid = 300; break; } progStatus.shift_val = if_shift_mid; Fl::awake(adjust_if_shift_control, (void *)0); } void RIG_K4::set_if_shift(int val) { if (isOnA()) { cmd = "IS0000;"; val /= 10; cmd[5] += val % 10; val /= 10; cmd[4] += val % 10; val /= 10; cmd[3] += val % 10; val /= 10; cmd[2] += val % 10; } else { cmd = "IS$0000;"; val /= 10; cmd[6] += val % 10; val /= 10; cmd[5] += val % 10; val /= 10; cmd[4] += val % 10; val /= 10; cmd[3] += val % 10; } set_trace(1, "set if shift"); sendCommand(cmd); sett(""); } bool RIG_K4::get_if_shift(int &val) { if (isOnA()) { cmd = "IS;"; get_trace(1, "get if shift"); wait_char(';', 7, K4_WAIT_TIME, "get IF shift", ASC); gett(""); size_t p = replystr.rfind("IS"); if (p == std::string::npos) return progStatus.shift; sscanf(&replystr[p + 3], "%d", &progStatus.shift_val); val = progStatus.shift_val*10; } else { cmd = "IS$;"; get_trace(1, "get if shift"); wait_char(';', 8, K4_WAIT_TIME, "get IF shift", ASC); gett(""); size_t p = replystr.rfind("IS$"); if (p == std::string::npos) return progStatus.shift; sscanf(&replystr[p + 4], "%d", &progStatus.shift_val); val = progStatus.shift_val*10; } if (val == if_shift_mid) progStatus.shift = false; else progStatus.shift = true; return progStatus.shift; } void RIG_K4::get_if_min_max_step(int &min, int &max, int &step) { min = if_shift_min; max = if_shift_max; step = if_shift_step; } void RIG_K4::get_if_mid() { cmd = "IS;"; get_trace(1, "get center pbt"); wait_char(';', 8, 500, "get PBT center", ASC); gett(""); size_t p = replystr.rfind("IS "); if (p == std::string::npos) return; sscanf(&replystr[p + 3], "%d", &if_shift_mid); } void RIG_K4::selectA() { if (!isOnA()) { cmd = "SW83;SW44;"; set_trace(1, "selectA"); sendCommand(cmd); sett(""); // K4split = false; showresp(WARN, ASC, "select A", cmd, replystr); inuse = onA; } } void RIG_K4::selectB() { if (!isOnB()) { cmd = "SW83;SW44;"; set_trace(1, "selectB"); sendCommand(cmd); sett(""); // K4split = false; showresp(WARN, ASC, "select B", cmd, replystr); inuse = onB; } } flrig-2.0.04/src/rigs/elecraft/K3.cxx0000664000175000017500000004362514502041135014151 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "elecraft/K3.h" #include "status.h" #include "support.h" const char K3name_[] = "K3"; static std::vectorK3modes_; static const char *vK3modes_[] = { "LSB", "USB", "CW", "FM", "AM", "DATA", "CW-R", "DATA-R"}; const char modenbr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char K3_mode_type[] = { 'L', 'U', 'L', 'U', 'U', 'U', 'U', 'L' }; static std::vectorK3_widths; static const char *vK3_widths[] = { "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "550", "600", "650", "700", "750", "800", "850", "900", "950", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2200", "2400", "2600", "2800", "3000", "3200", "3400", "3600", "3800", "4000"}; static int K3_bw_vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, WVALS_LIMIT}; static int mode_bwA[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; static int mode_bwB[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; static int mode_def_bw[] = { 2800, 2800, 800, 3600, 3600, 2800, 800, 2800 }; static GUI k3_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 54, 145, 156 }, { (Fl_Widget *)btnIFsh, 214, 105, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 105, 156 }, { (Fl_Widget *)sldrMICGAIN, 266, 125, 156 }, { (Fl_Widget *)sldrPOWER, 266, 145, 156 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_K3::RIG_K3() { // base class values name_ = K3name_; modes_ = K3modes_; bandwidths_ = K3_widths; bw_vals_ = K3_bw_vals; serial_baudrate = BR38400; widgets = k3_widgets; stopbits = 1; serial_retries = 2; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; def_freq = freqA = freqB = 14070000ULL; def_mode = modeA = modeB = 1; def_bw = bwA = bwB = 2800; can_change_alt_vfo = has_split_AB = has_micgain_control = has_rf_control = has_bandwidth_control = has_power_control = has_volume_control = has_mode_control = has_ptt_control = has_noise_control = has_attenuator_control = has_smeter = has_power_out = has_split = has_ifshift_control = has_preamp_control = true; has_notch_control = has_tune_control = has_swr_control = false; if_shift_min = 400; if_shift_max = 2600; if_shift_step = 10; if_shift_mid = 1500; precision = 1; ndigits = 8; } int RIG_K3::adjust_bandwidth(int m) { int width = (inuse == onA ? mode_bwA[m] : mode_bwB[m]); if (width == -1) return mode_def_bw[m]; return width; } int RIG_K3::def_bandwidth(int m) { int width = (inuse == onA ? mode_bwA[m] : mode_bwB[m]); if (width == -1) return mode_def_bw[m]; return width; } #define K3_WAIT_TIME 800 void RIG_K3::initialize() { VECTOR (K3modes_, vK3modes_); VECTOR (K3_widths, vK3_widths); modes_ = K3modes_; bandwidths_ = K3_widths; bw_vals_ = K3_bw_vals; LOG_INFO("K3"); k3_widgets[0].W = btnVol; k3_widgets[1].W = sldrVOLUME; k3_widgets[2].W = sldrRFGAIN; k3_widgets[3].W = btnIFsh; k3_widgets[4].W = sldrIFSHIFT; k3_widgets[5].W = sldrMICGAIN; k3_widgets[6].W = sldrPOWER; cmd = "AI0;"; // disable auto-info set_trace(1, "disable auto info"); sendCommand(cmd); sett(""); cmd = "K31;"; // K3 extended mode set_trace(1, "set K3 extended mode"); sendCommand(cmd); sett(""); cmd = "SWT49;"; // Fine tuning (1 Hz mode) set_trace(1, "set 1 Hz fine tuning"); sendCommand(cmd); sett(""); cmd = "OM;"; // request options to get power level get_trace(1, "get options"); int ret = wait_char(';', 16, K3_WAIT_TIME, "Options", ASC); gett(""); if (ret) { if (replystr.find("P") == std::string::npos) { minpwr = 0; maxpwr = 12; steppwr = 1; } else { minpwr = 0; maxpwr = 106; steppwr = 1; } } set_split(false); // normal ops } void RIG_K3::shutdown() { } bool RIG_K3::check () { return true; cmd = "FA;"; get_trace(1, "check vfoA"); int ret = wait_char(';', 14, 2000, "check", ASC); gett(""); if (ret < 14) return false; return true; } unsigned long long RIG_K3::get_vfoA () { cmd = "FA;"; get_trace(1, "get vfoA"); int ret = wait_char(';', 14, K3_WAIT_TIME, "get vfo A", ASC); gett(""); if (ret < 14) return freqA; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_K3::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoA"); sendCommand(cmd); sett(""); } unsigned long long RIG_K3::get_vfoB () { cmd = "FB;"; get_trace(1, "get vfoB"); int ret = wait_char(';', 14, K3_WAIT_TIME, "get vfo B", ASC); gett(""); if (ret < 14) return freqB; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_K3::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoB"); sendCommand(cmd); sett(""); } // Volume control void RIG_K3::set_volume_control(int val) { int ivol = (int)(val * 2.55); cmd = "AG000;"; for (int i = 4; i > 1; i--) { cmd[i] += ivol % 10; ivol /= 10; } set_trace(1, "set volume"); sendCommand(cmd); sett(""); } int RIG_K3::get_volume_control() { cmd = "AG;"; get_trace(1, "get volume control"); int ret = wait_char(';', 6, K3_WAIT_TIME, "get volume", ASC); gett(""); if (ret < 6) return progStatus.volume; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; int v = atoi(&replystr[p + 2]); return (int)(v / 2.55); } void RIG_K3::set_pbt_values(int val) { switch (val) { case 0 : case 1 : case 3 : case 4 : if_shift_min = 400; if_shift_max = 2600; if_shift_step = 10; if_shift_mid = 1500; break; case 2 : case 6 : if_shift_min = 300; if_shift_max = 1300; if_shift_step = 10; if_shift_mid = 800; break; case 5 : case 7 : if_shift_min = 100; if_shift_max = 2100; if_shift_step = 10; if_shift_mid = 1000; break; } progStatus.shift_val = if_shift_mid; Fl::awake(adjust_if_shift_control, (void *)0); } void RIG_K3::set_modeA(int val) { modeA = val; cmd = "MD0;"; cmd[2] = modenbr[val]; set_trace(1, "set modeA"); sendCommand(cmd); sett(""); set_pbt_values(val); } int RIG_K3::get_modeA() { cmd = "MD;"; get_trace(1, "get modeA"); int ret = wait_char(';', 4, K3_WAIT_TIME, "get mode A", ASC); gett(""); if (ret < 4) return modeA; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return modeA; int md = replystr[p + 2] - '1'; if (md == 8) md--; if (md != modeA) set_pbt_values(md); return (modeA = md); } void RIG_K3::set_modeB(int val) { if (split_on == false) { LOG_INFO("split on"); return; } modeB = val; cmd = "MD$0;"; cmd[3] = modenbr[val]; set_trace(1, "set modeB"); sendCommand(cmd); sett(""); set_pbt_values(val); } int RIG_K3::get_modeB() { cmd = "MD$;"; get_trace(1, "get modeB"); int ret = wait_char(';', 4, K3_WAIT_TIME, "get mode B", ASC); gett(""); if (ret < 4) return modeB; size_t p = replystr.rfind("MD$"); if (p == std::string::npos) return modeB; int md = replystr[p + 3] - '1'; if (md == 8) md--; if (md != modeB) set_pbt_values(md); return (modeB = md); } int RIG_K3::get_modetype(int n) { return K3_mode_type[n]; } void RIG_K3::set_preamp(int val) { set_trace(1, "set preamp"); if (val) sendCommand("PA1;", 0); else sendCommand("PA0;", 0); sett(""); } int RIG_K3::get_preamp() { cmd = "PA;"; get_trace(1, "get_preamp"); int ret = wait_char(';', 4, K3_WAIT_TIME, "get preamp", ASC); gett(""); if (ret < 4) return progStatus.preamp; size_t p = replystr.rfind("PA"); if (p == std::string::npos) return 0; return (replystr[p + 2] == '1' ? 1 : 0); } // void RIG_K3::set_attenuator(int val) { set_trace(1, "set attenuator"); if (val) sendCommand("RA01;", 0); else sendCommand("RA00;", 0); sett(""); } int RIG_K3::get_attenuator() { cmd = "RA;"; get_trace(1, "get attenuator"); int ret = wait_char(';', 5, K3_WAIT_TIME, "set ATT", ASC); gett(""); if (ret < 5) return progStatus.attenuator; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return 0; return (replystr[p + 3] == '1' ? 1 : 0); } // Transceiver power level void RIG_K3::set_power_control(double val) { int ival = val; cmd = "PC000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } set_trace(1, "set power control"); sendCommand(cmd); showresp(INFO, ASC, "set power ctrl", cmd, replystr); sett(""); } double RIG_K3::get_power_control() { cmd = "PC;"; get_trace(1, "get power control"); int ret = wait_char(';', 6, K3_WAIT_TIME, "get power level", ASC); gett(""); if (ret < 6) return progStatus.power_level; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return progStatus.power_level; return fm_decimal(replystr.substr(p+2), 3); } void RIG_K3::get_pc_min_max_step(double &min, double &max, double &step) { cmd = "OM;"; // request options to get power level get_trace(1, "get options/pc_pwr_level"); int ret = wait_char(';', 16, K3_WAIT_TIME, "Options", ASC); gett(""); if (ret) { if (replystr.find("P") == std::string::npos) { minpwr = 0; maxpwr = 12; steppwr = 1; } else { minpwr = 0; maxpwr = 106; steppwr = 1; } } min = minpwr; max = maxpwr; step = steppwr; } // Transceiver rf control void RIG_K3::set_rf_gain(int val) { int ival = val; cmd = "RG000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } set_trace(1, "set rf gain"); sendCommand(cmd); sett(""); } int RIG_K3::get_rf_gain() { cmd = "RG;"; get_trace(1, "get rf gain"); int ret = wait_char(';', 6, K3_WAIT_TIME, "get RF gain", ASC); gett(""); if (ret < 6) return progStatus.rfgain; size_t p = replystr.rfind("RG"); if (p == std::string::npos) return progStatus.rfgain; replystr[p + 5] = 0; int v = atoi(&replystr[p + 2]); return v; } void RIG_K3::get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 250; step = 1; } // Transceiver mic control void RIG_K3::set_mic_gain(int val) { int ival = (int)val; cmd = "MG000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } set_trace(1, "set mic gain"); sendCommand(cmd); sett(""); } int RIG_K3::get_mic_gain() { cmd = "MG;"; get_trace(1, "get mic gain"); int ret = wait_char(';', 6, K3_WAIT_TIME, "get MIC gain", ASC); gett(""); if (ret < 6) return progStatus.mic_gain; size_t p = replystr.rfind("MG"); if (p == std::string::npos) return progStatus.mic_gain; replystr[p + 5] = 0; int v = atoi(&replystr[p + 2]); return v; } void RIG_K3::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 60; step = 1; } // Tranceiver PTT on/off void RIG_K3::set_PTT_control(int val) { set_trace(1, "set PTT"); if (val) sendCommand("TX;", 0); else sendCommand("RX;", 0); sett(""); ptt_ = val; } //BG (Bargraph Read; GET only) //RSP format: BGnn; where is 00 (no bars) through 10 (bar 10) if the bargraph is in DOT mode, and 12 (no //bars) through 22 (all 10 bars) if the bargraph is in BAR mode. Reads the S-meter level on receive. Reads the //power output level or ALC level on transmit, depending on the RF/ALC selection. Also see SM/SM$ command, //which can read either main or sub RX S-meter level. //SM $ (S-meter Read; GET only) //Basic RSP format: SMnnnn; where nnnn is 0000-0015. S9=6; S9+20=9; S9+40=12; S9+60=15. //K3 Extended RSP format (K31): nnnn is 0000-0021. S9=9; S9+20=13; S9+40=17; S9+60=21. //This command can be used to obtain either the main (SM) or sub (SM$) S-meter readings. Returns 0000 in transmit //mode. BG can be used to simply emulate the bar graph level, and applies to either RX or TX mode. int RIG_K3::get_smeter() { cmd = "SM;"; get_trace(1, "get smeter"); int ret = wait_char(';', 7, K3_WAIT_TIME, "get Smeter", ASC); gett(""); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; int mtr = fm_decimal(replystr.substr(p+2), 4); // use extended format conversion if (mtr <= 9) mtr = (int) (50.0 * mtr / 9.0); else mtr = (int)(50 + (mtr - 9.0) * 50.0 / 12.0); return mtr; } void RIG_K3::set_noise(bool on) { if (on) sendCommand("NB1;", 0); else sendCommand("NB0;", 0); sett("set noise blanker"); } int RIG_K3::get_noise() { cmd = "NB;"; int ret = wait_char(';', 4, K3_WAIT_TIME, "get Noise Blanker", ASC); gett("get noise blanker"); if (ret < 4) return progStatus.noise; size_t p = replystr.rfind("NB"); if (p == std::string::npos) return progStatus.noise; return (replystr[p+2] == '1' ? 1 : 0); } // BW $ (Filter Bandwidth and Number; GET/SET) // KX3 Extended SET/RSP format (K31): BWxxxx; where xxxx is 0-9999, the bandwidth in 10-Hz units. May be // quantized and/or range limited based on the present operating mode. // BW00050 => BW0005; // 50 - 1000 in 50 Hz increments // 1000 - 3000 in 100 Hz increments // 3000 - 4000 in 200 Hz increments void RIG_K3::set_bwA(int val) { char command[10]; short bw = 0; try { sscanf(K3_widths.at(val).c_str(), "%hd", &bw); } catch (...) { bw = 1800; } snprintf(command, sizeof(command), "BW%04d;", (bw/10)); cmd = command; set_trace(1, "set bwA"); sendCommand(cmd); sett(""); bwA = val; mode_bwA[vfoA.imode] = bwA; } int RIG_K3::get_bwA() { cmd = "BW;"; get_trace(1, "get bwA val"); wait_char(';', 7, K3_WAIT_TIME, "get bwA val", ASC); gett(""); int bw = 0; //atol(bwA); sscanf(replystr.c_str(), "BW%d", &bw); bw *= 10; int n = 0; try { while (atol(K3_widths.at(n).c_str()) < bw) n++; } catch (...) { n = 0; } return bwA = n;// bw; } void RIG_K3::set_bwB(int val) { char command[10]; short bw = 0; try { sscanf(K3_widths.at(val).c_str(), "%hd", &bw); } catch (...) { bw = 1800; } snprintf(command, sizeof(command), "BW$%04d;", (bw/10)); cmd = command; set_trace(1, "set bwB"); sendCommand(cmd); sett(""); bwB = val; mode_bwB[vfoB.imode] = bwB; } int RIG_K3::get_bwB() { cmd = "BW$;"; get_trace(1, "get bwB val"); wait_char(';', 7, K3_WAIT_TIME, "get bwB val", ASC); gett(""); int bw = 0; //atol(bwA); sscanf(replystr.c_str(), "BW$%d", &bw); bw *= 10; int n = 0; try { while (atol(K3_widths.at(n).c_str()) < bw) n++; } catch (...) { n = 0; } return bwB = n;// bw; } int RIG_K3::get_power_out() { cmd = "BG;"; // responds BGnn; 0 < nn < 10 get_trace(1, "get power out"); int ret = wait_char(';', 5, K3_WAIT_TIME, "get power out", ASC); gett(""); if (ret < 5) return 0; size_t p = replystr.rfind("BG"); if (p == std::string::npos) return 0; replystr[p + 4] = 0; int mtr = atoi(&replystr[p + 2]) * 10; if (mtr > 100) mtr = 100; return mtr; } bool RIG_K3::can_split() { return true; } void RIG_K3::set_split(bool val) { set_trace(1, "set split"); if (val) { cmd = "FT1;"; sendCommand(cmd); } else { cmd = "FR0;"; sendCommand(cmd); } sett(""); split_on = val; cmd = "FA;"; get_trace(1, "get vfoA after split"); wait_char(';', 14, 2000, "get vfo A after split", ASC); gett(""); } // 01234567890123456789012345678901234567 // 0 1 2 3 7 // IF00014070000*****+yyyyrx*00tmvspbd1*; // |---------| | // vfo a/b split on = '1', off = '0' // IF00014070000 -000000 0002000011 ; OFF // IF00014070000 -000000 0002001011 ; ON int RIG_K3::get_split() { cmd = "IF;"; get_trace(1, "get split"); int ret = wait_char(';', 38, K3_WAIT_TIME, "get split", ASC); gett(""); if (ret < 38) return split_on; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split_on; split_on = replystr[p+32] - '0'; return split_on; } void RIG_K3::set_if_shift(int val) { cmd = "IS 0000;"; cmd[6] += val % 10; val /= 10; cmd[5] += val % 10; val /= 10; cmd[4] += val % 10; val /= 10; cmd[3] += val % 10; set_trace(1, "set if shift"); sendCommand(cmd); sett(""); } bool RIG_K3::get_if_shift(int &val) { cmd = "IS;"; get_trace(1, "get if shift"); int ret = wait_char(';', 8, K3_WAIT_TIME, "get IF shift", ASC); gett(""); val = progStatus.shift_val; if (ret < 8) return progStatus.shift; size_t p = replystr.rfind("IS "); if (p == std::string::npos) return progStatus.shift; sscanf(&replystr[p + 3], "%d", &progStatus.shift_val); val = progStatus.shift_val; if (val == if_shift_mid) progStatus.shift = false; else progStatus.shift = true; return progStatus.shift; } void RIG_K3::get_if_min_max_step(int &min, int &max, int &step) { min = if_shift_min; max = if_shift_max; step = if_shift_step; } void RIG_K3::get_if_mid() { cmd = "IS 9999;"; set_trace(1, "set if mid"); sendCommand(cmd); sett(""); showresp(INFO, ASC, "center pbt", cmd, replystr); cmd = "IS;"; get_trace(1, "get center pbt"); int ret = wait_char(';', 8, 500, "get PBT center", ASC); gett(""); if (ret < 8) return; size_t p = replystr.rfind("IS "); if (p == std::string::npos) return; sscanf(&replystr[p + 3], "%d", &if_shift_mid); } flrig-2.0.04/src/rigs/elecraft/KX3.cxx0000664000175000017500000007354714502041135014307 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include #include "elecraft/KX3.h" #include "status.h" #include "support.h" const char KX3name_[] = "KX3"; enum {KX3_LSB, KX3_USB, KX3_CW, KX3_FM, KX3_AM, KX3_DATA, KX3_CWR, KX3_DATAR}; static std::vectorKX3modes_; static const char *vKX3modes_[] = { "LSB", "USB", "CW", "FM", "AM", "DATA", "CW-R", "DATA-R"}; const char modenbr[] = { '1', '2', '3', '4', '5', '6', '7', '9' }; static const char KX3_mode_type[] = { 'L', 'U', 'L', 'U', 'U', 'U', 'U', 'L' }; #define KX3_BWS 45 static std::vectorKX3_widths; static const char *vKX3_widths[] = { "50", "60", "70", "80", "90", "100", "110", "120", "130", "140", "150", "160", "170", "180", "190", "200", "210", "220", "230", "240", "250", "260", "270", "280", "290", "300", "310", "320", "330", "340", "350", "360", "370", "380", "390", "400", "410", "420", "430", "440", "450", "460", "470", "480", "490", "500", "510", "520", "530", "540", "550", "560", "570", "580", "590", "600", "610", "620", "630", "640", "650", "660", "670", "680", "690", "700", "710", "720", "730", "740", "750", "760", "770", "780", "790", "800", "810", "820", "830", "840", "850", "860", "870", "880", "890", "900", "910", "920", "930", "940", "950", "960", "970", "980", "990", "1000", "1100", "1200", "1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000", "2100", "2200", "2300", "2400", "2500", "2600", "2700", "2800", "2900", "3000", "3100", "3200", "3300", "3400", "3500", "3600", "3700", "3800", "3900", "4000"}; static int KX3_bw_vals[] = { 1, 2, 3, 4, 5, // 50 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 100 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // 200 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, // 300 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, // 400 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, // 500 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, // 600 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, // 700 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, // 800 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, // 900 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, // 1000 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, // 2000 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, // 3000 126, WVALS_LIMIT }; // 4000 static int mode_bwA[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; static int mode_bwB[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; // { 2800, 2800, 800, 3600, 3600, 2800, 800, 2800 }; static int mode_def_bw[] = { 114, 114, 76, 122, 122, 114, 76, 114 }; static int ret = 0; static GUI kx3_widgets[]= { { (Fl_Widget *)btnVol, 2, 125, 50 }, { (Fl_Widget *)sldrVOLUME, 54, 125, 156 }, { (Fl_Widget *)sldrRFGAIN, 266, 125, 156 }, { (Fl_Widget *)sldrMICGAIN, 54, 145, 156 }, { (Fl_Widget *)btn_KX3_IFsh, 212, 145, 50 }, { (Fl_Widget *)sldrIFSHIFT, 266, 145, 156 }, { (Fl_Widget *)sldrPOWER, 54, 165, 366 }, { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_KX3::RIG_KX3() { // base class values name_ = KX3name_; modes_ = KX3modes_; bandwidths_ = KX3_widths; bw_vals_ = KX3_bw_vals; serial_baudrate = BR38400; widgets = kx3_widgets; stopbits = 1; serial_retries = 2; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = true; serial_rtsptt = false; serial_dtrptt = false; def_freq = freqA = freqB = 14070000ULL; def_mode = modeA = modeB = 1; def_bw = bwA = bwB = 3000; can_change_alt_vfo = has_split_AB = has_micgain_control = has_rf_control = has_bandwidth_control = has_power_control = has_volume_control = has_mode_control = has_ptt_control = has_noise_control = has_noise_reduction = has_attenuator_control = has_smeter = has_power_out = has_split = has_ifshift_control = has_swr_control = has_preamp_control = true; has_notch_control = has_tune_control =false; if_shift_min = 1280; if_shift_max = 1700; if_shift_step = 10; if_shift_mid = 1500; precision = 1; ndigits = 8; progStatus.rfgain = 250; } int RIG_KX3::adjust_bandwidth(int m) { int width = (inuse == onA ? mode_bwA[m] : mode_bwB[m]); if (width == -1) return mode_def_bw[m]; return width; } int RIG_KX3::def_bandwidth(int m) { int width = (inuse == onA ? mode_bwA[m] : mode_bwB[m]); if (width == -1) return mode_def_bw[m]; return width; } static int isok = false; /* * OM (Option Module; GET) OM APF---TBXI0n; | 0123456789012345 0.........1..... A = ATU P = external 100W PA F = roofing filter T = external 100W ATU B = internal NiMH battery charger/real-time clock X = KX3-2M or KX3-4M transverter module I = KXIO2 RTC I/O module 0n = product identifer 1 - KX2 2 - KX3 */ static struct KX3_OPTIONS { bool ATU; bool KXPA; bool ROOF; bool KXPA_ATU; bool NICAD; bool TXVRT; bool RTC; int PROD; } options = { false, false, false, false, false, false, false, 0 }; void RIG_KX3::get_options() { cmd = "OM;"; get_trace(1, "get options"); ret = wait_char(';', 16, KX3_WAIT_TIME, "get options", ASC); gett(""); if (ret < 16) return; options.ATU = (replystr[3] == 'A'); options.KXPA = (replystr[4] == 'P'); options.ROOF = (replystr[5] == 'F'); options.KXPA_ATU = (replystr[9] == 'T'); options.NICAD = (replystr[10] == 'B'); options.TXVRT = (replystr[11] == 'X'); options.RTC = (replystr[12] == 'I'); options.PROD = (replystr[14] - '0'); } void RIG_KX3::initialize() { VECTOR (KX3modes_, vKX3modes_); VECTOR (KX3_widths, vKX3_widths); modes_ = KX3modes_; bandwidths_ = KX3_widths; bw_vals_ = KX3_bw_vals; RigSerial->Timeout(50); LOG_INFO("KX3"); kx3_widgets[0].W = btnVol; kx3_widgets[1].W = sldrVOLUME; kx3_widgets[2].W = sldrRFGAIN; kx3_widgets[3].W = sldrMICGAIN; kx3_widgets[4].W = btn_KX3_IFsh; kx3_widgets[5].W = sldrIFSHIFT; kx3_widgets[6].W = sldrPOWER; check(); if (!isok) return; cmd = "K31;"; // KX3 extended mode set_trace(1, "KX3 extended mode"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "KX3 extended mode", cmd, replystr); cmd = "AI0;"; // disable auto-info set_trace(1, "disable auto info"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "disable auto-info", cmd, replystr); } void RIG_KX3::shutdown() { } // from programming notes: // vfo change which also incurs a band change will disable CAT responses // for up to 500 msec (UGH) // use check after all vfo changes bool RIG_KX3::check () { static char sztemp[50]; if (isok) return true; // try reading vfoA int wait = 10; while ( ( ret < 14) && (wait > 0) ) { snprintf(sztemp, sizeof(sztemp), "check() %d", 11 - wait); get_trace(1, sztemp); cmd = "FA;"; ret = wait_char(';', 14, 600, sztemp, ASC); gett(""); wait--; } isok = true; if (ret < 14) isok = false; return isok; } unsigned long long RIG_KX3::get_vfoA () { cmd = "FA;"; get_trace(1, "get vfoA"); ret = wait_char(';', 14, KX3_WAIT_TIME, "get vfo A", ASC); gett(""); if (ret < 14) return freqA; size_t p = replystr.rfind("FA"); if (p == std::string::npos) return freqA; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqA = f; return freqA; } void RIG_KX3::set_vfoA (unsigned long long freq) { freqA = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoA"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "set vfo A", cmd, replystr); check(); } unsigned long long RIG_KX3::get_vfoB () { cmd = "FB;"; get_trace(1, "get vfoB"); ret = wait_char(';', 14, KX3_WAIT_TIME, "get vfo B", ASC); gett(""); if (ret < 14) return freqB; size_t p = replystr.rfind("FB"); if (p == std::string::npos) return freqB; unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p + n] - '0'; freqB = f; return freqB; } void RIG_KX3::set_vfoB (unsigned long long freq) { freqB = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } set_trace(1, "set vfoB"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "set vfo B", cmd, replystr); check(); } // Volume control void RIG_KX3::set_volume_control(int val) { cmd = "AG000;"; for (int i = 4; i > 1; i--) { cmd[i] += val % 10; val /= 10; } set_trace(1, "set volume control"); sendCommand(cmd, 0, 50); showresp(INFO, ASC, "set vol", cmd, replystr); sett(""); } int RIG_KX3::get_volume_control() { cmd = "AG;"; get_trace(1, "get volume control"); ret = wait_char(';', 6, KX3_WAIT_TIME, "get volume", ASC); gett(""); if (ret < 6) return progStatus.volume; size_t p = replystr.rfind("AG"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; int v = atoi(&replystr[p + 2]); return v; } /* * MD $ (Operating Mode; GET/SET) * SET/RSP format: MDn; or MD$n; * where n is * 1 (LSB), * 2 (USB), * 3 (CW), * 4 (FM), * 5 (AM), * 6 (DATA), * 7 (CW-REV), * 9 (DATA-REV). * Notes: * (1) K3 only: In Diversity Mode (accessed by holding SUB), sending MDn; * sets both main and sub mode to n. * (2) DATA and DATA-REV select the data sub-mode that was last in effect * on the present band. (To read/set data sub-mode, use DT.) * The norm/rev conditions for the K3’s data sub-modes are * handled in two pairs at present: * DATA A/PSK D, and * AFSK A/FSK D. * E.g., if the radio is set up for DATA A mode, alternating between * MD6 and MD9 will cause both DATA A and PSK D to be set to the * same normal/reverse condition. * In K2 command modes 1 and 3 (K21 and K23), the RSP message converts * modes 6 and 7 (DATA and DATA-REV) to modes 1 and 2 (LSB and USB). * This may be useful with existing software applications that don't * handle DATA modes correctly. */ /* The DT command needs to be included for get/set mode * * DT (DATA Sub-Mode; GET/SET) * SET/RSP format: DTn; where n is the data sub-mode last used with VFO A, * whether or not DATA mode is in effect: * 0 (DATA A), * 1 (AFSK A), * 2 (FSK D), * 3 (PSK D). See MD for data normal/reverse considerations. * In Diversity Mode (K3 only, accessed by sending DV1 or via a long hold * of SUB), sending DTn matches the sub receiver’s mode to the main receiver’s. * Notes: * (1) Use DT only when the transceiver is in DATA mode; otherwise, * the returned value may not be valid. * (2) In AI2/3 modes, changing the data sub-mode results in both FW * and IS responses. * (3) The present data sub-mode is also reported as part of the IF command, * although this requires that K31 be in effect. Refer to the IF command * for details. */ /* and last but not least, the IF command * * IF (Transceiver Information; GET only) * RSP format: IF[f]*****+yyyyrx*00tmvspbd1*; * where the fields are defined as follows: * [f] Operating frequency, excluding any RIT/XIT offset * (11 digits; see FA command format) * * represents a space (BLANK, or ASCII 0x20) * + either "+" or "-" (sign of RIT/XIT offset) * yyyy RIT/XIT offset in Hz (range is -9999 to +9999 Hz when * computer-controlled) * r 1 if RIT is on, 0 if off * x 1 if XIT is on, 0 if off * t 1 if the K3 is in transmit mode, 0 if receive * m operating mode (see MD command) * v receive-mode VFO selection, 0 for VFO A, 1 for VFO B * s 1 if scan is in progress, 0 otherwise * p 1 if the transceiver is in split mode, 0 otherwise * b Basic RSP format: always 0; * K2 Extended RSP format (K22): * 1 if present IF response is due to a band change; 0 otherwise * d Basic RSP format: always 0; * K3 Extended RSP format (K31): * 1 DATA sub-mode, if applicable * (0=DATA A, 1=AFSK A, 2= FSK D, 3=PSK D) * The fixed-value fields (space, 0, and 1) are provided for syntactic * compatibility with existing software. * * 01234567890123456789012345678901234567 * 0 1 2 3 7 * IF00014070000*****+yyyyrx*00tmvspbd1*; * |---------| | * vfo a/b split on = '1', off = '0' * IF00014070000 -000000 0002000011 ; OFF * IF00014070000 -000000 0002001011 ; ON */ void RIG_KX3::set_modeA(int val) { modeA = val; cmd = "MD0;"; cmd[2] = modenbr[val]; set_trace(1, "set modeA"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "set mode A", cmd, replystr); } int RIG_KX3::get_modeA() { cmd = "MD;"; get_trace(1, "get modeA"); ret = wait_char(';', 4, KX3_WAIT_TIME, "get mode A", ASC); gett(""); if (ret < 4) return modeA; size_t p = replystr.rfind("MD"); if (p == std::string::npos) return modeA; int md = replystr[p + 2] - '1'; if (md == 8) md--; if (md < 0 || md > 7) return modeA; return (modeA = md); } void RIG_KX3::set_modeB(int val) { modeB = val; cmd = "MD$0;"; cmd[3] = modenbr[val]; set_trace(1, "set modeB"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "set mode B", cmd, replystr); } int RIG_KX3::get_modeB() { cmd = "MD$;"; get_trace(1, "get modeB"); ret = wait_char(';', 4, KX3_WAIT_TIME, "get mode B", ASC); gett(""); if (ret < 4) return modeB; size_t p = replystr.rfind("MD$"); if (p == std::string::npos) return modeB; int md = replystr[p + 3] - '1'; if (md == 8) md--; if (md < 0 || md > 7) return modeB; return (modeB = md); } int RIG_KX3::get_modetype(int n) { return KX3_mode_type[n]; } void RIG_KX3::set_preamp(int val) { set_trace(1, "set preamp"); if (val) cmd = "PA1;"; else cmd = "PA0;"; sendCommand(cmd, 0, 50); sett(""); } int RIG_KX3::get_preamp() { cmd = "PA;"; get_trace(1, "get preamp"); ret = wait_char(';', 4, KX3_WAIT_TIME, "get preamp", ASC); gett(""); if (ret < 4) return progStatus.preamp; size_t p = replystr.rfind("PA"); if (p == std::string::npos) return 0; return (replystr[p + 2] == '1' ? 1 : 0); } int RIG_KX3::next_preamp() { if (progStatus.preamp) return 0; return 1; } // void RIG_KX3::set_attenuator(int val) { set_trace(1, "set attenuator"); if (val) cmd = "RA01;"; else cmd = "RA00;"; sendCommand(cmd, 0, 50); sett(""); } int RIG_KX3::get_attenuator() { cmd = "RA;"; get_trace(1, "get attenuator"); ret = wait_char(';', 5, KX3_WAIT_TIME, "get ATT", ASC); gett(""); if (ret < 5) return progStatus.attenuator; size_t p = replystr.rfind("RA"); if (p == std::string::npos) return progStatus.attenuator; return (replystr[p + 3] == '1' ? 1 : 0); } int RIG_KX3::next_attenuator() { if (progStatus.attenuator) return 0; return 1; } /* * PC (Requested Power Output Level; GET/SET) * * Basic SET/RSP format: PCnnn; For the K3, nnn is 000-012 or 000-110 watts depending on the power range. * * If CONFIG:KXV3 is set to TEST or if a transverter band with low-level I/O is selected, then the unit * is hundreds of a milliwatt, and the available range is 0.00-1.50 mW. * * This can be checked using the IC command, byte a, bit 4. * */ void RIG_KX3::get_pc_min_max_step(double &min, double &max, double &step) { get_options(); if (options.KXPA) { min = 0; max = 110; step = 1; } else { min = 0; max = 15; step = 1; } } void RIG_KX3::set_power_control(double val) { int ival = val; cmd = "PC000;"; cmd[4] += ival % 10; ival /= 10; cmd[3] += ival % 10; ival /= 10; cmd[2] += ival % 10; set_trace(1, "set power control"); sendCommand(cmd, 0, 50); showresp(INFO, ASC, "set power ctrl", cmd, replystr); sett(""); } double RIG_KX3::get_power_control() { cmd = "PC;"; get_trace(1, "get power control"); ret = wait_char(';', 6, KX3_WAIT_TIME, "get power level", ASC); gett(""); if (ret < 6) return progStatus.power_level; size_t p = replystr.rfind("PC"); if (p == std::string::npos) return progStatus.power_level; replystr[p+5] = 0; return atoi(&replystr[p+2]); } /* * PO ** (Actual Power Output Level; GET only; KX3 only) * * RSP format: PCnnn; * where nnn is the power in tenths of a watt (QRP mode) or watts (QRO mode). * * Note: The QRO case only applies if the KXPA100 amplifier enabled via PA MODE=ON, * is connected to the KX3 via the special control cable, and the PWR level is set * to 11 W or higher. The reading is approximate, * as it is estimated from the * KX3’s drive level. For a more accurate reading, use the KXPA100’s “^PF;” command. */ int RIG_KX3::power_scale() { return powerScale; } int RIG_KX3::get_power_out() { size_t p = 0; int mtr = 0; if (options.KXPA) { cmd = "^OP;"; get_trace(1, "test KXPA"); ret = wait_char(';', 5, KX3_WAIT_TIME, "test KXPA", ASC); gett(""); if (ret >= 5) { powerScale = 1; if (replystr.find("^OP1;") != std::string::npos) { cmd = "^PF;"; ret = wait_char(';', 8, KX3_WAIT_TIME, "get KXPA power out", ASC); if (ret >= 8) { p = replystr.rfind("^PF"); if (p == std::string::npos) return 0; replystr[p + 7] = 0; mtr = atoi(&replystr[p+3]); if (mtr > 0) return mtr/10; } } // in standby mode, fall through to read power out on KX3 } } cmd = "PO;"; get_trace(1, "get power out"); ret = wait_char(';', 6, KX3_WAIT_TIME, "get power out", ASC); gett(""); if (ret < 6) return 0; p = replystr.rfind("PO"); if (p == std::string::npos) return 0; replystr[p + 5] = 0; mtr = atoi(&replystr[p + 2]); // mtr is power in tenths powerScale = 10; return mtr; } // Transceiver rf control void RIG_KX3::set_rf_gain(int val) { int ival = 250 + val; if (ival < 190) ival = 190; if (ival > 250) ival = 250; cmd = "RG000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } set_trace(1, "set rf gain"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "set rfgain ctrl", cmd, replystr); } int RIG_KX3::get_rf_gain() { cmd = "RG;"; get_trace(1, "get rf gain"); ret = wait_char(';', 6, KX3_WAIT_TIME, "get RF gain", ASC); gett(""); if (ret < 6) return progStatus.rfgain; size_t p = replystr.rfind("RG"); if (p == std::string::npos) return progStatus.rfgain; replystr[p + 5] = 0; int v = atoi(&replystr[p + 2]); v -= 250; if (v < -60) v = -60; if (v > 0) v = 0; return v; } void RIG_KX3::get_rf_min_max_step(int &min, int &max, int &step) { min = -60; max = 0; step = 1; } // Transceiver mic control void RIG_KX3::set_mic_gain(int val) { int ival = (int)val; cmd = "MG000;"; for (int i = 4; i > 1; i--) { cmd[i] += ival % 10; ival /= 10; } set_trace(1, "set mic gain"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "set mic ctrl", cmd, replystr); } int RIG_KX3::get_mic_gain() { cmd = "MG;"; get_trace(1, "get mic gain"); ret = wait_char(';', 6, KX3_WAIT_TIME, "get MIC gain", ASC); gett(""); if (ret < 6) return progStatus.mic_gain; size_t p = replystr.rfind("MG"); if (p == std::string::npos) return progStatus.mic_gain; replystr[p + 5] = 0; int v = atoi(&replystr[p + 2]); return v; } void RIG_KX3::get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 60; step = 1; } // Tranceiver PTT on/off void RIG_KX3::set_PTT_control(int val) { set_trace(1, "set PTT"); if (val) cmd = "TX;"; else cmd = "RX;"; sendCommand(cmd, 0, 50); sett(""); ptt_ = val; } /* * IF (Transceiver Information; GET only) * RSP format: IF[f]*****+yyyyrx*00tmvspbd1*; * where the fields are defined as follows: * [f] Operating frequency, excluding any RIT/XIT offset * (11 digits; see FA command format) * * represents a space (BLANK, or ASCII 0x20) * + either "+" or "-" (sign of RIT/XIT offset) * yyyy RIT/XIT offset in Hz (range is -9999 to +9999 Hz when * computer-controlled) * r 1 if RIT is on, 0 if off * x 1 if XIT is on, 0 if off * t 1 if the K3 is in transmit mode, 0 if receive * m operating mode (see MD command) * v receive-mode VFO selection, 0 for VFO A, 1 for VFO B * s 1 if scan is in progress, 0 otherwise * p 1 if the transceiver is in split mode, 0 otherwise * b Basic RSP format: always 0; * K2 Extended RSP format (K22): * 1 if present IF response is due to a band change; 0 otherwise * d Basic RSP format: always 0; * K3 Extended RSP format (K31): * 1 DATA sub-mode, if applicable * (0=DATA A, 1=AFSK A, 2= FSK D, 3=PSK D) * The fixed-value fields (space, 0, and 1) are provided for syntactic * compatibility with existing software. * * 01234567890123456789012345678901234567 * 0 1 2 3 7 * IF00014070000*****+yyyyrx*00tmvspbd1*; * | | | | |_____ [35] data submode * | | | |________ [32] split on = '1', off = '0' * | | |____________ [28] PTT state; 1 = TX, 0 = RX * |---------|____________________________ [02...12] vfo a/b */ int RIG_KX3::get_PTT() { cmd = "IF;"; get_trace(1, "get PTT"); ret = wait_char(';', 38, KX3_WAIT_TIME, "get split", ASC); gett(""); if (ret < 38) return ptt_; size_t p = replystr.rfind("IF"); return ptt_ = (replystr[p+28] == '1'); } // BG (Bargraph Read; GET only) // RSP format: BGnn; where is 00 (no bars) through 10 (bar 10) if the // bargraph is in DOT mode, and 12 (no bars) through 22 (all 10 bars) if // the bargraph is in BAR mode. Reads the S-meter level on receive. Reads // the power output level or ALC level on transmit, depending on the RF/ALC // selection. Also see SM/SM$ command, which can read either main or sub RX // S-meter level. // SM SM$ (S-meter Read; GET only) // Basic RSP format: SMnnnn; where nnnn is 0000-0015. // S9=6; S9+20=9; S9+40=12; S9+60=15. // KX3 Extended RSP format (KX31): nnnn is 0000-0021. // S9=9; S9+20=13; S9+40=17; S9+60=21. // This command can be used to obtain either the main (SM) or sub (SM$) // S-meter readings. Returns 0000 in transmit mode. BG can be used to // simply emulate the bar graph level, and applies to either RX or TX mode. int RIG_KX3::get_smeter() { cmd = "SM;"; get_trace(1, "get smeter"); ret = wait_char(';', 7, KX3_WAIT_TIME, "get Smeter", ASC); gett(""); if (ret < 7) return 0; size_t p = replystr.rfind("SM"); if (p == std::string::npos) return 0; int mtr = fm_decimal(replystr.substr(p+2), 4); // use extended format conversion if (mtr <= 9) mtr = (int) (50.0 * mtr / 9.0); else mtr = (int)(50 + (mtr - 9.0) * 50.0 / 12.0); return mtr; } void RIG_KX3::set_noise(bool on) { set_trace(1, "set noise blanker"); if (on) cmd = "NB1;"; else cmd = "NB0;"; sendCommand(cmd, 0, 50); sett(""); } int RIG_KX3::get_noise() { cmd = "NB;"; get_trace(1, "get noise blanker"); ret = wait_char(';', 4, KX3_WAIT_TIME, "get Noise Blanker", ASC); gett(""); if (ret < 4) return progStatus.noise; size_t p = replystr.rfind("NB"); if (p == std::string::npos) return progStatus.noise; return (replystr[p+2] == '1' ? 1 : 0); } // BW $ (Filter Bandwidth and Number; GET/SET) // KX3 Extended SET/RSP format (K31): BWxxxx; where xxxx is 0-9999, the bandwidth in 10-Hz units. May be // quantized and/or range limited based on the present operating mode. // BW00050 => BW0005; // 50 - 1000 in 50 Hz increments // 1000 - 3000 in 100 Hz increments // 3000 - 4000 in 200 Hz increments void RIG_KX3::set_bwA(int val) { char command[10]; short bw = 0; try { sscanf(KX3_widths.at(val).c_str(), "%hd", &bw); } catch (...) { bw = 1800; } snprintf(command, sizeof(command), "BW%04d;", (bw/10)); cmd = command; set_trace(1, "set bwA"); sendCommand(cmd); sett(""); bwA = val; mode_bwA[vfoA.imode] = bwA; } int RIG_KX3::get_bwA() { cmd = "BW;"; get_trace(1, "get bwA val"); wait_char(';', 7, KX3_WAIT_TIME, "get bwA val", ASC); gett(""); int bw = 0; //atol(bwA); sscanf(replystr.c_str(), "BW%d", &bw); bw *= 10; int n = 0; try { while (atol(KX3_widths.at(n).c_str()) < bw) n++; } catch (...) { n = 0; } return bwA = n;// bw; } void RIG_KX3::set_bwB(int val) { char command[10]; short bw = 0; try { sscanf(KX3_widths.at(val).c_str(), "%hd", &bw); } catch (...) { bw = 1800; } snprintf(command, sizeof(command), "BW$%04d;", (bw/10)); cmd = command; set_trace(1, "set bwB"); sendCommand(cmd); sett(""); bwB = val; mode_bwB[vfoB.imode] = bwB; } int RIG_KX3::get_bwB() { cmd = "BW$;"; get_trace(1, "get bwB val"); wait_char(';', 7, KX3_WAIT_TIME, "get bwB val", ASC); gett(""); int bw = 0; //atol(bwA); sscanf(replystr.c_str(), "BW$%d", &bw); bw *= 10; int n = 0; try { while (atol(KX3_widths.at(n).c_str()) < bw) n++; } catch (...) { n = 0; } return bwB = n;// bw; } bool RIG_KX3::can_split() { return true; } void RIG_KX3::set_split(bool val) { set_trace(1, "set split"); if (val) { cmd = "FT1;"; sendCommand(cmd, 0, 50); showresp(INFO, ASC, "set split ON", cmd, replystr); } else { cmd = "FR0;"; sendCommand(cmd, 0, 50); showresp(INFO, ASC, "set split OFF", cmd, replystr); } sett(""); split_on = val; } // 01234567890123456789012345678901234567 // 0 1 2 3 7 // IF00014070000*****+yyyyrx*00tmvspbd1*; // |---------| | // vfo a/b split on = '1', off = '0' // IF00014070000 -000000 0002000011 ; OFF // IF00014070000 -000000 0002001011 ; ON int RIG_KX3::get_split() { cmd = "IF;"; get_trace(1, "get split"); ret = wait_char(';', 38, KX3_WAIT_TIME, "get split", ASC); gett(""); if (ret < 38) return split_on; size_t p = replystr.rfind("IF"); if (p == std::string::npos) return split_on; if (replystr[p+32] == '1') split_on = 1; if (replystr[p+32] == '0') split_on = 0; return split_on; } void RIG_KX3::set_if_shift(int val) { if (val < if_shift_min) val = 1500; if (val > if_shift_max) val = 1500; cmd = "IS 0000;"; cmd[6] += val % 10; val /= 10; cmd[5] += val % 10; val /= 10; cmd[4] += val % 10; val /= 10; cmd[3] += val % 10; set_trace(1, "set if shift"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "set if shift", cmd, replystr); } bool RIG_KX3::get_if_shift(int &val) { cmd = "IS;"; get_trace(1, "get if shift"); wait_char(';', 8, KX3_WAIT_TIME, "get IF shift", ASC); gett(""); val = progStatus.shift_val; if (replystr.length() < 8) return 1; int sh_val = 0; size_t p = replystr.rfind("IS "); if (p == std::string::npos) return progStatus.shift; sh_val = (((replystr[p+3] - '0') * 10 + (replystr[p+4] - '0') ) * 10 + (replystr[p+5] - '0') ) * 10 + (replystr[p+6] - '0'); val = progStatus.shift_val = sh_val; if (sh_val < if_shift_min) sh_val = if_shift_min; if (sh_val > if_shift_max) sh_val = if_shift_max; return 1; } void RIG_KX3::get_if_mid() { cmd = "IS 9999;"; set_trace(1, "set center pbt"); sendCommand(cmd, 0, 50); sett(""); showresp(INFO, ASC, "center pbt", cmd, replystr); cmd = "IS;"; get_trace(1, "get center pbt"); ret = wait_char(';', 8, 500, "get PBT center", ASC); gett(""); if (ret < 8) return; size_t p = replystr.rfind("IS "); if (p == std::string::npos) return; sscanf(&replystr[p + 3], "%d", &if_shift_mid); } // KX3_LSB, KX3_USB, KX3_CW, KX3_FM, KX3_AM, KX3_DATA, KX3_CWR, KX3_DATAR void RIG_KX3::get_if_min_max_step(int &min, int &max, int &step) { int md = modeA; if (inuse == onB) md = modeB; switch (md) { case KX3_CW: case KX3_CWR: if_shift_min = 330; if_shift_max = 770; if_shift_step = 10; break; case KX3_LSB: case KX3_USB: case KX3_DATA: case KX3_DATAR: if_shift_min = 1280; if_shift_max = 1700; if_shift_step = 10; break; default: if_shift_min = 1500; if_shift_max = 1500; if_shift_step = 10; break; } min = if_shift_min; max = if_shift_max; step = if_shift_step; get_if_mid(); } // ^OP; return ^OPn; 5 characters // ^OP1; signifies that KXPA100 is on-line and active // SW; return SWnnn; 6 characters // ^SW; return ^SWnnn; 7 characters (don't believe the programmer's guide!) int RIG_KX3::get_swr() { if (options.KXPA) { cmd = "^OP;"; get_trace(1, "test KXPA"); ret = wait_char(';', 5, KX3_WAIT_TIME, "test KXPA", ASC); gett(""); if (ret >= 5) { powerScale = 1; if (replystr.find("^OP1;") != std::string::npos) { cmd = "^SW;"; get_trace(1, "get KXPA SWR"); ret = wait_char(';', 7, KX3_WAIT_TIME, "get KXPA SWR reading", ASC); gett(""); if (ret >= 7) { size_t p = replystr.rfind("^SW"); if (p != std::string::npos) { replystr[p + 6] = 0; int mtr = fm_decimal(replystr.substr(p+3), 3); if (mtr <= 30) mtr = (int) (50.0 * (mtr - 10) / 20.0); else mtr = (int)(50 + 50 * (mtr - 30) / 70); return mtr; } } } // in standby mode or not present, fall through to read SWR on KX3 } } cmd = "SW;"; get_trace(1, "get swr"); ret = wait_char(';', 6, KX3_WAIT_TIME, "get Smeter", ASC); gett(""); if (ret < 6) return 0; size_t p = replystr.rfind("SW"); if (p == std::string::npos) return 0; int mtr = fm_decimal(replystr.substr(p+2), 3); if (mtr <= 30) mtr = (int) (50.0 * (mtr - 10) / 20.0); else mtr = (int)(50 + 50 * (mtr - 30) / 70); return mtr; } //====================================================================== // // KX2 is identical to KX3 // //====================================================================== RIG_KX2::RIG_KX2 () { name_ = "KX2"; }; flrig-2.0.04/src/rigs/qrp_labs/0000775000175000017500000000000014511461606013245 500000000000000flrig-2.0.04/src/rigs/qrp_labs/QMX.cxx0000664000175000017500000002612514504050475014364 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "qrp_labs/QMX.h" #include "support.h" static const char QMXname_[] = "QMX"; static std::vectorvQMXmodes_; static const char *QMXmodes_[] = { "CW", "CW-R", "LSB", "USB"}; static const char QMX_mode_type[] = { 'L', 'U' }; static const char *QMX_mode_str[] = { "MD3;", "MD7;", "MD1;", "MD2;", NULL }; static std::vectorvQMX_BW; static const char *QMX_BW[] = { "3200" }; static GUI rig_widgets[]= { { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_QMX::initialize() { VECTOR (vQMXmodes_, QMXmodes_); VECTOR (vQMX_BW, QMX_BW); modes_ = vQMXmodes_; bandwidths_ = vQMX_BW; } RIG_QMX::RIG_QMX() { name_ = QMXname_; modes_ = vQMXmodes_; bandwidths_ = vQMX_BW; widgets = rig_widgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_rtsptt = false; serial_dtrptt = false; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serial_catptt = true; B.imode = A.imode = 1; B.iBW = A.iBW = 0; A.freq = 7070000ULL; B.freq = 14070000ULL; has_mode_control = has_bandwidth_control = has_extras = has_volume_control = has_ptt_control = has_vfo_adj = has_vox_onoff = has_rit = has_split = can_change_alt_vfo = true; precision = 1; ndigits = 8; } static int ret = 0; static int split_ = 0; static int rit_ = 0; static int rit_stat_ = 0; static char cmdstr[20]; inline void TRACE_CMD(std::string func, std::string cmd ) { // std::cout << ztime() << "::" << func << " sent: " << cmd << std::endl; } inline void TRACE_REP(std::string func, std::string replystr) { // std::cout << ztime() << "::" << func << " rcvd: " << replystr << std::endl; } void RIG_QMX::shutdown() { } bool RIG_QMX::check() { cmd = "VN;"; // version number query; re VN1_05; get_trace(1, "get version"); TRACE_CMD("check", cmd); wait_char(';', 8, 100, "get version", ASC); gett(""); // if (replystr.find("VN") == std::string::npos) return 0; TRACE_REP("check", replystr); return 1; } unsigned long long RIG_QMX::get_vfoA () { cmd = "FA;"; get_trace(1, "get vfoA"); TRACE_CMD("get_vfoA", cmd); if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) { TRACE_REP("get_vfoA", replystr); return A.freq; } gett(""); size_t p = replystr.rfind("FA"); if (p != std::string::npos) { sscanf(&replystr[p+2], "%llu", &A.freq); } TRACE_REP("get_vfoA", replystr); return A.freq; } void RIG_QMX::set_vfoA (unsigned long long freq) { A.freq = freq; snprintf(cmdstr, sizeof(cmdstr), "FA%011llu;", A.freq); cmd = cmdstr; set_trace(1, "set vfoA"); TRACE_CMD("set_vfoA", cmd); sendCommand(cmd); sett(""); TRACE_REP("set_vfoA", replystr); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_QMX::get_vfoB () { cmd = "FB;"; get_trace(1, "get vfoB"); TRACE_CMD("get_vfoB", cmd); if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) { TRACE_REP("get_vfoB", replystr); return B.freq; } gett(""); size_t p = replystr.rfind("FB"); if (p != std::string::npos) { sscanf(&replystr[p+2], "%llu", &B.freq); } TRACE_REP("get_vfoB", replystr); return B.freq; } void RIG_QMX::set_vfoB (unsigned long long freq) { B.freq = freq; snprintf(cmdstr, sizeof(cmdstr), "FB%011llu;", B.freq); cmd = cmdstr; set_trace(1, "set vfoB"); TRACE_CMD("set_vfoB", cmd); sendCommand(cmd); sett(""); TRACE_REP("set_vfoB", replystr); showresp(WARN, ASC, "set vfo B", cmd, ""); } void RIG_QMX::selectA() { cmd = "FR0;FT0;"; set_trace(1, "select A"); TRACE_CMD("selectA", cmd); sendCommand(cmd); sett(""); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); inuse = onA; TRACE_REP("selectA", replystr); } void RIG_QMX::selectB() { cmd = "FR1;FT1;"; set_trace(1, "select B"); TRACE_CMD("selectB", cmd); sendCommand(cmd); sett(""); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); inuse = onB; TRACE_REP("selectB", replystr); } void RIG_QMX::set_split(bool val) { if (val) cmd = "SP1;"; else cmd = "SP0;"; set_trace(1, "set split on/off"); TRACE_CMD("set_split", cmd); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set split", cmd, ""); split_ = val; TRACE_REP("set_split", replystr); } bool RIG_QMX::can_split() { return true; } int RIG_QMX::get_split() { cmd = "SP;"; get_trace(1, "get split"); TRACE_CMD("get_split", cmd); ret = wait_char(';', 4, 100, "get split", ASC); gett(""); split_ = replystr[2] == '1'; TRACE_REP("get_split", replystr); return split_; } void RIG_QMX::set_bwA(int val) { A.iBW = 0; } int RIG_QMX::get_bwA() { return A.iBW = 0; } void RIG_QMX::set_bwB(int val) { B.iBW = 0; } int RIG_QMX::get_bwB() { return B.iBW = 0; } // Tranceiver PTT on/off void RIG_QMX::set_PTT_control(int val) { if (val) cmd = "TQ1;"; else cmd = "TQ0;"; set_trace(1, "set PTT"); TRACE_CMD("set_PTT", cmd); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set PTT", cmd, ""); ptt_ = val; TRACE_REP("set_PTT", replystr); } int RIG_QMX::get_PTT() { cmd = "TQ;"; get_trace(1, "get PTT"); TRACE_CMD("get_PTT", cmd); ret = wait_char(';', 4, 100, "get PTT", ASC); gett(""); TRACE_REP("get_PTT", replystr); if (ret < 4) return ptt_; return ptt_ = replystr[2] == '1'; } /*====================================================================== IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => 11 digit decimal value of vfo frequency XXXXX => 5 spaces bbbbb => 5 digit RIT frequency, -0200 ... +0200 c => 0 = rit OFF, 1 = rit ON d => xit off/on; always ZERO X always ZERO ee => memory channel; always 00 f => tx/rx; 0 = RX, 1 = TX g => mode; always 3 (CW) h => function; receive VFO; 0 = A, 1 = B j => scan off/on; always ZERO k => split off /on; 0 = Simplex, 1 = Split l => tone off /on; always ZERO m => tone number; always ZERO X => unused characters; always a SPACE ======================================================================*/ int RIG_QMX::get_IF() { cmd = "IF;"; get_trace(1, "get_PTT"); TRACE_CMD("get_IF", cmd); ret = wait_char(';', 38, 100, "get VFO", ASC); gett(""); if (ret < 38) return ptt_; rit_ = 0; for (int n = 22; n > 18; n--) rit_ = (10 * rit_) + (replystr[n] - '0'); if (replystr[18] == '-') rit_ *= -1; rit_stat_ = (replystr[23] - '0'); ptt_ = (replystr[28] == '1'); split_ = (replystr[32] == '1'); TRACE_REP("get_IF", replystr); return ptt_; } void RIG_QMX::set_modeA(int val) { if (val < 0 || val > 3) return; cmd = QMX_mode_str[val]; set_trace(1, "set mode A"); TRACE_CMD("set_modeA", cmd); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set mode A", cmd, ""); A.imode = val; TRACE_REP("set_modeA", replystr); } int RIG_QMX::get_modeA() { cmd = "MD;"; get_trace(1, "get_modeA"); TRACE_CMD("get_modeA", cmd); ret = wait_char(';', 4, 100, "get modeA", ASC); gett(""); TRACE_REP("get_modeA", replystr); if (ret < 4) return A.imode; for (int i = 0; i < 4; i++) if (replystr.find(QMX_mode_str[i]) != std::string::npos) return A.imode = i; return A.imode; } void RIG_QMX::set_modeB(int val) { if (val < 0 || val > 3) return; cmd = QMX_mode_str[val]; set_trace(1, "set mode B"); TRACE_CMD("set_modeB", cmd); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set mode B", cmd, ""); B.imode = val; TRACE_REP("set_modeB", replystr); } int RIG_QMX::get_modeB() { cmd = "MD;"; get_trace(1, "get_modeA"); TRACE_CMD("get_modeB", cmd); ret = wait_char(';', 4, 100, "get modeB", ASC); gett(""); TRACE_REP("get_modeB", replystr); if (ret < 4) return B.imode; for (int i = 0; i < 4; i++) if (replystr.find(QMX_mode_str[i]) != std::string::npos) return B.imode = i; return B.imode; } void RIG_QMX::setVfoAdj(double v) { if (v > 1000) v = 1000; if (v < -1000) v = -1000; vfo_ = v;//25000000 + (int)v; char cmdstr[12]; snprintf(cmdstr, sizeof(cmdstr), "Q0%08.0f;", vfo_ + 25000000); cmd = cmdstr; set_trace(1, "set TCXO ref freq"); TRACE_CMD("setVfoAdj", cmd); sendCommand(cmd); sett(""); TRACE_REP("setVfoAdj", replystr); } double RIG_QMX::getVfoAdj() { cmd = "Q0;"; get_trace(1, "get TCXO ref freq"); TRACE_CMD("getVfoAdj", cmd); ret = wait_char(';', 12, 100, "get TCXO ref freq", ASC); TRACE_REP("getVfoAdj", replystr); if (ret < 11) return vfo_; int vfo; sscanf( (&replystr[2]), "%d", &vfo); return vfo_ = vfo - 25000000; } void RIG_QMX::get_vfoadj_min_max_step(double &min, double &max, double &step) { min = -1000; max = 1000; step = 1; } void RIG_QMX::set_vox_onoff() { if (progStatus.vox_onoff) cmd = "Q31;"; else cmd = "Q30;"; set_trace(1, "set vox on/off"); TRACE_CMD("set_vox_onoff", cmd); sendCommand(cmd); sett(""); TRACE_REP("set_vox_onoff", replystr); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } int RIG_QMX::get_vox_onoff() { cmd = "Q3;"; get_trace(1, "get vox onoff"); TRACE_CMD("get_vox_onoff", cmd); ret = wait_char(';', 4, 100, "get vox on/off", ASC); gett(""); TRACE_REP("get_vox_onoff", replystr); if (ret < 4) return progStatus.vox_onoff; progStatus.vox_onoff = (replystr[2] == '1'); return progStatus.vox_onoff; } void RIG_QMX::set_volume_control(int val) { cmd = "AG"; char szval[20]; snprintf(szval, sizeof(szval), "%02d", val); cmd += szval; cmd += ';'; set_trace(1, "set vol control"); TRACE_CMD("set_vol", cmd); sendCommand(cmd); sett(""); TRACE_REP("set_vol", replystr); } int RIG_QMX::get_volume_control() { int val = progStatus.volume; cmd = "AG;"; get_trace(1, "get vol control"); TRACE_CMD("get_vol", cmd); ret = wait_char(';', 5, 100, "get vol", ASC); gett(""); TRACE_REP("get_vol", replystr); size_t p = replystr.rfind("AG"); if (p == std::string::npos) return val; val = atoi(&replystr[p + 2]); return val; } void RIG_QMX::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 99; step = 1; } void RIG_QMX::setRit(int val) { if (val >= 0) snprintf(cmdstr, sizeof(cmdstr), "RU%u;", val); else if (val < 0) snprintf(cmdstr, sizeof(cmdstr), "RD-%u;", abs(val)); rit_ = val; cmd = cmdstr; set_trace(1, "set RIT"); TRACE_CMD("setRit", cmd); sendCommand(cmd); sett(""); TRACE_REP("setRit", replystr); } int RIG_QMX::getRit() { get_IF(); return rit_; } flrig-2.0.04/src/rigs/qrp_labs/QDX.cxx0000664000175000017500000002253714504050475014356 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "qrp_labs/QDX.h" #include "support.h" static const char QDXname_[] = "QDX"; static std::vectorQDXmodes_; static const char *vQDXmodes_[] = { "LSB", "USB"}; static const char QDX_mode_type[] = { 'L', 'U' }; // SL command is lo cut when menu 045 OFF static std::vectorQDX_BW; static const char *vQDX_BW[] = { "3200" }; //static const char *QDX_BW_tooltip = "Fixed bandwidth"; static GUI rig_widgets[]= { { (Fl_Widget *)NULL, 0, 0, 0 } }; void RIG_QDX::initialize() { VECTOR (QDXmodes_, vQDXmodes_); VECTOR (QDX_BW, vQDX_BW); modes_ = QDXmodes_; bandwidths_ = QDX_BW; } RIG_QDX::RIG_QDX() { name_ = QDXname_; modes_ = QDXmodes_; bandwidths_ = QDX_BW; widgets = rig_widgets; serial_baudrate = BR9600; stopbits = 1; serial_retries = 2; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_rtsptt = false; serial_dtrptt = false; serial_write_delay = 0; serial_post_write_delay = 0; serial_timeout = 50; serial_catptt = true; B.imode = A.imode = 1; B.iBW = A.iBW = 0; A.freq = 7070000ULL; B.freq = 14070000ULL; has_mode_control = has_bandwidth_control = has_extras = has_volume_control = has_ptt_control = has_vfo_adj = has_vox_onoff = has_rit = has_split = can_change_alt_vfo = true; precision = 1; ndigits = 8; } static int ret = 0; static int split_ = 0; static int rit_ = 0; static int rit_stat_ = 0; static char cmdstr[20]; void RIG_QDX::shutdown() { } bool pre_106 = false; bool RIG_QDX::check() { cmd = "VN;"; // version number query; re VN1_05; get_trace(1, "get version"); wait_char(';', 8, 100, "get version", ASC); gett(""); if (replystr.find("VN") == std::string::npos) return 0; if (replystr.substr(2,4) < "1_06") { pre_106 = true; } return 1; } unsigned long long RIG_QDX::get_vfoA () { cmd = "FA;"; get_trace(1, "get vfoA"); if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; gett(""); size_t p = replystr.rfind("FA"); if (p != std::string::npos) { sscanf(&replystr[p+2], "%llu", &A.freq); } return A.freq; } void RIG_QDX::set_vfoA (unsigned long long freq) { A.freq = freq; snprintf(cmdstr, sizeof(cmdstr), "FA%011llu;", A.freq); cmd = cmdstr; set_trace(1, "set vfoA"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_QDX::get_vfoB () { cmd = "FB;"; get_trace(1, "get vfoB"); if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) return B.freq; gett(""); size_t p = replystr.rfind("FB"); if (p != std::string::npos) { sscanf(&replystr[p+2], "%llu", &B.freq); } return B.freq; } void RIG_QDX::set_vfoB (unsigned long long freq) { B.freq = freq; snprintf(cmdstr, sizeof(cmdstr), "FB%011llu;", B.freq); cmd = cmdstr; set_trace(1, "set vfoB"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set vfo B", cmd, ""); } void RIG_QDX::selectA() { cmd = "FR0;FT0;"; set_trace(1, "select A"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); inuse = onA; } void RIG_QDX::selectB() { cmd = "FR1;FT1;"; set_trace(1, "select B"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); inuse = onB; } void RIG_QDX::set_split(bool val) { if (val) cmd = "SP1;"; else cmd = "SP0;"; set_trace(1, "set split on/off"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set split", cmd, ""); split_ = val; } bool RIG_QDX::can_split() { return true; } int RIG_QDX::get_split() { cmd = "SP;"; get_trace(1, "get split"); ret = wait_char(';', 4, 100, "get split", ASC); gett(""); split_ = replystr[2] == '1'; return split_; } void RIG_QDX::set_bwA(int val) { A.iBW = 0; } int RIG_QDX::get_bwA() { return A.iBW = 0; } void RIG_QDX::set_bwB(int val) { B.iBW = 0; } int RIG_QDX::get_bwB() { return B.iBW = 0; } // Tranceiver PTT on/off void RIG_QDX::set_PTT_control(int val) { if (val) cmd = "TQ1;"; else cmd = "TQ0;"; set_trace(1, "set PTT"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set PTT", cmd, ""); ptt_ = val; } int RIG_QDX::get_PTT() { cmd = "TQ;"; get_trace(1, "get PTT"); ret = wait_char(';', 4, 100, "get PTT", ASC); gett(""); if (ret < 4) return ptt_; return ptt_ = replystr[2] == '1'; } /*====================================================================== IF; response IFaaaaaaaaaaaXXXXXbbbbbcdXeefghjklmmX; 12345678901234567890123456789012345678 01234567890123456789012345678901234567 byte # 1 2 3 ^ position 28 where: aaaaaaaaaaa => 11 digit decimal value of vfo frequency XXXXX => 5 spaces bbbbb => 5 digit RIT frequency, -0200 ... +0200 c => 0 = rit OFF, 1 = rit ON d => xit off/on; always ZERO X always ZERO ee => memory channel; always 00 f => tx/rx; 0 = RX, 1 = TX g => mode; always 3 (CW) h => function; receive VFO; 0 = A, 1 = B j => scan off/on; always ZERO k => split off /on; 0 = Simplex, 1 = Split l => tone off /on; always ZERO m => tone number; always ZERO X => unused characters; always a SPACE ======================================================================*/ int RIG_QDX::get_IF() { cmd = "IF;"; get_trace(1, "get_PTT"); ret = wait_char(';', 38, 100, "get VFO", ASC); gett(""); if (ret < 38) return ptt_; rit_ = 0; for (int n = 22; n > 18; n--) rit_ = (10 * rit_) + (replystr[n] - '0'); if (replystr[18] == '-') rit_ *= -1; rit_stat_ = (replystr[23] - '0'); ptt_ = (replystr[28] == '1'); split_ = (replystr[32] == '1'); return ptt_; } void RIG_QDX::set_modeA(int val) { if (val == 0) cmd = "MD1;"; // LSB else cmd = "MD2;"; // USB set_trace(1, "set mode A"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set mode A", cmd, ""); A.imode = val; } int RIG_QDX::get_modeA() { cmd = "MD;"; get_trace(1, "get_modeA"); ret = wait_char(';', 4, 100, "get modeA", ASC); gett(""); if (ret < 4) return A.imode; if (replystr[2] == '1') A.imode = 0; // LSB else A.imode = 1; // USB return A.imode; } void RIG_QDX::set_modeB(int val) { if (val == 0) cmd = "MD1;"; // LSB else cmd = "MD2;"; // USB B.imode = val; set_trace(1, "set mode B"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "set mode B", cmd, ""); } int RIG_QDX::get_modeB() { cmd = "MD;"; get_trace(1, "get_modeB"); ret = wait_char(';', 4, 100, "get modeB", ASC); gett(""); if (ret < 4) return B.imode; if (replystr[2] == '1') B.imode = 0; // LSB else B.imode = 1; // USB return B.imode; } void RIG_QDX::setVfoAdj(double v) { if (v > 1000) v = 1000; if (v < -1000) v = -1000; vfo_ = v;//25000000 + (int)v; char cmdstr[12]; snprintf(cmdstr, sizeof(cmdstr), "Q0%08.0f;", vfo_ + 25000000); cmd = cmdstr; set_trace(1, "set TCXO ref freq"); sendCommand(cmd); sett(""); } double RIG_QDX::getVfoAdj() { cmd = "Q0;"; get_trace(1, "get TCXO ref freq"); ret = wait_char(';', 12, 100, "get TCXO ref freq", ASC); if (ret < 11) return vfo_; int vfo; sscanf( (&replystr[2]), "%d", &vfo); return vfo_ = vfo - 25000000; } void RIG_QDX::get_vfoadj_min_max_step(double &min, double &max, double &step) { min = -1000; max = 1000; step = 1; } void RIG_QDX::set_vox_onoff() { if (progStatus.vox_onoff) cmd = pre_106 ? "Q41;" : "Q31;"; else cmd = pre_106 ? "Q40;" : "Q30;"; set_trace(1, "set vox on/off"); sendCommand(cmd); sett(""); showresp(WARN, ASC, "SET vox gain", cmd, replystr); } int RIG_QDX::get_vox_onoff() { cmd = pre_106 ? "Q4;" : "Q3;"; get_trace(1, "get vox onoff"); ret = wait_char(';', 4, 100, "get vox on/off", ASC); gett(""); if (ret < 4) return progStatus.vox_onoff; progStatus.vox_onoff = (replystr[2] == '1'); return progStatus.vox_onoff; } void RIG_QDX::set_volume_control(int val) { cmd = "AG"; char szval[20]; snprintf(szval, sizeof(szval), "%02d", val); cmd += szval; cmd += ';'; set_trace(1, "set vol control"); sendCommand(cmd); sett(""); } int RIG_QDX::get_volume_control() { int val = progStatus.volume; cmd = "AG;"; get_trace(1, "get vol control"); ret = wait_char(';', 5, 100, "get vol", ASC); gett(""); size_t p = replystr.rfind("AG"); if (p == std::string::npos) return val; val = atoi(&replystr[p + 2]); return val; } void RIG_QDX::get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 99; step = 1; } void RIG_QDX::setRit(int val) { if (val >= 0) snprintf(cmdstr, sizeof(cmdstr), "RU%u;", val); else if (val < 0) snprintf(cmdstr, sizeof(cmdstr), "RD-%u;", abs(val)); rit_ = val; cmd = cmdstr; set_trace(1, "set RIT"); sendCommand(cmd); sett(""); } int RIG_QDX::getRit() { get_IF(); return rit_; } flrig-2.0.04/src/rigs/qrp_labs/QCXplus.cxx0000664000175000017500000001767514504050475015270 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2022 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "qrp_labs/QCXplus.h" #include "support.h" static const char QCXPname_[] = "QCX+"; static std::vectorQCXPmodes_; static const char *vQCXPmodes_[] = { "CW", "CW-R"}; static const char QCXP_mode_chr[] = { '1', '2' }; static const char QCXP_mode_type[] = { 'U', 'L' }; static std::vectorQCXP_CWwidths; static const char *vQCXP_CWwidths[] = { "200"}; static int QCXP_CW_bw_vals[] = {1, WVALS_LIMIT}; static GUI rig_widgets[]= { { (Fl_Widget *)NULL, 0, 0, 0 } }; RIG_QCXP::RIG_QCXP() { // base class values name_ = QCXPname_; modes_ = QCXPmodes_; _mode_type = QCXP_mode_type; bandwidths_ = QCXP_CWwidths; bw_vals_ = QCXP_CW_bw_vals; widgets = rig_widgets; serial_baudrate = BR38400; stopbits = 1; serial_retries = 1; // serial_write_delay = 0; // serial_post_write_delay = 0; serial_timeout = 50; serial_rtscts = false; serial_rtsplus = false; serial_dtrplus = false; serial_catptt = false; serial_rtsptt = false; serial_dtrptt = false; B.imode = A.imode = 1; B.iBW = A.iBW = 0x8A03; A.freq = 7040000ULL; B.freq = 7025000ULL; has_extras = false; has_noise_reduction = has_noise_reduction_control = has_auto_notch = has_noise_control = has_sql_control = false; has_split = true; has_smeter = true; has_mode_control = true; has_bandwidth_control = true; has_ptt_control = true; can_synch_clock = true; precision = 1; ndigits = 8; } std::string RIG_QCXP::read_menu(int m1, int m2) { #define WAIT 10 char str1[20]; int n = 4; std::string resp1; snprintf(str1, sizeof(str1), "QM%d?%02d;", m1, m2); while (n) { cmd = str1; replystr.clear(); MilliSleep(WAIT); wait_char(';', 100, 100, "init 1", ASC); resp1 = replystr; if (resp1.find("?;") == std::string::npos && resp1.find("QM") != std::string::npos) { return resp1; } --n; } return ""; } void RIG_QCXP::initialize() { VECTOR (QCXPmodes_, vQCXPmodes_); VECTOR (QCXP_CWwidths, vQCXP_CWwidths); modes_ = QCXPmodes_; _mode_type = QCXP_mode_type; bandwidths_ = QCXP_CWwidths; bw_vals_ = QCXP_CW_bw_vals; sendCommand("QU0;"); sendCommand("RX;"); return; } static int ret = 0; // SM cmd 0 ... 100 (rig values 0 ... 15) int RIG_QCXP::get_smeter() { int mtr = 0; cmd = "SM0;"; get_trace(1, "get_smeter"); ret = wait_char(';', 8, 100, "get Smeter", ASC); gett(""); if (ret < 8) return 0; size_t p = replystr.rfind("SM"); if (p != std::string::npos) mtr = 100 * atoi(&replystr[p + 3]) / 16383; return mtr; } void RIG_QCXP::set_modeA(int val) { if (val == 0) { A.imode = 0; cmd = "QM3.070;"; } else { A.imode = 1; cmd = "QM3.071;"; } sendCommand(cmd); sett(""); } // CW-R.OFF.OFF#ON ; int RIG_QCXP::get_modeA() { cmd = "QM3?07;"; get_trace(1, "get_modeA"); ret = wait_char(';', 17, 100, "get CW-R", ASC); gett(""); if (replystr.find("CW-R") == std::string::npos) return A.imode; if (replystr.find("CW-R.OFF") != std::string::npos) A.imode = 0; if (replystr.find("CW-R.ON") != std::string::npos) A.imode = 1; return A.imode; } void RIG_QCXP::set_modeB(int val) { if (val == 0) { B.imode = 0; cmd = "QM3.070;"; } else { B.imode = 1; cmd = "QM3.071;"; } sendCommand(cmd); sett(""); } int RIG_QCXP::get_modeB() { cmd = "QM3?07;"; get_trace(1, "get_modeA"); ret = wait_char(';', 17, 100, "get CW-R", ASC); gett(""); if (replystr.find("CW-R") == std::string::npos) return B.imode; if (replystr.find("CW-R.OFF") != std::string::npos) B.imode = 0; if (replystr.find("CW-R.ON") != std::string::npos) B.imode = 1; return B.imode; } int RIG_QCXP::get_modetype(int n) { if (A.imode == 0) return 'U'; else return 'L'; } void RIG_QCXP::set_bwA(int val) { A.iBW = 0; } int RIG_QCXP::get_bwA() { return A.iBW = 0; } void RIG_QCXP::set_bwB(int val) { B.iBW = 0; } int RIG_QCXP::get_bwB() { return B.iBW = 0; } // Tranceiver PTT on/off void RIG_QCXP::set_PTT_control(int val) { ptt_ = val; return; // if (val) // cmd = "TQ1"; // else // cmd = "TQ0;"; // sendCommand(cmd); // showresp(WARN, ASC, "set PTT", cmd, ""); } int RIG_QCXP::get_PTT() { // cmd = "TQ;"; return ptt_; } void RIG_QCXP::set_split(bool val) { split = val; if (inuse == onB) { if (val) { cmd = "FR1;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on A", cmd, ""); } else { cmd = "FR1;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on B, Tx on B", cmd, ""); } } else { if (val) { cmd = "FR0;FT1;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on B", cmd, ""); } else { cmd = "FR0;FT0;"; sendCommand(cmd); showresp(WARN, ASC, "Rx on A, Tx on A", cmd, ""); } } } bool RIG_QCXP::can_split() { return true; } int RIG_QCXP::get_split() { size_t p; int split = 0; char rx = 0, tx = 0; // tx vfo cmd = rsp = "FT"; cmd.append(";"); if (wait_char(';', 4, 100, "get split tx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; tx = replystr[p+2]; } // rx vfo cmd = rsp = "FR"; cmd.append(";"); if (wait_char(';', 4, 100, "get split rx vfo", ASC) == 4) { p = replystr.rfind(rsp); if (p == std::string::npos) return split; rx = replystr[p+2]; } if (tx == '0' && rx == '0') split = 0; else if (tx == '1' && rx == '0') split = 1; else if (tx == '0' && rx == '1') split = 2; else if (tx == '1' && rx == '1') split = 3; return split; } unsigned long long RIG_QCXP::get_vfoA () { cmd = "FA;"; get_trace(1, "get_vfoA()"); if (wait_char(';', 14, 100, "get vfo A", ASC) < 14) return A.freq; gett("vfoA:"); size_t p = replystr.rfind("FA"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; A.freq = f; } return A.freq; } void RIG_QCXP::set_vfoA (unsigned long long freq) { A.freq = freq; cmd = "FA00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo A", cmd, ""); } unsigned long long RIG_QCXP::get_vfoB () { cmd = "FB;"; get_trace(1, "get_vfoB()"); if (wait_char(';', 14, 100, "get vfo B", ASC) < 14) return B.freq; gett("vfoB:"); size_t p = replystr.rfind("FB"); if (p != std::string::npos && (p + 12 < replystr.length())) { unsigned long long f = 0; for (size_t n = 2; n < 13; n++) f = f*10 + replystr[p+n] - '0'; B.freq = f; } return B.freq; } void RIG_QCXP::set_vfoB (unsigned long long freq) { B.freq = freq; cmd = "FB00000000000;"; for (int i = 12; i > 1; i--) { cmd[i] += freq % 10; freq /= 10; } sendCommand(cmd); showresp(WARN, ASC, "set vfo B", cmd, ""); } void RIG_QCXP::selectA() { cmd = "FR0;"; sendCommand(cmd); cmd = "FT0;"; sendCommand(cmd); inuse = onA; } void RIG_QCXP::selectB() { cmd = "FR1;"; sendCommand(cmd); cmd = "FT1;"; sendCommand(cmd); inuse = onB; } void RIG_QCXP::sync_date(char *dt) { return; } // --------------------------------------------------------------------- // tm formated as HH:MM:SS // QCX+ needs HH:MM // QM6.0806:35; // --------------------------------------------------------------------- void RIG_QCXP::sync_clock(char *tm) { cmd.assign("QM6.08"); tm[5] = 0; cmd.append(tm).append(";"); sendCommand(cmd); } flrig-2.0.04/src/include/0000775000175000017500000000000014511461606012121 500000000000000flrig-2.0.04/src/include/trace.h0000664000175000017500000000776614502720371013325 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TRACE_H #define _TRACE_H #include #include #include #include #include //#define WITH_TRACED // compile using ./configure "CXXFLAGS=-DWITH_TRACED" //usage //int TRACED(add, int a, int b) // opening brace is part of the macro extern Fl_Double_Window* tracewindow; extern void trace(int n, ...); // all args of type const char * extern void xml_trace(int n, ...); // all args of type const char * extern void rig_trace(int n, ...); // trace transceiver class methods extern void get_trace(int n, ...); // trace get methods extern void set_trace(int n, ...); // trace set methods extern void ser_trace(int n, ...); // trace serial methods extern void rpc_trace(int n, ...); // trace transceiver class methods extern void deb_trace(int n, ...); // trace debug statements extern void tci_trace(int n, ...); extern bool activate_lock_trace; extern void lock_trace(int n, ...); // trace lock/unlock statements extern void make_trace_window(); #define getr(s) get_trace(1, s); #define setr(s) set_trace(1, s); #define gett(str) get_trace(5, str, "S: ", cmd.c_str(), " R: ", replystr.c_str()) #define sett(str) set_trace(5, str, "S: ", cmd.c_str(), " R: ", replystr.c_str()) #define getthex(str) { \ static std::string hex1; \ hex1 = str2hex(cmd.c_str(), cmd.length()); \ static std::string hex2; \ hex2 = str2hex(replystr.c_str(), replystr.length()); \ get_trace(5, str, "S: ", hex1.c_str(), " R: ", hex2.c_str()); \ } #define setthex(str) { \ static std::string hex1; \ hex1 = str2hex(cmd.c_str(), cmd.length()); \ static std::string hex2; \ hex2 = str2hex(replystr.c_str(), replystr.length()); \ set_trace(5, str, "S: ", hex1.c_str(), " R: ", hex2.c_str()); \ } #define seth() { \ static std::string hex1; \ hex1 = str2hex(cmd.c_str(), cmd.length()); \ static std::string hex2; \ hex2 = str2hex(replystr.c_str(), replystr.length()); \ set_trace(4, "S: ", hex1.c_str(), " R: ", hex2.c_str()); \ } #define geth() { \ static std::string hex1; \ hex1 = str2hex(cmd.c_str(), cmd.length()); \ static std::string hex2; \ hex2 = str2hex(replystr.c_str(), replystr.length()); \ get_trace(4, "S: ", hex1.c_str(), " R: ", hex2.c_str()); \ } #define getcr(str) { \ static std::string s1; \ s1 = cmd; \ static std::string s2; \ s2 = replystr; \ size_t n = 0; \ while (n < s1.length()) { \ if (s1[n] == '\r') s1.replace(n, 1, ""); \ n++; \ } \ n = 0; \ while (n < s2.length()) { \ if (s2[n] == '\r') s2.replace(n, 1, ""); \ n++; \ } \ get_trace(5, str, " ", s1.c_str(), " / ", s2.c_str()); \ } #define setcr(str) { \ static std::string s1; \ s1 = cmd; \ size_t n = 0; \ while (n < s1.length()) { \ if (s1[n] == '\r') s1.replace(n, 1, ""); \ n++; \ } \ set_trace(3, str, " ", s1.c_str()); \ } #ifdef WITH_TRACED #define TRACED(name, ...) name(__VA_ARGS__) { \ static char tmsg[50]; \ static unsigned trace_calls_##name = 0; \ ++trace_calls_##name; \ snprintf(tmsg, sizeof(tmsg), "[%2u] %s", trace_calls_##name, #name ); \ get_trace(1, tmsg); #else # define TRACED(name, ...) name(__VA_ARGS__) { #endif #endif flrig-2.0.04/src/include/timeops.h0000664000175000017500000000363614502720371013677 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2017 // David Freese, W1HKJ // // This file is part of flrig // // fldigi is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef TIMEOPS_H_ #define TIMEOPS_H_ #include "config.h" #include #include #ifdef __MINGW32__ # include #endif struct timespec operator+(const struct timespec &t0, const double &t); struct timespec operator-(const struct timespec &t0, const struct timespec &t1); struct timespec& operator-=(struct timespec &t0, const struct timespec &t1); bool operator>(const struct timespec &t0, const struct timespec &t1); bool operator==(const struct timespec &t0, const struct timespec &t1); struct timeval operator+(const struct timeval &t0, const double &t); struct timeval operator-(const struct timeval &t0, const struct timeval &t1); struct timeval& operator-=(struct timeval &t0, const struct timeval &t1); bool operator>(const struct timeval &t0, const struct timeval &t1); bool operator==(const struct timeval &t0, const struct timeval &t1); #ifndef GMTIME_R extern struct tm *gmtime_r(const time_t *timer, struct tm *tmbuf); extern struct tm *localtime_r(const time_t *_Time,struct tm *_Tm); #endif #endif // TIMEOPS_H_ flrig-2.0.04/src/include/compat-mingw.h0000664000175000017500000000506714502720371014621 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef MINGW_H_ #define MINGW_H_ #include #include #include #ifdef __cplusplus extern "C" { #endif #define hstrerror strerror #ifndef SIGUSR2 # define SIGUSR2 100 #endif /* * simple adaptors */ static inline int mingw_mkdir(const char *path, int mode) { return mkdir(path); } #define mkdir mingw_mkdir static inline int mingw_unlink(const char *pathname) { /* read-only files cannot be removed */ chmod(pathname, 0666); return unlink(pathname); } #define unlink mingw_unlink /* * implementations of missing functions */ unsigned int sleep (unsigned int seconds); char *mingw_getcwd(char *pointer, int len); #define getcwd mingw_getcwd char *mingw_getenv(const char *name); #define getenv mingw_getenv int mingw_rename(const char*, const char*); #define rename mingw_rename #ifndef SHUT_WR # define SHUT_WR SD_SEND #endif #ifndef SHUT_RD # define SHUT_RD SD_RECEIVE #endif #ifndef SHUT_RDWR # define SHUT_RDWR SD_BOTH #endif #ifndef EADDRINUSE # define EADDRINUSE WSAEADDRINUSE #endif int nanosleep (const struct timespec *req, struct timespec *rem); int socketpair(int family, int type, int protocol, int *sv); /* uname */ /* #define UTSNAME_MAX_ 257 struct utsname { char sysname[UTSNAME_MAX_]; char nodename[UTSNAME_MAX_]; char release[UTSNAME_MAX_]; char version[UTSNAME_MAX_]; char machine[UTSNAME_MAX_]; }; int uname(struct utsname *name); */ /* getrusage */ #define RUSAGE_SELF 0 #define RUSAGE_CHILDREN (-1) struct rusage { struct timeval ru_utime; struct timeval ru_stime; }; int getrusage(int who, struct rusage *usage); /* fsync, fdatasync */ #include #define fsync _commit #define fdatasync fsync #ifdef __cplusplus } #endif #endif flrig-2.0.04/src/include/cmedia.h0000664000175000017500000000226314502720371013434 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef CMEDIA_H #define CMEDIA_H #include /* #ifdef __WIN32__ # include //# include "par_nt.h" #endif */ extern bool set_cmedia(int); extern int get_cmedia(); extern int open_cmedia(std::string); extern void close_cmedia(); extern void init_hids(); extern void test_hid_ptt(); #endif flrig-2.0.04/src/include/elad/0000775000175000017500000000000014511461606013026 500000000000000flrig-2.0.04/src/include/elad/FDMDUO.h0000664000175000017500000000575714502041135014102 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FDMDUO_H #define _FDMDUO_H #include "kenwood/KENWOOD.h" class RIG_FDMDUO : public KENWOOD { private: bool preamp_on; bool att_on; const char *_mode_type; int alc; bool swralc_polled; public: RIG_FDMDUO(); ~RIG_FDMDUO(){} void initialize(); void shutdown(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_split(bool val); bool can_split(); int get_split(); bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); void tune_rig(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step) { min = 0.1; max = 5.0; step = 0.1; } void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); int adjust_bandwidth(int m); int def_bandwidth(int m); int set_widths(int val); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } void set_auto_notch(int v); int get_auto_notch(); std::vector& bwtable(int); const char * get_bwname_(int bw, int md); int power_scale(); }; #endif flrig-2.0.04/src/include/xmlrpc_rig.h0000664000175000017500000000040714502720371014356 00000000000000#ifndef XMLRPC_RIG_H #define XMLRPC_RIG_H #include extern bool connected_to_client; extern std::string xml_cat_string( std::string send ); extern std::string client_get_xcvr(); extern bool client_connection(); extern bool connect_to_client(); #endif flrig-2.0.04/src/include/cwlog.h0000664000175000017500000000273314502720371013327 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2022 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FSKLOG_H #define FSKLOG_H extern bool fsklog_editing; extern void fsklog_sort_by_call(); extern void fsklog_sort_by_datetime(); extern void fsklog_sort_by_nbr(); extern void fsklog_sort_by_freq(); extern void fsklog_clear_qso(); extern void fsklog_save_qso(); extern void fsklog_edit_entry(); extern void fsklog_delete_entry(); extern void fsklog_view(); extern void fsklog_close(); extern void fsklog_open(); extern void fsklog_new(); extern void fsklog_load(); extern void fsklog_save(); extern void fsklog_save_as(); extern void fsklog_export_adif(); extern void fsklog_import_adif(); #endif flrig-2.0.04/src/include/tod_clock.h0000664000175000017500000000175714502720371014162 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2017 // David Freese, W1HKJ // // This file is part of flrig // // fldigi is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef TOD_H_ #define TOD_H_ extern size_t zmsec(); extern size_t zusec(); extern char *ztime(); #endif // TOD_H_ flrig-2.0.04/src/include/flinput2.h0000664000175000017500000000300614502720371013751 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of fldigi // // fldigi is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FL_INPUT2_ #define FL_INPUT2_ #include #include "config.h" class Fl_Input2 : public Fl_Input { private: int ascii_cnt; // restart the numeric keypad entries. int ascii_chr; // character value of ASCII > 0x80 int handle_key_ascii(int key); char *utf8text; int utf8cnt; public: Fl_Input2(int x, int y, int w, int h, const char* l = 0); int handle(int event); #if FLRIG_FLTK_API_MINOR > 3 int position() { return Fl_Input::insert_position(); } int position(int p, int m) { return Fl_Input::insert_position(p, m); } int position(int p) { return Fl_Input::insert_position(p, p); } #endif }; #endif // FL_INPUT2_ flrig-2.0.04/src/include/util.h0000664000175000017500000001435314502720371013172 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- /* This file is included by config.h */ #ifndef UTIL_H #define UTIL_H #ifdef __cplusplus extern "C" { #endif #ifndef __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS 1 #endif #include #ifndef powerof2 # define powerof2(n) ((((n) - 1) & (n)) == 0) #endif #ifndef MAX # define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif #ifndef MIN # define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif #ifndef CLAMP # define CLAMP(x, low, high) (((x)>(high))?(high):(((x)<(low))?(low):(x))) #endif #define WCLAMP(x, low, high) (((x)>(high))?(low):(((x)<(low))?(high):(x))) #ifdef __GNUC__ # if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) # define full_memory_barrier() __sync_synchronize() # define read_memory_barrier() full_memory_barrier() # define write_memory_barrier() full_memory_barrier() # elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(__x86_64__) # define full_memory_barrier() asm volatile ("lock; addl $0,0(%%esp)":::"memory") # define read_memory_barrier() full_memory_barrier() # define write_memory_barrier() full_memory_barrier() /* These would be faster on SSE2-capable processors: # define full_memory_barrier() asm volatile ("mfence":::"memory") # define read_memory_barrier() asm volatile ("lfence":::"memory") # define write_memory_barrier() asm volatile ("sfence":::"memory") */ # elif defined(__ppc__) || defined(__powerpc__) || defined(__PPC__) # define full_memory_barrier() asm volatile("sync":::"memory") # define read_memory_barrier() full_memory_barrier() # define write_memory_barrier() full_memory_barrier() # else # warning Memory barriers not defined on this system # define full_memory_barrier() ((void)0) # define read_memory_barrier() full_memory_barrier() # define write_memory_barrier() full_memory_barrier() # endif #else # warning Memory barriers not defined on this system # define full_memory_barrier() ((void)0) # define read_memory_barrier() full_memory_barrier() # define write_memory_barrier() full_memory_barrier() #endif /* http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html */ #if defined(__GNUC__) && (__GNUC__ >= 3) # define likely(x) __builtin_expect (!!(x), 1) # define unlikely(x) __builtin_expect (!!(x), 0) # define used__ __attribute__ ((__used__)) # define unused__ __attribute__ ((__unused__)) # define must_check__ __attribute__ ((__warn_unused_result__)) # define deprecated__ __attribute__ ((__deprecated__)) # define noreturn__ __attribute__ ((__noreturn__)) # define pure__ __attribute__ ((__pure__)) # define const__ __attribute__ ((__const__)) # define malloc__ __attribute__ ((__malloc__)) # define packed__ __attribute__ ((__packed__)) # define inline__ inline __attribute__ ((__always_inline__)) # define noinline__ __attribute__ ((__noinline__)) # define nonnull__(x) __attribute__ ((__nonnull__(x))) # define format__(type_, index_, first_) __attribute__ ((format(type_, index_, first_))) #else # define likely(x) (x) # define unlikely(x) (x) # define used__ # define unused__ # define must_check__ # define deprecated__ # define noreturn__ # define pure__ # define const__ # define malloc__ # define packed__ # define inline__ # define noinline__ # define nonnull__(x) # define format__(type_, index_, first_) #endif #if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) # define hot__ __attribute__ ((__hot__)) # define cold__ __attribute__ ((__cold__)) #else # define hot__ # define cold__ #endif #include const__ uint32_t ceil2(uint32_t n); const__ uint32_t floor2(uint32_t n); //#if !HAVE_STRCASESTR //char* strcasestr(const char* haystack, const char* needle); //#endif //#if !HAVE_STRLCPY //size_t strlcpy(char* dest, const char* src, size_t size); //#endif int set_cloexec(int fd, unsigned char v); int set_nonblock(int fd, unsigned char v); int set_nodelay(int fd, unsigned char v); int get_bufsize(int fd, int dir, int* len); int set_bufsize(int fd, int dir, int len); unsigned long ver2int(const char* version); void save_signals(void); void restore_signals(void); void MilliSleep(long msecs); // return current tick time in seconds double fsk_now(); // sub millisecond accurate sleep function // sleep_time in seconds // returns 0 if no error // nanosleep return value if error int accu_sleep (double sleep_time); #ifdef __cplusplus } // extern "C" #endif #ifdef __cplusplus uint32_t simple_hash_data(const unsigned char* buf, size_t len, uint32_t code = 0); uint32_t simple_hash_str(const unsigned char* str, uint32_t code = 0); #endif #ifdef __cplusplus const char* str2hex(const unsigned char* str, size_t len); const char* str2hex(const char* str, size_t len = 0); #else const char* str2hex(const unsigned* str, size_t len); #endif const char* uint2bin(unsigned u, size_t len); void MilliSleep(long msecs); #if !defined(NDEBUG) && defined(deprecated__) && defined(__GNUC__) && !defined(__WIN32__) #include #include deprecated__ typeof(sprintf) sprintf; /* there are far too many of these in the qrz code deprecated__ typeof(strcpy) strcpy; deprecated__ typeof(strcat) strcat; */ #endif #ifdef __WIN32__ # define NOMINMAX 1 #endif #ifndef __WIN32__ # define PRIuSZ "zu" # define PRIdSZ "zd" #else # define PRIuSZ "Iu" # define PRIdSZ "Id" #endif #ifndef __WIN32__ # define PATH_SEP "/" #else # define PATH_SEP "\\" #endif #endif /* UTIL_H */ /* Local Variables: mode: c++ c-file-style: "linux" End: */ flrig-2.0.04/src/include/dialogs.h0000664000175000017500000000353314502720371013635 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef __DIALOGS_H__ #define __DIALOGS_H__ #include "config.h" #include "compat.h" // Must precede all FL includes #include #include "font_browser.h" #include "support.h" extern Fl_Double_Window *dlgDisplayConfig; extern Fl_Double_Window *dlgXcvrConfig; extern Fl_Double_Window *dlgMemoryDialog; extern Fl_Double_Window *dlgControls; extern Font_Browser *fntbrowser; extern void init_port_combos(); extern bool cwlog_editing; extern void cwlog_sort_by_call(); extern void cwlog_sort_by_datetime(); extern void cwlog_sort_by_nbr(); extern void cwlog_sort_by_freq(); extern void cwlog_clear_qso(); extern void cwlog_save_qso(); extern void cwlog_edit_entry(); extern void cwlog_delete_entry(); extern void cwlog_view(); extern void cwlog_close(); extern void cwlog_open(); extern void cwlog_new(); extern void cwlog_load(); extern void cwlog_save(); extern void cwlog_save_as(); extern void cwlog_export_adif(); extern void cwlog_import_adif(); #endif // __DIALOGS_H__ flrig-2.0.04/src/include/hid_win.h0000664000175000017500000001237014502720371013633 00000000000000/******************************************************* HIDAPI - Multi-Platform library for communication with HID devices. Alan Ott Signal 11 Software 8/22/2009 Copyright 2009, All Rights Reserved. C++ implementation Copyright 2021 David Freese, W1HKJ for use in flrig At the discretion of the user of this library, this software may be licensed under the terms of the GNU General Public License v3, a BSD-Style license, or the original HIDAPI license as outlined in the LICENSE.txt, LICENSE-gpl3.txt, LICENSE-bsd.txt, and LICENSE-orig.txt files located at the root of the source distribution. These files may also be found in the public source code repository located at: https://github.com/libusb/hidapi . ********************************************************/ /** @file * @defgroup API hidapi API */ #ifndef HIDAPI_H__ #define HIDAPI_H__ #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #ifdef __MINGW32__ #include #include // Already included via compat.h -> winsock2.h -> windows.h -> winbase.h # ifndef _NTDEF_ typedef LONG NTSTATUS; # endif //#include #endif //#ifdef __CYGWIN__ //#include //#define _wcsdup wcsdup //#endif /* The maximum number of characters that can be passed into the HidD_Get*String() functions without it failing.*/ #define MAX_STRING_WCHARS 0xFFF /*#define HIDAPI_USE_DDK*/ #ifdef __cplusplus extern "C" { #endif #include #include #ifndef HIDAPI_USE_DDK #include #endif /* Copied from inc/ddk/hidclass.h, part of the Windows DDK. */ #define HID_OUT_CTL_CODE(id) \ CTL_CODE(FILE_DEVICE_KEYBOARD, (id), METHOD_OUT_DIRECT, FILE_ANY_ACCESS) #define IOCTL_HID_GET_FEATURE HID_OUT_CTL_CODE(100) #define IOCTL_HID_GET_INPUT_REPORT HID_OUT_CTL_CODE(104) #ifdef __cplusplus } /* extern "C" */ #endif /** @brief Static/compile-time major version of the library. @ingroup API */ #define HID_API_VERSION_MAJOR 0 /** @brief Static/compile-time minor version of the library. @ingroup API */ #define HID_API_VERSION_MINOR 10 /** @brief Static/compile-time patch version of the library. @ingroup API */ #define HID_API_VERSION_PATCH 1 /* Helper macros */ #define HID_API_AS_STR_IMPL(x) #x #define HID_API_AS_STR(x) HID_API_AS_STR_IMPL(x) #define HID_API_TO_VERSION_STR(v1, v2, v3) HID_API_AS_STR(v1.v2.v3) /** @brief Static/compile-time string version of the library. @ingroup API */ #define HID_API_VERSION_STR HID_API_TO_VERSION_STR(HID_API_VERSION_MAJOR, HID_API_VERSION_MINOR, HID_API_VERSION_PATCH) struct hid_api_version { int major; int minor; int patch; }; class hid_device { public: HANDLE device_handle; BOOL blocking; USHORT output_report_length; unsigned char *write_buf; size_t input_report_length; USHORT feature_report_length; unsigned char *feature_buf; void *last_error_str; DWORD last_error_num; BOOL read_pending; char *read_buf; OVERLAPPED ol; OVERLAPPED write_ol; hid_device() { device_handle = INVALID_HANDLE_VALUE; blocking = TRUE; output_report_length = 0; write_buf = NULL; input_report_length = 0; feature_report_length = 0; feature_buf = NULL; last_error_str = NULL; last_error_num = 0; read_pending = FALSE; read_buf = NULL; memset(&ol, 0, sizeof(ol)); ol.hEvent = CreateEvent(NULL, FALSE, FALSE /*initial state f=nonsignaled*/, NULL); memset(&write_ol, 0, sizeof(write_ol)); write_ol.hEvent = CreateEvent(NULL, FALSE, FALSE /*inital state f=nonsignaled*/, NULL); } ~hid_device() { CloseHandle(ol.hEvent); CloseHandle(write_ol.hEvent); CloseHandle(device_handle); LocalFree(last_error_str); free(write_buf); free(feature_buf); free(read_buf); } void register_error(const char *op); int hid_write(const unsigned char *data, size_t length); int hid_read_timeout(unsigned char *data, size_t length, int milliseconds); int hid_read(unsigned char *data, size_t length); int hid_set_nonblocking(int nonblock); int hid_send_feature_report(const unsigned char *data, size_t length); int hid_get_feature_report(unsigned char *data, size_t length); int hid_get_input_report(unsigned char *data, size_t length); void hid_close(); std::string hid_get_manufacturer_string(); std::string hid_get_product_string(); std::string hid_get_serial_number_string(); int hid_get_indexed_string(int string_index, std::string str, size_t maxlen); const char * hid_error(); }; class hid_device_info { public: std::string path; unsigned short vendor_id; unsigned short product_id; unsigned short release_number; std::string str_serial_number; std::string str_manufacturer_string; std::string str_product_string; unsigned short usage_page; unsigned short usage; int interface_number; hid_device_info *next; hid_device_info() {} ~hid_device_info() {} }; hid_device * hid_open_path(std::string path); hid_device * hid_open(unsigned short vendor_id, unsigned short product_id, std::string serial_number); hid_device_info *hid_enumerate(unsigned short vendor_id, unsigned short product_id); void hid_free_enumeration(hid_device_info *devs); int hid_init(void); int hid_exit(void); #endif flrig-2.0.04/src/include/generic.h0000664000175000017500000000322514502720371013625 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _GENERIC_H #define _GENERIC_H #include "rig_io.h" extern RIG RIG_GENERIC; extern const char GENERIC_name[]; extern const char *GENERICmodes_[]; extern const char *GENERIC_widths[]; extern long GENERIC_get_vfoA(); extern void GENERIC_set_vfoA(long); extern int GENERIC_get_smeter(); extern int GENERIC_get_swr(); extern int GENERIC_get_power_out(); extern int GENERIC_get_power_control(); extern void GENERIC_set_volume_control(double val); extern void GENERIC_set_power_control(double val); extern void GENERIC_set_PTT_control(int val); extern void GENERIC_tune_rig(); extern void GENERIC_set_attenuator(int val); extern void GENERIC_set_preamp(int val); extern void GENERIC_set_modeA(int val); extern void GENERIC_set_modeA(int val); extern void GENERIC_set_bwA(int val); #endif flrig-2.0.04/src/include/Fl_SigBar.h0000664000175000017500000000404614502720371014003 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _Fl_SigBar_H_ #define _Fl_SigBar_H_ #include // // SigBar class... // #define SIGBAR_ARRAY_SIZE 20 class Fl_SigBar : public Fl_Widget { protected: double value_, peakv_, minimum_, maximum_; double vals_[SIGBAR_ARRAY_SIZE]; int aging_, avg_; bool horiz; Fl_Color pkcolor; protected: virtual void draw(); public: Fl_SigBar(int x, int y, int w, int h, const char *l = 0); void maximum(double v) { maximum_ = v; redraw(); } double maximum() const { return (maximum_); } void minimum(double v) { minimum_ = v; redraw(); } double minimum() const { return (minimum_); } void value(double v); double value() const { return (value_); } double peak() const { return peakv_;}; void aging (int n) { if (n <= SIGBAR_ARRAY_SIZE && n > 0) aging_ = n; else aging_ = SIGBAR_ARRAY_SIZE / 2; } void avg (int n) { if (n <= SIGBAR_ARRAY_SIZE && n > 0) avg_ = n; else avg_ = SIGBAR_ARRAY_SIZE / 2; } void clear () { for (int i = 0; i < SIGBAR_ARRAY_SIZE; i++) vals_[i] = 0; peakv_ = value_ = 0; } void PeakColor(Fl_Color c) { pkcolor = c; }; Fl_Color PeakColor() { return pkcolor; } void horizontal(bool yes) { horiz = yes; }; }; #endif flrig-2.0.04/src/include/xiegu/0000775000175000017500000000000014511461606013242 500000000000000flrig-2.0.04/src/include/xiegu/Xiegu-5105.h0000664000175000017500000000323114502041135014772 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General PublXiegu-5105 LXiegu-5105ense as published by // the Free Software Foundation; either version 3 of the LXiegu-5105ense, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTXiegu-5105ULAR PURPOSE. See the // GNU General PublXiegu-5105 LXiegu-5105ense for more details. // // You should have received a copy of the GNU General PublXiegu-5105 LXiegu-5105ense // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XI5105_H #define _XI5105_H #include "icom/ICbase.h" class RIG_XI5105 : public RIG_ICOM { public: RIG_XI5105(); ~RIG_XI5105(){} void initialize(); bool check(); unsigned long long get_vfoA(void); void set_vfoA(unsigned long long f); int get_bwA(); void set_bwA(int); int get_modeA(); void set_modeA(int val); int get_modetype(int n); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); int get_bwB(); void set_bwB(int); void set_modeB(int val); int get_modeB(); void selectA(); void selectB(); int get_smeter(); void set_PTT_control(int val); protected: int filter_nbr; }; #endif //============================================================================= flrig-2.0.04/src/include/xiegu/X6100.h0000664000175000017500000001121314502041135014036 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // Modified: January 2017 // Andy Stewart, KB1OIQ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _X6100_H #define _X6100_H #include "icom/IC746.h" class RIG_X6100 : public RIG_ICOM { public: RIG_X6100(); ~RIG_X6100(){} bool CW_sense; void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); bool can_split(); void set_split(bool); int get_split(); bool canswap() { return true; } void swapAB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); bool get_if_shift(int &val); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int val); const char *nextFILT(); int get_FILT(int mode); void set_FILT(int filter); void set_FILTERS(std::string s); std::string get_FILTERS(); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); void set_mic_gain(int v); void get_mic_gain_min_max_step(int &min, int &max, int &step); int get_mic_gain(); void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void get_vox_gain_min_max_step(int &min, int &max, int &step); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step); void set_vox_anti(); void get_vox_anti_min_max_step(int &min, int &max, int &step); void set_cw_wpm(); void get_cw_wpm_min_max(int &min, int &max); 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); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step); void set_cw_vol(); std::vector& bwtable(int m); void set_PTT_control(int val); int get_PTT(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); int get_smeter(); int get_power_out(void); int get_swr(void); int get_alc(void); double get_voltmeter(void); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(double &min, double &max, double &step); void set_preamp(int val); int get_preamp(); int next_preamp(); void set_attenuator(int val); int get_attenuator(); int next_attenuator(); const char * PRE_label(); const char * ATT_label(); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_squelch(int val); int get_squelch(); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int val); int get_auto_notch(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } void set_band_selection(int v); void get_band_selection(int v); void set_xcvr_auto_on(); void set_xcvr_auto_off(); }; #endif flrig-2.0.04/src/include/xiegu/Xiegu-G90.h0000664000175000017500000001063714502041135014747 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // Mark Gregory, G4LCH // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _Xiegu_G90_H #define _Xiegu_G90_H #include "icom/IC746.h" class RIG_Xiegu_G90 : public RIG_ICOM { public: RIG_Xiegu_G90(); ~RIG_Xiegu_G90(){} bool CW_sense; void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); // void set_bwA(int val); // int get_bwA(); // void set_bwB(int val); // int get_bwB(); // int adjust_bandwidth(int m); // int def_bandwidth(int m); void set_attenuator( int val ); int get_attenuator(); void set_preamp(int val); // int next_preamp(); int get_preamp(); const char * PRE_label(); const char * ATT_label(); // void set_mic_gain(int v); // int get_mic_gain(); // void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_noise(bool val); int get_noise(); // void set_noise_reduction(int val); // int get_noise_reduction(); // void set_noise_reduction_val(int val); // int get_noise_reduction_val(); // void get_nr_min_max_step(int &min, int &max, int &step) { // min = 0; max = 15; step = 1; } void set_compression(int, int); void get_compression(int &, int &); // void get_comp_min_max_step(int &min, int &max, int &step) { // min = 0; max = 10; step = 1; } // void set_vox_onoff(); // void set_vox_gain(); // void set_vox_anti(); // void set_vox_hang(); // void get_vox_hang_min_max_step(int &min, int &max, int &step) { // min = 0; max = 200; step = 10; } void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } // void get_cw_qsk_min_max_step(double &min, double &max, double &step) { // min = 2.0; max = 13.0; step = 0.1; } void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void set_cw_wpm(); // void set_cw_qsk(); // void set_cw_vol(); // std::vector& bwtable(int m); bool canswap() { return true; } bool can_split(); void set_split(bool val); int get_split(); void set_PTT_control(int val); int get_PTT(); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); // void set_rf_gain(int val); // int get_rf_gain(); // void get_rf_min_max_step(double &min, double &max, double &step); void set_squelch(int val); int get_squelch(); int get_smeter(); // int get_alc(); int get_swr(); int get_power_out(); // int get_auto_notch(); // void set_auto_notch(int val); // 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_if_shift(int val); // bool get_if_shift(int &val); // void get_if_min_max_step(int &min, int &max, int &step); // void set_pbt_inner(int val); // void set_pbt_outer(int val); // int get_pbt_inner(); // int get_pbt_outer(); // void set_nb_level(int val); // int get_nb_level(); void set_band_selection(int v); void get_band_selection(int v); // void setVfoAdj(double v); // double getVfoAdj(); // void set_BANDWIDTHS(std::string s); // std::string get_BANDWIDTHS(); // void set_xcvr_auto_on(); // void set_xcvr_auto_off(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); int power_scale(); void tune_rig(int how); int get_tune(); }; #endif flrig-2.0.04/src/include/mingw.h0000664000175000017500000000566314502720371013342 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of fldigi // // fldigi is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // fldigi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef MINGW_H_ #define MINGW_H_ #include "config.h" #include #include #include #undef EADDRINUSE #define EADDRINUSE WSAEADDRINUSE #undef EISCONN #define EISCONN WSAEISCONN #undef EWOULDBLOCK #define EWOULDBLOCK WSAEWOULDBLOCK #undef EINPROGRESS #define EINPROGRESS WSAEINPROGRESS #undef EALREADY #define EALREADY WSAEALREADY //====================================================================== #ifdef __cplusplus extern "C" { #endif #define hstrerror strerror #ifndef SIGUSR2 # define SIGUSR2 100 #endif extern void was_init(void); extern int was_init_state(void); extern WSADATA * was_data(void); /* * simple adaptors */ static inline int mingw_mkdir(const char *path, int mode) { return mkdir(path); } #define mkdir mingw_mkdir static inline int mingw_unlink(const char *pathname) { /* read-only files cannot be removed */ chmod(pathname, 0666); return unlink(pathname); } #define unlink mingw_unlink /* * implementations of missing functions */ unsigned int sleep (unsigned int seconds); char *mingw_getcwd(char *pointer, int len); #define getcwd mingw_getcwd char *mingw_getenv(const char *name); #define getenv mingw_getenv int mingw_rename(const char*, const char*); #define rename mingw_rename #ifndef SHUT_WR # define SHUT_WR SD_SEND #endif #ifndef SHUT_RD # define SHUT_RD SD_RECEIVE #endif #ifndef SHUT_RDWR # define SHUT_RDWR SD_BOTH #endif int nanosleep (const struct timespec *req, struct timespec *rem); int socketpair(int family, int type, int protocol, int *sv); /* uname */ #define UTSNAME_MAX_ 257 struct utsname { char sysname[UTSNAME_MAX_]; char nodename[UTSNAME_MAX_]; char release[UTSNAME_MAX_]; char version[UTSNAME_MAX_]; char machine[UTSNAME_MAX_]; }; int uname(struct utsname *name); /* getrusage */ #define RUSAGE_SELF 0 #define RUSAGE_CHILDREN (-1) struct rusage { struct timeval ru_utime; struct timeval ru_stime; }; int getrusage(int who, struct rusage *usage); /* fsync, fdatasync */ #include #define fsync _commit #define fdatasync fsync #ifdef __cplusplus } #endif #endif flrig-2.0.04/src/include/serial.h0000664000175000017500000001347414502720371013477 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // SerialComm.h: interface for the Cserial class. // ////////////////////////////////////////////////////////////////////// #ifndef SERIAL_H #define SERIAL_H #include extern bool SERIALDEBUG; #ifndef __WIN32__ #include class Cserial { public: Cserial(); ~Cserial(); //Methods bool OpenPort(); bool CheckPort(std::string); bool IsOpen() { return fd < 0 ? 0 : 1; }; void ClosePort(); void Device (std::string dev) { device = dev;}; std::string Device() { return device;}; void set_attributes(); void Baud(int b) { baud = b; set_attributes(); }; int Baud() { return baud;}; void Timeout(int tm) { timeout = tm;} int Timeout() { return timeout; } void Retries(int r) { retries = r;} int Retries() { return retries;} void RTS(bool r){rts = r; set_attributes(); } bool RTS(){return rts;} void setRTS(bool r); void RTSptt(bool b){rtsptt = b;} bool RTSptt(); void DTR(bool d){ dtr = d; set_attributes(); } bool DTR(){return dtr;} void setDTR(bool d); void DTRptt(bool b){ dtrptt = b; } bool DTRptt(); void RTSCTS(bool b){ rtscts = b; set_attributes(); } bool RTSCTS(){return rtscts;} void SetPTT(bool b); bool getPTT(); void Stopbits(int n) { stopbits = (n == 1 ? 1 : 2); set_attributes(); } int Stopbits() { return stopbits;} int ReadBuffer (std::string &buffer, int nbr, std::string find1 = "", std::string find2 = ""); int WriteBuffer(const char *str, int nbr); bool WriteByte(char bybyte); void FlushBuffer(); int failed() { return failed_; } void failed(int n) { switch (n) { case -1 : if (failed_) --failed_; break; case 0 : failed_ = 0; break; case 1 : ++failed_; break; default: break; } } private: //Members std::string device; int fd; int baud; int speed; struct termios oldtio, newtio; int timeout; int retries; int state, origstate; bool dtr; bool dtrptt; bool rts; bool rtsptt; bool rtscts; bool serptt; int stopbits; unsigned char uctemp[4096]; int bytes_written; int failed_; //Methods bool IOselect(); }; //============================================================================= // MINGW serial port implementation //============================================================================= #else //__WIN32__ #include "compat.h" class Cserial { public: Cserial(); Cserial(std::string portname); ~Cserial(); //Methods bool OpenPort(); bool IsOpen(); bool CheckPort(std::string); void ClosePort(); bool ConfigurePort(DWORD BaudRate,BYTE ByteSize,DWORD fParity,BYTE Parity,BYTE StopBits); bool IsBusy() { return busyflag; }; void IsBusy(bool val) { busyflag = val; }; bool ReadByte(char &resp); DWORD GetBytesRead(); bool WriteByte(char bybyte); DWORD GetBytesWritten(); int ReadBuffer (std::string &buffer, int nbr, std::string find1 = "", std::string find2 = ""); int WriteBuffer(const char *str, int nbr); bool SetCommunicationTimeouts(DWORD ReadIntervalTimeout,DWORD ReadTotalTimeoutMultiplier,DWORD ReadTotalTimeoutConstant,DWORD WriteTotalTimeoutMultiplier,DWORD WriteTotalTimeoutConstant); bool SetCommTimeout(); void Timeout(int tm) { timeout = tm; return; }; int Timeout() { return timeout; }; void FlushBuffer(); void Device (std::string dev) { device = dev;}; std::string Device() { return device;}; void Baud(int b) { baud = b; ConfigurePort( baud, 8, false, NOPARITY, stopbits); } int Baud() { return baud;}; void Retries(int r) { retries = r;} int Retries() { return retries;} void RTS(bool r){rts = r; ConfigurePort( baud, 8, false, NOPARITY, stopbits); } bool RTS(){return rts;} void setRTS(bool b); void RTSptt(bool b){rtsptt = b;} bool RTSptt(); void DTR(bool d){dtr = d; ConfigurePort( baud, 8, false, NOPARITY, stopbits); } bool DTR(){return dtr;} void setDTR(bool b); void DTRptt(bool b){dtrptt = b;} bool DTRptt(); void RTSCTS(bool b){rtscts = b; ConfigurePort( baud, 8, false, NOPARITY, stopbits); } bool RTSCTS(){return rtscts;} void SetPTT(bool b); bool getPTT(); void Stopbits(int n) {stopbits = (n == 1 ? 1 : 2); ConfigurePort( baud, 8, false, NOPARITY, stopbits); } int Stopbits() { return stopbits;} int failed() { return failed_; } void failed(int n) { switch (n) { case -1 : if (failed_) --failed_; break; case 0 : failed_ = 0; break; case 1 : ++failed_; break; default: break; } } //Members private: std::string device; //For use by CreateFile HANDLE hComm; //DCB Defined in WinBase.h DCB dcb; COMMTIMEOUTS CommTimeoutsSaved; COMMTIMEOUTS CommTimeouts; //Is the Port Ready? bool bPortReady; //Number of Bytes Written to port DWORD nBytesWritten; //Number of Bytes Read from port DWORD nBytesRead; //Number of bytes Transmitted in the cur session DWORD nBytesTxD; int timeout; bool busyflag; int baud; int retries; bool dtr; bool dtrptt; bool rts; bool rtsptt; bool rtscts; bool serptt; int stopbits; unsigned char uctemp[4096]; int failed_; }; #endif // __WIN32__ #endif // SERIAL_H flrig-2.0.04/src/include/cwio.h0000664000175000017500000000402214502720371013146 00000000000000// --------------------------------------------------------------------- // cwio.cxx -- morse code modem // // Copyright (C) 2020 // Dave Freese, W1HKJ // // This file is part of flrig // // flrig is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // --------------------------------------------------------------------- #ifndef _CWIO_H #define _CWIO_H #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include "morse.h" #include "serial.h" #include "threads.h" enum { NONE, START, ADD, SEND, END, TERMINATE, CALIBRATE, KEYDOWN }; extern Fl_Double_Window *cwio_keyer_dialog; extern Fl_Double_Window *cwio_editor; extern Fl_Double_Window *cwio_configure; extern pthread_mutex_t cwio_text_mutex; extern std::string cwio_text; extern int cwio_process; extern Cserial *cwio_serial; extern Cmorse *morse; extern void send_cwkey(int c); extern int open_cwkey(); extern void close_cwkey(); extern void reset_cwioport(); extern int start_cwio_thread(); extern void stop_cwio_thread(); extern void add_cwio(std::string); extern void send_text(bool); extern void cwio_clear_text(); extern void msg_cb(int n); extern void label_cb(int n); extern void exec_msg(int n); extern void cancel_edit(); extern void apply_edit(); extern void done_edit(); extern void control_function_keys(); extern void calibrate_cwio(); extern void open_cwio_config(); extern void add_cwio(std::string); extern void cwio_key(bool state); #endif flrig-2.0.04/src/include/fskioUI.h0000664000175000017500000000616014502720371013563 00000000000000// generated by Fast Light User Interface Designer (fluid) version 1.0308 #ifndef fskioUI_h #define fskioUI_h #include #include "config.h" #include "compat.h" #include extern Fl_Double_Window *fsklog_viewer; #include #include "status.h" #include "fsk.h" #include "ValueSlider.h" extern Fl_Input2 *FSK_txt_to_send; #include #include extern Fl_Button *btn_fskio_config; extern Fl_Button *btn_fskio_clear; #include extern Fl_Light_Button *btn_fskioSEND; extern Fl_Button *FSK_btn_msg[12]; Fl_Double_Window* fskio_window(); #include #include #include "flinput2.h" extern Fl_Input2 *FSK_edit_label[12]; extern Fl_Input2 *FSK_edit_msg[12]; extern Fl_Button *FSK_btn_cancel_edit; extern Fl_Button *FSK_btn_apply_edit; extern Fl_Button *FSK_btn_FSK_done_edit; Fl_Double_Window* FSK_make_message_editor(); #include "combo.h" extern Fl_ComboBox *select_fskioPORT; extern Fl_Light_Button *btn_fskioCONNECT; #include extern Fl_Check_Button *btn_fskioCAT; extern Fl_Check_Button *btn_fskioAUX; extern Fl_Check_Button *btn_fskioSEP; extern Fl_Check_Button *btn_fskioSHARED; extern Fl_Check_Button *btn_fskioINVERTED; extern Fl_Check_Button *btn_fskioSTOPBITS; extern Fl_ListBox *listbox_fskioKEYLINE; #include extern Fl_Spinner *cntr_fskioPTT; #include extern Fl_Counter *fsk_idles; Fl_Double_Window* fskio_config_dialog(); #include extern Fl_Menu_Bar *FSKlog_menubar; #include extern Fl_Output *txt_fsklog_file; extern Fl_Group *fsk_grp_qso_data; extern Fl_Input2 *fsk_op_freq; extern Fl_Button *btn_fsklog_clear_qso; extern Fl_Button *btn_fsklog_save_qso; extern Fl_Button *btn_fsklog_edit_entry; extern Fl_Button *btn_fsklog_delete_entry; extern Fl_Input2 *fsk_date; extern Fl_Input2 *fsk_time; extern Fl_Input2 *fsk_rst_out; extern Fl_Input2 *fsk_rst_in; extern Fl_Input2 *fsk_xchg_in; extern Fl_Counter *cntr_fsk_log_nbr; extern Fl_Input2 *fsk_op_name; extern Fl_Input2 *fsk_op_call; extern Fl_Button *btn_fsk_datetime; extern Fl_Button *btn_fsk_time; extern Fl_Button *btn_fsk_freq; extern Fl_Button *btn_fsk_call; extern Fl_Button *btn_fsk_name; extern Fl_Button *btn_fsk_in; extern Fl_Button *btn_fsk_out; extern Fl_Button *btn_fsk_sent_nbr; extern Fl_Button *btn_fsk_exchange; #include extern Fl_Browser *brwsr_fsklog_entries; Fl_Double_Window* new_fsklogbook_dialog(); extern unsigned char menu_FSKlog_menubar_i18n_done; extern Fl_Menu_Item menu_FSKlog_menubar[]; #define FSKlog_menu (menu_FSKlog_menubar+0) #define fsklog_fsk_menu_open (menu_FSKlog_menubar+1) #define fsklog_fsk_menu_new (menu_FSKlog_menubar+2) #define fsklog_fsk_menu_save (menu_FSKlog_menubar+3) #define fsklog_fsk_menu_save_as (menu_FSKlog_menubar+4) #define fsklog_fsk_menu_export_adif (menu_FSKlog_menubar+5) #define fsklog_fsk_menu_import_adif (menu_FSKlog_menubar+6) #define fsklog_fsk_menu_dupcheck (menu_FSKlog_menubar+9) #define fsklog_fsk_menu_leading_zeros (menu_FSKlog_menubar+10) #define fsklog_fsk_menu_cut_numbers (menu_FSKlog_menubar+11) #endif flrig-2.0.04/src/include/fsk.h0000664000175000017500000000733614502720371013003 00000000000000// ---------------------------------------------------------------------------- // fsk.cxx -- FSK signal generator // // Copyright (C) 2021 // Dave Freese, W1HKJ // // This file is part of flrig. // // flrig is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #include #include #include #include #include "serial.h" #include "threads.h" #ifndef FSK_H #define FSK_H enum {FSK_USES_FSK, FSK_USES_CAT, FSK_USES_AUX, FSK_USES_SEP, FSK_USES_CWIO}; class FSK { // time (msec) for one symbollen @ 45.45 baud //#define BITLEN 0.022 #define FSK_UNKNOWN 0x000 #define FSK_LETTERS 0x100 #define FSK_FIGURES 0x200 #define LTRS 0x1F #define FIGS 0x1B #define FSK_MARK 0 #define FSK_SPACE 1 public: FSK(); ~FSK(); bool open(); bool close(); void abort(); bool sending(); void shift_on_space(bool b) { _shift_on_space = b; } bool shift_on_space() { return _shift_on_space; } void dtr(bool b) { _dtr = b; } bool dtr() { return _dtr; } void rts(bool b) { _dtr = !b; } bool rts() { return !_dtr; } void reverse(bool b) { _reverse = b; } bool reverse() { return _reverse; } void open_port(std::string device_name); void device(std::string device_name) { serial_device = device_name; } void fsk_shares_port(Cserial *shared_device); // size_t io_timer_id; private: std::string serial_device; bool shared_port; // default is false static char letters[]; static char figures[]; static const char *ascii[]; int shift; bool _shift_on_space; bool _dtr; bool _reverse; int idles; int mode; int shift_state; int start_bits; int stop_bits; int chr_bits; int chr_out; double BITLEN; double now(); int sleep (double sleep_time); void send_baudot(int); int baudot_enc(int); void fsk_out (bool); public: std::string str_buff; int callback_method(); int init_fsk_thread(); void exit_fsk_thread(); bool fsk_loop_terminate; pthread_t fsk_thread; friend void *fsk_loop(void *data); }; //---------------------------------------------------------------------- #include #include enum { FSK_NONE, FSK_START, FSK_ADD, FSK_SEND, FSK_END, FSK_TERMINATE }; extern Fl_Double_Window *FSK_keyer_dialog; extern Fl_Double_Window *FSK_editor; extern Fl_Double_Window *FSK_configure; extern pthread_mutex_t FSK_text_mutex; extern std::string FSK_text; extern int FSK_process; extern Cserial *FSK_serial; extern void FSK_send(int c); extern int FSK_open_port(); extern void FSK_close_port(); extern void FSK_reset_port(); extern int FSK_start_thread(); extern void FSK_stop_thread(); extern void FSK_add(std::string); extern void FSK_send_text(bool); extern void FSK_clear_text(); extern void FSK_msg_cb(int n); extern void FSK_label_cb(int n); extern void FSK_exec_msg(int n); extern void FSK_cancel_edit(); extern void FSK_apply_edit(); extern void FSK_done_edit(); extern void FSK_control_function_keys(); extern void FSK_open_config(); #endif flrig-2.0.04/src/include/rigs.h0000664000175000017500000001742414502720371013163 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014, 2020 // David Freese, W1HKJ // Michael Black W9MDB // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef RIGS_H #define RIGS_H #include "rigbase.h" #include "other/AOR5K.h" #include "icom/ICbase.h" #include "icom/IC703.h" #include "icom/IC705.h" #include "icom/IC706MKIIG.h" #include "icom/IC718.h" #include "icom/IC728.h" #include "icom/IC735.h" #include "icom/IC746.h" #include "icom/IC751.h" #include "icom/IC756.h" #include "icom/IC756PRO2.h" #include "icom/IC756PRO3.h" #include "icom/IC910.h" #include "icom/IC7000.h" #include "icom/IC7100.h" #include "icom/IC7410.h" #include "icom/IC7200.h" #include "icom/IC7300.h" #include "icom/IC7600.h" #include "icom/IC7610.h" #include "icom/IC7700.h" #include "icom/IC7800.h" #include "icom/IC7851.h" #include "icom/IC9100.h" #include "icom/IC9700.h" #include "icom/ICF8101.h" #include "icom/ICR71.h" #include "elad/FDMDUO.h" #include "elecraft/K2.h" #include "elecraft/K3.h" #include "elecraft/KX3.h" #include "elecraft/K4.h" #include "lab599/TX500.h" #include "kenwood/TS140.h" #include "kenwood/TS440.h" #include "kenwood/TS450S.h" #include "kenwood/TS480HX.h" #include "kenwood/TS480SAT.h" #include "kenwood/TS570.h" #include "kenwood/TS590S.h" #include "kenwood/TS590SG.h" #include "kenwood/TS790.h" #include "kenwood/TS850.h" #include "kenwood/TS870S.h" #include "kenwood/TS890S.h" #include "kenwood/TS940S.h" #include "kenwood/TS950.h" #include "kenwood/TS990.h" #include "kenwood/TS2000.h" #include "other/AOR5K.h" #include "other/PCR1000.h" #include "other/RAY152.h" #include "other/TMD710.h" #include "other/FLEX1500.h" #include "other/PowerSDR.h" #include "other/SmartSDR.h" #include "tentec/TT516.h" #include "tentec/DELTA-II.h" #include "tentec/TT538.h" #include "tentec/TT550.h" #include "tentec/TT563.h" #include "tentec/TT566.h" #include "tentec/TT588.h" #include "tentec/TT599.h" #include "yaesu/FT100D.h" #include "yaesu/FT450.h" #include "yaesu/FT450D.h" #include "yaesu/FT710.h" #include "yaesu/FT736R.h" #include "yaesu/FT747.h" #include "yaesu/FT767.h" #include "yaesu/FT817.h" #include "yaesu/FT817BB.h" #include "yaesu/FT818.h" #include "yaesu/FT847.h" #include "yaesu/FT757GX2.h" #include "yaesu/FT857D.h" #include "yaesu/FT890.h" #include "yaesu/FT891.h" #include "yaesu/FT900.h" #include "yaesu/FT920.h" #include "yaesu/FT950.h" #include "yaesu/FT990.h" #include "yaesu/FT990a.h" #include "yaesu/FT991.h" #include "yaesu/FT991A.h" #include "yaesu/FT1000.h" #include "yaesu/FT1000MP.h" #include "yaesu/FT1000MP_A.h" #include "yaesu/FT2000.h" #include "yaesu/FTdx10.h" #include "yaesu/FTdx101D.h" #include "yaesu/FTdx1200.h" #include "yaesu/FTdx3000.h" #include "yaesu/FTdx9000.h" #include "yaesu/FT5000.h" #include "xiegu/Xiegu-5105.h" #include "xiegu/Xiegu-G90.h" #include "xiegu/X6100.h" #include "other/sunsdr2.h" #include "other/tcisdr.h" #include "other/trusdx.h" #include "qrp_labs/QCXplus.h" #include "qrp_labs/QDX.h" #include "qrp_labs/QMX.h" extern rigbase rig_null; // 0 extern RIG_FDMDUO rig_FDMDUO; // 1 extern RIG_FT100D rig_FT100D; // 2 extern RIG_FT450 rig_FT450; // 3 extern RIG_FT450D rig_FT450D; // 4 extern RIG_FT710 rig_FT710; // 5 extern RIG_FT747 rig_FT747; // 6 extern RIG_FT736R rig_FT736R; // 7 extern RIG_FT757GX2 rig_FT757GX2; // 8 extern RIG_FT767 rig_FT767; // 9 extern RIG_FT817 rig_FT817; // 10 extern RIG_FT817BB rig_FT817BB; // 11 extern RIG_FT818ND rig_FT818ND; // 12 extern RIG_FT847 rig_FT847; // 13 extern RIG_FT857D rig_FT857D; // 14 extern RIG_FT890 rig_FT890; // 15 extern RIG_FT891 rig_FT891; // 16 extern RIG_FT897D rig_FT897D; // 17 extern RIG_FT900 rig_FT900; // 18 extern RIG_FT920 rig_FT920; // 19 extern RIG_FT950 rig_FT950; // 20 extern RIG_FT990 rig_FT990; // 21 extern RIG_FT990A rig_FT990A; // 22 extern RIG_FT991 rig_FT991; // 23 extern RIG_FT991A rig_FT991A; // 24 extern RIG_FT1000 rig_FT1000; // 25 extern RIG_FT1000MP rig_FT1000MP; // 26 extern RIG_FT1000MP_A Rig_FT1000MP_A; // 27 extern RIG_FT2000 rig_FT2000; // 28 extern RIG_FTdx10 rig_FTdx10; // 29 extern RIG_FTdx101D rig_FTdx101D; // 30 extern RIG_FTdx101MP rig_FTdx101MP; // 21 extern RIG_FTdx1200 rig_FTdx1200; // 32 extern RIG_FTdx3000 rig_FTdx3000; // 33 extern RIG_FT5000 rig_FT5000; // 34 extern RIG_FTdx9000 rig_FTdx9000; // 35 extern RIG_IC703 rig_IC703; // 36 extern RIG_IC705 rig_IC705; // 37 extern RIG_IC706MKIIG rig_IC706MKIIG; // 38 extern RIG_IC718 rig_IC718; // 39 extern RIG_IC728 rig_IC728; // 40 extern RIG_IC735 rig_IC735; // 31 extern RIG_IC746 rig_IC746; // 42 extern RIG_IC746PRO rig_IC746PRO; // 43 extern RIG_IC751 rig_IC751; // 44 extern RIG_IC756 rig_IC756; // 45 extern RIG_IC756PRO rig_IC756PRO; // 46 extern RIG_IC756PRO2 rig_IC756PRO2; // 47 extern RIG_IC756PRO3 rig_IC756PRO3; // 48 extern RIG_IC7000 rig_IC7000; // 49 extern RIG_IC7100 rig_IC7100; // 50 extern RIG_IC7200 rig_IC7200; // 51 extern RIG_IC7300 rig_IC7300; // 52 extern RIG_IC7410 rig_IC7410; // 53 extern RIG_IC7600 rig_IC7600; // 54 extern RIG_IC7610 rig_IC7610; // 55 extern RIG_IC7700 rig_IC7700; // 56 extern RIG_IC7800 rig_IC7800; // 57 extern RIG_IC7851 rig_IC7851; // 58 extern RIG_IC9100 rig_IC9100; // 59 extern RIG_IC9700 rig_IC9700; // 60 extern RIG_IC910H rig_IC910H; // 61 extern RIG_ICF8101 rig_ICF8101; // 62 extern RIG_ICR71 rig_ICR71; // 63 extern RIG_K2 rig_K2; // 64 extern RIG_K3 rig_K3; // 65 extern RIG_KX3 rig_KX3; // 66 extern RIG_KX2 rig_KX2; // 67 extern RIG_K4 rig_K4; // 68 extern RIG_PCR1000 rig_PCR1000; // 69 extern RIG_RAY152 rig_RAY152; // 70 extern RIG_TMD710 rig_TMD710; // 71 extern RIG_TS440 rig_TS440; // 72 extern RIG_TS140 rig_TS140; // 73 extern RIG_TS450S rig_TS450S; // 74 extern RIG_TS480HX rig_TS480HX; // 75 extern RIG_TS480SAT rig_TS480SAT; // 76 extern RIG_TS570 rig_TS570; // 77 extern RIG_TS590S rig_TS590S; // 78 extern RIG_TS590SG rig_TS590SG; // 79 extern RIG_TS790 rig_TS790; // 80 extern RIG_TS850 rig_TS850; // 81 extern RIG_TS870S rig_TS870S; // 82 extern RIG_TS890S rig_TS890S; // 83 extern RIG_TS940S rig_TS940S; // 84 extern RIG_TS950 rig_TS950; // 85 extern RIG_TS990 rig_TS990; // 86 extern RIG_TS2000 rig_TS2000; // 87 extern RIG_TT516 rig_TT516; // 88 extern RIG_TT535 rig_TT535; // 89 extern RIG_TT538 rig_TT538; // 90 extern RIG_TT550 rig_TT550; // 91 extern RIG_TT563 rig_TT563; // 92 extern RIG_TT566 rig_TT566; // 93 extern RIG_TT588 rig_TT588; // 94 extern RIG_TT599 rig_TT599; // 85 extern RIG_AOR5K rig_AOR5K; // 96 extern RIG_XI5105 rig_XI5105; // 97 extern RIG_Xiegu_G90 rig_XIG90; // 98 extern RIG_X6100 rig_X6100; // 99 extern RIG_PowerSDR rig_PowerSDR; // 100 extern RIG_FLEX1500 rig_FLEX1500; // 101 extern RIG_TX500 rig_TX500; // 102 extern RIG_QCXP rig_QCXP; // 103 extern RIG_QDX rig_qdx; // 104 extern RIG_QMX rig_qmx; // 105 extern RIG_SDR2_PRO rig_sdr2; // 106 extern RIG_TCI_SUNDX rig_tci_sundx; // 107 extern RIG_TCI_SUNPRO rig_tci_sunpro; // 108 extern RIG_TRUSDX rig_trusdx; // 109 extern RIG_SmartSDR rig_smartsdr; // 110 #endif flrig-2.0.04/src/include/fileselect.h0000664000175000017500000000324414502720371014331 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FILESELECT_H #define FILESELECT_H #ifdef __WIN32__ # define FSEL_THREAD 1 #endif class Fl_Native_File_Chooser; class FSEL { public: static void create(void); static void destroy(void); static const char* select(const char* title, const char* filter, const char* def = 0, int* fsel = 0); static const char* saveas(const char* title, const char* filter, const char* def = 0, int* fsel = 0); static const char* dir_select(const char* title, const char* filter, const char* def = 0); ~FSEL(); private: FSEL(); FSEL(const FSEL&); FSEL& operator=(const FSEL&); const char* get_file(void); #if FSEL_THREAD static void* thread_func(void* arg); #endif private: static FSEL* inst; Fl_Native_File_Chooser* chooser; int result; }; #endif // FILESELECT_H flrig-2.0.04/src/include/rig.h0000664000175000017500000000442114502720371012771 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _Rig_H #define _Rig_H #include "config.h" #ifndef WIN32 #include #include #include "compat.h" // Must precede all FL includes #endif #include #include #include "threads.h" #include "FreqControl.h" #include "rigpanel.h" #include "rig_io.h" #include "serial.h" #include #include #include #include #include #include #include //#include "support.h" //#include "xml_io.h" extern Fl_Double_Window *mainwindow; extern Fl_Double_Window *tabs_dialog; extern Fl_Double_Window *meter_filters; extern Fl_Double_Window *meter_scale_dialog; extern Fl_Double_Window* meters_dialog; extern std::string HomeDir; extern std::string RigHomeDir; extern std::string TempDir; extern std::string rigfile; extern std::string pttfile; extern int xmlport; extern std::string defFileName; extern std::string title; extern pthread_t *serial_thread; extern pthread_t *digi_thread; extern pthread_mutex_t mutex_serial; extern pthread_mutex_t mutex_xmlrpc; extern pthread_mutex_t mutex_vfoque; extern pthread_mutex_t mutex_ptt; extern pthread_mutex_t mutex_replystr; extern pthread_mutex_t mutex_srvc_reqs; extern pthread_mutex_t mutex_trace; extern bool EXPAND_CONTROLS; extern void cb_xml_help(Fl_Menu_*, void*); enum UISIZE {small_ui, wide_ui, touch_ui}; #endif flrig-2.0.04/src/include/flrigrc.h0000664000175000017500000000166714502720371013651 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // MS include file for application icon #define IDI_ICON 101 flrig-2.0.04/src/include/WSclient.h0000664000175000017500000000673014502720371013745 00000000000000// --------------------------------------------------------------------- // // WSclient, a part of flrig // // Copyright (C) 2022 // Dave Freese, W1HKJ // // This code is derived from: // https://github.com/dhbaird/easywsclient // // This library is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more detailrx. // // You should have received a copy of the GNU General Public License // along with the program; if not, write to the // // Free Software Foundation, Inc. // 51 Franklin Street, Fifth Floor // Boston, MA 02110-1301 USA. // // --------------------------------------------------------------------- #ifndef WSCLIENT_HP #define WSCLIENT_HP #include #include #ifdef __WIN32__ typedef unsigned char uint8_t; #else #include #endif namespace WSclient { struct Callback_Imp { virtual void operator()(const std::string& message) = 0; }; struct BytesCallback_Imp { virtual void operator()(const std::vector& message) = 0; }; class WebSocket { public: typedef WebSocket * pointer; typedef enum readyStateValues { CLOSING, CLOSED, CONNECTING, OPEN } readyStateValues; // Factories: static pointer create_dummy(); static pointer from_url(const std::string& url, const std::string& origin = std::string()); static pointer from_url_no_mask(const std::string& url, const std::string& origin = std::string()); // Interfaces: virtual ~WebSocket() { } virtual void poll(int timeout = 0) = 0; // timeout in milliseconds virtual void send(const std::string& message) = 0; virtual void sendBinary(const std::string& message) = 0; virtual void sendBinary(const std::vector& message) = 0; virtual void sendPing() = 0; virtual void close() = 0; virtual readyStateValues getReadyState() const = 0; template void dispatch(Callable callable) // For callbacks that accept a string argument. { // N.B. this is compatible with both C++11 lambdas, functors and C function pointers struct _Callback : public Callback_Imp { Callable& callable; _Callback(Callable& callable) : callable(callable) { } void operator()(const std::string& message) { callable(message); } }; _Callback callback(callable); _dispatch(callback); } template void dispatchBinary(Callable callable) // For callbacks that accept a std::vector argument. { // N.B. this is compatible with both C++11 lambdas, functors and C function pointers struct _Callback : public BytesCallback_Imp { Callable& callable; _Callback(Callable& callable) : callable(callable) { } void operator()(const std::vector& message) { callable(message); } }; _Callback callback(callable); _dispatchBinary(callback); } protected: virtual void _dispatch(Callback_Imp& callable) = 0; virtual void _dispatchBinary(BytesCallback_Imp& callable) = 0; }; } // namespace WSclient #endif /* EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD */ flrig-2.0.04/src/include/lab599/0000775000175000017500000000000014511461606013126 500000000000000flrig-2.0.04/src/include/lab599/TX500.h0000664000175000017500000000654514502041135014000 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TX500_H #define _TX500_H #include "rigbase.h" class RIG_TX500 : public rigbase { public: enum TX500MODES { LSB, USB, CW, FM, AM, DIG, CWR }; RIG_TX500(); ~RIG_TX500(){} unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); bool can_split() { return true;} void set_split(bool val); int get_split(); bool twovfos() {return true;} int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); bool check(); int get_smeter(); void set_PTT_control(int val); int get_PTT(); void initialize(); // void shutdown(); // double get_power_control(); // void set_power_control(double val); // void get_pc_min_max_step(double &min, double &max, double &step) { // min = 5; pmax = max = 100; step = 1; } // int get_power_out(); // void set_PTT_control(int val); // void set_bwA(int val); // int get_bwA(); // void set_bwB(int val); // int get_bwB(); // int def_bandwidth(int); // int adjust_bandwidth(int val); // int set_widths(int val); // int get_swr(); // int get_alc(); // void select_swr(); // void select_alc(); // void set_volume_control(int val); // int get_volume_control(); // void tune_rig(); // void set_if_shift(int val); // bool get_if_shift(int &val); // void get_if_min_max_step(int &min, int &max, int &step); // void set_notch(bool on, int val); // bool get_notch(int &val); // void get_notch_min_max_step(int &min, int &max, int &step); // void set_auto_notch(int v); // int get_auto_notch(); // void set_noise_reduction_val(int val); // int get_noise_reduction_val(); // void set_noise_reduction(int val); // int get_noise_reduction(); // void get_nr_min_max_step(int &min, int &max, int &step) { // min = 0; max = 9; step = 1; } // void set_noise(bool b); // int get_noise(); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); // void set_rf_gain(int val); // int get_rf_gain(); // void get_rf_min_max_step(int &min, int &max, int &step) { // min = 0; max = 100; step = 1; } // bool tuning(); // bool sendTScommand(string, int, bool); // std::vector& bwtable(int); // std::vector& lotable(int); // std::vector& hitable(int); // const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/gettext.h0000664000175000017500000002362114502720371013677 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ----------------------------------------------------------------------------- // Convenience header for conditional use of GNU . // Copyright (C) 1995-1998, 2000-2002, 2004-2006 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published // by the Free Software Foundation; either version 2, or (at your option) // any later version. //------------------------------------------------------------------------------ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option. */ #if ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. We don't include as well because people using "gettext.h" will not include , and also including would fail on SunOS 4, whereas is OK. */ #if defined(__sun) # include #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include , which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include # if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H # include # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # define gettext(Msgid) ((const char *) (Msgid)) # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N)) # define textdomain(Domainname) ((const char *) (Domainname)) # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String /* The separator between msgctxt and msgid in a .mo file. */ #define GETTEXT_CONTEXT_GLUE "\004" /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be short and rarely need to change. The letter 'p' stands for 'particular' or 'special'. */ #ifdef DEFAULT_TEXT_DOMAIN # define pgettext(Msgctxt, Msgid) \ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #else # define pgettext(Msgctxt, Msgid) \ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #endif #define dpgettext(Domainname, Msgctxt, Msgid) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) #ifdef DEFAULT_TEXT_DOMAIN # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #else # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #endif #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * pgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) return msgid; else return translation; } #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * npgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); if (translation == msg_ctxt_id || translation == msgid_plural) return (n == 1 ? msgid : msgid_plural); else return translation; } /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID can be arbitrary expressions. But for string literals these macros are less efficient than those above. */ #include #define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \ /* || __STDC_VERSION__ >= 199901L */ ) #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #include #endif #define pgettext_expr(Msgctxt, Msgid) \ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) #define dpgettext_expr(Domainname, Msgctxt, Msgid) \ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (translation != msg_ctxt_id) return translation; } return msgid; } #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcnpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (!(translation == msg_ctxt_id || translation == msgid_plural)) return translation; } return (n == 1 ? msgid : msgid_plural); } #if ENABLE_NLS #define _(String) gettext (String) #define N_(String) gettext_noop (String) #else #define _(String) (String) #define N_(String) String #endif #if ENABLE_NLS int setup_nls(void); unused__ static const int nls_init_ = setup_nls(); #endif #endif /* _LIBGETTEXT_H */ flrig-2.0.04/src/include/cwioUI.h0000664000175000017500000000717414502720371013417 00000000000000// generated by Fast Light User Interface Designer (fluid) version 1.0308 #ifndef cwioUI_h #define cwioUI_h #include #include extern Fl_Double_Window *cwlog_viewer; #include #include "status.h" #include "cwio.h" #include "ValueSlider.h" #include "flinput2.h" extern Fl_Input2 *txt_to_send; #include #include "flslider2.h" extern Fl_Value_Slider2 *sldr_cwioWPM; #include extern Fl_Button *btn_cwio_config; extern Fl_Button *btn_cwio_clear; #include extern Fl_Light_Button *btn_cwioKEY; extern Fl_Light_Button *btn_cwioSEND; extern Fl_Button *btn_msg[12]; extern Fl_Button *btn_view_cwlog; Fl_Double_Window* new_cwio_dialog(); #include #include extern Fl_Input2 *edit_label[12]; extern Fl_Input2 *edit_msg[12]; #include "combo.h" extern Fl_ListBox *listbox_BT; extern Fl_ListBox *listbox_AA; extern Fl_ListBox *listbox_AS; extern Fl_ListBox *listbox_AR; extern Fl_ListBox *listbox_SK; extern Fl_ListBox *listbox_KN; extern Fl_ListBox *listbox_INT; extern Fl_ListBox *listbox_HM; extern Fl_ListBox *listbox_VE; extern Fl_Button *btn_start_xmt; extern Fl_Button *btn_end_xmt; extern Fl_Button *btn_append_call; extern Fl_Button *btn_append_name; extern Fl_Button *btn_append_rst; extern Fl_Button *btn_cancel_edit; extern Fl_Button *btn_apply_edit; extern Fl_Button *btn_done_edit; extern Fl_Button *btn_append_contest_nbr; extern Fl_Button *btn_append_decr; extern Fl_Button *btn_append_incr; Fl_Double_Window* new_message_editor(); extern Fl_ComboBox *select_cwioPORT; extern Fl_Light_Button *btn_cwioCONNECT; #include extern Fl_Check_Button *btn_cwioCAT; extern Fl_Check_Button *btn_cwioAUX; extern Fl_Check_Button *btn_cwioSEP; extern Fl_ListBox *listbox_cwioKEYLINE; #include extern Fl_Spinner *cntr_cwioPTT; extern Fl_Light_Button *btn_cw_dtr_calibrate; #include extern Fl_Counter *cnt_cwio_comp; extern Fl_Check_Button *btn_cwioINVERTED; extern Fl_Counter *cnt_cwio_keycorr; Fl_Double_Window* new_cwio_config_dialog(); #include extern Fl_Menu_Bar *CWlog_menubar; #include extern Fl_Output *txt_cwlog_file; extern Fl_Group *cw_grp_qso_data; extern Fl_Input2 *cw_freq; extern Fl_Button *btn_cwlog_clear_qso; extern Fl_Button *btn_cwlog_save_qso; extern Fl_Button *btn_cwlog_edit_entry; extern Fl_Button *btn_cwlog_delete_entry; extern Fl_Input2 *cw_qso_date; extern Fl_Input2 *cw_qso_time; extern Fl_Input2 *cw_rst_out; extern Fl_Input2 *cw_rst_in; extern Fl_Input2 *cw_xchg_in; extern Fl_Counter *cw_log_nbr; extern Fl_Input2 *cw_op_name; extern Fl_Input2 *cw_op_call; extern Fl_Button *btn_cw_datetime; extern Fl_Button *btn_cw_time; extern Fl_Button *btn_cw_freq; extern Fl_Button *btn_cw_call; extern Fl_Button *btn_cw_name; extern Fl_Button *btn_cw_in; extern Fl_Button *btn_cw_out; extern Fl_Button *btn_cw_sent_nbr; extern Fl_Button *btn_cw_xchg; #include extern Fl_Browser *brwsr_cwlog_entries; Fl_Double_Window* new_cwlogbook_dialog(); extern unsigned char menu_CWlog_menubar_i18n_done; extern Fl_Menu_Item menu_CWlog_menubar[]; #define CWlog_files (menu_CWlog_menubar+0) #define cwlog_menu_open (menu_CWlog_menubar+1) #define cwlog_menu_new (menu_CWlog_menubar+2) #define cwlog_menu_save (menu_CWlog_menubar+3) #define cwlog_menu_save_as (menu_CWlog_menubar+4) #define cwlog_menu_export_adif (menu_CWlog_menubar+5) #define cwlog_menu_import_adif (menu_CWlog_menubar+6) #define cwlog_menu_dupcheck (menu_CWlog_menubar+9) #define cwlog_menu_leading_zeros (menu_CWlog_menubar+10) #define cwlog_menu_cut_numbers (menu_CWlog_menubar+11) #endif flrig-2.0.04/src/include/tmate2.h0000664000175000017500000002322414502720371013406 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // Dominik, DB1RUF // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // This interface is based on the cmedia file and uses hidapi to // communicate with the Elard TMATE 2 device // // adapt frequency step size to your transceiver in the setting menu // // ---------------------------------------------------------------------------- #ifndef TMATE2_H #define TMATE2_H //TMate 2 USB device parameters #define VID 0x1721 #define PID 0x0614 #define LCD_STRING_SIZE 44 //definitions to be compatible to the TMATE 2 SDK #define TM_ON 0x01 #define TM_OFF 0x00 //used for main segments #define SEG0L 0xD #define SEG0H 0x7 #define SEG1L 0x0 #define SEG1H 0x6 #define SEG2L 0xE #define SEG2H 0x3 #define SEG3L 0xA #define SEG3H 0x7 #define SEG4L 0x3 #define SEG4H 0x6 #define SEG5L 0xB #define SEG5H 0x5 #define SEG6L 0xF #define SEG6H 0x5 #define SEG7L 0x0 #define SEG7H 0x7 #define SEG8L 0xF #define SEG8H 0x7 #define SEG9L 0xB #define SEG9H 0x7 #define SEGAL 0x7 #define SEGAH 0x7 #define SEGBL 0xF #define SEGBH 0x4 #define SEGCL 0xD #define SEGCH 0x1 #define SEGDL 0xE #define SEGDH 0x6 #define SEGEL 0xF #define SEGEH 0x1 #define SEGFL 0x7 #define SEGFH 0x1 //used for smeter segments #define SEGSWR0L 0xF0 #define SEGSWR0H 0xA0 #define SEGSWR1L 0x60 #define SEGSWR1H 0x00 #define SEGSWR2L 0xD0 #define SEGSWR2H 0x60 #define SEGSWR3L 0xF0 #define SEGSWR3H 0x40 #define SEGSWR4L 0x60 #define SEGSWR4H 0xD0 #define SEGSWR5L 0xB0 #define SEGSWR5H 0xC0 #define SEGSWR6L 0xB0 #define SEGSWR6H 0xE0 #define SEGSWR7L 0xE0 #define SEGSWR7H 0x00 #define SEGSWR8L 0xF0 #define SEGSWR8H 0xE0 #define SEGSWR9L 0xE0 #define SEGSWR9H 0xC0 #define SEGSWRAL 0xE0 #define SEGSWRAH 0xE0 #define SEGSWRBL 0x30 #define SEGSWRBH 0xE0 #define SEGSWRCL 0x90 #define SEGSWRCH 0xA0 #define SEGSWRDL 0x70 #define SEGSWRDH 0x60 #define SEGSWREL 0x90 #define SEGSWREH 0xE0 #define SEGSWRFL 0x80 #define SEGSWRFH 0xE0 #define ENCODER1_KEY_MASK 0x0100 #define ENCODER2_KEY_MASK 0x0080 #define MAIN_ENCODER_KEY_MASK 0x0040 #define F1_KEY_PRESSED 0x0001 #define F2_KEY_PRESSED 0x0002 #define F3_KEY_PRESSED 0x0004 #define F4_KEY_PRESSED 0x0008 #define F5_KEY_PRESSED 0x0010 #define F6_KEY_PRESSED 0x0020 #define SEG_SMETER_LINE 0 #define SEG_SMETER_DB_MINUS 1 #define SEG_CW_PLUS 2 #define SEG_CW_MINUS 3 #define SEG_DIG_PLUS 4 #define SEG_DIG_MINUS 5 #define SEG_UNDERLINE_9 6 #define SEG_UNDERLINE_8 7 #define SEG_UNDERLINE_7 8 #define SEG_UNDERLINE_6 9 #define SEG_UNDERLINE_5 10 #define SEG_UNDERLINE_4 11 #define SEG_UNDERLINE_3 12 #define SEG_UNDERLINE_2 13 #define SEG_UNDERLINE_1 14 #define SEG_DOT1 15 #define SEG_DOT2 16 #define SEG_HZ 17 #define SEG_E1 18 #define SEG_ERR 19 #define SEG_E2 20 #define SEG_LP 21 #define SEG_ATT 22 #define SEG_S 23 #define SEG_VFO 24 #define SEG_NR 25 #define SEG_NB 26 #define SEG_SMETER_1 27 #define SEG_A 28 #define SEG_B 29 #define SEG_VOL 30 #define SEG_SMETER_9 31 #define SEG_SMETER_7 32 #define SEG_SMETER_5 33 #define SEG_SMETER_3 34 #define SEG_AN 35 #define SEG_RFG 36 #define SEG_SQL 37 #define SEG_DRV 38 #define SEG_SHIFT 39 #define SEG_LOW 40 #define SEG_HIGH 41 #define SEG_DSB 42 #define SEG_FM 43 #define SEG_USB 44 #define SEG_SAM 45 #define SEG_DRM 46 #define SEG_DIG 47 #define SEG_STEREO 48 #define SEG_DBM 49 #define SEG_CW 50 #define SEG_LSB 51 #define SEG_AM 52 #define SEG_SMETER_PLUS20 53 #define SEG_SMETER_PLUS40 54 #define SEG_SMETER_PLUS60 55 #define SEG_SMETER_10 56 #define SEG_SMETER_20 57 #define SEG_SMETER_40 58 #define SEG_SMETER_60 59 #define SEG_RX 60 #define SEG_TX 61 #define SEG_ATT_1 62 #define SEG_ATT_2 63 #define SEG_PRE 64 #define SEG_PRE_1 65 #define SEG_PRE_2 66 #define SEG_mW_W 67 #define SEG_mW_m 68 #define SEG_W 69 #define SEG_K 70 #define SEG_RIT 71 #define SEG_XIT 72 #define SEG_W_FM 73 #define SEG_NR2 74 #define SEG_NB2 75 #define SEG_AN2 76 #define SMETER_BAR1 77 #define SMETER_BAR2 78 #define SMETER_BAR3 79 #define SMETER_BAR4 80 #define SMETER_BAR5 81 #define SMETER_BAR6 82 #define SMETER_BAR7 83 #define SMETER_BAR8 84 #define SMETER_BAR9 85 #define SMETER_BAR10 86 #define SMETER_BAR11 87 #define SMETER_BAR12 88 #define SMETER_BAR13 89 #define SMETER_BAR14 90 #define SMETER_BAR15 91 #define SEG_MAIN_9A 92 #define SEG_MAIN_9B 93 #define SEG_MAIN_9C 94 #define SEG_MAIN_9D 95 #define SEG_MAIN_9E 96 #define SEG_MAIN_9F 97 #define SEG_MAIN_9G 98 #define SEG_MAIN_8A 99 #define SEG_MAIN_8B 100 #define SEG_MAIN_8C 101 #define SEG_MAIN_8D 102 #define SEG_MAIN_8E 103 #define SEG_MAIN_8F 104 #define SEG_MAIN_8G 105 #define SEG_MAIN_7A 106 #define SEG_MAIN_7B 107 #define SEG_MAIN_7C 108 #define SEG_MAIN_7D 109 #define SEG_MAIN_7E 110 #define SEG_MAIN_7F 111 #define SEG_MAIN_7G 112 #define SEG_MAIN_6A 113 #define SEG_MAIN_6B 114 #define SEG_MAIN_6C 115 #define SEG_MAIN_6D 116 #define SEG_MAIN_6E 117 #define SEG_MAIN_6F 118 #define SEG_MAIN_6G 119 #define SEG_MAIN_5A 120 #define SEG_MAIN_5B 121 #define SEG_MAIN_5C 122 #define SEG_MAIN_5D 123 #define SEG_MAIN_5E 124 #define SEG_MAIN_5F 125 #define SEG_MAIN_5G 126 #define SEG_MAIN_4A 127 #define SEG_MAIN_4B 128 #define SEG_MAIN_4C 129 #define SEG_MAIN_4D 130 #define SEG_MAIN_4E 131 #define SEG_MAIN_4F 132 #define SEG_MAIN_4G 133 #define SEG_MAIN_3A 134 #define SEG_MAIN_3B 135 #define SEG_MAIN_3C 136 #define SEG_MAIN_3D 137 #define SEG_MAIN_3E 138 #define SEG_MAIN_3F 139 #define SEG_MAIN_3G 140 #define SEG_MAIN_2A 141 #define SEG_MAIN_2B 142 #define SEG_MAIN_2C 143 #define SEG_MAIN_2D 144 #define SEG_MAIN_2E 145 #define SEG_MAIN_2F 146 #define SEG_MAIN_2G 147 #define SEG_MAIN_1A 148 #define SEG_MAIN_1B 149 #define SEG_MAIN_1C 150 #define SEG_MAIN_1D 151 #define SEG_MAIN_1E 152 #define SEG_MAIN_1F 153 #define SEG_MAIN_1G 154 #define SEG_SMETER_3A 155 #define SEG_SMETER_3B 156 #define SEG_SMETER_3C 157 #define SEG_SMETER_3D 158 #define SEG_SMETER_3E 159 #define SEG_SMETER_3F 160 #define SEG_SMETER_3G 161 #define SEG_SMETER_2A 162 #define SEG_SMETER_2B 163 #define SEG_SMETER_2C 164 #define SEG_SMETER_2D 165 #define SEG_SMETER_2E 166 #define SEG_SMETER_2F 167 #define SEG_SMETER_2G 168 #define SEG_SMETER_1A 169 #define SEG_SMETER_1B 170 #define SEG_SMETER_1C 171 #define SEG_SMETER_1D 172 #define SEG_SMETER_1E 173 #define SEG_SMETER_1F 174 #define SEG_SMETER_1G 175 #define LED_STATUS 32 #define BACKLIGTH_R 33 #define BACKLIGTH_G 34 #define BACKLIGTH_B 35 #define CONTRAST 36 #define LCD_REFRESH_TIME 37 #define INCR_STEP_SPEED1 38 #define INCR_STEP_SPEED2 39 #define INCR_STEP_SPEED3 40 #define THR_SPEED_1_2 41 #define THR_SPEED_2_3 42 #define CHANGE_SPEED_EVAL_TIME 43 extern void tmate2_init_hids(); extern int tmate2_open(); extern void * tmate2_thread_loop (void *d); extern void tmate2_write_smeter_display (unsigned char *lcdstring, int SmeterValue); extern void tmate2_set_segment(unsigned char *lcdstring, int lcd_mask, unsigned char status); extern void tmate2_write_main_display (unsigned char *lcdstring, int Value); extern int tmate2_set_lcd (unsigned char *bufout); extern int tmate2_read_value (unsigned short *enc1, unsigned short *enc2, unsigned short *enc3, unsigned short *keys); extern void tmate2_close(); extern int tmate2_close_connection(void); #endif flrig-2.0.04/src/include/tci_io.h0000664000175000017500000000300714502720371013455 00000000000000// --------------------------------------------------------------------- // // tci_io.hpp, a part of flrig // // Copyright (C) 2022 // Dave Freese, W1HKJ // // This library is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with the program; if not, write to the // // Free Software Foundation, Inc. // 51 Franklin Street, Fifth Floor // Boston, MA 02110-1301 USA. // // --------------------------------------------------------------------- #ifndef TCI_IO_H #define TCI_IO_H #include "WSclient.h" struct TCI_VFO { int freq; std::string bw; // lower, upper pair std::string mod; // noun name int smeter; }; struct TCI_VALS { TCI_VFO A; TCI_VFO B; int dds; int vol, sql_level, pwr; bool ptt, tune, split, sql; float tx_power, tx_swr; }; extern TCI_VALS slice_0, slice_1; extern void print_vals(TCI_VALS &slice); extern void parse_tci(std::string s); extern void tci_open(std::string address, std::string port); extern void tci_close(); extern void tci_send(std::string txt); extern bool tci_running(); #endif flrig-2.0.04/src/include/icons.h0000664000175000017500000000235714502720371013331 00000000000000#ifndef ICONS_H_ #define ICONS_H_ #define USE_IMAGE_LABELS 1 #include #include #include #include "pixmaps.h" namespace icons { const char* make_icon_label(const char* text, const char** pixmap = 0); void set_icon_label(Fl_Menu_Item* item); void set_icon_label(Fl_Widget* w); void toggle_icon_labels(void); const char* get_icon_label_text(Fl_Menu_Item* item); const char* get_icon_label_text(Fl_Widget* w); void free_icon_label(Fl_Menu_Item* item); void free_icon_label(Fl_Widget* w); void set_active(Fl_Menu_Item* item, bool v); void set_active(Fl_Widget* w, bool v); // fltk message dialogs with nicer icons void set_message_icon(const char** pixmap); } #define fl_input2(...) ({ icons::set_message_icon(dialog_question_48_icon); fl_input(__VA_ARGS__); }) #define fl_choice2(...) ({ icons::set_message_icon(dialog_question_48_icon); fl_choice(__VA_ARGS__); }) #define fl_message2(...) ({ icons::set_message_icon(dialog_information_48_icon); fl_message(__VA_ARGS__); }) #define fl_alert2(...) ({ icons::set_message_icon(dialog_warning_48_icon); fl_alert(__VA_ARGS__); }) #define fl_warn_choice2(...) ({ icons::set_message_icon(dialog_warning_48_icon); fl_choice(__VA_ARGS__); }) #endif // ICONS_H_ flrig-2.0.04/src/include/kenwood/0000775000175000017500000000000014511461606013567 500000000000000flrig-2.0.04/src/include/kenwood/TS790.h0000664000175000017500000000350714502041135014442 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS790_H #define _TS790_H #include "kenwood/KENWOOD.h" class RIG_TS790 : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; public: RIG_TS790(); ~RIG_TS790(){} void initialize(); void shutdown () {} bool sendTScommand(std::string, int, bool); bool check(); void set_PTT_control(int val); int get_PTT(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); int get_modeA(); void set_modeA(int val); int get_modeB(); void set_modeB(int val); int get_modetype(int n); int adjust_bandwidth(int val) { return 0; } bool can_split(); void set_split(bool val); int get_split(); int get_smeter(); // void set_bwA(int val); // int get_bwA(); // void set_bwB(int val); // int get_bwB(); // int def_bandwidth(int val); // bool twovfos() {return true;} }; #endif flrig-2.0.04/src/include/kenwood/TS480SAT.h0000664000175000017500000000645714502041135015015 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS480SAT_H #define _TS480SAT_H #include "kenwood/KENWOOD.h" class RIG_TS480SAT : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; bool menu_45; int alc; bool swralc_polled; public: RIG_TS480SAT(); ~RIG_TS480SAT(){} void initialize(); void shutdown(); void check_menu_45(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_split(bool val); bool can_split(); int get_split(); bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); void tune_rig(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void set_volume_control(int val); int get_volume_control(); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); int adjust_bandwidth(int m); int def_bandwidth(int m); int set_widths(int val); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } void set_auto_notch(int v); int get_auto_notch(); std::vector& bwtable(int); std::vector& lotable(int); std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/kenwood/TS450S.h0000664000175000017500000000351514502041135014555 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS450S_H #define _TS450S_H #include "kenwood/KENWOOD.h" class RIG_TS450S : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; public: RIG_TS450S(); ~RIG_TS450S(){} void initialize(); void shutdown () {} bool sendTScommand(std::string, int, bool); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); int get_modeA(); void set_modeA(int val); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); int get_modeB(); void set_modeB(int val); void set_bwB(int val); int get_bwB(); void selectA(); void selectB(); int get_modetype(int n); int def_bandwidth(int val); int get_smeter(); int get_swr(); void set_PTT_control(int val); int get_PTT(); int adjust_bandwidth(int val) { return 0; } bool can_split(); void set_split(bool val); int get_split(); bool twovfos() {return true;} }; #endif flrig-2.0.04/src/include/kenwood/KENWOOD.h0000664000175000017500000001030014502041135014747 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _KENWOOD_H #define _KENWOOD_H #include #include "rigbase.h" class KENWOOD : public rigbase { protected: bool notch_on; int preamp_level; int att_level; int nb_level; int noise_reduction_level; bool data_mode; int active_mode; int active_bandwidth; bool rxtxa; bool rxona; std::string ifstring; size_t lastmsec; public: enum TS590MODES { LSB, USB, CW, FM, AM, FSK, CWR, FSKR, LSBD, USBD, FMD }; KENWOOD() { ifstring.clear(); lastmsec = 0; } ~KENWOOD(){} virtual void initialize() = 0; virtual void shutdown() = 0; virtual bool check(); virtual unsigned long long get_vfoA(); virtual void set_vfoA(unsigned long long); virtual unsigned long long get_vfoB(); virtual void set_vfoB(unsigned long long); virtual void selectA(); virtual void selectB(); virtual bool can_split() { return true; } virtual void set_split(bool val); virtual int get_split(); virtual bool twovfos() { return true; } virtual void set_PTT_control(int val); virtual int get_PTT(); // virtual int get_modetype(int n); // virtual void set_modeA(int val); // virtual int get_modeA(); // virtual void set_modeB(int val); // virtual int get_modeB(); // virtual int adjust_bandwidth(int val); // virtual int def_bandwidth(int val); // virtual int set_widths(int val); // virtual void set_active_bandwidth(); // virtual int get_active_bandwidth(); // virtual void set_bwA(int val); // virtual int get_bwA(); // virtual void set_bwB(int val); // virtual int get_bwB(); // virtual int get_smeter(); // virtual int get_swr(); // virtual int get_alc(); virtual void select_swr(); virtual void select_alc(); // virtual int get_power_out(); // virtual double get_power_control(); virtual void set_volume_control(int val); virtual int get_volume_control(); // virtual void set_power_control(double val); virtual void tune_rig(int); virtual int get_tune(); virtual bool tuning(); // virtual void set_attenuator(int val); // virtual int get_attenuator(); // virtual void set_preamp(int val); // virtual int get_preamp(); virtual void set_if_shift(int val); virtual bool get_if_shift(int &val); virtual void get_if_min_max_step(int &min, int &max, int &step); virtual void set_noise(bool b); virtual int get_noise(); virtual void set_mic_gain(int val); virtual int get_mic_gain(); virtual void get_mic_min_max_step(int &min, int &max, int &step); virtual void set_squelch(int val); virtual int get_squelch(); virtual void get_squelch_min_max_step(int &min, int &max, int &step); virtual void set_rf_gain(int val); virtual int get_rf_gain(); virtual void get_rf_min_max_step(int &min, int &max, int &step); // virtual void set_noise_reduction_val(int val); // virtual int get_noise_reduction_val(); // virtual void set_noise_reduction(int val); // virtual int get_noise_reduction(); // virtual void get_nr_min_max_step(int &min, int &max, int &step); // virtual void set_notch(bool on, int val); // virtual bool get_notch(int &val); // virtual void get_notch_min_max_step(int &min, int &max, int &step); // virtual void set_auto_notch(int v); // virtual int get_auto_notch(); // virtual std::vector& bwtable(int); // virtual std::vector& lotable(int); // virtual std::vector& hitable(int); // virtual const char * get_bwname_(int bw, int md); size_t check_ifstr(); }; #endif flrig-2.0.04/src/include/kenwood/TS440.h0000664000175000017500000000341714502041135014432 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS440_H #define _TS440_H #include "kenwood/KENWOOD.h" class RIG_TS440 : public KENWOOD { private: const char *_mode_type; public: RIG_TS440(); ~RIG_TS440(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); int get_modeA(); void set_modeA(int val); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); int get_modeB(); void set_modeB(int val); void selectA(); void selectB(); int get_modetype(int n); int get_PTT(); int get_IF(); void shutdown () {} /* not available void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int def_bandwidth(int val); int adjust_bandwidth(int val) { return 0; } int get_smeter(); int get_swr(); void set_PTT_control(int val); bool can_split(); void set_split(bool val); int get_split(); bool twovfos() {return true;} */ }; #endif flrig-2.0.04/src/include/kenwood/TS850.h0000664000175000017500000000353314502041135014436 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS850_H #define _TS850_H #include "kenwood/KENWOOD.h" class RIG_TS850 : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; public: RIG_TS850(); ~RIG_TS850(){} void initialize(); void shutdown () {} bool sendTScommand(std::string, int, bool); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); int get_modeA(); void set_modeA(int val); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); int get_modeB(); void set_modeB(int val); void set_bwB(int val); int get_bwB(); void selectA(); void selectB(); int get_modetype(int n); int def_bandwidth(int val); int get_smeter(); int get_swr(); // int get_alc(); void set_PTT_control(int val); int get_PTT(); int adjust_bandwidth(int val) { return 0; } bool can_split(); void set_split(bool val); int get_split(); bool twovfos() {return true;} }; #endif flrig-2.0.04/src/include/kenwood/TS950.h0000664000175000017500000000361014502041135014433 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS950_H #define _TS950_H #include "kenwood/KENWOOD.h" class RIG_TS950 : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; public: RIG_TS950(); ~RIG_TS950(){} void initialize(); void shutdown () {} bool sendTScommand(std::string, int, bool); bool check(); void set_data_port(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); int get_modeA(); void set_modeA(int val); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); int get_modeB(); void set_modeB(int val); void set_bwB(int val); int get_bwB(); void selectA(); void selectB(); int get_modetype(int n); int def_bandwidth(int val); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); void set_PTT_control(int val); int get_PTT(); int adjust_bandwidth(int val) { return 0; } bool can_split(); void set_split(bool val); int get_split(); bool twovfos() {return true;} }; #endif flrig-2.0.04/src/include/kenwood/TS890S.h0000664000175000017500000000652414502041135014570 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS890S_H #define _TS890S_H #include "kenwood/KENWOOD.h" class RIG_TS890S : public KENWOOD { public: enum TS590MODES { LSB, USB, CW, FM, AM, FSK, CWR, FSKR, LSBD, USBD, FMD }; RIG_TS890S(); ~RIG_TS890S(){} void initialize(); void shutdown(); // unsigned long long get_vfoA(); // void set_vfoA(unsigned long long); // unsigned long long get_vfoB(); // void set_vfoB(unsigned long long); // void selectA(); // void selectB(); // bool can_split() { return true;} // void set_split(bool val); // int get_split(); // bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int adjust_bandwidth(int val); int def_bandwidth(int val); int set_widths(int val); void set_active_bandwidth(); int get_active_bandwidth(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); double get_power_control(); // void set_volume_control(int val); // int get_volume_control(); void set_power_control(double val); // void tune_rig(); void set_attenuator(int val); int get_attenuator(); int next_attenuator(); void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); int get_noise(); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); // void set_squelch(int val); // int get_squelch(); // void get_squelch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 10; step = 1; } void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); // bool sendTScommand(std::string, int, bool); std::vector& bwtable(int); std::vector& lotable(int); std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/kenwood/TS590S.h0000664000175000017500000000670214502041135014563 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS590S_H #define _TS590S_H #include "kenwood/KENWOOD.h" class RIG_TS590S : public KENWOOD { private: bool notch_on; int preamp_level; int att_level; int nb_level; int noise_reduction_level; bool data_mode; int active_mode; int active_bandwidth; bool rxtxa; public: enum TS590SMODES { LSB, USB, CW, FM, AM, FSK, CWR, FSKR, LSBD, USBD, FMD, AMD }; RIG_TS590S(); ~RIG_TS590S(){} void initialize(); void shutdown(); // unsigned long long get_vfoA(); // void set_vfoA(unsigned long long); // unsigned long long get_vfoB(); // void set_vfoB(unsigned long long); // void selectA(); // void selectB(); // bool can_split() { return true;} // void set_split(bool val); // int get_split(); // bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int adjust_bandwidth(int val); int def_bandwidth(int val); int set_widths(int val); void set_active_bandwidth(); int get_active_bandwidth(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int get_smeter(); // int get_swr(); // int get_alc(); int get_power_out(); double get_power_control(); // void set_volume_control(int val); // int get_volume_control(); void set_power_control(double val); // void tune_rig(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); int get_noise(); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); // void set_squelch(int val); // int get_squelch(); // void get_squelch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 10; step = 1; } void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); // bool sendTScommand(std::string, int, bool); std::vector& bwtable(int); std::vector& lotable(int); std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/kenwood/TS940S.h0000664000175000017500000000357414502041135014566 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef TS940S_H #define TS940S_H #include "kenwood/KENWOOD.h" class RIG_TS940S : public KENWOOD { public: RIG_TS940S(); ~RIG_TS940S(){} void initialize (); void shutdown () {} unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool check(); int getvfoAorB(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void selectA(); void selectB(); int adjust_bandwidth(int val) { return 0; } // void set_attenuator(int val); // int get_attenuator(); // void set_preamp(int val); // int get_preamp(); // int get_smeter(); // int get_swr(); // int get_power_out(); // double get_power_control(); // void set_volume_control(double val); // void set_power_control(double val); void set_PTT_control(int val); int get_PTT(); void tune_rig(); int get_split(); void set_split(bool val); bool can_split(); // void set_bwA(int val); }; #endif flrig-2.0.04/src/include/kenwood/TS590SG.h0000664000175000017500000000642314502041135014672 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS590SG_H #define _TS590SG_H #include "kenwood/KENWOOD.h" class RIG_TS590SG : public KENWOOD { public: enum TS590SGMODES { LSB, USB, CW, FM, AM, FSK, CWR, FSKR, LSBD, USBD, FMD, AMD }; RIG_TS590SG(); ~RIG_TS590SG(){} void initialize(); void shutdown(); // unsigned long long get_vfoA(); // void set_vfoA(unsigned long long); // unsigned long long get_vfoB(); // void set_vfoB(unsigned long long); // void selectA(); // void selectB(); // bool can_split() { return true;} // void set_split(bool val); // int get_split(); // bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int adjust_bandwidth(int val); int def_bandwidth(int val); int set_widths(int val); void set_active_bandwidth(); int get_active_bandwidth(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int get_smeter(); // int get_swr(); // int get_alc(); int get_power_out(); double get_power_control(); // void set_volume_control(int val); // int get_volume_control(); void set_power_control(double val); // void tune_rig(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); int get_noise(); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); // void set_squelch(int val); // int get_squelch(); // void get_squelch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 10; step = 1; } void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); // bool sendTScommand(std::string, int, bool); std::vector& bwtable(int); std::vector& lotable(int); std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/kenwood/TS870S.h0000664000175000017500000000627114502041135014565 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS870S_H #define _TS870S_H #include "kenwood/KENWOOD.h" class RIG_TS870S : public KENWOOD { public: enum TS870MODES { tsLSB, tsUSB, tsCW, tsFM, tsAM, tsFSK, tsCWR, tsFSKR }; private: bool notch_on; int nb_level; // bool data_mode; int active_bandwidth; int active_mode; bool att_on; bool is_TS870S; public: RIG_TS870S(); ~RIG_TS870S(){} void initialize(); virtual void shutdown(); bool get_TS870Sid(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); int vfo; // 0, 1 or 2. = A, B or Memory wbx2 int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int adjust_bandwidth(int val); int def_bandwidth(int val); int set_widths(int val); void set_active_bandwidth(); int get_active_bandwidth(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void selectA(); void selectB(); bool can_split() { return true;} bool twovfos() {return true;} int get_smeter(); // int get_swr(); int get_power_out(); double get_power_control(); void set_volume_control(int val); int get_volume_control(); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step (int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void set_power_control(double val); void set_PTT_control(int val); void tune_rig(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); // void set_preamp(int val); // int get_preamp(); // const char * PRE_label(); const char * ATT_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_noise(bool val); int get_noise(); void set_auto_notch(int v); int get_auto_notch(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); bool sendTScommand(std::string, int, bool); std::vector& bwtable(int); std::vector& lotable(int); std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/kenwood/TS480HX.h0000664000175000017500000000644314502041135014700 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS480HX_H #define _TS480HX_H #include "kenwood/KENWOOD.h" class RIG_TS480HX : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; bool menu_45; int alc; bool swralc_polled; public: RIG_TS480HX(); ~RIG_TS480HX(){} void initialize(); void shutdown(); void check_menu_45(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_split(bool val); bool can_split(); int get_split(); bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); void tune_rig(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void set_volume_control(int val); int get_volume_control(); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; max = 200; step = 1; } void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); int adjust_bandwidth(int m); int def_bandwidth(int m); int set_widths(int val); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } void set_auto_notch(int v); int get_auto_notch(); std::vector& bwtable(int); std::vector& lotable(int); std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/kenwood/TS140.h0000664000175000017500000000317514502041135014430 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef TS140_H #define TS140_H #include "kenwood/KENWOOD.h" class RIG_TS140 : public KENWOOD { public: RIG_TS140(); ~RIG_TS140(){} void initialize(); void shutdown() {} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); int get_modetype(int); int adjust_bandwidth(int val) { return 0; } // void set_attenuator(int val); // int get_attenuator(); // void set_preamp(int val); // int get_preamp(); // int get_smeter(); // int get_swr(); // int get_power_out(); // double get_power_control(); // void set_volume_control(double val); // void set_power_control(double val); void set_PTT_control(int val); int get_PTT(); // void tune_rig(); // void set_bwA(int val); }; #endif flrig-2.0.04/src/include/kenwood/TS990.h0000664000175000017500000001144214502041135014441 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS990_H #define _TS990_H #include "rigbase.h" class RIG_TS990 : public rigbase { private: enum TS990MODES { LSB, USB, CW, FM, AM, FSK, PSK, CWR, FSKR, PSKR, LSBD1, USBD1, FMD1, AMD1, LSBD2, USBD2, FMD2, AMD2, LSBD3, USBD3, FMD3, AMD3 }; private: bool menu_0607; bool menu_0608; bool save_menu_0607; bool save_menu_0608; bool notch_on; int nb_level; bool data_mode; int active_mode; int active_bandwidth; bool rxtxa; bool att_on; // default mode values int A_default_SH_WI; int A_default_SH_WI_D1; int A_default_SH_WI_D2; int A_default_SH_WI_D3; int A_default_HI_LO; int A_default_FM; int A_default_FM_D1; int A_default_FM_D2; int A_default_FM_D3; int A_default_CW; int A_default_AM; int A_default_AM_D1; int A_default_AM_D2; int A_default_AM_D3; int A_default_FSK; int A_default_PSK; int B_default_SH_WI; int B_default_SH_WI_D1; int B_default_SH_WI_D2; int B_default_SH_WI_D3; int B_default_HI_LO; int B_default_FM; int B_default_FM_D1; int B_default_FM_D2; int B_default_FM_D3; int B_default_CW; int B_default_AM; int B_default_AM_D1; int B_default_AM_D2; int B_default_AM_D3; int B_default_FSK; int B_default_PSK; public: RIG_TS990(); ~RIG_TS990(){} void initialize(); void shutdown(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void read_menu_0607(); void read_menu_0608(); void set_menu_0607(int); void set_menu_0608(int); int adjust_bandwidth(int val); int def_bandwidth(int val); int set_widths(int val); void set_active_bandwidth(); int get_active_bandwidth(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void selectA(); void selectB(); bool can_split() { return false; }//return true;} void set_split(bool val); int get_split(); bool twovfos() {return true;} int get_smeter(); int get_swr(); int get_alc(); double get_idd(); double get_voltmeter(void); int get_agc(); void set_volume_control(int val); int get_volume_control(); void set_power_control(double val); double get_power_control(void); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 200; step = 5; } int get_power_out(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int how); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); void set_ssbfilter(int val); int get_ssbfilter(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 10; step = 1; } void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); bool sendTScommand(std::string, int, bool); void set_monitor(bool); std::vector& bwtable(int); std::vector& lotable(int); std::vector& hitable(int); const char * get_bwname_(int bw, int md); void sync_date(char *dt); void sync_clock(char *tm); void set_xcvr_auto_on(); void set_xcvr_auto_off(); }; #endif flrig-2.0.04/src/include/kenwood/TS570.h0000664000175000017500000000504414502041135014434 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS570_H #define _TS570_H #include "kenwood/KENWOOD.h" class RIG_TS570 : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; bool is_TS570; public: RIG_TS570(); ~RIG_TS570(){} void initialize(); void shutdown () {} bool get_ts570id(); void selectA(); void selectB(); void set_split(bool val); int get_split(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB (unsigned long long); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); void set_widths(); std::vector& bwtable(int); int get_smeter(); int get_swr(); int get_power_out(); double get_power_control(); void set_volume_control(int val); int get_volume_control(); void set_power_control(double val); void set_PTT_control(int val); int get_PTT(); void tune_rig(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); }; #endif flrig-2.0.04/src/include/kenwood/TS2000.h0000664000175000017500000000642414502041135014505 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TS2000_H #define _TS2000_H #include "kenwood/KENWOOD.h" class RIG_TS2000 : public KENWOOD { public: enum TS2000MODES { LSB, USB, CW, FM, AM, FSK, CWR, FSKR, DIGI }; RIG_TS2000(); ~RIG_TS2000(){} void initialize(); void shutdown(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); bool can_split() { return true;} void set_split(bool val); int get_split(); bool twovfos() {return true;} // void set_PTT_control(int val); // int get_PTT(); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int def_bandwidth(int); int get_modetype(int n); int adjust_bandwidth(int val); int set_widths(int val); int get_smeter(); // int get_swr(); // int get_alc(); // void select_swr(); // void select_alc(); int get_power_out(); double get_power_control(); // void set_volume_control(int val); // int get_volume_control(); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } // void tune_rig(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); // void set_if_shift(int val); // bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } // void set_noise(bool b); // int get_noise(); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); // void set_rf_gain(int val); // int get_rf_gain(); // void get_rf_min_max_step(int &min, int &max, int &step) { // min = 0; max = 100; step = 1; } // bool tuning(); // bool sendTScommand(std::string, int, bool); std::vector& bwtable(int); std::vector& lotable(int); std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/icom/0000775000175000017500000000000014511461606013050 500000000000000flrig-2.0.04/src/include/icom/IC7610.h0000664000175000017500000001155314502041135013746 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2018 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7610_H #define _IC7610_H #include "icom/IC746.h" class RIG_IC7610 : public RIG_ICOM { public: RIG_IC7610(); ~RIG_IC7610(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); bool twovfos() { return true; } void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); bool can_split(); void set_split(bool); int get_split(); bool canswap() { return true; } void swapAB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); bool get_if_shift(int &val); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int val); const char *nextFILT(); int get_FILT(int mode); void set_FILT(int filter); void set_FILTERS(std::string s); std::string get_FILTERS(); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); void set_mic_gain(int v); void get_mic_gain_min_max_step(int &min, int &max, int &step); int get_mic_gain(); void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void get_vox_gain_min_max_step(int &min, int &max, int &step); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step); void set_vox_anti(); void get_vox_anti_min_max_step(int &min, int &max, int &step); void set_cw_wpm(); void get_cw_wpm_min_max(int &min, int &max); 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); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step); void set_cw_vol(); std::vector& bwtable(int m); void set_PTT_control(int val); int get_PTT(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); int get_smeter(); int get_power_out(void); int get_swr(void); int get_alc(void); double get_idd(void); double get_voltmeter(void); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(double &min, double &max, double &step); void set_preamp(int val); int get_preamp(); int next_preamp(); void set_attenuator(int val){} int get_attenuator(); int next_attenuator(){return 0;} const char * PRE_label(); const char * ATT_label(); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_squelch(int val); int get_squelch(); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int val); int get_auto_notch(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step) { min = 0; max = 511; step = 1; } void set_digi_sel(bool); void set_digi_val(int); int get_digi_sel(); int get_digi_val(); void set_dual_watch(bool); int get_dual_watch(); void set_index_att(int); void set_band_selection(int v); void get_band_selection(int v); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void sync_date(char *dt); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/icom/ICF8101.h0000664000175000017500000001103314502041135014041 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _ICF8101_H #define _ICF8101_H #include "icom/ICbase.h" class RIG_ICF8101 : public RIG_ICOM { private: int atten_level; public: RIG_ICF8101(); ~RIG_ICF8101(){} void initialize(); void shutdown(); bool check(); void selectA(); void selectB(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); std::vector& bwtable(int); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_BW(int val); void set_bwA(int val); void set_bwB(int val); int get_BW(int); int get_bwA(); int get_bwB(); void set_PTT_control(int val); int get_PTT(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); int get_smeter(); int get_power_out(void); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step) { min = 0; pmax = max = 2; step = 1; } void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_split(bool); int get_split(); bool can_split(); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void get_nb_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_preamp(int val); int next_preamp(); int get_preamp(); const char * PRE_label(); // const char * ATT_label(); // void set_attenuator(int val); // int next_attenuator(); // int get_attenuator(); // int get_swr(void); // int get_alc(void); // void set_noise_reduction(int val); // int get_noise_reduction(); // void set_noise_reduction_val(int val); // int get_noise_reduction_val(); // void get_nr_min_max_step(int &min, int &max, int &step) { // min = 0; max = 15; step = 1; } // void set_rf_gain(int val); // int get_rf_gain(); // void set_squelch(int val); // int get_squelch(); // void set_notch(bool on, int val); // bool get_notch(int &val); // void get_notch_min_max_step(int &min, int &max, int &step); // bool get_if_shift(int &val); // void set_if_shift(int val); // void get_if_min_max_step(int &min, int &max, int &step); // void set_pbt_inner(int val); // void set_pbt_outer(int val); // int get_pbt_inner(); // int get_pbt_outer(); // const char *FILT(int val); // const char *nextFILT(); // int get_FILT(int mode); // void set_FILT(int filter); // void set_FILTERS(std::string s); // std::string get_FILTERS(); // void set_auto_notch(int val); // int get_auto_notch(); // void set_vox_onoff(); // bool canswap() { return true; } // void set_cw_wpm(); // void get_cw_wpm_min_max(int &min, int &max); // void set_break_in(); // void set_cw_qsk(); // void get_cw_qsk_min_max_step(double &min, double &max, double &step); // void set_cw_spot_tone(); // void get_cw_spot_tone_min_max_step(int &min, int &max, int &step); // void set_cw_vol(); // void setVfoAdj(double v); // double getVfoAdj(); // void get_vfoadj_min_max_step(double &min, double &max, double &step) { // min = 0; max = 100; step = 1; } // void set_band_selection(int v); // void get_band_selection(int v); protected: // int filter_nbr; }; #endif flrig-2.0.04/src/include/icom/IC728.h0000664000175000017500000000224214502041135013664 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC728_H #define _IC728_H #include "icom/ICbase.h" class RIG_IC728 : public RIG_ICOM { public: RIG_IC728(); ~RIG_IC728(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); int adjust_bandwidth(int m) { return 1; } }; #endif flrig-2.0.04/src/include/icom/IC706MKIIG.h0000664000175000017500000000331714502041135014445 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC706MKIIG_H #define _IC706MKIIG_H #include "icom/ICbase.h" class RIG_IC706MKIIG : public RIG_ICOM { public: RIG_IC706MKIIG(); ~RIG_IC706MKIIG(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); int adjust_bandwidth(int val); int def_bandwidth(int m); int get_smeter(); // int get_swr(); void set_attenuator(int val); std::vector& bwtable(int); // void set_split(bool val); // bool can_split() { return true; } bool canswap() { return true; } protected: int filter_nbr; }; extern const char IC706MKIIGname_[]; #endif flrig-2.0.04/src/include/icom/IC7100.h0000664000175000017500000001043614502041135013737 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7100_H #define _IC7100_H #include "icom/IC746.h" class RIG_IC7100 : public RIG_ICOM { public: RIG_IC7100(); ~RIG_IC7100(){} bool CW_sense; void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_attenuator( int val ); int get_attenuator(); void set_preamp(int val); int next_preamp(); int get_preamp(); const char * PRE_label(); const char * ATT_label(); void set_mic_gain(int v); int get_mic_gain(); void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_noise(bool val); int get_noise(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 200; step = 10; } void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void set_cw_wpm(); void set_cw_qsk(); void set_cw_spot_tone(); void set_cw_vol(); void set_break_in(); int get_break_in(); std::vector& bwtable(int m); bool canswap() { return true; } bool can_split(); void set_split(bool val); int get_split(); void set_PTT_control(int val); int get_PTT(); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(double &min, double &max, double &step); void set_squelch(int val); int get_squelch(); int get_smeter(); int get_alc(); int get_swr(); int get_power_out(); double get_idd(void); double get_voltmeter(void); int get_auto_notch(); void set_auto_notch(int val); 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_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); void set_nb_level(int val); int get_nb_level(); void set_band_selection(int v); void get_band_selection(int v); void setVfoAdj(double v); double getVfoAdj(); int get_FILT(int mode); void set_FILT(int filter); const char *FILT(int val); const char *nextFILT(); void set_FILTERS(std::string s); std::string get_FILTERS(); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void sync_date(char *dt); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/icom/IC756.h0000664000175000017500000000767714502041135013706 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC756_H #define _IC756_H #include "icom/IC746.h" //#include "icom/ICbase.h" class RIG_IC756 : public RIG_IC746 { public: RIG_IC756(); ~RIG_IC756(){} void initialize(); virtual bool canswap() { return true; } void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); }; class RIG_IC756PRO : public RIG_ICOM { public: RIG_IC756PRO(); ~RIG_IC756PRO(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA(void); void set_vfoA(unsigned long long f); int get_modetype(int n); void set_modeA(int val); int get_modeA(); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); const char *FILT(int val); const char *nextFILT(); int get_FILT(int mode); void set_FILT(int filter); void set_FILTERS(std::string s); std::string get_FILTERS(); int get_smeter(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_PTT_control(int val); int get_PTT(); void set_noise(bool val); int get_noise(); void set_mic_gain(int val); void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); void set_squelch(int val); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void set_power_control(double val); double get_power_control(); void set_split(bool val); int get_split(); bool can_split() { return true;} int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 16; step = 1; } int adjust_bandwidth(int); int def_bandwidth(int); void set_vox_onoff(); void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_auto_notch(int v); int get_auto_notch(); void set_cw_wpm(); void get_cw_wpm_min_max(int &min, int &max); 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); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step); bool twovfos() { return false; } void swapAB(); void A2B(); std::vector& bwtable(int); void set_band_selection(int v); void get_band_selection(int v); protected: int ICvol; }; #endif flrig-2.0.04/src/include/icom/ICbase.h0000664000175000017500000000367514502041135014271 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _ICbase_H #define _ICbase_H #include "rigbase.h" #include "debug.h" #include "status.h" // set/get tracing #define isett(s) set_trace(2, s, str2hex(cmd.c_str(), cmd.length())); #define igett(s) get_trace(2, s, str2hex(replystr.c_str(), replystr.length())); class RIG_ICOM : public rigbase { protected: int waited; const char *_mode_type; public: RIG_ICOM() { CIV = 0x56; pre_to = "\xFE\xFE\x56\xE0"; pre_fm = "\xFE\xFE\xE0\x56"; post = "\xFD"; ok = "\xFE\xFE\xE0\x56\xFB\xFD"; bad = "\xFE\xFE\xE0\x56\xFA\xFD"; ICOMrig = true; } virtual ~RIG_ICOM() {} void checkresponse(); bool sendICcommand(std::string str, int nbr); bool waitFB(const char *sz, unsigned long timeout = 500); bool waitFOR(size_t n, const char *sz, unsigned long timeout = 500); void adjustCIV(uchar adr); virtual void swapAB(); virtual void A2B(); void ICtrace(std::string cmd, std::string hexstr); virtual int get_modetype(int n) { return _mode_type[n]; } virtual void tune_rig(int how); virtual int get_tune(); virtual std::string hexstr(std::string s); }; #endif flrig-2.0.04/src/include/icom/IC9700.h0000664000175000017500000001034714502041135013750 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2019 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC9700_H #define _IC9700_H #include "icom/IC746.h" class RIG_IC9700 : public RIG_ICOM { public: RIG_IC9700(); ~RIG_IC9700(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); // JBA int get_sat_mode(); int get_dualwatch(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_mic_gain(int v); void get_mic_gain_min_max_step(int &min, int &max, int &step); int get_mic_gain(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(double &min, double &max, double &step); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_onoff(); void get_vox_gain(); void get_vox_anti(); void get_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 200; step = 10; } void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 60; } void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void set_cw_wpm(); void set_cw_qsk(); void set_cw_spot_tone(); void set_cw_vol(); void set_split(bool v); int get_split(); int get_smeter(); int get_power_out(); int get_swr(); int get_alc(); double get_voltmeter(void); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); bool get_if_shift(int &val); void set_squelch(int val); int get_squelch(); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); int get_auto_notch(); void set_auto_notch(int v); void set_attenuator(int val); int get_attenuator(); int next_attenuator(); void set_preamp(int val); int get_preamp(); int next_preamp(); const char * PRE_label(); const char * ATT_label(); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); bool canswap() { return true; } // bool hasA2b() { return true; } std::vector& bwtable(int m); void set_PTT_control(int val); int get_PTT(); void set_band_selection(int v); void get_band_selection(int v); void set_xcvr_auto_on(); void set_xcvr_auto_off(); }; #endif flrig-2.0.04/src/include/icom/IC756PRO3.h0000664000175000017500000000616614502041135014342 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC756PRO3_H #define _IC756PRO3_H #include "icom/ICbase.h" class RIG_IC756PRO3 : public RIG_ICOM { public: RIG_IC756PRO3(); ~RIG_IC756PRO3(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA(void); void set_vfoA(unsigned long long f); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int get_smeter(); int get_swr(void); int get_alc(void); int get_power_out(void); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_PTT_control(int val); int get_PTT(); void set_noise(bool val); int get_noise(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int &val); const char *nextFILT(); void set_squelch(int val); int get_squelch(); void set_rf_gain(int val); int get_rf_gain(); void set_power_control(double val); double get_power_control(); void set_split(bool val); int get_split(); bool can_split() { return true;} int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); int adjust_bandwidth(int); int def_bandwidth(int); void set_notch(bool, int); bool get_notch(int&); void get_notch_min_max_step(int&, int&, int&); void set_auto_notch(int); int get_auto_notch(); bool twovfos() { return false; } bool canswap() { return true; } void swapAB(); void A2B(); std::vector& bwtable(int); void set_band_selection(int v); void get_band_selection(int v); protected: int ICvol; }; #endif flrig-2.0.04/src/include/icom/IC7800.h0000664000175000017500000000565614502041135013756 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7800_H #define _IC7800_H #include "icom/IC746.h" class RIG_IC7800 : public RIG_IC746PRO { public: RIG_IC7800(); ~RIG_IC7800(){} void initialize(); bool check(); void selectA(); void selectB(); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); bool can_split(); void set_split(bool); int get_split(); bool canswap() { return true; } // bool hasA2b() { return true; } void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); int next_attenuator(); void set_attenuator( int val ); //alh int get_attenuator(); //alh const char * ATT_label(); void set_mic_gain(int v); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int &val); const char *nextFILT(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 200; step = 10; } //alh void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 60; } void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void set_cw_wpm(); void set_cw_qsk(); void set_cw_spot_tone(); void set_cw_vol(); std::vector& bwtable(int m); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 200; step = 1; } void set_PTT_control(int val); int get_PTT(); 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 sync_date(char *dt); void sync_clock(char *tm); double get_voltmeter(); double get_idd(); }; #endif flrig-2.0.04/src/include/icom/IC910.h0000664000175000017500000000267114502041135013663 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _ICgeneric_H #define _ICgeneric_H #include "icom/IC746.h" class RIG_IC910H : public RIG_IC746 { public: RIG_IC910H(); ~RIG_IC910H(){}; void initialize(); void set_vfoA(unsigned long long); void set_compression(int, int); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); int get_smeter(); int adjust_bandwidth(int m) { return 0; } void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); bool canswap() { return true; } private: bool comp_is_on; }; #endif flrig-2.0.04/src/include/icom/IC7200.h0000664000175000017500000001023314502041135013733 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7200_H #define _IC7200_H #include "icom/ICbase.h" class RIG_IC7200 : public RIG_ICOM { private: int atten_level; public: RIG_IC7200(); ~RIG_IC7200(){} bool CW_sense; void initialize(); bool check(); void selectA(); void selectB(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); void set_PTT_control(int val); int get_PTT(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_attenuator(int val); int next_attenuator(); int get_attenuator(); int get_smeter(); int get_power_out(void); int get_swr(void); int get_alc(void); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_preamp(int val); int next_preamp(); int get_preamp(); const char * PRE_label(); const char * ATT_label(); void set_rf_gain(int val); int get_rf_gain(); void set_squelch(int val); int get_squelch(); void set_power_control(double val); double get_power_control(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); bool get_if_shift(int &val); void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int val); const char *nextFILT(); int get_FILT(int mode); void set_FILT(int filter); void set_FILTERS(std::string s); std::string get_FILTERS(); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_auto_notch(int val); int get_auto_notch(); void set_vox_onoff(); void set_split(bool); int get_split(); bool can_split(); std::vector& bwtable(int); bool canswap() { return true; } void set_cw_wpm(); void get_cw_wpm_min_max(int &min, int &max); void set_break_in(); void set_cw_qsk(); void get_cw_qsk_min_max_step(double &min, double &max, double &step); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step); void set_cw_vol(); void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } void set_band_selection(int v); void get_band_selection(int v); protected: int filter_nbr; }; #endif flrig-2.0.04/src/include/icom/IC751.h0000664000175000017500000000243514502041135013664 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // aunsigned long int with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC751_H #define _IC751_H #include "icom/ICbase.h" class RIG_IC751 : public RIG_ICOM { public: RIG_IC751(); ~RIG_IC751(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); // int adjust_bandwidth(int m) { return 1; } void set_modeA(int val); int get_modeA(); int get_smeter(); void set_PTT_control(int val); }; #endif flrig-2.0.04/src/include/icom/IC9100.h0000664000175000017500000001022614502041135013736 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC9100_H #define _IC9100_H #include "icom/IC746.h" class RIG_IC9100 : public RIG_ICOM { public: RIG_IC9100(); ~RIG_IC9100(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_mic_gain(int v); void get_mic_gain_min_max_step(int &min, int &max, int &step); int get_mic_gain(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(double &min, double &max, double &step); void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_onoff(); void get_vox_gain(); void get_vox_anti(); void get_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 200; step = 10; } void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 60; } void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void set_cw_wpm(); void set_cw_qsk(); void set_cw_spot_tone(); void set_cw_vol(); void set_split(bool v); int get_split(); int get_smeter(); //chg to void int get_power_out(void); int get_swr(void); int get_alc(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); bool get_if_shift(int &val); void set_squelch(int val); int get_squelch(); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); int get_auto_notch(); void set_auto_notch(int v); void set_attenuator(int val); int get_attenuator(); int next_attenuator(); void set_preamp(int val); int get_preamp(); int next_preamp(); const char * PRE_label(); const char * ATT_label(); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); bool canswap() { return true; } // bool hasA2b() { return true; } std::vector& bwtable(int m); void set_PTT_control(int val); int get_PTT(); void set_band_selection(int v); void get_band_selection(int v); }; #endif flrig-2.0.04/src/include/icom/IC7410.h0000664000175000017500000000470414502041135013744 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7410_H #define _IC7410_H #include "icom/IC746.h" class RIG_IC7410 : public RIG_IC746PRO { public: RIG_IC7410(); ~RIG_IC7410(){} void initialize(); void selectA(); void selectB(); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_attenuator( int val ); int get_attenuator(); const char * ATT_label(); void set_mic_gain(int v); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 200; step = 10; } void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void set_cw_wpm(); void set_cw_qsk(); void set_cw_spot_tone(); void set_cw_vol(); bool canswap() { return true; } void set_PTT_control(int val); int get_PTT(); const char *FILT(int &val); const char *nextFILT(); std::vector& bwtable(int m); void set_band_selection(int v); void get_band_selection(int v); }; #endif flrig-2.0.04/src/include/icom/IC703.h0000664000175000017500000000557414502041135013670 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC703_H #define _IC703_H #include "icom/ICbase.h" class RIG_IC703 : public RIG_ICOM { public: RIG_IC703(); ~RIG_IC703(){} void initialize(); bool check(); unsigned long long get_vfoA(void); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_modetype(int n); int get_bwA(); int get_smeter(); int get_power_out(); int get_swr(); int get_alc(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_PTT_control(int val); void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 60; } void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 300; } void set_cw_wpm(); void set_cw_qsk(); void set_cw_spot_tone(); void set_cw_vol(); void set_noise(bool val); int get_noise(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); int get_mic_gain(); void set_mic_gain(int val); void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); void set_squelch(int val); int get_squelch(); void set_rf_gain(int val); int get_rf_gain(); void set_power_control(double val); double get_power_control(); void set_split(bool val); int get_split(); protected: int preamp_level; int atten_level; }; #endif flrig-2.0.04/src/include/icom/IC735.h0000664000175000017500000000242114502041135013661 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC735_H #define _IC735_H #include "icom/ICbase.h" class RIG_IC735 : public RIG_ICOM { public: RIG_IC735(); ~RIG_IC735(){} void selectA(); void selectB(); void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); }; #endif flrig-2.0.04/src/include/icom/IC705.h0000664000175000017500000001121314502041135013655 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // Modified: January 2017 // Andy Stewart, KB1OIQ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC705_H #define _IC705_H #include "icom/IC746.h" class RIG_IC705 : public RIG_ICOM { public: RIG_IC705(); ~RIG_IC705(){} bool CW_sense; void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); bool can_split(); void set_split(bool); int get_split(); bool canswap() { return true; } void swapAB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); bool get_if_shift(int &val); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int val); const char *nextFILT(); int get_FILT(int mode); void set_FILT(int filter); void set_FILTERS(std::string s); std::string get_FILTERS(); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); void set_mic_gain(int v); void get_mic_gain_min_max_step(int &min, int &max, int &step); int get_mic_gain(); void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void get_vox_gain_min_max_step(int &min, int &max, int &step); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step); void set_vox_anti(); void get_vox_anti_min_max_step(int &min, int &max, int &step); void set_cw_wpm(); void get_cw_wpm_min_max(int &min, int &max); 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); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step); void set_cw_vol(); std::vector& bwtable(int m); void set_PTT_control(int val); int get_PTT(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); int get_smeter(); int get_power_out(void); int get_swr(void); int get_alc(void); double get_voltmeter(void); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(double &min, double &max, double &step); void set_preamp(int val); int get_preamp(); int next_preamp(); void set_attenuator(int val); int get_attenuator(); int next_attenuator(); const char * PRE_label(); const char * ATT_label(); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_squelch(int val); int get_squelch(); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int val); int get_auto_notch(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step) { min = 0; max = 100; step = 1; } void set_band_selection(int v); void get_band_selection(int v); void set_xcvr_auto_on(); void set_xcvr_auto_off(); }; #endif flrig-2.0.04/src/include/icom/ICR71.h0000664000175000017500000000237014502041135013717 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // aunsigned long int with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _ICR71_H #define _ICR71_H #include "icom/ICbase.h" class RIG_ICR71 : public RIG_ICOM { public: RIG_ICR71(); ~RIG_ICR71(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); // int adjust_bandwidth(int m) { return 1; } void set_modeA(int val); int get_modeA(); int get_smeter(); }; #endif flrig-2.0.04/src/include/icom/IC7700.h0000664000175000017500000000524514502041135013747 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7700_H #define _IC7700_H #include "icom/IC746.h" class RIG_IC7700 : public RIG_IC746PRO { public: RIG_IC7700(); ~RIG_IC7700(){} void initialize(); void selectA(); void selectB(); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_attenuator( int val ); int get_attenuator(); const char * ATT_label(); void set_mic_gain(int v); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 200; step = 10; } void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 48; } void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void set_cw_wpm(); void set_cw_qsk(); void set_cw_spot_tone(); void set_cw_vol(); bool canswap() { return true; } void set_PTT_control(int val); int get_PTT(); const char *FILT(int &val); const char *nextFILT(); std::vector& bwtable(int m); 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 sync_date(char *dt); void sync_clock(char *tm); double get_voltmeter(); double get_idd(); }; #endif flrig-2.0.04/src/include/icom/IC7851.h0000664000175000017500000000612014502041135013747 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2018 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7851_H #define _IC7851_H #include "icom/IC746.h" class RIG_IC7851 : public RIG_ICOM { public: RIG_IC7851(); ~RIG_IC7851(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); bool can_split(); void set_split(bool); int get_split(); bool canswap() { return true; } // bool hasA2b() { return true; } void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); int next_attenuator(); void set_attenuator( int val ); int get_attenuator(); const char * ATT_label(); void set_mic_gain(int v); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step); void set_cw_wpm(); void get_cw_wpm_min_max(int &min, int &max); void set_cw_qsk(); void get_cw_qsk_min_max_step(double &min, double &max, double &step); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step); void set_cw_vol(); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); std::vector& bwtable(int m); void get_pc_min_max_step(double &min, double &max, double &step); void set_PTT_control(int val); int get_PTT(); int get_smeter(); int get_power_out(void); int get_swr(void); int get_alc(void); 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(); void sync_date(char *dt); void sync_clock(char *tm); double get_voltmeter(); double get_idd(); }; #endif flrig-2.0.04/src/include/icom/IC7300.h0000664000175000017500000001106514502041135013740 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // Modified: January 2017 // Andy Stewart, KB1OIQ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7300_H #define _IC7300_H #include "icom/IC746.h" class RIG_IC7300 : public RIG_ICOM { public: RIG_IC7300(); ~RIG_IC7300(){} bool CW_sense; void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); bool can_split(); void set_split(bool); int get_split(); bool canswap(); void swapAB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int val); const char *nextFILT(); int get_FILT(int mode); void set_FILT(int filter); void set_FILTERS(std::string s); std::string get_FILTERS(); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); void set_mic_gain(int v); void get_mic_gain_min_max_step(int &min, int &max, int &step); int get_mic_gain(); void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void get_vox_gain_min_max_step(int &min, int &max, int &step); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step); void set_vox_anti(); void get_vox_anti_min_max_step(int &min, int &max, int &step); void set_cw_wpm(); void get_cw_wpm_min_max(int &min, int &max); 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); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step); void set_cw_vol(); std::vector& bwtable(int m); void set_PTT_control(int val); int get_PTT(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); int get_smeter(); int get_power_out(void); int get_swr(void); int get_alc(void); double get_idd(void); double get_voltmeter(void); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(double &min, double &max, double &step); void set_preamp(int val); int get_preamp(); int next_preamp(); const char * PRE_label(); void set_attenuator(int val); int get_attenuator(); int next_attenuator(); const char * ATT_label(); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_squelch(int val); int get_squelch(); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int val); int get_auto_notch(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step); void set_band_selection(int v); void get_band_selection(int v); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void sync_date(char *dt); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/icom/IC746.h0000664000175000017500000001105414502041135013665 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC746_H #define _IC746_H #include "icom/ICbase.h" class RIG_IC746 : public RIG_ICOM { public: RIG_IC746(); virtual ~RIG_IC746(){} virtual void initialize(); virtual void selectA(); virtual void selectB(); bool check(); virtual unsigned long long get_vfoA(void); virtual void set_vfoA(unsigned long long f); virtual unsigned long long get_vfoB(void); virtual void set_vfoB(unsigned long long f); virtual int get_smeter(); virtual void set_volume_control(int val); virtual int get_volume_control(); virtual void get_vol_min_max_step(int &min, int &max, int &step); virtual void set_PTT_control(int val); virtual int get_PTT(); virtual void set_noise(bool val); virtual int get_noise(); virtual void set_noise_reduction(int val); virtual int get_noise_reduction(); virtual void set_noise_reduction_val(int val); virtual int get_noise_reduction_val(); virtual void set_attenuator(int val); virtual int get_attenuator(); virtual int next_preamp(); virtual void set_preamp(int val); virtual int get_preamp(); virtual const char * PRE_label(); virtual const char * ATT_label(); virtual int get_modetype(int n); virtual void set_modeA(int val); virtual int get_modeA(); virtual void set_bwA(int val); virtual int get_bwA(); virtual void set_modeB(int val); virtual int get_modeB(); virtual void set_bwB(int val); virtual int get_bwB(); virtual void set_mic_gain(int val); virtual void get_mic_gain_min_max_step(int &min, int &max, int &step); virtual void set_if_shift(int val); virtual void get_if_min_max_step(int &min, int &max, int &step); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); virtual void set_squelch(int val); virtual void set_rf_gain(int val); virtual void set_power_control(double val); virtual void set_split(bool val); virtual int get_split(); virtual bool can_split() { return true;} virtual bool canswap() { return true; } protected: int preamp_level; int atten_level; int ICvol; int filter_nbr; }; class RIG_IC746PRO : public RIG_IC746 { public: RIG_IC746PRO(); virtual ~RIG_IC746PRO(){} virtual void initialize(); virtual void set_modeA(int val); virtual int get_modeA(); virtual void set_bwA(int val); virtual int get_bwA(); virtual void set_modeB(int val); virtual int get_modeB(); virtual void set_bwB(int val); virtual int get_bwB(); virtual int get_swr(); virtual int get_alc(); virtual int get_power_out(); virtual int adjust_bandwidth(int m); virtual int def_bandwidth(int m); virtual void set_attenuator(int val); virtual int get_attenuator(); virtual void set_preamp(int val); virtual int get_preamp(); virtual const char * PRE_label(); virtual const char * ATT_label(); virtual void set_mic_gain(int val); virtual int get_mic_gain(); virtual void get_mic_gain_min_max_step(int &min, int &max, int &step); virtual void set_notch(bool on, int val); virtual bool get_notch(int &val); virtual void get_notch_min_max_step(int &min, int &max, int &step); virtual void set_rf_gain(int val); virtual int get_rf_gain(); virtual void set_squelch(int val); virtual int get_squelch(); virtual void set_if_shift(int val); virtual void get_if_min_max_step(int &min, int &max, int &step); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); virtual void set_power_control(double val); virtual double get_power_control(); virtual void set_split(bool val); virtual int get_split(); bool can_split() { return true;} bool twovfos() { return false; } std::vector& bwtable(int); void set_band_selection(int v); void get_band_selection(int v); }; #endif flrig-2.0.04/src/include/icom/IC756PRO2.h0000664000175000017500000000605514502041135014336 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC756PRO2_H #define _IC756PRO2_H #include "icom/ICbase.h" class RIG_IC756PRO2 : public RIG_ICOM { public: RIG_IC756PRO2(); ~RIG_IC756PRO2(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA(void); void set_vfoA(unsigned long long f); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int get_smeter(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_PTT_control(int val); int get_PTT(); void set_noise(bool val); int get_noise(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_mic_gain(int val); // int get_mic_gain(); void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_if_shift(int val); void get_if_min_max_step(int &min, int &max, int &step); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int &val); const char *nextFILT(); void set_squelch(int val); // int get_squelch(); void set_rf_gain(int val); // int get_rf_gain(); void set_power_control(double val); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_split(bool val); int get_split(); bool can_split() { return true;} int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); int adjust_bandwidth(int); int def_bandwidth(int); int get_swr(); int get_alc(); int get_power_out(); bool twovfos() { return false; } bool canswap() { return true; } void swapAB(); void A2B(); std::vector& bwtable(int); void set_band_selection(int v); void get_band_selection(int v); protected: int ICvol; }; #endif flrig-2.0.04/src/include/icom/IC718.h0000664000175000017500000000517614502041135013674 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC718_H #define _IC718_H #include "icom/ICbase.h" class RIG_IC718 : public RIG_ICOM { public: RIG_IC718(); ~RIG_IC718(){} void initialize(); bool check(); unsigned long long get_vfoA(void); void set_vfoA(unsigned long long f); int get_bwA(); void set_bwA(int); int get_modeA(); void set_modeA(int val); int get_modetype(int n); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); int get_bwB(); void set_bwB(int); void set_modeB(int val); int get_modeB(); void selectA(); void selectB(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_attenuator(int val); int get_smeter(); void set_noise(bool val); int get_noise(); void set_nb_level(int val); int get_nb_level(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } void set_preamp(int val); int get_preamp(); const char * PRE_label(); const char * ATT_label(); void set_rf_gain(int val); int get_rf_gain(); void set_squelch(int val); void set_power_control(double val); double get_power_control(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_compression(int, int); void set_auto_notch(int val); int get_auto_notch(); void set_vox_onoff(); int adjust_bandwidth(int m); bool can_split() { return true;} void set_split(bool val); int get_split(); bool canswap() { return true; } protected: int filter_nbr; }; #endif //============================================================================= flrig-2.0.04/src/include/icom/IC7600.h0000664000175000017500000000757014502041135013751 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7600_H #define _IC7600_H #include "icom/IC746.h" class RIG_IC7600 : public RIG_ICOM { public: RIG_IC7600(); ~RIG_IC7600(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); bool can_split(); void set_split(bool); int get_split(); bool canswap() { return true; } // bool hasA2b() { return true; } void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_mic_gain(int v); void get_mic_gain_min_max_step(int &min, int &max, int &step); int get_mic_gain(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 0; max = 200; step = 10; } //alh void get_cw_wpm_min_max(int &min, int &max) { min = 6; max = 60; } void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 2.0; max = 13.0; step = 0.1; } void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 900; step = 5; } void set_cw_wpm(); void set_cw_qsk(); void set_cw_spot_tone(); void set_cw_vol(); std::vector& bwtable(int m); void set_PTT_control(int val); int get_PTT(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); int get_smeter(); int get_power_out(void); int get_swr(void); int get_alc(void); double get_idd(void); double get_voltmeter(void); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(double &min, double &max, double &step); int next_preamp(); void set_preamp(int val); int get_preamp(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); const char * PRE_label(); const char * ATT_label(); void set_noise(bool val); int get_noise(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_squelch(int val); int get_squelch(); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int val); int get_auto_notch(); void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); const char *FILT(int &val); const char *nextFILT(); void set_band_selection(int v); void get_band_selection(int v); void sync_date(char *dt); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/icom/IC7000.h0000664000175000017500000000562314502041135013740 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _IC7000_H #define _IC7000_H #include "icom/IC746.h" class RIG_IC7000 : public RIG_IC746PRO { public: RIG_IC7000(); ~RIG_IC7000(){} void initialize(); bool check(); unsigned long long get_vfoA(void); void set_vfoA(unsigned long long f); int get_bwA(); void set_bwA(int); int get_modeA(); void set_modeA(int val); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); int get_bwB(); void set_bwB(int); void set_modeB(int val); int get_modeB(); void selectA(); void selectB(); int adjust_bandwidth(int m); int def_bandwidth(int m); void set_attenuator( int val ); int get_attenuator(); void set_preamp(int val); int get_preamp(); int next_preamp() { if (preamp_level) return 0; return 1; } void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void set_squelch(int val); int get_squelch(); void set_power_control(double val); double get_power_control(); int get_auto_notch(); void set_auto_notch(int v); int get_smeter(); int get_power_out(); int get_alc(); void set_split(bool v); int get_split(); bool canswap() { return true; } int get_mic_gain(); void set_mic_gain(int val); void get_mic_gain_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_noise(bool val); int get_noise(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_pbt_inner(int val); void set_pbt_outer(int val); int get_pbt_inner(); int get_pbt_outer(); void set_PTT_control(int val); int get_PTT(); void set_band_selection(int v); void get_band_selection(int v); std::vector& bwtable(int m); }; #endif flrig-2.0.04/src/include/pl_tones.h0000664000175000017500000000344414502720371014037 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2018 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- /** \file The SHOW_PL_TONES() function hides the implementation classes used to provide the popup window and tone selection mechanism. */ #ifndef PL_TONES_H #define PL_TONES_H #include #include #include #include #include class TonePicker : public Fl_Window { int initial; int which, previous; int done; void drawbox(int); void draw(); int handle(int); Fl_Color clr_bkgnd; Fl_Color clr_select; public: TonePicker(int oldtone, Fl_Color c1, Fl_Color c2); int run(); }; class Fl_PL_tone : public Fl_Group { friend void btn_cb(Fl_Button *v, void *d); private: Fl_Button *btn; Fl_Box *valbox; int val; Fl_Color clr_bkgnd; Fl_Color clr_select; public: Fl_PL_tone(int X, int Y, int W, int H, const char *label); ~Fl_PL_tone(); int value(); void value(int val_); void background(Fl_Color clr); void color_select(Fl_Color clr); }; #endif flrig-2.0.04/src/include/morse.h0000664000175000017500000000242614502720371013340 00000000000000// --------------------------------------------------------------------- // morse.h -- morse code modem // // Copyright (C) 2020 // Dave Freese, W1HKJ // // This file is part of flrig // // flrig is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // --------------------------------------------------------------------- #ifndef _MORSE_H #define _MORSE_H #include #define DOT '.' #define DASH '-' struct CWstruct { std::string chr; // utf-8 string representation of character std::string rpr; // Dot-dash code representation }; class Cmorse { private: static CWstruct cw_table[]; std::string utf8; public: Cmorse() {} ~Cmorse() {} std::string tx_lookup(int); int tx_length(int); void init(); }; #endif flrig-2.0.04/src/include/gpio.h0000664000175000017500000000235714502720371013154 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef GPIO_H #define GPIO_H #include #include #include #include #include extern Fl_Check_Button *btn_enable_gpio[17]; extern Fl_Check_Button *btn_gpio_on[17]; extern Fl_Counter *cnt_gpio_pulse_width; extern Fl_Group *createGPIO(int X, int Y, int W, int H, const char *label); #endif flrig-2.0.04/src/include/flslider2.h0000664000175000017500000000413614502720371014101 00000000000000// ---------------------------------------------------------------------------- // flslider2.h // // Copyright (C) 2010 // Stelios Bounanos, M0GLD // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FL_SLIDER2_ #define FL_SLIDER2_ #include #include #include #include #include class Fl_Slider2 : public Fl_Slider { public: Fl_Slider2(int x, int y, int w, int h, const char* l = 0) : Fl_Slider(x, y, w, h, l) { } int handle(int event); }; class Fl_Value_Slider2 : public Fl_Value_Slider { public: Fl_Value_Slider2(int x, int y, int w, int h, const char* l = 0) : Fl_Value_Slider(x, y, w, h, l) { } int handle(int event); }; class Fl_Counter2 : public Fl_Counter { public: Fl_Counter2(int x, int y, int w, int h, const char* l = 0) : Fl_Counter(x, y, w, h, l) { } int handle(int event); }; class Fl_Value_Input2 : public Fl_Value_Input { public: Fl_Value_Input2(int x, int y, int w, int h, const char* l = 0) : Fl_Value_Input(x, y, w, h, l) { } int handle(int event); }; class Fl_Spinner2 : public Fl_Spinner { public: Fl_Spinner2(int x, int y, int w, int h, const char* l = 0) : Fl_Spinner(x, y, w, h, l) { } int handle(int event); }; #endif // FL_SLIDER2_ flrig-2.0.04/src/include/support.h0000664000175000017500000003306014505023152013721 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef SUPPORT_H #define SUPPORT_H #include #include #include #include #include #include #include #include #ifndef WIN32 #include #include #include #endif #include #include #include #include #include #include #include "rig.h" #include "rigbase.h" #include "rig_io.h" #include "images.h" #include "serial.h" #include "status.h" #include "icons.h" #include "debug.h" #include "gettext.h" #include "dialogs.h" #include "rigbase.h" #include "ptt.h" #include "ui.h" #include "tod_clock.h" #include "rig.h" #include "rigs.h" #include "K3_ui.h" #include "KX3_ui.h" #include "rigpanel.h" #include "trace.h" #include "cwio.h" #include "fsk.h" #include "fskioUI.h" #include "rig_io.h" #include "socket_io.h" #include "xml_server.h" #include "gpio_ptt.h" #include "cmedia.h" #include "tmate2.h" #include #include #include #include #include #include #include #include #include #define LISTSIZE 200 #define ATAGSIZE 128 //21 enum { SWR_IMAGE, ALC_IMAGE, IDD_IMAGE }; extern int meter_image; extern bool flrig_abort; extern XCVR_STATE *vfo, vfoA, vfoB, xcvr_vfoA, xcvr_vfoB; extern bool PTT; extern bool localptt; extern Cserial *RigSerial; extern Cserial *AuxSerial; extern Cserial *SepSerial; extern bool run_xmlrcp_thread; extern bool bandwidth_changed; extern bool modes_changed; extern bool bandwidths_changed; extern std::vector rigmodes_; extern rigbase *selrig; extern std::string printXCVR_STATE(XCVR_STATE data); extern std::string print_ab(); extern const char *print(XCVR_STATE data); extern void yaesu891UpdateA(XCVR_STATE * newVfo); extern void yaesu891UpdateB(XCVR_STATE * newVfo); extern void redrawAGC(); extern void serviceA(XCVR_STATE nuvals); extern void serviceB(XCVR_STATE nuvals); extern void cbExit(); extern void setVolumeControl(void *); extern void setModeControl(void *); extern void set_bandwidth_control(); extern void updateBandwidthControl(void *d = NULL); extern void updateUI(void *); extern void update_split(void *); extern void updateTCI(void *); extern void updateFLEX1500(void *); extern void setBWControl(void *); extern void setNotchControl(void *); extern void adjust_if_shift_control(void *); extern void setIFshiftButton(void *); extern void setIFshiftControl(void *); extern void setPTT( void *); extern void setPreampControl(void *); extern void setAttControl(void *); extern void setMicGainControl(void *); extern void setAGC(void *); extern void setRFGAINControl(void *); extern void update_power_control(void *); extern void update_compression(void *); extern void setMode(); extern void setBW(); extern void setDSP(); extern void selectDSP(); extern void selectFILT(); extern void selectCENTER(); extern void setFilterInner(); extern void setFilterOuter(); extern void addFreq(); extern void delFreq(); extern void buildlist(); extern void clearList(); extern void saveFreqList(); extern void readList(); extern void selectFreq(); extern void movFreqA(Fl_Widget *, void *); extern void movFreqB(Fl_Widget *, void *); extern void adjustFreqs(); extern void cbABactive(); extern void cbA2B(); extern void cb_selectA(); extern void cb_selectB(); extern void highlight_vfo(void *); extern void cb_set_split(int); extern void execute_swapAB(); extern void execute_A2B(); extern void execute_FA2FB(); extern void execute_FB2FA(); extern void cbAswapB(); extern void cbRIT(); extern void cbXIT(); extern void cbBFO(); extern void cbAuxPort(); extern void cb_line_out(); extern void cb_agc_level(); extern void cb_cw_wpm(); extern void cb_cw_vol(); extern void cb_cw_spot(); extern void cb_cw_spot_tone(); extern void cb_cw_qsk(); extern void cb_cw_delay(); extern void cb_cw_weight(); extern void cb_enable_keyer(); extern void cb_set_break_in(); extern void cb_vox_gain(); extern void cb_vox_anti(); extern void cb_vox_hang(); extern void cb_vox_onoff(); extern void cb_vox_on_dataport(); extern void cb_compression(); extern void setLower(); extern void setUpper(); extern void cb_vfo_adj(); extern void cb_line_out(); extern void cb_bpf_center(); extern void cb_special(); extern void cb_nb_level(); extern void setFocus(); // callbacks for tt550 transceiver extern void cb_tt550_line_out(); extern void cb_tt550_agc_level(); extern void cb_tt550_cw_wpm(); extern void cb_tt550_cw_vol(); extern void cb_tt550_cw_spot(); extern void cb_tt550_cw_weight(); extern void cb_tt550_spot_onoff(); extern void cb_tt550_enable_keyer(); extern void cb_tt550_vox_gain(); extern void cb_tt550_vox_anti(); extern void cb_tt550_vox_hang(); extern void cb_tt550_vox_onoff(); extern void cb_tt550_compression(); extern void cb_tt550_mon_vol(); extern void cb_tt550_tuner_bypass(); extern void cb_tt550_enable_xmtr(); extern void cb_tt550_enable_tloop(); extern void cb_tt550_nb_level(); extern void cb_tt550_use_line_in(); extern void cb_tt550_setXmtBW(); extern void cb_tt550_cw_qsk(); extern void closeRig(); extern void cbExit(); extern void about(); extern void setNotch(); extern void visit_URL(void* arg); extern void rotate_log(std::string); extern void cbAttenuator(); extern void cbPreamp(); extern void cbNR(); extern void setNR(); extern void cbNoise(); extern void cbbtnNotch(); extern void setNotch(); extern void cbAN(); extern void setIFshift(); extern void cbIFsh(); extern void setLOCK(); extern void setINNER(); extern void setOUTER(); extern void setCLRPBT(); extern void setVolume(); extern void setMicGain(); extern void cbbtnMicLine(); extern void execute_setPower(); extern void setPower(); extern void setRFGAIN(); extern void setSQUELCH(); extern void cbTune(); extern void cb_tune_on_off(); extern void doPTT(int); //extern void cbSmeter(); extern void cbALC_IDD_SWR(); //extern void cbPWR(); extern void cbMute(); extern void cbAGC(); extern void cbEventLog(); extern void cbBandSelect(int band); extern void loadConfig(); extern void saveConfig(); extern void loadState(); extern void saveState(); extern void createXcvrDialog(); extern void open_poll_tab(); extern void open_trace_tab(); extern void open_commands_tab(); extern void open_restore_tab(); extern void open_send_command_tab(); extern void show_controls(); extern void open_xmlrpc_tab(); extern void open_tcpip_tab(); extern void open_cmedia_tab(); extern void open_ptt_tab(); extern void open_gpio_tab(); extern void open_other_tab(); extern void open_server_tab(); extern void open_client_tab(); extern void open_tmate2_tab(); extern void cb_close_TT550_setup(); extern void cbUseRepeatButtons(bool on); extern void nr_label(const char *, int on = 0); extern void nb_label(const char *, int on = 0); extern void auto_notch_label(const char *, int on = 0); extern void enable_yaesu_bandselect(int btn_num, bool enable = true); extern void break_in_label(const char *); extern void synchronize_now(); // Display Dialog extern void cbUSBaudio(); extern void cbCIVdefault(); extern void cbCIV(); extern void cbOkXcvrDialog(); extern void cbCancelXcvrDialog(); extern void initCommPortTable (); extern void configXcvr(); extern void setColors(); extern void setDisplayColors(); extern void openMemoryDialog(); extern void cbCloseMemory(); extern void select_and_close(); extern void cbOkDisplayDialog(); extern void cbCancelDisplayDialog(); extern void cbPrefFont(); extern void cbPrefBackground(); extern void cbPrefForeground(); extern void cbSMeterColor(); extern void cbPwrMeterColor(); extern void cbSWRMeterColor(); extern void cbPeakMeterColor(); extern void cbBacklightColor(); extern void cbVoltMeterColor(); extern void cb_sys_defaults(); extern void cb_sys_foreground(); extern void cb_sys_background(); extern void cb_sys_background2(); extern void cb_reset_display_dialog(); extern void cb_slider_background(); extern void cb_slider_select(); extern void cb_slider_defaults(); extern void cb_lighted_button(); extern void cb_lighted_default(); extern void cb_change_hrd_button(); extern void cb_change_sliders_button(); extern void set_sliders_when(); extern void cb_tab_defaults(); extern void cb_tab_colors(); // ic7610 functions extern void digi_sel_on_off(); extern void set_ic7610_digi_sel_on_off(void *); extern void digi_sel_val(); extern void set_ic7610_digi_sel_val(void *); extern void dual_watch(); extern void set_ic7610_dual_watch(void *); extern void index_att(); extern void set_ic7610_index_att(void *); extern Fl_Color flrig_def_color(int); extern void * serial_thread_loop( void * ); extern bool bypass_serial_thread_loop; extern bool bypass_xmlrcp_thread_loop; extern char szttyport[]; extern int baudttyport; extern void serial_timer(void *); extern void init_xmlrpc(); extern void setFreqDispA(void *d = 0); extern void setFreqDispB(void *d = 0); extern void updateSmeter(void *d = 0); extern void updateFwdPwr(void *d = 0); extern void updateALC(void *d = 0); extern void updateSWR(void *d = 0); extern void updateIDD(void *d = 0); extern void updateVmeter(void *d = 0); extern void updateSquelch(void *d = 0); extern void updateRFgain(void *d = 0); extern void zeroXmtMeters(void *d = 0); extern void set_power_controlImage(double); extern void cb_send_command(std::string cmd, Fl_Output *resp = 0); extern const std::string lt_trim(const std::string& pString, const std::string& pWhitespace = " \"\t"); extern void editAlphaTag(); extern bool rig_notch; extern int rig_notch_val; extern void update_notch(void *d); extern double smtrval; extern double pwrval; extern double swrval; extern double alcval; extern std::queue srvc_reqs; extern void trace(int n, ...); // all args of type const char * extern void trace1(int n, ...); // all args of type const char * extern Fl_Group *tabXCVR; extern Fl_Group *tabTRACE; extern Fl_Group *tabTCPIP; extern Fl_Group *tabPTT; extern Fl_Group *tabOTHER; extern Fl_Group *tabPOLLING; extern Fl_Group *tabSNDCMD; extern Fl_Group *tabCOMMANDS; extern Fl_Group *tabRESTORE; extern Fl_Tree *tab_tree; extern void select_tab(const char *); extern void update_progress(int); extern bool xcvr_online; extern Fl_Box *mtr_SMETER; extern Fl_Box *mtr_PWR; extern Fl_Box *mtr_SWR; extern Fl_Box *mtr_ALC; extern Fl_Box *mtr_IDD; extern Fl_Box *mtr_VOLTS; extern Fl_SigBar *sigbar_SMETER; extern Fl_SigBar *sigbar_PWR; extern Fl_SigBar *sigbar_SWR; extern Fl_SigBar *sigbar_ALC; extern Fl_SigBar *sigbar_IDD; extern Fl_SigBar *sigbar_VOLTS; // user interface support functions extern void adjust_small_ui(); extern void adjust_xig_wide(); extern void adjust_wide_ui(); extern void adjust_touch_ui(); extern void update_UI_PTT(void *d = 0); extern void adjust_control_positions(); extern void init_Generic_Tabs(); extern void initTabs(); extern void init_rit(); extern void init_xit(); extern void init_bfo(); extern void init_dsp_controls(); extern void init_volume_control(); extern void set_init_volume_control(); extern void init_rf_control(); extern void set_init_rf_gain(); extern void init_sql_control(); extern void set_init_sql_control(); extern void set_init_noise_reduction_control(); extern void set_init_if_shift_control(); extern void init_if_shift_control(); extern void init_notch_control(); extern void set_init_notch_control(); extern void init_micgain_control(); extern void set_init_micgain_control(); extern void init_power_control(); extern void set_init_power_control(); extern void init_attenuator_control(); extern void set_init_attenuator_control(); extern void init_agc_control(); extern void init_preamp_control(); extern void set_init_preamp_control(); extern void init_noise_control(); extern void init_split_control(); extern void set_init_noise_control(); extern void init_tune_control(); extern void init_ptt_control(); extern void init_auto_notch(); extern void set_init_auto_notch(); extern void init_swr_control(); extern void set_init_compression_control(); extern void set_init_break_in(); extern void init_special_controls(); extern void init_external_tuner(); extern void init_CIV(); extern void init_TS990_special(); extern void init_K3_KX3_special(); extern void initRig(); extern void initRigCombo(); extern void init_title(); extern void initConfigDialog(); extern void initStatusConfigDialog(); extern void start_commands(); extern void exit_commands(); // Xcvr initialization functions extern void init_xcvr(); extern void init_generic_rig(); extern void enable_xcvr_ui(); extern void vfo_startup_data(XCVR_STATE &xcvrvfo); extern void vfoA_startup_data(); extern void vfoB_startup_data(); extern void rig_startup_data(); // Xcvr restore functions extern void restore_rig_vals_(XCVR_STATE &xcvrvfo); extern void restore_xcvr_vals(); // TT550 initialization functions extern void init_TT550_tabs(); extern void init_TT550(); #endif flrig-2.0.04/src/include/gpio_ptt.h0000664000175000017500000000226414502720371014040 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _GPIO_PTT_H #define _GPIO_PTT_H #include #include "status.h" extern void gpioEXEC(std::string execstr); extern void export_gpio(int bcm); extern void unexport_gpio(int bcm); extern void open_gpio(void); extern void close_gpio(void); extern void set_gpio(bool ptt); extern int get_gpio(); #endif flrig-2.0.04/src/include/threads.h0000664000175000017500000001050214502720371013637 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef THREADS_H_ #define THREADS_H_ #include "config.h" #include #include #include #include #include #include #include #include #include #include #if !HAVE_SEM_TIMEDWAIT # include int sem_timedwait(sem_t* sem, const struct timespec* abs_timeout); #endif int sem_timedwait_rel(sem_t* sem, double rel_timeout); int pthread_cond_timedwait_rel(pthread_cond_t* cond, pthread_mutex_t* mutex, double rel_timeout); enum { INVALID_TID = -1, TRX_TID, QRZ_TID, RIGCTL_TID, NORIGCTL_TID, #if USE_XMLRPC XMLRPC_TID, #endif ARQ_TID, ARQSOCKET_TID, FLMAIN_TID, NUM_THREADS, NUM_QRUNNER_THREADS = NUM_THREADS - 1 }; #ifdef __linux__ void linux_log_tid(void); # define LOG_THREAD_ID() linux_log_tid() #else # define LOG_THREAD_ID() /* nothing */ #endif #if USE_TLS # define THREAD_ID_TYPE __thread intptr_t # define CREATE_THREAD_ID() thread_id_ = INVALID_TID # define SET_THREAD_ID(x) do { thread_id_ = (x); LOG_THREAD_ID(); } while (0) # define GET_THREAD_ID() thread_id_ #else # define THREAD_ID_TYPE pthread_key_t # define CREATE_THREAD_ID() pthread_key_create(&thread_id_, NULL) # define SET_THREAD_ID(x) do { pthread_setspecific(thread_id_, (const void *)(x + 1)); LOG_THREAD_ID(); } while (0) # define GET_THREAD_ID() ((intptr_t)pthread_getspecific(thread_id_) - 1) #endif // USE_TLS extern THREAD_ID_TYPE thread_id_; #ifndef NDEBUG # include "debug.h" bool thread_in_list(int id, const int* list); # define ENSURE_THREAD(...) \ do { \ int id_ = GET_THREAD_ID(); \ int t_[] = { __VA_ARGS__, INVALID_TID }; \ if (!thread_in_list(id_, t_)) \ LOG_ERROR("bad thread context: %d", id_); \ } while (0) # define ENSURE_NOT_THREAD(...) \ do { \ int id_ = GET_THREAD_ID(); \ int t_[] = { __VA_ARGS__, INVALID_TID }; \ if (thread_in_list(id_, t_)) \ LOG_ERROR("bad thread context: %d", id_); \ } while (0) #else # define ENSURE_THREAD(...) ((void)0) # define ENSURE_NOT_THREAD(...) ((void)0) #endif // ! NDEBUG // On POSIX systems we cancel threads by sending them SIGUSR2, // which will also interrupt blocking calls. On WIN32 we use // pthread_cancel and there is no good/sane way to interrupt. #ifndef __WIN32__ #include # define SET_THREAD_CANCEL() \ do { \ sigset_t usr2; \ sigemptyset(&usr2); \ sigaddset(&usr2, SIGUSR2); \ pthread_sigmask(SIG_UNBLOCK, &usr2, NULL); \ } while (0) # define TEST_THREAD_CANCEL() /* nothing */ # define CANCEL_THREAD(t__) pthread_kill(t__, SIGUSR2) #else // threads have PTHREAD_CANCEL_ENABLE, PTHREAD_CANCEL_DEFERRED when created # define SET_THREAD_CANCEL() /* nothing */ # define TEST_THREAD_CANCEL() pthread_testcancel() # define CANCEL_THREAD(t__) pthread_cancel(t__); #endif /// This ensures that a mutex is always unlocked when leaving a function or block. class guard_lock { public: // guard_lock(pthread_mutex_t* m, int h = 0); guard_lock(pthread_mutex_t* m, std::string h = ""); ~guard_lock(void); const char *name(pthread_mutex_t *m); private: pthread_mutex_t* mutex; std::string how; long int start_time; // int how; }; struct cpreamble { std::string m_func; cpreamble(const char* func) : m_func(func) { std::cout << func << " entry" << std::endl; } ~cpreamble() { std::cout << m_func << " exit" << std::endl; } }; #define PREAMBLE cpreamble _cpreamble(__func__); #endif // !THREADS_H_ flrig-2.0.04/src/include/font_browser.h0000664000175000017500000000645014502720371014725 00000000000000// ---------------------------------------------------------------------------- // Font_Browser.h v 0.0.1 2005-10-17 // // for the Fast Light Tool Kit (FLTK) 1.1.x . // // David Freese, w1hkj@w1hkj.com // based on similar widget by Mariwan Jalal // // ---------------------------------------------------------------------------- // Copyright (C) 2014-2020 // David Freese, W1HKJ // // This file is part of flrig // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FONTBROWSER_H #define FONTBROWSER_H #include #include #include #include #include #include #include #include #include "flslider2.h" // Preview box for showing font class Preview_Box : public Fl_Widget { private: int fontName; int fontSize; Fl_Color fontColor; void draw(); public: Preview_Box(int x, int y, int w, int h, const char* l); void SetFont( int fontname, int fontsize, Fl_Color c); }; // Font browser widget class Font_Browser : public Fl_Window { friend void *find_fixed_fonts(void *); public: struct font_pair { int nbr; std::string *name; font_pair() { nbr = 0; name = 0; } ~font_pair() { if (name) delete name; } }; enum filter_t { FIXED_WIDTH, VARIABLE_WIDTH, ALL_TYPES }; // these are shared by all instances of Font_Browser // created for instance 1 and deleted for instance 0 static int *fixed; static font_pair *font_pairs; static int instance; static int numfonts; private: Fl_Font fontnbr; int fontsize; Fl_Color fontcolor; filter_t filter; void *data_; Fl_Browser *lst_Font; Fl_Browser *lst_Size; Fl_Value_Input2 *txt_Size; Fl_Return_Button *btn_OK; Fl_Button *btn_Cancel; Fl_Button *btn_Color; Fl_Check_Button *btn_fixed; Preview_Box *box_Example; Fl_Callback* callback_; public: Font_Browser(int x = 100, int y = 100, int w = 430, int h = 225, const char *lbl = "Font Browser"); ~Font_Browser(); void callback(Fl_Callback* cb, void *d = 0) { callback_ = cb; data_ = d; } static void fb_callback(Fl_Widget* w, void* arg); void FontNameSelect(); void ColorSelect(); int numFonts() { return numfonts; } void fontNumber(Fl_Font n); Fl_Font fontNumber() { return fontnbr; } void fontSize(int s); int fontSize() { return fontsize; } void fontColor(Fl_Color c); Fl_Color fontColor() { return fontcolor; }; const char *fontName() { return lst_Font->text(lst_Font->value()); } void fontName(const char* n); static bool fixed_width(Fl_Font f); void fontFilter(filter_t filter); }; extern Font_Browser* font_browser; #endif flrig-2.0.04/src/include/hspinner.h0000664000175000017500000000714014502720371014037 00000000000000#ifndef _HSPINNER_H #define _HSPINNER_H // // Include necessary headers... // #include #include #include #include #include #include #include #include #include #include /// This widget is a combination of the input /// widget and repeat buttons. The user can either type into the /// input area or use the buttons to change the value. class Hspinner : public Fl_Group { double value_; // Current value double minimum_; // Minimum value double maximum_; // Maximum value double step_; // Amount to add/subtract for up/down const char *format_; // Format string protected: Fl_Input input_; // Input field for the value Fl_Repeat_Button down_button_; // Up button Fl_Repeat_Button up_button_; // Down button int sH; int sW; int sX; int sY; int sW2; private: static void sb_cb(Fl_Widget *w, Hspinner *sb); void update(); public: /// Creates a new Fl_Spinner widget using the given position, size, /// and label string. /// Inherited destructor Destroys the widget and any value associated with it. Hspinner(int X, int Y, int W, int H, const char *L = 0, int W2 = 0); /// Sets or returns the format string for the value. const char *format() { return (format_); } void format(const char *f) { format_ = f; update(); } int handle(int event); /// Gets/Sets the maximum value of the widget. double maximum() const { return (maximum_); } void maximum(double m) { maximum_ = m; } /// Gets/Sets the minimum value of the widget. double mininum() const { return (minimum_); } void minimum(double m) { minimum_ = m; } /// Sets the minimum and maximum values for the widget. void range(double a, double b) { minimum_ = a; maximum_ = b; } /// Resized the widget void resize(int X, int Y, int W, int H, int W2 = 0); /// Sets or returns the amount to change the value when the user clicks a button. /// Before setting step to a non-integer value, the spinner /// type() should be changed to floating point. double step() const { return (step_); } void step(double s); /// Gets the color of the text in the input field. Fl_Color textcolor() const { return (input_.textcolor()); } /// Sets the color of the text in the input field. void textcolor(Fl_Color c) { input_.textcolor(c); } /// Gets the font of the text in the input field. Fl_Font textfont() const { return (input_.textfont()); } /// Sets the font of the text in the input field. void textfont(Fl_Font f) { input_.textfont(f); } /// Gets the size of the text in the input field. Fl_Fontsize textsize() const { return (input_.textsize()); } /// Sets the size of the text in the input field. void textsize(Fl_Fontsize s) { input_.textsize(s); } /// Gets/Sets the numeric representation in the input field. /// Valid values are FL_INT_INPUT and FL_FLOAT_INPUT. /// Also changes the format() template. /// Setting a new spinner type via a superclass pointer will not work. /// note: type is not a virtual function. unsigned char type() const { return (input_.type()); } void type(unsigned char v); /// Gets/Sets the current value of the widget. /// Before setting value to a non-integer value, the spinner /// type() should be changed to floating point. double value(); void value(double v); /// Get/Set the background color of the spinner widget's input field. void color(Fl_Color v) { input_.color(v); } Fl_Color color() const { return(input_.color()); } /// Get/Set label font size void labelsize(Fl_Fontsize sz); Fl_Fontsize labelsize(); }; #endif // !_HSPINNER_H flrig-2.0.04/src/include/hid_lin.h0000664000175000017500000002332114502720371013616 00000000000000/*********************************************************************** HIDAPI - Multi-Platform library for communication with HID devices. hid_lin.h Alan Ott Signal 11 Software Copyright 2009, All Rights Reserved. C++ implementation * Copyright 2021 * David Freese, W1HKJ * for use in flrig This software is licensed under the terms of the GNU General Public License v3. ***********************************************************************/ #ifndef HIDAPI_H__ #define HIDAPI_H__ #include #include #include #include #include #include #include #include #include class hid_device { public: int device_handle; int blocking; int uses_numbered_reports; hid_device() { device_handle = -1; blocking = 1; uses_numbered_reports = 0; } ~hid_device() {} /** @brief Write an Output report to a HID device. The first byte of @p data[] must contain the Report ID. For devices which only support a single report, this must be set to 0x0. The remaining bytes contain the report data. Since the Report ID is mandatory, calls to hid_write() will always contain one more byte than the report contains. For example, if a hid report is 16 bytes long, 17 bytes must be passed to hid_write(), the Report ID (or 0x0, for devices with a single report), followed by the report data (16 bytes). In this example, the length passed in would be 17. hid_write() will send the data on the first OUT endpoint, if one exists. If it does not, it will send the data through the Control Endpoint (Endpoint 0). @ingroup API @param data The data to send, including the report number as the first byte. @param length The length in bytes of the data to send. @returns This function returns the actual number of bytes written and -1 on error. */ int hid_write(const unsigned char *data, size_t length); /** @brief Read an Input report from a HID device with timeout. Input reports are returned to the host through the INTERRUPT IN endpoint. The first byte will contain the Report number if the device uses numbered reports. @ingroup API @param data A buffer to put the read data into. @param length The number of bytes to read. For devices with multiple reports, make sure to read an extra byte for the report number. @param milliseconds timeout in milliseconds or -1 for blocking wait. @returns This function returns the actual number of bytes read and -1 on error. If no packet was available to be read within the timeout period, this function returns 0. */ int hid_read_timeout(unsigned char *data, size_t length, int milliseconds); /** @brief Read an Input report from a HID device. Input reports are returned to the host through the INTERRUPT IN endpoint. The first byte will contain the Report number if the device uses numbered reports. @ingroup API @param device A device handle returned from hid_open(). @param data A buffer to put the read data into. @param length The number of bytes to read. For devices with multiple reports, make sure to read an extra byte for the report number. @returns This function returns the actual number of bytes read and -1 on error. If no packet was available to be read and the handle is in non-blocking mode, this function returns 0. */ int hid_read(unsigned char *data, size_t length); /** @brief Get a feature report from a HID device. Set the first byte of @p data[] to the Report ID of the report to be read. Make sure to allow space for this extra byte in @p data[]. Upon return, the first byte will still contain the Report ID, and the report data will start in data[1]. @ingroup API @param device A device handle returned from hid_open(). @param data A buffer to put the read data into, including the Report ID. Set the first byte of @p data[] to the Report ID of the report to be read, or set it to zero if your device does not use numbered reports. @param length The number of bytes to read, including an extra byte for the report ID. The buffer can be longer than the actual report. @returns This function returns the number of bytes read plus one for the report ID (which is still in the first byte), or -1 on error. */ int hid_get_feature_report(unsigned char *data, size_t length); /** @brief Set the device handle to be non-blocking. In non-blocking mode calls to hid_read() will return immediately with a value of 0 if there is no data to be read. In blocking mode, hid_read() will wait (block) until there is data to read before returning. Nonblocking can be turned on and off at any time. @ingroup API @param device A device handle returned from hid_open(). @param nonblock enable or not the nonblocking reads - 1 to enable nonblocking - 0 to disable nonblocking. @returns This function returns 0 on success and -1 on error. */ int hid_set_nonblocking(int nonblock); /** @brief Send a Feature report to the device. Feature reports are sent over the Control endpoint as a Set_Report transfer. The first byte of @p data[] must contain the Report ID. For devices which only support a single report, this must be set to 0x0. The remaining bytes contain the report data. Since the Report ID is mandatory, calls to hid_send_feature_report() will always contain one more byte than the report contains. For example, if a hid report is 16 bytes long, 17 bytes must be passed to hid_send_feature_report(): the Report ID (or 0x0, for devices which do not use numbered reports), followed by the report data (16 bytes). In this example, the length passed in would be 17. @ingroup API @param device A device handle returned from hid_open(). @param data The data to send, including the report number as the first byte. @param length The length in bytes of the data to send, including the report number. @returns This function returns the actual number of bytes written and -1 on error. */ int hid_send_feature_report(const unsigned char *data, size_t length); /** @brief Close a HID device. @ingroup API @param device A device handle returned from hid_open(). */ void hid_close(); const char* hid_error(); }; /// hidapi info structure class hid_device_info { public: std::string path; unsigned short vendor_id; unsigned short product_id; unsigned short release_number; std::string str_serial_number; std::string str_manufacturer_string; std::string str_product_string; unsigned short usage_page; // Usage Page for this Device/Interface (Windows/Mac only). unsigned short usage;// Usage for this Device/Interface (Windows/Mac only).*/ /** The USB interface which this logical device represents. Valid on both Linux implementations in all cases, and valid on the Windows implementation only if the device contains more than one interface. */ int interface_number; hid_device_info *next; hid_device_info() {} ~hid_device_info() {} }; /** @brief Enumerate the HID Devices. This function returns a linked list of all the HID devices attached to the system which match vendor_id and product_id. If @p vendor_id is set to 0 then any vendor matches. If @p product_id is set to 0 then any product matches. If @p vendor_id and @p product_id are both set to 0, then all HID devices will be returned. @ingroup API @param vendor_id The Vendor ID (VID) of the types of device to open. @param product_id The Product ID (PID) of the types of device to open. @returns This function returns a pointer to a linked list of type struct #hid_device, containing information about the HID devices attached to the system, or NULL in the case of failure. Free this linked list by calling hid_free_enumeration(). */ hid_device_info *hid_enumerate(unsigned short vendor_id, unsigned short product_id); /** @brief Free an enumeration Linked List This function frees a linked list created by hid_enumerate(). @ingroup API @param devs Pointer to a list of struct_device returned from hid_enumerate(). */ void hid_free_enumeration(hid_device_info *devs); /** @brief Initialize the HIDAPI library. This function initializes the HIDAPI library. Calling it is not strictly necessary, as it will be called automatically by hid_enumerate() and any of the hid_open_*() functions if it is needed. This function should be called at the beginning of execution however, if there is a chance of HIDAPI handles being opened by different threads simultaneously. @ingroup API @returns This function returns 0 on success and -1 on error. */ int hid_init(void); /** @brief Finalize the HIDAPI library. This function frees all of the static data associated with HIDAPI. It should be called at the end of execution to avoid memory leaks. @ingroup API @returns This function returns 0 on success and -1 on error. */ /** @brief Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally a serial number. If @p serial_number is NULL, the first device with the specified VID and PID is opened. @ingroup API @param vendor_id The Vendor ID (VID) of the device to open. @param product_id The Product ID (PID) of the device to open. @param serial_number The Serial Number of the device to open (Optionally NULL). @returns This function returns a pointer to a #hid_device object on success or NULL on failure. */ hid_device * hid_open(unsigned short vendor_id, unsigned short product_id, std::string serial_number = ""); /** @brief Open a HID device by its path name. The path name be determined by calling hid_enumerate(), or a platform-specific path name can be used (eg: /dev/hidraw0 on Linux). @ingroup API @param path The path name of the device to open @returns This function returns a pointer to a #hid_device object on success or NULL on failure. */ hid_device * hid_open_path(std::string path); int hid_exit(void); #endif flrig-2.0.04/src/include/debug.h0000664000175000017500000000720714502720371013303 00000000000000// ---------------------------------------------------------------------------- // debug.h // // Copyright (C) 2008 // Stelios Bounanos, M0GLD // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _DEBUG_H_ #define _DEBUG_H_ #include "util.h" class debug { public: enum level_e { QUIET_LEVEL, ERROR_LEVEL, WARN_LEVEL, INFO_LEVEL, DEBUG_LEVEL, LOG_NLEVELS }; enum source_e { LOG_RIGCONTROL = 1 << 0, LOG_RPC = 1 << 1, LOG_OTHER = 1 << 2 }; static void start(const char* filename); static void stop(void); static void log(level_e level, const char* func, const char* srcf, int line, const char* format, ...) format__(printf, 5, 6); static void slog(level_e level, const char* func, const char* srcf, int line, const char* format, ...) format__(printf, 5, 6); static void elog(const char* func, const char* srcf, int line, const char* text); static void show(void); static level_e level; static uint32_t mask; private: static void sync_text(void*); debug(const char* filename); debug(const debug&); debug& operator=(const debug&); ~debug(); static debug* inst; }; #define LOG(level__, source__, ...) \ do { \ if (level__ <= debug::level && source__ & debug::mask) \ debug::log(level__, __func__, __FILE__, __LINE__, __VA_ARGS__); \ } while (0) #define LOG_DEBUG(...) LOG(debug::DEBUG_LEVEL, log_source_, __VA_ARGS__) #define LOG_INFO(...) LOG(debug::INFO_LEVEL, log_source_, __VA_ARGS__) #define LOG_WARN(...) LOG(debug::WARN_LEVEL, log_source_, __VA_ARGS__) #define LOG_ERROR(...) LOG(debug::ERROR_LEVEL, log_source_, __VA_ARGS__) #define LOG_QUIET(...) LOG(debug::QUIET_LEVEL, log_source_, __VA_ARGS__) #define SLOG(level__, source__, ...) \ do { \ if (level__ <= debug::level && source__ & debug::mask) \ debug::slog(level__, __func__, __FILE__, __LINE__, __VA_ARGS__); \ } while (0) #define SLOG_DEBUG(...) SLOG(debug::DEBUG_LEVEL, log_source_, __VA_ARGS__) #define SLOG_INFO(...) SLOG(debug::INFO_LEVEL, log_source_, __VA_ARGS__) #define SLOG_WARN(...) SLOG(debug::WARN_LEVEL, log_source_, __VA_ARGS__) #define SLOG_ERROR(...) SLOG(debug::ERROR_LEVEL, log_source_, __VA_ARGS__) #define SLOG_QUIET(...) SLOG(debug::QUIET_LEVEL, log_source_, __VA_ARGS__) #define LOG_PERROR(msg__) \ do { \ if (debug::ERROR_LEVEL <= debug::level && log_source_ & debug::mask) \ debug::elog(__func__, __FILE__, __LINE__, msg__); \ } while (0) unused__ static uint32_t log_source_ = debug::LOG_OTHER; #if defined(__GNUC__) && (__GNUC__ >= 3) # define LOG_FILE_SOURCE(source__) \ __attribute__((constructor)) \ static void log_set_source_(void) { log_source_ = source__; } #else # define LOG_FILE_SOURCE(source__) #endif #define LOG_SET_SOURCE(source__) log_source_ = source__ #endif // _DEBUG_H_ // Local Variables: // mode: c++ // c-file-style: "linux" // End: flrig-2.0.04/src/include/other/0000775000175000017500000000000014511461606013242 500000000000000flrig-2.0.04/src/include/other/PowerSDR.h0000664000175000017500000000713314502041135014773 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014, 2020 // Michael Black W9MDB // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _PowerSDR_H #define _PowerSDR_H #include "kenwood/KENWOOD.h" class RIG_PowerSDR : public KENWOOD { public: enum PowerSDRMODES { LSB, USB, DSB, CWL, CWU, FM, AM, DIGU, SPEC, DIGL, SAM, DRM }; RIG_PowerSDR(); ~RIG_PowerSDR(){} void initialize(); void shutdown(); // unsigned long long get_vfoA(); // void set_vfoA(unsigned long long); // unsigned long long get_vfoB(); // void set_vfoB(unsigned long long); // void selectA(); // void selectB(); bool can_split() { return true;} void set_split(bool val); int get_split(); bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int def_bandwidth(int); int get_modetype(int n); int adjust_bandwidth(int val); int set_widths(int val); int get_smeter(); int get_swr(); int get_alc(); // void select_swr(); // void select_alc(); int get_power_out(); double get_power_control(); // void set_volume_control(int val); // int get_volume_control(); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; max = 100; step = 1; } void tune_rig(int val); int get_tune(); // void set_preamp(int val); // int get_preamp(); // int next_preamp(); // const char * PRE_label(); int get_agc(); int incr_agc(); int agc_val(); const char *agc_label(); // void set_if_shift(int val); // bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool on); int get_noise(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } // void set_noise(bool b); // int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); double get_voltmeter(); double get_idd(); bool tuning(); // bool sendTScommand(string, int, bool); std::vector& bwtable(int); // std::vector& lotable(int); // std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/other/sunsdr2.h0000664000175000017500000000601014502041135014717 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _SUNSDR2_H #define _SUNSDR2_H #include "kenwood/KENWOOD.h" class RIG_SDR2_PRO : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; int alc; public: RIG_SDR2_PRO(); ~RIG_SDR2_PRO(){} void initialize(); void shutdown(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_split(bool val); bool can_split(); int get_split(); bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_smeter(); void tune_rig(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void set_volume_control(int val); int get_volume_control(); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); int adjust_bandwidth(int m); int def_bandwidth(int m); int set_widths(int val); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } void set_auto_notch(int v); int get_auto_notch(); std::vector& bwtable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/other/tcisdr.h0000664000175000017500000000761514502041135014623 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef TCI_SDR2_H #define TCI_SDR2_H #include "rigbase.h" #include "tci_io.h" extern std::vector TCI_centers; extern int tci_nbr_centers; extern void tci_adjust_widths(); enum SDR2_TYPE { UNK, PRO, DX }; enum TCI_MODES { TCI_AM, TCI_SAM, TCI_DSB, TCI_LSB, TCI_USB, TCI_CW, TCI_NFM, TCI_DIGL, TCI_DIGU, TCI_WFM, TCI_DRM }; // class RIG_TCI_SDR is never directly declared. used as a base class for // RIG_TCI_SUNDX and RIG_TCI_SUNPRO class RIG_TCI_SDR : public rigbase { private: bool preamp_on; bool att_on; const char *_mode_type; int FilterInner_A; int FilterOuter_A; int FilterInner_B; int FilterOuter_B; int slice; public: RIG_TCI_SDR(); ~RIG_TCI_SDR(){} void initialize(); void shutdown(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); void selectA(); void selectB(); int get_vfoAorB(); void set_slice(int val); int get_slice(); void set_split(bool val); bool can_split(); int get_split(); bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); int get_smeter(); int get_swr(); int get_power_out(); void tune_rig(); void set_volume_control(int val); int get_volume_control(); void set_volume_min_max_step(double &min, double &max, double &step); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); // void set_if_shift(int val); // bool get_if_shift(int &val); // void get_if_min_max_step(int &min, int &max, int &step); void set_noise(bool b); int get_noise(); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); int def_bandwidth(int m); int set_widths(int val); int get_pbt_inner(); int get_pbt_outer(); void set_pbt(int inner, int outer); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } // void set_auto_notch(int v); // int get_auto_notch(); std::vector& bwtable(int); const char *get_bwname_(int bw, int md); int sdrtype; }; class RIG_TCI_SUNPRO : public RIG_TCI_SDR { public: RIG_TCI_SUNPRO(); }; class RIG_TCI_SUNDX : public RIG_TCI_SDR { public: RIG_TCI_SUNDX(); }; #endif flrig-2.0.04/src/include/other/trusdx.h0000664000175000017500000000245314502041135014657 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this pRIGram. If not, see . // ---------------------------------------------------------------------------- #ifndef _TRUSDX_H #define _TRUSDX_H #include "kenwood/KENWOOD.h" class RIG_TRUSDX : public KENWOOD { private: const char *_mode_type; public: RIG_TRUSDX(); ~RIG_TRUSDX(){} void initialize(); void shutdown(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); int get_modetype(int); void get_IF(); void set_PTT_control(int val); }; #endif flrig-2.0.04/src/include/other/AOR5K.h0000664000175000017500000000377014502041135014152 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef AOR5K_H #define AOR5K_H #include "rigbase.h" class RIG_AOR5K : public rigbase { public: RIG_AOR5K(); ~RIG_AOR5K(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void selectA(); void selectB(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); // const char * PRE_label(); const char * ATT_label(); int get_smeter(); void set_noise(bool on); int get_noise(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int m); int def_bandwidth(int m); bool twovfos() {return true;} void shutdown(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); private: int agcval; /* int get_swr(); void tune_rig(); */ }; #endif flrig-2.0.04/src/include/other/SmartSDR.h0000664000175000017500000000414414502041135014764 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2023 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _SmartSDR_H #define _SmartSDR_H #include "kenwood/KENWOOD.h" class RIG_SmartSDR : public KENWOOD { private: int FilterInner; int FilterOuter; public: enum SmartSDRMODES { LSB, USB, CWL, CWU, FM, AM, DIGU, DIGL, SAM, NFM, DFM, RTTY }; RIG_SmartSDR(); ~RIG_SmartSDR(){} void initialize(); void shutdown(); const char * get_bwname_(int n, int md); int get_smeter(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_power_control(double val); double get_power_control(); int set_widths(int val); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int adjust_bandwidth(int val); int def_bandwidth(int val); int get_bw(int mode); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int get_modetype(int n); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_PTT_control(int val); int get_PTT(); std::vector& bwtable(int); }; #endif flrig-2.0.04/src/include/other/PCR1000.h0000664000175000017500000000742014502041135014252 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _PCR1000_H #define _PCR1000_H #include "rigbase.h" // #include "support.h" class RIG_PCR1000 : public rigbase { public: private: static const char get_smeter_command[]; static char volume_command[]; static char squelch_command[]; static char if_shift_command[]; static char check_power_command[]; static char power_on_command[]; static char power_off_command[]; static const char agcontrol_off_command[]; static const char agcontrol_on_command[]; static const char an_off_command[]; static const char an_on_command[]; static const char att_off_command[]; static const char att_on_command[]; static const char nr_off_command[]; static const char nr_on_command[]; static char nr_level_command[]; static const char noise_off_command[]; static const char noise_on_command[]; int current_volume; int att_level; int nb_level; int active_bandwidth; int active_mode; int sql; int if_shift; int nr_level; int attenuator; int noise; int preamp; int auto_notch; int noise_reduction; int noise_reduction_level; bool notch_on; bool att_on; bool nr_on; bool is_PCR1000; // Set the frequency, mode, bandwidth in the current vfo std::string strFreqModeBW(XCVR_STATE &freqMode); int hexTo(const char c) const; void set2Hex(int ival, char *cptr); public: RIG_PCR1000(); ~RIG_PCR1000(){ }; void initialize(); void shutdown(); void set_volume_control(int val); int get_volume_control(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void A2B(); void swapAB(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int get_smeter(); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -800; if_shift_max = max = 800; if_shift_step = step = 10; } void get_if_mid() {if_shift_mid = 0; } void set_attenuator(int val); int get_attenuator(); void set_noise(bool on); int get_noise(); void set_agccontrol(int val); // Modified for PCR-1000 AGC int get_agcontrol(); void set_preamp(int val); // Modified for PCR-1000 AGC int get_preamp(); // Added for UT-106 Module DSP functions void set_auto_notch(int val); int get_auto_notch(); void set_noise_reduction(int val); int get_noise_reduction(); void set_noise_reduction_val(int val); // int get_noise_reduction_val(); - not needed but left as a prototype for future use void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 15; step = 1; } }; #endif flrig-2.0.04/src/include/other/TMD710.h0000664000175000017500000000231014502041135014172 00000000000000// 20201224 #ifndef TMD710_H #define TMD710_H #include "rigbase.h" class RIG_TMD710 : public rigbase { public: RIG_TMD710(); ~RIG_TMD710(){} void initialize(); bool check(); unsigned long long get_vfoA(); unsigned long long get_vfoB(); void set_vfoA(unsigned long long); void set_vfoB(unsigned long long); void set_modeA(int val); void set_modeB(int val); int get_modeA(); int get_modeB(); int get_modetype(int); int adjust_bandwidth(int val) { return 0; } void selectA(); void selectB(); // void set_attenuator(int val); // int get_attenuator(); // void set_preamp(int val); // int get_preamp(); // int get_smeter(); // int get_swr(); // int get_power_out(); // double get_power_control(); // void set_volume_control(double val); // void set_power_control(double val); void set_PTT_control(int val); int get_PTT(); // void tune_rig(); // void set_bwA(int val); double get_power_control(); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; max = 50; step = 5; } void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 31; step = 1; } }; #endif flrig-2.0.04/src/include/other/FLEX1500.h0000664000175000017500000000740214505023152014373 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014, 2020 // Michael Black W9MDB // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FLEX1500_H #define _FLEX1500_H #include "kenwood/KENWOOD.h" class RIG_FLEX1500 : public KENWOOD { private: int FilterInner; int FilterOuter; public: enum FLEX1500MODES { LSB, USB, DSB, CWL, CWU, FM, AM, DIGU, SPEC, DIGL, SAM, DRM }; RIG_FLEX1500(); ~RIG_FLEX1500(){} void initialize(); void shutdown(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); // void selectA(); // void selectB(); bool can_split() { return true;} void set_split(bool val); int get_split(); bool twovfos() {return true;} void set_PTT_control(int val); int get_PTT(); void set_modeA(int val); int get_modeA(); int get_bw(int); void set_bwA(int val); int get_bwA(); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int def_bandwidth(int); int get_pbt_inner(); int get_pbt_outer(); void set_pbt(int inner, int outer); int get_modetype(int n); int adjust_bandwidth(int val); int set_widths(int val); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); // void select_swr(); // void select_alc(); double get_power_control(); // void set_volume_control(int val); // int get_volume_control(); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; max = 100; step = 1; } void tune_rig(int val); int get_tune(); int get_preamp(); void set_preamp(int); // int next_preamp(); // const char * PRE_label(); // void set_if_shift(int val); // bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } // void set_noise(bool b); // int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void set_noise(bool b); int get_noise(); bool tuning(); // bool sendTScommand(string, int, bool); std::vector& bwtable(int); // std::vector& lotable(int); // std::vector& hitable(int); const char * get_bwname_(int bw, int md); }; #endif flrig-2.0.04/src/include/other/RAY152.h0000664000175000017500000000425414502041135014212 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _RAY152_H #define _RAY152_H #include "rigbase.h" #include "rigpanel.h" class RIG_RAY152 : public rigbase { public: RIG_RAY152(); ~RIG_RAY152(){} void initialize(); void shutdown(); void get_data(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_PTT_control(int val); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); int get_volume_control() {return vol;} void get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void set_volume_control(int val); void set_rf_gain(int val); int get_rf_gain() {return rfg;} void get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void setRit(int v); int getRit(); void get_RIT_min_max_step(int &min, int &max, int &step) { min = -200; max = 200; step = 10; } int get_smeter(void); int get_power_out(void); void set_squelch(int val); int get_squelch(); void set_noise(bool on); int get_noise(); void set_auto_notch(int v); int get_auto_notch(); int adjust_bandwidths(int m) { return 0; } private: int vol; int rfg; int squelch; int nb; int nb_set; int agc; bool dumpdata; }; #endif flrig-2.0.04/src/include/K4_ui.h0000664000175000017500000000213314502720371013161 00000000000000// ===================================================================== // K4 user interface support // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- void read_K4_vfo(); void read_K4_mode(); void read_K4_bw(); void K4_set_split(int val); void K4_A2B(); void cb_K4_swapAB(); flrig-2.0.04/src/include/rigpanel.h0000664000175000017500000004644414505120506014021 00000000000000//====================================================================== // // flrig user interface include file // // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef UI_DIALOGS #define UI_DIALOGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "flinput2.h" #include "flbrowser2.h" #include "Fl_SigBar.h" #include "FreqControl.h" #include "combo.h" #include "ValueSlider.h" #include "hspinner.h" #include "pl_tones.h" extern Fl_Double_Window* XcvrDialog(); extern Fl_Double_Window* MetersDialog(); extern Fl_Double_Window* power_meter_scale_select(); extern Fl_Double_Window* DisplayDialog(); extern Fl_Double_Window* Memory_Dialog(); extern Fl_Double_Window* Wide_rig_window(); extern Fl_Double_Window* Small_rig_window(); extern Fl_Double_Window* touch_rig_window(); extern Fl_Double_Window* tabs_window(); extern Fl_Double_Window* win_meters(); extern void select_power_meter_scales(); extern Fl_Output *txt_encA; extern Fl_Group *sm_grp1; extern Fl_Group *grpMeters; extern Fl_Box *scaleSmeter; extern Fl_Button *btnALC_IDD_SWR; extern Fl_SigBar *sldrRcvSignal; extern Fl_SigBar *sldrIDD; extern Fl_SigBar *sldrALC; extern Fl_SigBar *sldrSWR; extern Fl_SigBar *sldrFwdPwr; extern Fl_Button *scalePower; extern Fl_Box *meter_fill_box; extern Fl_SigBar *sldrVoltage; extern Fl_Box *scaleVoltage; extern cFreqControl *FreqDispA; extern cFreqControl *FreqDispB; extern Fl_Group *grp_row0a; extern Fl_Light_Button *btnA; extern Fl_Button *btn_K3_swapAB; extern Fl_Button *btn_K3_A2B; extern Fl_Button *btn_KX3_swapAB; extern Fl_Button *btn_KX3_A2B; extern Fl_Light_Button *btnB; extern Fl_Box *labelMEMORY; extern Fl_Button *btnTune; extern Fl_Light_Button *btn_tune_on_off; extern Fl_Box *bx_row0_expander; extern Fl_Button *btn_show_controls; extern Fl_Group *grp_row1; extern Fl_Group *grp_row1a; extern Fl_ComboBox *opCENTER; extern Fl_ComboBox *opBW; extern Fl_ComboBox *opBW_A; extern Fl_ComboBox *opBW_B; extern Fl_Button *btnDSP; extern Fl_ComboBox *opDSP_lo; extern Fl_ComboBox *opDSP_hi; extern Fl_Counter *opFilterInner; extern Fl_Counter *opFilterOuter; extern Fl_Button *btnFILT; extern Fl_Button *btnCENTER; extern Fl_ComboBox *opMODE; extern Fl_Group *grp_row1b; extern Fl_Group *grp_row1b1; extern Fl_Light_Button *btnAttenuator; extern Fl_Light_Button *btnPreamp; extern Fl_Light_Button *btnNOISE; extern Fl_Light_Button *btnAutoNotch; extern Fl_Group *grp_row1b2; extern Fl_Button *btnAswapB; extern Fl_Light_Button *btnSplit; extern Fl_Light_Button *btnPTT; extern Fl_Box *bx_row1_expander2; extern Fl_Group *grp_row2; extern Fl_Group *grp_row2a; extern Fl_ComboBox *cbo_attenuator; extern Fl_ComboBox *cbo_preamp; extern Fl_Wheel_Value_Slider *sldrSQUELCH; extern Fl_Wheel_Value_Slider *sldrMICGAIN; extern Fl_Box *bx_sep2a; extern Fl_Group *grp_row2b; extern Fl_Light_Button *btnIFsh; extern Fl_Button *btn_KX3_IFsh; extern Fl_Wheel_Value_Slider *sldrIFSHIFT; extern Fl_Light_Button *btnNR; extern Fl_Wheel_Value_Slider *sldrNR; extern Fl_Box *bx_sep2b; extern Fl_Group *grp_row2c; extern Fl_Light_Button *btnNotch; extern Fl_Wheel_Value_Slider *sldrNOTCH; extern Fl_Light_Button *btnAGC; extern Fl_Wheel_Value_Slider *sldrRFGAIN; extern Fl_Box *bx_sep2c; extern Fl_Group *grp_row2d; extern Fl_Light_Button *btnLOCK; extern Fl_Button *btnCLRPBT; extern Fl_Wheel_Value_Slider *sldrINNER; extern Fl_Wheel_Value_Slider *sldrOUTER; extern Fl_Wheel_Value_Slider *sldrPOWER; extern Fl_Light_Button *btnPOWER; extern Hspinner *spnrPOWER; extern Hspinner *spnrVOLUME; extern Hspinner *spnrRFGAIN; extern Hspinner *spnrSQUELCH; extern Hspinner *spnrNR; extern Hspinner *spnrIFSHIFT; extern Hspinner *spnrNOTCH; extern Hspinner *spnrMICGAIN; extern Fl_Light_Button *btnVol; extern Fl_Wheel_Value_Slider *sldrVOLUME; extern Fl_Group *grpTABS; // wide UI group exposure extern Fl_Group *grp_row1b1b; extern Fl_Tabs *tabsGeneric; extern Fl_Group *hidden_tabs; extern Fl_Group *tab_yaesu_bands; extern Fl_Button *btn_yaesu_select_1; extern Fl_Button *btn_yaesu_select_2; extern Fl_Button *btn_yaesu_select_3; extern Fl_Button *btn_yaesu_select_4; extern Fl_Button *btn_yaesu_select_5; extern Fl_Button *btn_yaesu_select_6; extern Fl_Button *btn_yaesu_select_7; extern Fl_Button *btn_yaesu_select_8; extern Fl_Button *btn_yaesu_select_9; extern Fl_Button *btn_yaesu_select_10; extern Fl_Button *btn_yaesu_select_11; extern Fl_ComboBox *op_yaesu_select60; extern Fl_Group *tab_ft991_bands; extern Fl_Button *btn_ft991_select_1; extern Fl_Button *btn_ft991_select_2; extern Fl_Button *btn_ft991_select_3; extern Fl_Button *btn_ft991_select_4; extern Fl_Button *btn_ft991_select_5; extern Fl_Button *btn_ft991_select_6; extern Fl_Button *btn_ft991_select_7; extern Fl_Button *btn_ft991_select_8; extern Fl_Button *btn_ft991_select_9; extern Fl_Button *btn_ft991_select_10; extern Fl_Button *btn_ft991_select_11; extern Fl_Button *btn_ft991_select_12; extern Fl_Button *btn_ft991_select_13; extern Fl_PL_tone *choice_ft991_tTONE; extern Fl_PL_tone *choice_ft991_rTONE; extern Fl_Group *tab_FT8n_bands; extern Fl_Button *btn_FT8n_select_1; extern Fl_Button *btn_FT8n_select_2; extern Fl_Button *btn_FT8n_select_3; extern Fl_Button *btn_FT8n_select_4; extern Fl_Button *btn_FT8n_select_5; extern Fl_Button *btn_FT8n_select_6; extern Fl_Button *btn_FT8n_select_7; extern Fl_Button *btn_FT8n_select_8; extern Fl_Button *btn_FT8n_select_9; extern Fl_Button *btn_FT8n_select_10; extern Fl_Button *btn_FT8n_select_11; extern Fl_Button *btn_FT8n_select_12; extern Fl_Button *btn_FT8n_select_13; extern Fl_Group *tab_FT8n_CTCSS; extern Fl_PL_tone *choice_FT8n_tTONE; extern Fl_PL_tone *choice_FT8n_rTONE; extern Fl_Button *setTONES; extern Fl_ComboBox *FMoffset; extern Fl_Button *setOFFSET; extern cFreqControl *FMoff_freq; extern Fl_Group *tab_icom_bands; extern Fl_Button *btn_icom_select_1; extern Fl_Button *btn_icom_select_2; extern Fl_Button *btn_icom_select_3; extern Fl_Button *btn_icom_select_4; extern Fl_Button *btn_icom_select_5; extern Fl_Button *btn_icom_select_6; extern Fl_Button *btn_icom_select_7; extern Fl_Button *btn_icom_select_8; extern Fl_Button *btn_icom_select_9; extern Fl_Button *btn_icom_select_10; extern Fl_Button *btn_icom_select_11; extern Fl_Button *btn_icom_select_12; extern Fl_Button *btn_icom_select_13; extern Fl_PL_tone *choice_tTONE; extern Fl_PL_tone *choice_rTONE; extern int PL_tones[50]; extern const char *szTONES; extern Fl_Group *genericCW; extern Fl_Light_Button *btnSpot; extern Fl_Group *genericQSK; extern Fl_Button *btnBreakIn; extern Hspinner *spnr_cw_delay; extern Hspinner *cnt_cw_qsk; extern Fl_Group *tab7610; extern Fl_ComboBox *ic7610att; extern Fl_Light_Button *ic7610dual_watch; extern Fl_Light_Button *ic7610digi_sel_on_off; extern Fl_Wheel_Value_Slider *ic7610_digi_sel_val; //extern Fl_Group *kx3_extras; //extern Fl_Check_Button *kxpa_enabled; extern Fl_Group *genericUser_1; extern Fl_Button *btnUser1; extern Fl_Button *btnUser2; extern Fl_Button *btnUser3; extern Fl_Button *btnUser4; extern Fl_Button *btnUser5; extern Fl_Button *btnUser6; extern Fl_Button *btnUser7; extern Fl_Button *btnUser8; extern Fl_Output *cmdResponse; extern Fl_Group *genericUser_2; extern Fl_Button *btnUser9; extern Fl_Button *btnUser10; extern Fl_Button *btnUser11; extern Fl_Button *btnUser12; extern Fl_Button *btnUser13; extern Fl_Button *btnUser14; extern Fl_Button *btnUser15; extern Fl_Button *btnUser16; extern Fl_Group *genericUser_3; extern Fl_Button *btnUser17; extern Fl_Button *btnUser18; extern Fl_Button *btnUser19; extern Fl_Button *btnUser20; extern Fl_Button *btnUser21; extern Fl_Button *btnUser22; extern Fl_Button *btnUser23; extern Fl_Button *btnUser24; extern Hspinner *spnr_cw_spot_tone; extern Hspinner *spnr_cw_qsk; extern Hspinner *spnr_cw_weight; extern Hspinner *spnr_cw_wpm; extern Fl_Check_Button *btn_enable_keyer; extern Fl_Group *genericVOX; extern Hspinner *spnr_vox_gain; extern Hspinner *spnr_anti_vox; extern Hspinner *spnr_vox_hang; extern Fl_Light_Button *btn_vox; extern Fl_Check_Button *btn_vox_on_dataport; extern Fl_Group *genericSpeech; extern Fl_Light_Button *btnCompON; extern Hspinner *spnr_compression; extern Fl_Group *genericRx; extern Fl_Wheel_Value_Slider *sldr_nb_level; //extern Fl_ComboBox *cbo_agc_level; extern Hspinner *spnr_bpf_center; extern Fl_Check_Button *btn_use_bpf_center; extern Fl_Group *genericMisc; extern Hspinner *spnr_vfo_adj; extern Hspinner *spnr_line_out; extern Fl_Light_Button *btnSpecial; extern Fl_Check_Button *btn_ext_tuner; extern Fl_Check_Button *btn_xcvr_auto_on; extern Fl_Check_Button *btn_xcvr_auto_off; extern Fl_Check_Button *btn_xcvr_synch_clock; extern Fl_Check_Button *btn_xcvr_synch_gmt; extern Fl_Button *btn_xcvr_synch_now; extern Fl_Output *txt_xcvr_synch; extern Fl_Group *genericRXB; extern Hspinner *cntRIT; extern Hspinner *cntXIT; extern Hspinner *cntBFO; extern Fl_Group *genericAux; extern Fl_Light_Button *btnAuxRTS; extern Fl_Light_Button *btnAuxDTR; extern Fl_Light_Button *btnDataPort; extern Fl_Tabs *tabs550; extern Fl_Group *tt550_CW; extern Hspinner *spnr_tt550_cw_wpm; extern Hspinner *spnr_tt550_cw_weight; extern Hspinner *spnr_tt550_cw_qsk; extern Hspinner *spnr_tt550_cw_vol; extern Hspinner *spnr_tt550_cw_spot; extern Fl_Check_Button *btn_tt550_enable_keyer; extern Fl_Group *tt550_VOX; extern Hspinner *spnr_tt550_vox_gain; extern Hspinner *spnr_tt550_anti_vox; extern Hspinner *spnr_tt550_vox_hang; extern Fl_Light_Button *btn_tt550_vox; extern Fl_Group *tt550_Speech; extern Fl_Light_Button *btn_tt550_CompON; extern Hspinner *spnr_tt550_compression; extern Hspinner *spnr_tt550_mon_vol; extern Fl_Group *tt550_Audio; extern Hspinner *spnr_tt550_line_out; extern Fl_Check_Button *btnAccInp; extern Fl_Group *tt550_Rx; extern Fl_ComboBox *cbo_tt550_nb_level; extern Fl_ComboBox *cbo_tt550_agc_level; extern Hspinner *spnr_tt550_vfo_adj; extern Fl_Group *tt550_Tx; extern Fl_Check_Button *btn_tt550_enable_xmtr; extern Fl_Check_Button *btn_tt550_enable_tloop; extern Fl_Check_Button *btn_tt550_tuner_bypass; extern Fl_ComboBox *op_tt550_XmtBW; extern Fl_Check_Button *btn_tt550_use_xmt_bw; extern Fl_Group *tt550_302A; extern Hspinner *spnr_tt550_keypad_time_out; extern Hspinner *spnr_tt550_encoder_sensitivity; extern Fl_Choice *sel_tt550_encoder_step; extern Fl_Group *tt550_302B; extern Fl_Choice *sel_tt550_F1_func; extern Fl_Choice *sel_tt550_F2_func; extern Fl_Choice *sel_tt550_F3_func; extern Fl_Light_Button *tt550_AT_inline; extern Fl_Light_Button *tt550_AT_Z; extern Fl_Group *main_group; extern Fl_Group *grpInitializing; extern Fl_Progress *progress; extern Fl_Group *grp_menu; extern Fl_Menu_Item *mnuExit; extern Fl_Menu_Item *mnuConfig; extern Fl_Menu_Item *mnuRestoreData; extern Fl_Menu_Item *mnuKeepData; extern Fl_Menu_Item *mnuTooltips; extern Fl_Menu_Item *mnuVoltmeter; extern Fl_Menu_Item *mnuSchema; extern Fl_Menu_Item *mnuEmbedTabs; extern Fl_Menu_Item *mnuColorConfig; extern Fl_Menu_Item *mnu_meter_filtering; extern Fl_Menu_Item *mnuConfigXcvr; extern Fl_Menu_Item *save_me; extern Fl_Menu_Item *mnuHelp; extern Fl_Menu_Item *mnuOnLineHelp; extern Fl_Menu_Item *mnuAbout; extern Fl_Box *tcpip_menu_box; extern Fl_Group *tcpip_box; extern Fl_Check_Button *chk_use_tcpip; extern Fl_Check_Button *btn_wide_ui; extern Fl_Check_Button *btn_narrow_ui; extern Fl_Check_Button *btn_touch_ui; extern Fl_Check_Button *chk_sliders_button; extern Fl_Box *lblTest; extern Fl_Button *prefFont; extern Fl_Button *prefForeground; extern Fl_Button *btnBacklight; extern Fl_Group *grpMeterColor; extern Fl_Box *scaleSmeterColor; extern Fl_SigBar *sldrRcvSignalColor; extern Fl_SigBar *sldrSWRcolor; extern Fl_Box *scaleSWRcolor; extern Fl_SigBar *sldrPWRcolor; extern Fl_Box *scalePWRcolor; extern Fl_SigBar *sldrVoltcolor; extern Fl_Box *scaleVoltcolor; extern Fl_Button *btMeterColor; extern Fl_Button *btnSWRColor; extern Fl_Button *btnPwrColor; extern Fl_Button *btnPeakColor; extern Fl_Choice *mnuScheme; extern Fl_Button *pref_sys_foreground; extern Fl_Button *pref_sys_background; extern Fl_Button *prefsys_background2; extern Fl_Button *prefsys_defaults; extern Fl_Wheel_Value_Slider *sldrColors; extern Fl_Button *pref_slider_background; extern Fl_Button *pref_slider_select; extern Fl_Button *prefslider_defaults; extern Fl_Button *btnReset; extern Fl_Button *btnCancel; extern Fl_Return_Button *btnOkDisplayDialog; extern Fl_Light_Button *btn_lighted; extern Fl_Button *btn_lighted_default; extern Fl_Button *btn_tab_color; extern Fl_Button *btnAddFreq; extern Fl_Button *btnPickFreq; extern Fl_Button *btnDelFreq; extern Fl_Button *btnClearList; extern Fl_Browser2 *FreqSelect; extern Fl_Input *inAlphaTag; extern Fl_ComboBox *selectRig; extern Fl_Group *tabCommands; extern Fl_Tabs *tabCmds; extern Fl_Group *tabCmds1; extern Fl_Group *tabCmds2; extern Fl_Input2 * cmdlbl1; extern Fl_Input2 * cmdlbl2; extern Fl_Input2 * cmdlbl3; extern Fl_Input2 * cmdlbl4; extern Fl_Input2 * cmdlbl5; extern Fl_Input2 * cmdlbl6; extern Fl_Input2 * cmdlbl7; extern Fl_Input2 * cmdlbl8; extern Fl_Input2 * cmdlbl9; extern Fl_Input2 * cmdlbl10; extern Fl_Input2 * cmdlbl11; extern Fl_Input2 * cmdlbl12; extern Fl_Input2 * cmdlbl13; extern Fl_Input2 * cmdlbl14; extern Fl_Input2 * cmdlbl15; extern Fl_Input2 * cmdlbl16; extern Fl_Input2 * cmdtext1; extern Fl_Input2 * cmdtext2; extern Fl_Input2 * cmdtext3; extern Fl_Input2 * cmdtext4; extern Fl_Input2 * cmdtext5; extern Fl_Input2 * cmdtext6; extern Fl_Input2 * cmdtext7; extern Fl_Input2 * cmdtext8; extern Fl_Input2 * cmdtext9; extern Fl_Input2 * cmdtext10; extern Fl_Input2 * cmdtext11; extern Fl_Input2 * cmdtext12; extern Fl_Input2 * cmdtext13; extern Fl_Input2 * cmdtext14; extern Fl_Input2 * cmdtext15; extern Fl_Input2 * cmdtext16; extern Fl_Counter *cntRigCatRetries; extern Fl_Counter *cntRigCatTimeout; extern Fl_Counter *cntWriteDelay;; extern Fl_Counter *cntPostWriteDelay; extern Fl_Counter *query_interval; extern Fl_ComboBox *selectCommPort; extern Fl_ComboBox *mnuBaudrate; extern Fl_Check_Button *btnTwoStopBit; extern Fl_Check_Button *btnOneStopBit; extern Fl_Check_Button *btnRigCatEcho; extern Fl_Input *server_addr; extern Fl_Int_Input *server_port; extern Fl_ListBox *lbox_catptt; extern Fl_ListBox *lbox_rtsptt; extern Fl_ListBox *lbox_dtrptt; extern Fl_Check_Button *chkrtscts; extern Fl_Check_Button *btnrtsplus1; extern Fl_Check_Button *btndtrplus1; extern Fl_Check_Button *btnrtsplus2; extern Fl_Check_Button *btndtrplus2; extern Fl_Int_Input *txtCIV; extern Fl_Button *btnCIVdefault; extern Fl_Check_Button *btnUSBaudio; extern Fl_Check_Button *btn_key_fldigi; extern Fl_Group *tabPTTGEN; extern Fl_ComboBox *selectSepPTTPort; extern Fl_Check_Button *btnSep_SCU_17; extern Fl_ListBox *lbox_sep_rtsptt; extern Fl_Check_Button *btnSepRTSplus; extern Fl_ListBox *lbox_sep_dtrptt; extern Fl_Check_Button *btnSepDTRplus; extern Fl_Group *tabAux; extern Fl_ComboBox *selectAuxPort; extern Fl_Check_Button *btnAux_SCU_17; extern Fl_Group *tabPolling; extern Fl_Group *tabTRACE; extern Fl_Group *tabRestore; extern Fl_Group *tabTCPIP; extern Fl_Group *tabXMLRPC; extern Fl_Check_Button *poll_smeter; extern Fl_Check_Button *poll_pout; extern Fl_Check_Button *poll_swr; extern Fl_Check_Button *poll_alc; extern Fl_Check_Button *poll_frequency; extern Fl_Check_Button *poll_mode; extern Fl_Check_Button *poll_bandwidth; extern Fl_Check_Button *poll_volume; extern Fl_Check_Button *poll_micgain; extern Fl_Check_Button *poll_rfgain; extern Fl_Check_Button *poll_power_control; extern Fl_Check_Button *poll_ifshift; extern Fl_Check_Button *poll_pbt; extern Fl_Check_Button *poll_notch; extern Fl_Check_Button *poll_auto_notch; extern Fl_Check_Button *poll_pre_att; extern Fl_Check_Button *poll_squelch; extern Fl_Check_Button *poll_split; extern Fl_Check_Button *poll_noise; extern Fl_Check_Button *poll_nr; extern Fl_Check_Button *poll_compression; extern Fl_Check_Button *poll_ptt; extern Fl_Check_Button *poll_tuner; extern Fl_Check_Button *poll_break_in; extern Fl_Button *btnClearAddControls; extern Fl_Check_Button *poll_all; extern Fl_Button *btnSetAllAdd; extern Fl_Check_Button *disable_polling; extern Fl_Check_Button *disable_xmlrpc; extern Fl_Group *tabSndCmd; extern Fl_Input2 *txt_command; extern Fl_Button *btn_send_command; extern Fl_Output *txt_response; extern Fl_Box *box_xcvr_connect; extern Fl_Box *box_fldigi_connect; extern Fl_Box *box_tcpip_connect; extern Fl_Button *btnCloseCommConfig; extern Fl_Button *btnOkXcvrDialog; extern Fl_Button *btnOkSepSerial; extern Fl_Button *btnOkAuxSerial; extern Fl_Counter *inp_tcpip_ping_delay; extern Fl_Counter *cntRetryAfter; extern Fl_Counter *cntDropsAllowed; extern Fl_Wheel_Value_Slider *sldr_smeter_avg; extern Fl_Wheel_Value_Slider *sldr_smeter_peak; extern Fl_Wheel_Value_Slider *sldr_pout_avg; extern Fl_Wheel_Value_Slider *sldr_pout_peak; extern Fl_Button *sel_25; extern Fl_Button *sel_100; extern Fl_Button *sel_auto; extern Fl_Button *sel_50; extern Fl_Button *sel_200; extern Fl_Output *pwr_scale_description; extern Fl_Group *tabRestore; extern Fl_Check_Button *btnRestoreFrequency; extern Fl_Check_Button *btnRestoreMode; extern Fl_Check_Button *btnRestoreBandwidth; extern Fl_Check_Button *btnRestoreVolume; extern Fl_Check_Button *btnRestoreMicGain; extern Fl_Check_Button *btnRestoreRfGain; extern Fl_Check_Button *btnRestorePowerControl; extern Fl_Check_Button *btnRestoreIFshift; extern Fl_Check_Button *btnRestoreNotch; extern Fl_Check_Button *btnRestoreAutoNotch; extern Fl_Check_Button *btnRestoreSquelch; extern Fl_Check_Button *btnRestoreSplit; extern Fl_Check_Button *btnRestorePreAtt; extern Fl_Check_Button *btnRestoreNoise; extern Fl_Check_Button *btnRestoreNR; extern Fl_Check_Button *btnRestoreCompOnOff; extern Fl_Check_Button *btnRestoreCompLevel; extern Fl_Check_Button *btnUseRigData; extern Fl_Group *tabCMEDIA; extern Fl_Round_Button *btn_use_cmedia_PTT; extern Fl_ComboBox *inp_cmedia_dev; extern Fl_ComboBox *inp_cmedia_GPIO_line; extern Fl_Button *btn_init_cmedia_PTT; extern Fl_Button *btn_test_cmedia; extern Fl_Group *tabTMATE2; extern Fl_ComboBox *cbo_tmate2_freq_step; extern Fl_ComboBox *cbo_tmate2_dev; extern Fl_Group *tabs; extern void exec_btnUser(int val, bool shift = 0); #endif flrig-2.0.04/src/include/socket.h0000664000175000017500000001006014502720371013474 00000000000000// ---------------------------------------------------------------------------- // socket.h // // Copyright (C) 2008-2009 // Stelios Bounanos, M0GLD // // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef SOCKET_H_ #define SOCKET_H_ #include "config.h" #include #ifndef __MINGW32__ # include # include # include #else # include #endif #include #include #include class SocketException : public std::exception { public: SocketException(int err_ = 0) : err(err_), msg(err_to_str(err_)) { } SocketException(const char* msg_) : err(1), msg(msg_) { } SocketException(int err_, const std::string& prefix) : err(err_), msg(std::string(prefix).append(": ").append(err_to_str(err_))) { } virtual ~SocketException() throw() { } const char* what(void) const throw() { return msg.c_str(); } int error(void) const { return err; } protected: const char* err_to_str(int e) { #if HAVE_GETADDRINFO if (e < 0) return gai_strerror(e); else #endif return strerror(e); } int err; std::string msg; }; #if HAVE_GETADDRINFO typedef struct addrinfo addr_info_t; #else struct addr_info_t { int ai_family; int ai_socktype; int ai_protocol; int ai_addrlen; struct sockaddr* ai_addr; }; #endif class Address { public: Address(const char* host = "", int port = 0, const char* proto_name = "tcp"); Address(const char* host, const char* port_name, const char* proto_name = "tcp"); Address(const Address& addr); ~Address(); Address& operator=(const Address& rhs); size_t size(void) const; const addr_info_t* get(size_t n = 0) const; static std::string get_str(const addr_info_t* addr); private: void lookup(const char* proto_name); std::string node; std::string service; int port; #if HAVE_GETADDRINFO struct addrinfo* info; #else struct hostent host_entry; struct servent service_entry; mutable addr_info_t addr; mutable struct sockaddr_in saddr; #endif bool copied; }; class Socket { public: Socket(const Address& addr); Socket(int fd = -1); Socket(const Socket& s); ~Socket(); Socket& operator=(const Socket& rhs); void open(const Address& addr); void close(void); bool wait(int dir); // Server void bind(void); void listen(int backlog = SOMAXCONN); Socket accept(void); Socket accept1(void); // Client void connect(const Address& addr); void connect(void); // Data Transimission size_t send(const void* buf, size_t len); size_t send(const std::string);//& buf); size_t recv(void* buf, size_t len); size_t recv(std::string& buf); // Options int get_bufsize(int dir); void set_bufsize(int dir, int len); void set_nonblocking(bool v = true); void set_nodelay(bool v = true); void set_timeout(const struct timeval& t); void set_timeout(double t); void set_autoclose(bool v) const; void set_close_on_exec(bool v, int fd = -1); int fd(void); private: int sockfd; Address address; size_t anum; const addr_info_t* ainfo; char* buffer; struct timeval timeout; bool nonblocking; mutable bool autoclose; }; #endif // SOCKET_H_ // Local Variables: // mode: c++ // c-file-style: "linux" // End: flrig-2.0.04/src/include/tentec/0000775000175000017500000000000014511461606013403 500000000000000flrig-2.0.04/src/include/tentec/TT538.h0000664000175000017500000000470214502041135014255 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TT538_H #define _TT538_H #include "rigbase.h" class RIG_TT538 : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; double VfoAdj; public: RIG_TT538(); ~RIG_TT538(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeA(int val); int get_modeA(); // void set_modeB(int val); // int get_modeB(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); // void set_bwB(int val); // int get_bwB(); bool twovfos() { return false; } // void set_split(bool); bool can_split() {return false;} int get_smeter(); void set_volume_control(int val); int get_volume_control(); void set_attenuator(int val); int get_attenuator(); void set_rf_gain(int val); int get_rf_gain(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void setVfoAdj(double v); int get_swr(); int get_power_out(); // double get_power_control(); // void set_power_control(double val); void set_PTT_control(int val); // void tune_rig(); // void set_preamp(int val); // int get_preamp(); // void set_notch(bool on, int val); // bool get_notch(int &val); // void get_notch_min_max_step(int &min, int &max, int &step); // void set_noise(bool b); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); void checkresponse(std::string s); void shutdown(); int adjust_bandwidth(int m); }; #endif flrig-2.0.04/src/include/tentec/TT588.h0000664000175000017500000000562514502041135014267 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TT588_H #define _TT588_H #include "rigbase.h" class RIG_TT588 : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; double VfoAdj; int vfo_corr; int an_; int nb_; public: RIG_TT588(); ~RIG_TT588(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void setVfoAdj(double v); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); bool twovfos() {return true;} int get_smeter(); void set_volume_control(int val); int get_volume_control(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); // const char * PRE_label(); const char * ATT_label(); void set_rf_gain(int val); int get_rf_gain(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // void set_auto_notch(int); // int get_auto_notch(); void set_noise(bool); int get_noise(); void set_split(bool val); int get_split(); int get_swr(); int get_power_out(); // double get_power_control(void); // void set_power_control(double val); // void get_pc_min_max_step(double &min, double &max, double &step) { // min = 0; max = 100; step = 1; } void set_PTT_control(int val); // void tune_rig(); // void set_preamp(int val); // int get_preamp(); // void set_notch(bool on, int val); // bool get_notch(int &val); // void get_notch_min_max_step(int &min, int &max, int &step); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); void checkresponse(std::string s); void shutdown(); int adjust_bandwidth(int m); int def_bandwidth(int m); }; #endif flrig-2.0.04/src/include/tentec/TT550.h0000664000175000017500000001120614502041135014244 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TT550_H #define _TT550_H // TenTec Pegasus computer controlled transceiver #include #include "rigbase.h" class RIG_TT550 : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; int NVal; int FVal; int IVal; int TBfo; int IBfo; int TFreq; int Bfo; int encoder_count; int keypad_timeout; bool onA; int ATTlevel; int RFgain; double VfoAdj; bool auto_notch; bool noise_reduction; std::string pending; void showASCII(std::string, std::string); void set_vfoRX(unsigned long long freq); void set_vfoTX(unsigned long long freq); void get_302(); void process_encoder( int v ); void process_keypad(char c); void process_freq_entry(char c); void process_fkey(char c); void fkey_clear(); void fkey_cw_plus(); void fkey_cw_minus(); void fkey_band_plus(); void fkey_band_minus(); void fkey_step_plus(); void fkey_step_minus(); public: RIG_TT550(); ~RIG_TT550(){} void initialize(); void shutdown(); bool check(); void set_vfo(unsigned long long); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_mode(int val); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); void set_bw(int val); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); bool twovfos() { return true; } void set_split(bool); bool can_split() { return true; } int get_smeter(); int get_swr(); int get_power_out(); double get_power_control(); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } void set_volume_control(int val); int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); // void set_notch(bool on, int val); // bool get_notch(int &val); // void get_notch_min_max_step(int &min, int &max, int &step); void set_noise(bool b); void set_mic_gain(int val); int get_mic_gain(); void set_mic_line(int val); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); int adjust_bandwidth(int m); int def_bandwidth(int m); void setRit(int v); int getRit(); void get_RIT_min_max_step(int &min, int &max, int &step) { min = -500; max = 500; step = 1; } void setXit(int v); int getXit(); void get_XIT_min_max_step(int &min, int &max, int &step) { min = -500; max = 500; step = 1; } void setBfo(int v); int getBfo(); void get_BFO_min_max_step(int &min, int &max, int &step) { min = 0; max = 1000; step = 10; } void setVfoAdj(double v); void set_auto_notch(int v); void set_noise_reduction(int b); void set_line_out(); void set_agc_level(); void set_cw_wpm(); void set_cw_weight(); void enable_keyer(); void set_cw_qsk(); void set_cw_vol(); bool set_cw_spot(); void set_spot_onoff(); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_aux_hang(); void set_mon_vol(); void set_compression(int, int); void set_squelch_level(); void tuner_bypass(); void enable_xmtr(); void enable_tloop(); void set_nb_level(); // TT-550 / at-11 internal tuner i/o commands void at11_bypass(); void at11_autotune(); void at11_cap_up(); void at11_cap_dn(); void at11_ind_up(); void at11_ind_dn(); void at11_loZ(); void at11_hiZ(); }; extern std::vectorTT550_xmt_widths; #endif flrig-2.0.04/src/include/tentec/TT516.h0000664000175000017500000000464114502041135014253 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TT516_H #define _TT516_H #include "rigbase.h" class RIG_TT516 : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; public: RIG_TT516(); ~RIG_TT516(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); bool can_split() { return true;} void set_split(bool val); bool twovfos() {return true;} int get_smeter(); int get_swr(); int get_power_out(); // double get_power_control(); // void set_volume_control(int val); // int get_volume_control(); // void set_power_control(double val); void set_PTT_control(int val); // void tune_rig(); void set_attenuator(int val); int get_attenuator(); // void set_preamp(int val); // int get_preamp(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); // void set_notch(bool on, int val); // bool get_notch(int &val); // void get_notch_min_max_step(int &min, int &max, int &step); void set_noise(bool b); // void set_mic_gain(int val); // int get_mic_gain(); // void get_mic_min_max_step(int &min, int &max, int &step); void checkresponse(); int adjust_bandwidth(int); int def_bandwidth(int); std::vector& bwtable(int); }; #endif flrig-2.0.04/src/include/tentec/TT563.h0000664000175000017500000000311014502041135014243 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TT563_H #define _TT563_H #include "icom/ICbase.h" class RIG_TT563 : public RIG_ICOM { public: RIG_TT563(); ~RIG_TT563(){} void initialize(); bool check(); void selectA(); void selectB(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool canswap() { return true; } void swapAB(); void A2B(); int get_vfoAorB(); void set_split(bool); int get_split(); bool can_split(); void set_PTT_control(int val); int get_PTT(); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); int adjust_bandwidth(int m) { return 1; } }; #endif flrig-2.0.04/src/include/tentec/DELTA-II.h0000664000175000017500000000255614502041135014623 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TT535_H #define _TT535_H #include "icom/ICbase.h" class RIG_TT535 : public RIG_ICOM { public: RIG_TT535(); ~RIG_TT535(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); // void set_PTT_control(int val); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); int adjust_bandwidth(int m); }; #endif flrig-2.0.04/src/include/tentec/TT566.h0000664000175000017500000000505014502041135014253 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TT566_H #define _TT566_H #include "icom/ICbase.h" class RIG_TT566 : public rigbase { private: int fwdpwr; int refpwr; public: RIG_TT566(); ~RIG_TT566(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_bwA(int bw); int get_bwA(); void set_bwB(int bw); int get_bwB(); void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_preamp(int); int get_preamp(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); const char * PRE_label(); const char * ATT_label(); void set_noise(bool); int get_noise(); double get_power_control(void); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step); void set_auto_notch(int v); int get_auto_notch(); int get_smeter(); int get_power_out(); int get_swr(); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void set_volume_control(int val); void set_mic_gain(int val); int get_mic_gain(); // void set_if_shift(int val); // bool get_if_shift(int &val); // void get_if_min_max_step(int &min, int &max, int &step) { // min = -8000; max = 8000; step = 50; } void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int adjust_bandwidth(int m); int def_bandwidth(int m) {return adjust_bandwidth(m);} // void set_agc_level(); }; #endif flrig-2.0.04/src/include/tentec/TT599.h0000664000175000017500000000413614502041135014265 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _TT599_H #define _TT599_H #include "icom/ICbase.h" class RIG_TT599 : public rigbase { private: int fwdpwr; int refpwr; public: RIG_TT599(); ~RIG_TT599(){} void initialize(); void shutdown(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_bwA(int bw); int get_bwA(); void set_bwB(int bw); int get_bwB(); bool can_split() { return true;} void set_split(bool val); int get_split(); bool twovfos() { return false;}//true;} void set_PTT_control(int val); int get_modetype(int n); void set_preamp(int); int get_preamp(); double get_power_control(void); void set_power_control(double val); void set_auto_notch(int v); int get_auto_notch(); void set_attenuator(int val); int get_attenuator(); int get_smeter(); int get_power_out(); int get_swr(); int adjust_bandwidth(int); int def_bandwidth(int); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 9; step = 1; } int get_noise_reduction_val(); void set_noise_reduction_val(int val); // void set_agc_level(); }; #endif flrig-2.0.04/src/include/hid_mac.h0000664000175000017500000002751414502720371013604 00000000000000/*********************************************************************** HIDAPI - Multi-Platform library for communication with HID devices. hid_mac.h Alan Ott Signal 11 Software Copyright 2009, All Rights Reserved. C++ implementation * Copyright 2021 * David Freese, W1HKJ * for use in flrig This software is licensed under the terms of the GNU General Public License v3. ***********************************************************************/ /** @file * @defgroup API hidapi API */ #ifndef HIDAPI_H__ #define HIDAPI_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include /* Linked List of input reports received from the device. */ class input_report { public: uint8_t *data; size_t len; input_report *next; }; /* Barrier implementation because Mac OSX doesn't have pthread_barrier. It also doesn't have clock_gettime(). So much for POSIX and SUSv2. This implementation came from Brent Priddy and was posted on StackOverflow. It is used with his permission. */ typedef int pthread_barrierattr_t; typedef struct pthread_barrier { pthread_mutex_t mutex; pthread_cond_t cond; int count; int trip_count; } pthread_barrier_t; extern int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count); extern int pthread_barrier_destroy(pthread_barrier_t *barrier); extern int pthread_barrier_wait(pthread_barrier_t *barrier); class hid_device { public: IOHIDDeviceRef device_handle; int blocking; int uses_numbered_reports; int disconnected; CFStringRef run_loop_mode; CFRunLoopRef run_loop; CFRunLoopSourceRef source; uint8_t *input_report_buf; CFIndex max_input_report_len; input_report *input_reports; pthread_t thread; pthread_mutex_t mutex; /* Protects input_reports */ pthread_cond_t condition; pthread_barrier_t barrier; /* Ensures correct startup sequence */ pthread_barrier_t shutdown_barrier; /* Ensures correct shutdown sequence */ int shutdown_thread; hid_device() { device_handle = NULL; blocking = 1; uses_numbered_reports = 0; disconnected = 0; run_loop_mode = NULL; run_loop = NULL; source = NULL; input_report_buf = NULL; input_reports = NULL; shutdown_thread = 0; /* Thread objects */ pthread_mutex_init(&mutex, NULL); pthread_cond_init(&condition, NULL); pthread_barrier_init(&barrier, NULL, 2); pthread_barrier_init(&shutdown_barrier, NULL, 2); } ~hid_device() { hid_close(); } /** @brief Write an Output report to a HID device. The first byte of @p data[] must contain the Report ID. For devices which only support a single report, this must be set to 0x0. The remaining bytes contain the report data. Since the Report ID is mandatory, calls to hid_write() will always contain one more byte than the report contains. For example, if a hid report is 16 bytes long, 17 bytes must be passed to hid_write(), the Report ID (or 0x0, for devices with a single report), followed by the report data (16 bytes). In this example, the length passed in would be 17. hid_write() will send the data on the first OUT endpoint, if one exists. If it does not, it will send the data through the Control Endpoint (Endpoint 0). @ingroup API @param data The data to send, including the report number as the first byte. @param length The length in bytes of the data to send. @returns This function returns the actual number of bytes written and -1 on error. */ int hid_write(const unsigned char *data, size_t length); /** @brief Read an Input report from a HID device with timeout. Input reports are returned to the host through the INTERRUPT IN endpoint. The first byte will contain the Report number if the device uses numbered reports. @ingroup API @param data A buffer to put the read data into. @param length The number of bytes to read. For devices with multiple reports, make sure to read an extra byte for the report number. @param milliseconds timeout in milliseconds or -1 for blocking wait. @returns This function returns the actual number of bytes read and -1 on error. If no packet was available to be read within the timeout period, this function returns 0. */ int hid_read_timeout(unsigned char *data, size_t length, int milliseconds); /** @brief Read an Input report from a HID device. Input reports are returned to the host through the INTERRUPT IN endpoint. The first byte will contain the Report number if the device uses numbered reports. @ingroup API @param device A device handle returned from hid_open(). @param data A buffer to put the read data into. @param length The number of bytes to read. For devices with multiple reports, make sure to read an extra byte for the report number. @returns This function returns the actual number of bytes read and -1 on error. If no packet was available to be read and the handle is in non-blocking mode, this function returns 0. */ int hid_read(unsigned char *data, size_t length); /** @brief Get a feature report from a HID device. Set the first byte of @p data[] to the Report ID of the report to be read. Make sure to allow space for this extra byte in @p data[]. Upon return, the first byte will still contain the Report ID, and the report data will start in data[1]. @ingroup API @param device A device handle returned from hid_open(). @param data A buffer to put the read data into, including the Report ID. Set the first byte of @p data[] to the Report ID of the report to be read, or set it to zero if your device does not use numbered reports. @param length The number of bytes to read, including an extra byte for the report ID. The buffer can be longer than the actual report. @returns This function returns the number of bytes read plus one for the report ID (which is still in the first byte), or -1 on error. */ int hid_get_feature_report(unsigned char *data, size_t length); /** @brief Set the device handle to be non-blocking. In non-blocking mode calls to hid_read() will return immediately with a value of 0 if there is no data to be read. In blocking mode, hid_read() will wait (block) until there is data to read before returning. Nonblocking can be turned on and off at any time. @ingroup API @param device A device handle returned from hid_open(). @param nonblock enable or not the nonblocking reads - 1 to enable nonblocking - 0 to disable nonblocking. @returns This function returns 0 on success and -1 on error. */ int hid_set_nonblocking(int nonblock); /** @brief Send a Feature report to the device. Feature reports are sent over the Control endpoint as a Set_Report transfer. The first byte of @p data[] must contain the Report ID. For devices which only support a single report, this must be set to 0x0. The remaining bytes contain the report data. Since the Report ID is mandatory, calls to hid_send_feature_report() will always contain one more byte than the report contains. For example, if a hid report is 16 bytes long, 17 bytes must be passed to hid_send_feature_report(): the Report ID (or 0x0, for devices which do not use numbered reports), followed by the report data (16 bytes). In this example, the length passed in would be 17. @ingroup API @param device A device handle returned from hid_open(). @param data The data to send, including the report number as the first byte. @param length The length in bytes of the data to send, including the report number. @returns This function returns the actual number of bytes written and -1 on error. */ int hid_send_feature_report(const unsigned char *data, size_t length); int cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime); int return_data(unsigned char *data, size_t length); int set_report(IOHIDReportType type, const unsigned char *data, size_t length); void register_error(const char *op); void hid_close(); const char* hid_error(); }; /// hidapi info structure class hid_device_info { public: std::string path; unsigned short vendor_id; unsigned short product_id; unsigned short release_number; std::string str_serial_number; std::string str_manufacturer_string; std::string str_product_string; unsigned short usage_page; // Usage Page for this Device/Interface (Windows/Mac only). unsigned short usage;// Usage for this Device/Interface (Windows/Mac only).*/ /** The USB interface which this logical device represents. Valid on both Linux implementations in all cases, and valid on the Windows implementation only if the device contains more than one interface. */ int interface_number; hid_device_info *next; hid_device_info() { } ~hid_device_info() { } }; /** @brief Initialize the HIDAPI library. This function initializes the HIDAPI library. Calling it is not strictly necessary, as it will be called automatically by hid_enumerate() and any of the hid_open_*() functions if it is needed. This function should be called at the beginning of execution however, if there is a chance of HIDAPI handles being opened by different threads simultaneously. @ingroup API @returns This function returns 0 on success and -1 on error. */ int hid_init(void); /** @brief Finalize the HIDAPI library. This function frees all of the static data associated with HIDAPI. It should be called at the end of execution to avoid memory leaks. @ingroup API @returns This function returns 0 on success and -1 on error. */ int hid_exit(void); /** @brief Enumerate the HID Devices. This function returns a linked list of all the HID devices attached to the system which match vendor_id and product_id. If @p vendor_id is set to 0 then any vendor matches. If @p product_id is set to 0 then any product matches. If @p vendor_id and @p product_id are both set to 0, then all HID devices will be returned. @ingroup API @param vendor_id The Vendor ID (VID) of the types of device to open. @param product_id The Product ID (PID) of the types of device to open. @returns This function returns a pointer to a linked list of type struct #hid_device, containing information about the HID devices attached to the system, or NULL in the case of failure. Free this linked list by calling hid_free_enumeration(). */ hid_device_info *hid_enumerate(unsigned short vendor_id, unsigned short product_id); /** @brief Free an enumeration Linked List This function frees a linked list created by hid_enumerate(). @ingroup API @param devs Pointer to a list of struct_device returned from hid_enumerate(). */ void hid_free_enumeration(hid_device_info *devs); /** @brief Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally a serial number. If @p serial_number is NULL, the first device with the specified VID and PID is opened. @ingroup API @param vendor_id The Vendor ID (VID) of the device to open. @param product_id The Product ID (PID) of the device to open. @param serial_number The Serial Number of the device to open (Optionally NULL). @returns This function returns a pointer to a #hid_device object on success or NULL on failure. */ hid_device * hid_open(unsigned short vendor_id, unsigned short product_id, std::string serial_number = ""); /** @brief Open a HID device by its path name. The path name be determined by calling hid_enumerate(), or a platform-specific path name can be used (eg: /dev/hidraw0 on Linux). @ingroup API @param path The path name of the device to open @returns This function returns a pointer to a #hid_device object on success or NULL on failure. */ hid_device * hid_open_path(std::string path); /** @brief Close a HID device. @ingroup API @param device A device handle returned from hid_open(). */ #endif flrig-2.0.04/src/include/images.h0000664000175000017500000000266614502720371013466 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef IMAGES_H #define IMAGES_H #include extern Fl_Bitmap image_p5; extern Fl_Bitmap image_p10; extern Fl_Bitmap image_p15; extern Fl_Bitmap image_p20; extern Fl_Bitmap image_p25; extern Fl_Bitmap image_p50; extern Fl_Bitmap image_p100; extern Fl_Bitmap image_p200; extern Fl_Bitmap image_p200log; extern Fl_Bitmap image_voltmeter; extern Fl_Bitmap image_volts50; extern Fl_Bitmap image_idd25; extern Fl_Bitmap image_idd50; extern Fl_Bitmap image_smeter; extern Fl_Bitmap image_swr; extern Fl_Bitmap image_alc; extern Fl_Bitmap image_alc40db; #endif flrig-2.0.04/src/include/ValueSlider.h0000664000175000017500000000354614502720371014436 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- //====================================================================== // clase wheel_slider - based on Fl_Slider // class wheel_value_slider - based on Fl_Value_Slider //====================================================================== #ifndef _WHEEL_VALUE_SLIDER_H #define _WHEEL_VALUE_SLIDER_H #include #include class Fl_Wheel_Slider : public Fl_Slider { private: bool reverse_; public: Fl_Wheel_Slider(int x, int y, int w, int h, const char *label = "") : Fl_Slider(x, y, w, h, label), reverse_(false) { } int handle(int event); void reverse(bool rev) { reverse_ = rev;} bool reverse() { return reverse_;} }; class Fl_Wheel_Value_Slider : public Fl_Value_Slider { private: bool reverse_; public: Fl_Wheel_Value_Slider(int x, int y, int w, int h, const char *label = "") : Fl_Value_Slider(x, y, w, h, label), reverse_(false) { } int handle(int event); void reverse(bool rev) { reverse_ = rev;} bool reverse() { return reverse_;} }; #endif flrig-2.0.04/src/include/rigbase.h0000664000175000017500000005002214505023100013607 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _RIG_BASE_H #define _RIG_BASE_H #include "config.h" #include "compat.h" // Must precede all FL includes #include #include #include #include #include #include #include "util.h" #include "debug.h" #include "trace.h" #include "rig_io.h" #include "rigpanel.h" #define VECTOR(a,b) { a.clear(); for (size_t n = 0; n < sizeof(b)/sizeof(*b); n++) {a.push_back(b[n]);} } enum {onNIL, onA, onB}; enum {UI, XML, SRVR, RIG}; enum {DT_BINARY, DT_STRING}; enum {SERIAL, TCPIP, TCI}; extern const char *szNORIG; extern std::vectorvNOMODES; extern std::vectorvNOBWS; extern std::vectorvDSPLO; extern std::vectorvDSPHI; extern const char *szdsptooltip; extern const char *szbtnlabel; struct XCVR_STATE { unsigned long long freq; int imode; int iBW; int bw_val; int FilterInner; int FilterOuter; int filter; int src; int split; double power_control; int volume_control; int attenuator; int preamp; int if_shift; int shift_val; int auto_notch; int notch; int notch_val; int noise; int nb_level; int nr; int nr_val; int mic_gain; int rf_gain; int agc_level; int squelch; int compression; int compON; XCVR_STATE() { freq = 0; imode = 0; iBW = 0; FilterInner = 0; FilterOuter = 0; filter = 0; src = UI; split = 0; power_control = 0; volume_control = 0; attenuator = 0; preamp = 0; if_shift = 0; shift_val = 0; auto_notch = 0; notch = 0; notch_val = 0; noise = 0; nb_level = 0; nr = 0; nr_val = 0; mic_gain = 0; rf_gain = 0; agc_level = 0; squelch = 0; compression = 0; compON = 0; bw_val = 0; } XCVR_STATE(unsigned long long a, int b, int c, int d) { XCVR_STATE(); freq = a; imode = b; iBW = c; src = d; } // bool equals(XCVR_STATE alt) { // if (freq != alt.freq) return false; // if (iBW != alt.iBW) return false; // if (imode != alt.imode) return false; // return true; // } }; enum { vA, // apply to vfoA vB, // apply to vfoB vX, // apply to current vfo sA, // select vfoA sB, // select vfoB ON, // ptt ON OFF, // ptt OFF sON, // split ON sOFF, // split OFF A2B, // active to inactive vfo SWAP, // swap vfo's FA2FB, // frequency vfoA -> vfoB FB2FA // frequency vfoA -> vfoB }; struct VFOQUEUE { int change; // A B AA BB ON OFF XCVR_STATE vfo; VFOQUEUE() {} VFOQUEUE(int c, XCVR_STATE v) { change = c; vfo = v; } }; struct GUI { Fl_Widget* W; int x; int y; int w; std::string label; std::string hint; }; class rigbase { #define WVALS_LIMIT -1 public: std::string name_; static std::vector& modes_;// = vNOMODES; static std::vector& bandwidths_;// = vNOBWS; static std::vector& dsp_SL;// = vDSPLO; const char * SL_tooltip; const char * SL_label; static std::vector& dsp_SH;// = vDSPHI; const char * SH_tooltip; const char * SH_label; const int * bw_vals_; GUI *widgets; int io_class; int serial_baudrate; int stopbits; bool serial_echo; bool serial_rtscts; bool serial_rtsplus; bool serial_dtrplus; bool serial_catptt; bool serial_rtsptt; bool serial_dtrptt; int serial_retries; int serial_write_delay; int serial_post_write_delay; int serial_timeout; int serloop_timing; int CIV; int defaultCIV; bool USBaudio; XCVR_STATE A; XCVR_STATE B; int inuse; int modeA; int bwA; int bwA_val; unsigned long long freqA; int modeB; int bwB; int bwB_val; unsigned long long freqB; int precision; int ndigits; bool can_change_alt_vfo; int active_mode; // wbx int def_mode; int def_bw; unsigned long long def_freq; int max_power; int last_bw; int bpf_center; int pbt; bool PbtActive; int RitFreq; bool RitActive; int XitFreq; bool XitActive; int split; int if_shift_min; int if_shift_max; int if_shift_step; int if_shift_mid; int atten_level; int preamp_level; int rTONE; // index into szTONES, PL_tones arrar of receive PL tones int tTONE; bool has_xcvr_auto_on_off; bool has_a2b; bool has_b2a; bool has_vfo_adj; bool has_rit; bool has_xit; bool has_bfo; bool has_power_control; bool has_volume_control; bool has_mode_control; bool has_bandwidth_control; bool has_dsp_controls; bool has_FILTER; bool has_micgain_control; bool has_mic_line_control; bool has_notch_control; bool has_auto_notch; bool has_noise_control; bool has_noise_reduction_control; bool has_noise_reduction; bool has_attenuator_control; bool has_preamp_control; bool has_ifshift_control; bool has_pbt_controls; bool has_ptt_control; bool has_tune_control; bool has_swr_control; bool has_alc_control; bool has_idd_control; bool has_agc_control; bool has_rf_control; bool has_sql_control; bool has_smeter; bool has_power_out; bool has_line_out; bool has_split; bool has_split_AB; bool has_data_port; bool has_getvfoAorB; bool has_extras; bool has_nb_level; bool has_agc_level; bool has_cw_wpm; bool has_cw_vol; bool has_cw_spot; bool has_cw_spot_tone; bool has_cw_qsk; bool has_cw_break_in; bool has_cw_delay; bool has_cw_weight; bool has_cw_keyer; bool has_vox_onoff; bool has_vox_gain; bool has_vox_anti; bool has_vox_hang; bool has_vox_on_dataport; bool has_compression; bool has_compON; bool use_line_in; bool has_bpf_center; bool has_special; bool has_ext_tuner; bool has_band_selection; bool has_vfoAB; bool restore_mbw; bool has_get_info; bool can_synch_clock; bool has_voltmeter; // Icom Xcvr bool ICOMrig; bool ICOMmainsub; std::string pre_to; std::string pre_fm; std::string post; std::string ok; std::string bad; int filA; int filB; int data_type; // for pia TS2000 without a front panel int _noise_reduction_level; int _nrval1; int _nrval2; int _currmode; std::string replystr; protected: std::string cmd; // command string std::string rsp; // expected response string (header etc) std::string to_bcd_be(unsigned long long val, int len); std::string to_bcd(unsigned long long val, int len); unsigned long long fm_bcd (std::string bcd, int len); unsigned long long fm_bcd_be(std::string bcd, int len); std::string to_binary_be(unsigned long long val, int len); std::string to_binary(unsigned long long val, int len); unsigned long long fm_binary(std::string binary, int len); unsigned long long fm_binary_be(std::string binary_be, int len); std::string to_decimal_be(unsigned long long d, int len); std::string to_decimal(unsigned long long d, int len); unsigned long long fm_decimal(std::string decimal, int len); unsigned long long fm_decimal_be(std::string decimal_be, int len); public: rigbase(); virtual ~rigbase(){} virtual void initialize(); virtual void post_initialize() {} virtual void shutdown() {} virtual bool check() { return false; } virtual void set_data_port() {} virtual bool get_info(void) {return false;} virtual unsigned long long get_vfoA(void) {return A.freq;} virtual void set_vfoA(unsigned long long f) {A.freq = f;} virtual unsigned long long get_vfoB(void) {return B.freq;} virtual void set_vfoB(unsigned long long f) {B.freq = f; set_vfoA(f);} virtual void set_modeA(int val) {A.imode = val;} virtual int get_modeA() {return A.imode;} virtual int get_modetype(int n) {return 'U';} virtual void set_modeB(int val) {B.imode = val; set_modeA(val);} virtual int get_modeB() {return B.imode;} virtual void selectA(){ inuse = onA;} virtual void selectB(){ inuse = onB;} virtual void A2B(){} virtual void B2A(){} virtual int get_vfoAorB(){return inuse;} virtual bool isOnA(){return inuse == onA;} virtual bool isOnB(){return inuse == onB;} virtual void swapAB(){inuse = isOnA() ? onB : onA;} virtual void set_bwA(int val) {A.iBW = val;} virtual int get_bwA() {return A.iBW;} virtual int get_bwA_val() { return bwA_val; } virtual void set_bwB(int val) {B.iBW = val; set_bwA(val);} virtual int get_bwB() {return B.iBW;} virtual int get_bwB_val() { return bwB_val; } virtual int adjust_bandwidth(int m) {return 0;} virtual int def_bandwidth(int m) {return 0;} virtual std::vector&bwtable(int m) {return vNOBWS;} virtual std::vector&lotable(int m) {return vDSPLO;} virtual std::vector&hitable(int m) {return vDSPHI;} virtual const char *FILT(int val) { return "1"; } virtual const char *nextFILT() { return "1";} virtual int get_FILT(int mode) { return 1; } virtual void set_FILT(int filter) {} virtual void set_BANDWIDTHS(std::string s) {} virtual std::string get_BANDWIDTHS() { return ""; } virtual void set_FILTERS(std::string s) {} virtual std::string get_FILTERS() { return ""; } virtual bool can_split() { return false;} virtual void set_split(bool val); virtual int get_split(); virtual bool twovfos() {return false;} virtual bool canswap() { return false; } virtual int get_agc() { return 0; } virtual int incr_agc() { return 0;} virtual const char *agc_label() { return "";} virtual int agc_val() { return 0; } virtual int get_smeter(void) {return -1;} virtual int get_swr(void) {return -1;} virtual int get_alc(void) {return -1;} virtual double get_idd(void) {return 0;} virtual void select_swr() {} virtual void select_alc() {} virtual void select_idd() {} virtual int get_power_out(void) {return -1;} virtual double get_voltmeter(void) { return -1; } int po_, po_val; int pmax; virtual double get_power_control(void) {return po_;} virtual void set_power_control(double val) {po_ = val;} virtual void get_pc_min_max_step(double &min, double &max, double &step) { min = 0; pmax = max = 100; step = 1; } int vl_; virtual void set_volume_control(int val) {vl_ = val;} virtual int get_volume_control() {return vl_;} virtual void get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int ptt_; int tune_; virtual void set_PTT_control(int val) {ptt_ = val;} virtual int get_PTT() {return ptt_;} virtual void tune_rig(int how) {} virtual int get_tune() { return tune_; } virtual void set_attenuator(int val) {atten_level = val;} virtual int next_attenuator() { if (atten_level == 0) atten_level = 1; else atten_level = 0; return atten_level; } virtual int get_attenuator() {return atten_level;} virtual const char *ATT_label() { return "ATT"; } virtual void set_preamp(int val) {preamp_level = val;} virtual int next_preamp() { if (preamp_level == 0) preamp_level = 1; else preamp_level = 0; return preamp_level; } virtual int get_preamp() {return preamp_level;} virtual const char *PRE_label() { return "PRE"; } // CTCSS tones / offset virtual void set_tones(int tx_tone, int rx_tone) { return; } virtual void set_offset(int indx, int offset) { return; } int sh_; bool sh_on_; virtual void set_if_shift(int val) {sh_ = val;} virtual void set_if_shift_on(int on) { sh_on_ = on; } virtual bool get_if_shift(int &val) {val = sh_; return sh_on_;} virtual void get_if_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } virtual void get_if_mid() {}; int no_, noval_; virtual void set_notch(bool on, int val) { no_ = on; noval_ = val;} virtual bool get_notch(int &val) {val = noval_; return no_;} virtual void get_notch_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int nb_, nbval_; virtual void set_noise(bool on) {nb_ = on;} virtual int get_noise(){return nb_;} virtual void set_nb_level(int val) {nbval_ = val;} virtual int get_nb_level() { return nbval_; } virtual void get_nb_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int nr_, nrval_; virtual void set_noise_reduction(int val) {nr_ = val;} virtual int get_noise_reduction() {return nr_;} virtual void set_noise_reduction_val(int val) {nrval_ = val;} virtual int get_noise_reduction_val() {return nrval_;} virtual void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } virtual void set_pbt_inner(int val) {} virtual void set_pbt_outer(int val) {} virtual void set_pbt(int inner, int outer) {} virtual int get_pbt_inner() {return 0;} virtual int get_pbt_outer() {return 0;} int mcval_; virtual void set_mic_gain(int val) {mcval_ = val;} virtual int get_mic_gain() {return mcval_;} virtual void get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } virtual void set_mic_line(int val) {} int sqval_; virtual void set_squelch(int val) {sqval_ = val;} virtual int get_squelch() {return sqval_;} virtual void get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } int rfg_; virtual void set_rf_gain(int val) {rfg_ = val;} virtual int get_rf_gain() {return rfg_;} virtual void get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } virtual const char * get_modename_(int n){ try { return modes_.at(n).c_str(); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } return ""; } virtual const char * get_bwname_(int bw, int md) { // read bw based on mode try { static std::vector& pbwt = bwtable(md); return pbwt.at(bw).c_str(); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } return ""; } int ritval_; virtual void setRit(int v) {ritval_ = v;} virtual int getRit() {return ritval_;} virtual void get_RIT_min_max_step(int &min, int &max, int &step) { min = -100; max = 100; step = 1; } virtual void setXit(int v) { XitFreq = v;} virtual int getXit() {return XitFreq;} virtual void get_XIT_min_max_step(int &min, int &max, int &step) { min = -100; max = 100; step = 1; } int bfo_; virtual void setBfo(int v) {bfo_ = v;} virtual int getBfo() {return bfo_;} virtual void get_BFO_min_max_step(int &min, int &max, int &step) { min = -100; max = 100; step = 1; } double vfo_; virtual void setVfoAdj(double v) {vfo_ = v;} virtual double getVfoAdj() {return vfo_;} virtual void get_vfoadj_min_max_step(double &min, double &max, double &step) { min = -100; max = 100; step = 1; } virtual void set_line_out() {} virtual int get_line_out() { return 100; } virtual void set_agc_level() {} virtual void set_cw_weight() {} virtual void get_cw_weight_min_max_step(double &min, double &max, double &step) { min = 2.5; max = 4.5; step = 0.1; } // default for FT950/FT450D virtual void set_cw_wpm() {} 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 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) { min = 15; max = 30; step = 5; } // default for FT950/FT450D virtual void set_cw_delay() {} virtual void get_cw_delay_min_max_step(double &min, double &max, double &step) { min = 30; max = 3000; step = 10; } // default for FT950/FT450D virtual void set_cw_vol() {} virtual bool set_cw_spot() {return false;} virtual void set_cw_spot_tone() {} virtual void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 1050; step = 50; } // default for FT950/FT450D virtual void set_spot_onoff() {} virtual void set_vox_onoff() {} virtual void set_vox_gain() {} virtual void get_vox_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // default for FT950/FT450D virtual void set_vox_anti() {} virtual void get_vox_anti_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } // default for FT950/FT450D virtual void set_vox_hang() {} virtual void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 30; max = 3000; step = 10; } // default for FT950/FT450D virtual void set_vox_on_dataport() {} virtual void set_mon_vol() {} virtual void set_squelch_level() {} virtual void set_compression(int, int) {} virtual void get_compression(int &on, int &val) { on = 0; val = 0; } virtual void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } virtual void set_auto_notch(int v) {} virtual int get_auto_notch() {return 0;} virtual void tuner_bypass() {} virtual void enable_xmtr() {} virtual void enable_tloop() {} virtual void set_nb_level() {} virtual void set_special(int v) {} virtual void set_band_selection(int v) {} virtual void get_band_selection(int v) {} virtual void set_xcvr_auto_on() {} virtual void set_xcvr_auto_off() {} virtual void adjustCIV(uchar adr) {} virtual void read_stream() {} virtual int parse_vfoA(std::string){return 0;} virtual int parse_vfoB(std::string){return 0;} virtual int parse_modeA(std::string){return 0;} virtual int parse_modeB(std::string){return 0;} virtual int parse_bwA(std::string){return 0;} virtual int parse_bwB(std::string){return 0;} virtual int parse_volume_control(std::string){return 0;} virtual int parse_power_control(std::string){return 0;} virtual int parse_rf_gain(std::string){return 0;} virtual int parse_mic_gain(std::string){return 0;} virtual int parse_attenuator(std::string){return 0;} virtual int parse_preamp(std::string){return 0;} virtual int parse_smeter(std::string){return 0;} virtual int parse_(std::string){return 0;} virtual int parse_noise(std::string){return 0;} virtual int parse_power_out(std::string){return 0;} virtual int parse_swr(std::string){return 0;} virtual int parse_alc(std::string){return 0;} virtual int parse_split(std::string){return 0;} int waitN(int n, int timeout, const char *, int pr = HEX); int wait_char(int ch, int n, int timeout, const char *, int pr = HEX); int wait_crlf(std::string, std::string, int nr = 20, int timeout = 100, int pr = ASC); int wait_string(std::string sz, int nr, int timeout = 100, int pr = ASC); int waitfor(int nr, int timeout = 100, int pr = ASC); // IC-7610 virtual void set_digi_sel(bool) {} virtual void set_digi_val(int) {} virtual int get_digi_sel() {return 0;} virtual int get_digi_val() {return 0;} virtual void set_dual_watch(bool) {} virtual int get_dual_watch() {return 0;} virtual void set_index_att(int) {} // more pia TS2000 without front panel! int currmode() { return _currmode; } int nrval1() { return _nrval1; } int nrval2() { return _nrval2; } int noise_reduction_level() { return _noise_reduction_level; } // TS990 monitor usurp'd use of IF shift control virtual void set_monitor(bool) {} // TT-550 / at-11 internal tuner i/o commands virtual void at11_bypass() {} virtual void at11_autotune() {} virtual void at11_cap_up() {} virtual void at11_cap_dn() {} virtual void at11_ind_up() {} virtual void at11_ind_dn() {} virtual void at11_loZ() {} virtual void at11_hiZ() {} std::string bcd255(int val); int num100(std::string bcd); int hexval(int hex); int hex2val(std::string hexval); // Yaesu force ID response before sending command std::string IDstr; bool id_OK(std::string ID, int wait); void sendOK(std::string cmd); // KX3 power scale int powerScale; virtual int power_scale() { return 1; } virtual int power_max() { return pmax; } // date/time synchronize virtual void sync_date(char *dt) { printf("Synchronize date to: %s\n", dt); } virtual void sync_clock(char *tm) { printf("Sychronize time to: %s\n", tm); } // QCX+ menu system virtual std::string read_menu(int, int); }; extern rigbase *rigs[]; extern char bcdval[]; #endif flrig-2.0.04/src/include/ui.h0000664000175000017500000000216214502720371012625 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _UI_H #define _UI_H #define TOUCH_MAINW 1024 #define TOUCH_MAINH 134 #define WIDE_MAINW 735 #define WIDE_MAINH 148 #define WIDE_MENUH 22 #define WIDE_TABSH 92 #define SMALL_MENUH 22 #define SMALL_MAINW 425 #define SMALL_MAINH 360 #endif flrig-2.0.04/src/include/combo.h0000664000175000017500000001056014502720371013310 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // // This is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This software is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FL_COMBOBOX_H #define _FL_COMBOBOX_H #include #include #include #include #include #include #include #include #define FL_COMBO_UNIQUE 1 #define FL_COMBO_UNIQUE_NOCASE 2 #define FL_COMBO_LIST_INCR 100 class Fl_ComboBox; enum {COMBOBOX, LISTBOX}; struct datambr { char *s; void *d; }; class Fl_PopBrowser : public Fl_Double_Window { friend void popbrwsr_cb(Fl_Widget *, long); Fl_Select_Browser *popbrwsr; int hRow; int wRow; std::string keystrokes; public: Fl_PopBrowser (int x, int y, int w, int h, const char *label); ~Fl_PopBrowser (); void popshow (int, int); void pophide (); void popbrwsr_cb_i (Fl_Widget *, long); void add (char *s, void *d = 0); void clear (); void sort (); int handle (int); void clear_kbd() { keystrokes.clear(); } Fl_Select_Browser *sb() { return popbrwsr; } Fl_ComboBox *parentCB; Fl_Widget *parentWindow; }; class Fl_ComboBox : public Fl_Group { friend int DataCompare (const void *, const void *); friend class Fl_PopBrowser; friend void val_callback(Fl_Widget *, void *); enum {ALPHA_SORT, SERIAL_SORT}; Fl_Button *btn; Fl_Box *valbox; Fl_Input *val; Fl_PopBrowser *Brwsr; datambr **datalist; int listsize; int maxsize; int listtype; int numrows_; int type_; int sort_type; int width; int height; void *retdata; int idx; Fl_Color _color; void insert(const char *, void *); public: Fl_ComboBox (int x, int y, int w, int h, const char *lbl = 0, int wtype = COMBOBOX); ~Fl_ComboBox(); const char *value (); void value (std::string); void put_value( const char *); void fl_popbrwsr(Fl_Widget *); void type (int = 0); void add (const char *s, void *d = 0); void clear (); void clear_entry() { if (type_ == LISTBOX) { valbox->label(""); valbox->redraw_label(); } else { val->value(""); val->redraw(); } } void sort (); void sort_by_serial () {sort_type = SERIAL_SORT;} void sort_by_alpha () {sort_type = ALPHA_SORT;} int index (); void index (int i); int find_index(const char *str); void *data (); void textfont (int); void textsize (uchar); void textcolor (Fl_Color c); void color (Fl_Color c); void readonly(bool yes = true); int numrows() { return numrows_; } void numrows(int n) { numrows_ = n; } int lsize() { return listsize; } void set_focus() { Fl::focus(btn); }; void position(int n); void labelfont(Fl_Font fnt) { Fl_Group::labelfont(fnt); } Fl_Font labelfont() { return Fl_Group::labelfont(); } void labelsize(Fl_Fontsize n) { Fl_Group::labelsize(n); } Fl_Fontsize labelsize() { return Fl_Group::labelsize(); } int handle(int); // Custom resize behavior -- input stretches, button doesn't inline int val_x() { return x(); } inline int val_y() { return y(); } inline int val_w() { return w() - h(); } inline int val_h() { return h(); } inline int btn_x() { return x() + w() - h(); } inline int btn_y() { return y(); } inline int btn_w() { return h(); } inline int btn_h() { return h(); } void resize(int X, int Y, int W, int H) { Fl_Group::resize(X,Y,W,H); if (type_ == LISTBOX) valbox->resize(val_x(), val_y(), val_w(), val_h()); else val->resize(val_x(), val_y(), val_w(), val_h()); btn->resize(btn_x(), btn_y(), btn_w(), btn_h()); } }; class Fl_ListBox : public Fl_ComboBox { public: Fl_ListBox (int x, int y, int w, int h, const char *lbl = 0) : Fl_ComboBox(x,y,w,h,lbl,LISTBOX) {}; ~Fl_ListBox() {}; }; #endif flrig-2.0.04/src/include/yaesu/0000775000175000017500000000000014511461606013247 500000000000000flrig-2.0.04/src/include/yaesu/FT847.h0000664000175000017500000000313314502041135014103 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT847_H #define FT847_H #include "rigbase.h" class RIG_FT847 : public rigbase { private: double fwdpwr; int amode, aBW; unsigned long long afreq; public: RIG_FT847(); ~RIG_FT847(){}; void initialize(); bool get_info(); bool can_split() { return false;} bool twovfos() {return false;} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); int get_modetype(int n); void set_PTT_control(int val); int get_smeter(); int get_power_out(); int adjust_bandwidth(int m) { return 0; } private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT5000.h0000664000175000017500000000661014502041135014150 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT5000_H #define _FT5000_H #include "rigbase.h" class RIG_FT5000 : public rigbase { private: bool notch_on; int m_60m_indx; // void update_bandwidths(); protected: int preamp_level; int atten_level; public: RIG_FT5000(); ~RIG_FT5000(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool twovfos(); void selectA(); void selectB(); void A2B(); bool can_split(); void set_split(bool val); int get_split(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); int get_smeter(); int get_swr(); double get_idd(); double get_voltmeter(); int get_power_out(); double get_power_control(); void set_volume_control(int val); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 10; pmax = max = 200; step = 1; } int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); std::vector& bwtable(int); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_vox_on_dataport(); void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); void set_cw_qsk(); // 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); }; #endif flrig-2.0.04/src/include/yaesu/FT1000.h0000664000175000017500000000366414502041135014152 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT1000_H #define FT1000_H #include "rigbase.h" class RIG_FT1000 : public rigbase { private: int amode, aBW; int bmode, bBW; unsigned long long afreq; unsigned long long bfreq; bool notch_on; //int m_60m_indx; public: RIG_FT1000(); ~RIG_FT1000(){}; void initialize(); // void post_initialize(); void selectA(); void selectB(); bool get_info(); bool check(); unsigned long long get_vfoA(); int get_modeA(); int get_bwA(); void set_vfoA(unsigned long long); void set_modeA(int val); void set_bwA(int val); bool canswap() {return true;} void swapAB(); // void A2B(); bool can_split() { return true;} void set_split(bool val); int get_split(); unsigned long long get_vfoB(); int get_modeB(); int get_bwB(); void set_vfoB(unsigned long long); void set_modeB(int val); void set_bwB(int val); void set_PTT_control(int val); void tune_rig(int); int get_smeter(); int get_power_out(); int adjust_bandwidth(int); bool twovfos() {return true;} // void set_band_selection(int v); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FTdx101D.h0000664000175000017500000001073214502041135014525 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FTdx101D_H #define _FTdx101D_H #include "rigbase.h" class RIG_FTdx101D : public rigbase { private: bool notch_on; int m_60m_indx; // void update_bandwidths(); public: RIG_FTdx101D(); ~RIG_FTdx101D() {} virtual void initialize(); virtual bool check(); virtual unsigned long long get_vfoA(); virtual void set_vfoA(unsigned long long); virtual unsigned long long get_vfoB(); virtual void set_vfoB(unsigned long long); virtual bool twovfos(); virtual void selectA(); virtual void selectB(); virtual void A2B(); virtual bool can_split(); virtual void set_split(bool val); virtual int get_split(); virtual void swapAB(); virtual bool canswap() { return true; } virtual void set_modeA(int val); virtual int get_modeA(); virtual int get_modetype(int n); virtual void set_modeB(int val); virtual int get_modeB(); virtual void set_bwA(int val); virtual int get_bwA(); virtual void set_bwB(int val); virtual int get_bwB(); virtual int adjust_bandwidth(int val); virtual int def_bandwidth(int val); virtual void set_BANDWIDTHS(std::string s); virtual std::string get_BANDWIDTHS(); virtual int get_smeter(); virtual int get_swr(); virtual int get_alc(); virtual double get_idd(); virtual double get_voltmeter(void); virtual int get_power_out(); virtual double get_power_control(); virtual void set_power_control(double val); virtual void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } virtual void set_volume_control(int val); virtual int get_volume_control(); virtual void set_PTT_control(int val); virtual int get_PTT(); virtual void tune_rig(int); virtual int get_tune(); virtual int next_attenuator(); virtual void set_attenuator(int val); virtual int get_attenuator(); virtual int next_preamp(); virtual void set_preamp(int val); virtual int get_preamp(); const char * ATT_label(); const char * PRE_label(); virtual void set_if_shift(int val); virtual bool get_if_shift(int &val); virtual void get_if_min_max_step(int &min, int &max, int &step); virtual void set_notch(bool on, int val); virtual bool get_notch(int &val); virtual void get_notch_min_max_step(int &min, int &max, int &step); virtual void set_auto_notch(int v); virtual int get_auto_notch(); virtual void set_noise(bool b); virtual int get_noise(); virtual void set_mic_gain(int val); virtual int get_mic_gain(); virtual void get_mic_min_max_step(int &min, int &max, int &step); virtual void set_rf_gain(int val); virtual int get_rf_gain(); virtual void get_rf_min_max_step(int &min, int &max, int &step); virtual std::vector& bwtable(int); virtual void set_vox_onoff(); virtual void set_vox_gain(); virtual void set_vox_anti(); virtual void set_vox_hang(); virtual void set_vox_on_dataport(); virtual void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } virtual void set_cw_weight(); virtual void set_cw_wpm(); virtual void enable_keyer(); virtual void set_cw_qsk(); // 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); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void sync_date(char *dt); void sync_clock(char *tm); }; class RIG_FTdx101MP : public RIG_FTdx101D { public: RIG_FTdx101MP(); ~RIG_FTdx101MP() {} void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 200; step = 1; } int get_power_out(); double get_power_control(); void set_power_control(double val); double get_voltmeter(void); }; #endif flrig-2.0.04/src/include/yaesu/FT891.h0000664000175000017500000001060714502041135014106 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2017 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT891_H #define _FT891_H #include "rigbase.h" class RIG_FT891 : public rigbase { private: bool notch_on; int m_60m_indx; protected: int preamp_level; int atten_level; public: RIG_FT891(); ~RIG_FT891(){} void initialize(); void post_initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool twovfos() { return true; } bool canswap() { return true; } void selectA(); void selectB(); void A2B(); void B2A(); void swapAB(); bool can_split(); void set_split(bool val); int get_split(); int get_sideband(int md); void set_sideband(int md); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); double get_power_control(); void set_volume_control(int val); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int how); int get_tune(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step) { if_shift_min = min = -1200; if_shift_max = max = 1200; if_shift_step = step = 20; if_shift_mid = 0; } void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step) { min = 10; max = 3200; step = 10; } void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool b); // noise reduction int get_noise(); void get_nb_min_max_step(int &min, int &max, int &step) { min = 1; max = 15; step = 1; } void set_nb_level(int val); int get_nb_level(); void set_noise_reduction_val(int val); // noise blanker int get_noise_reduction_val(); void get_nr_min_max_step(int &min, int &max, int &step) { min = 0; max = 10; step = 1; } void set_noise_reduction(int val); int get_noise_reduction(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 1; } void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step) { min = 0; max = 30; step = 1; } void set_squelch(int val); int get_squelch(); void get_squelch_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 5; } std::vector& bwtable(int); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_vox_on_dataport(); void set_cw_weight(); void set_cw_wpm(); void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void enable_keyer(); void set_cw_qsk(); bool set_cw_spot(); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 300; max = 1050; step = 10; } void set_xcvr_auto_on(); void set_xcvr_auto_off(); void set_compression(int, int); void get_compression(int &on, int &val); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 5; } void get_band_selection(int v); }; #endif flrig-2.0.04/src/include/yaesu/FT100D.h0000664000175000017500000000351414502041135014170 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT100D_H #define FT100D_H #include "rigbase.h" class RIG_FT100D : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; int amode, aBW; int bmode, bBW; unsigned long long afreq; unsigned long long bfreq; public: RIG_FT100D(); ~RIG_FT100D(){}; void initialize(); bool get_info(); bool check(); bool can_split() { return true;} void set_split(bool val); bool twovfos() {return false;} unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int def_bandwidth(int m); void selectA(); void selectB(); void set_PTT_control(int val); int get_smeter(); int get_swr(); int get_power_out(); int adjust_bandwidth(int); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FTdx10.h0000664000175000017500000001055714502041135014345 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FTdx10_H #define _FTdx10_H #include "rigbase.h" class RIG_FTdx10 : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FTdx10(); ~RIG_FTdx10() {} virtual void initialize(); virtual bool check(); virtual unsigned long long get_vfoA(); virtual void set_vfoA(unsigned long long); virtual unsigned long long get_vfoB(); virtual void set_vfoB(unsigned long long); virtual int get_vfoAorB(); virtual bool twovfos(); virtual void selectA(); virtual void selectB(); virtual void A2B(); virtual bool can_split(); virtual void set_split(bool val); virtual int get_split(); virtual void swapAB(); virtual bool canswap() { return true; } virtual void set_modeA(int val); virtual int get_modeA(); virtual int get_modetype(int n); virtual void set_modeB(int val); virtual int get_modeB(); virtual void set_bwA(int val); virtual int get_bwA(); virtual void set_bwB(int val); virtual int get_bwB(); virtual int adjust_bandwidth(int val); virtual int def_bandwidth(int val); virtual void set_BANDWIDTHS(std::string s); virtual std::string get_BANDWIDTHS(); virtual int get_smeter(); virtual int get_swr(); virtual int get_alc(); virtual int get_power_out(); virtual double get_voltmeter(); virtual double get_idd(); virtual double get_power_control(); virtual void set_power_control(double val); virtual void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } virtual void set_volume_control(int val); virtual int get_volume_control(); virtual void set_PTT_control(int val); virtual int get_PTT(); virtual void tune_rig(int); virtual int get_tune(); virtual int next_attenuator(); virtual void set_attenuator(int val); virtual int get_attenuator(); virtual int next_preamp(); virtual void set_preamp(int val); virtual int get_preamp(); const char * ATT_label(); const char * PRE_label(); virtual void set_if_shift(int val); virtual bool get_if_shift(int &val); virtual void get_if_min_max_step(int &min, int &max, int &step); virtual void set_notch(bool on, int val); virtual bool get_notch(int &val); virtual void get_notch_min_max_step(int &min, int &max, int &step); virtual void set_auto_notch(int v); virtual int get_auto_notch(); virtual void set_noise(bool b); virtual int get_noise(); virtual void set_mic_gain(int val); virtual int get_mic_gain(); virtual void get_mic_min_max_step(int &min, int &max, int &step); virtual void set_rf_gain(int val); virtual int get_rf_gain(); virtual void get_rf_min_max_step(int &min, int &max, int &step); virtual std::vector& bwtable(int); virtual void set_vox_onoff(); virtual void set_vox_gain(); virtual void set_vox_anti(); virtual void set_vox_hang(); virtual void set_vox_on_dataport(); virtual void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } virtual void set_cw_weight(); virtual void set_cw_wpm(); virtual void enable_keyer(); virtual void set_cw_qsk(); // 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); void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 15; step = 1; } void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void sync_date(char *dt); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/yaesu/FT1000MP_A.h0000664000175000017500000000361714502041135014645 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT1000MP_A_H #define FT1000MP_A_H #include "rigbase.h" class RIG_FT1000MP_A : public rigbase { public : RIG_FT1000MP_A(); ~RIG_FT1000MP_A() {}; void initialize(); bool can_split() { return true;} void set_split(bool val); bool twovfos() {return true;} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); void selectA(); void selectB(); int get_bwA(); void set_bwA(int n); int get_bwB(); void set_bwB(int n); void set_PTT_control(int val); void tune_rig(); int get_power_out(void); int get_smeter(void); int get_swr(void); int get_alc(void); void set_auto_notch(int v); // usurped for Tuner ON/OFF control int get_auto_notch(); int def_bandwidth(int m); int adjust_bandwidth(int); private: bool tune_on; void init_cmd(); bool get_info(void); bool tuner_on; }; #endif flrig-2.0.04/src/include/yaesu/FTdx9000.h0000664000175000017500000000655014502041135014513 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FTdx9000_H #define _FTdx9000_H #include "rigbase.h" class RIG_FTdx9000 : public rigbase { private: bool notch_on; int m_60m_indx; // void update_bandwidths(); public: RIG_FTdx9000(); ~RIG_FTdx9000(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool twovfos(); void selectA(); void selectB(); void A2B(); bool can_split(); void set_split(bool val); int get_split(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); int get_smeter(); int get_swr(); int get_power_out(); double get_power_control(); void set_volume_control(int val); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 200; step = 1; } int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); std::vector& bwtable(int); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_vox_on_dataport(); void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); void set_cw_qsk(); // 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); void set_xcvr_auto_on(); void set_xcvr_auto_off(); }; #endif flrig-2.0.04/src/include/yaesu/FT817BB.h0000664000175000017500000000320214502041135014301 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT817BB_H #define FT817BB_H #include "rigbase.h" class RIG_FT817BB : public rigbase { public: RIG_FT817BB(); ~RIG_FT817BB(){}; void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); int get_vfoAorB(); void selectA(); void selectB(); void set_PTT_control(int val); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); int get_power_out(); int get_smeter(); int get_swr(); int get_alc(); bool can_split() { return true;} void set_split(bool val); int get_split(); int adjust_bandwidth(int m) { return 0;} int power_scale(); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT950.h0000664000175000017500000000751314502041135014104 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT950_H #define _FT950_H #include "rigbase.h" class RIG_FT950 : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FT950(); ~RIG_FT950(){} void initialize(); void post_initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool twovfos(); void selectA(); void selectB(); void A2B(); bool can_split(); void set_split(bool val); int get_split(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); std::vector& bwtable(int); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); double get_idd(); double get_voltmeter(); double get_power_control(); void set_volume_control(int val); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_vox_on_dataport(); void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); void set_cw_qsk(); bool set_cw_spot(); void set_cw_spot_tone(); void get_band_selection(int v); void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 15; step = 1; } void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void set_compression(int, int); void get_compression( int &on, int &val ); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 5; } void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step); }; #endif flrig-2.0.04/src/include/yaesu/FT818.h0000664000175000017500000000315614502041135014106 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT818ND_H #define FT818ND_H #include "rigbase.h" class RIG_FT818ND : public rigbase { public: RIG_FT818ND(); ~RIG_FT818ND(){}; void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_PTT_control(int val); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); int get_power_out(); int get_smeter(); int get_swr(); int get_alc(); bool can_split() { return true;} void set_split(bool val); int get_split(); int adjust_bandwidth(int m) { return 0;} int power_scale(); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT2000.h0000664000175000017500000000521514502041135014145 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT2000_H #define _FT2000_H #include "rigbase.h" class RIG_FT2000 : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FT2000(); ~RIG_FT2000(){} void initialize(); void selectA(); void selectB(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); int get_smeter(); int get_swr(); int get_power_out(); double get_power_control(); void set_volume_control(int val); int get_volume_control(); void set_power_control(double val); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_noise(bool b); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); int adjust_bandwidth(int); int def_bandwidth(int); void set_break_in(); int get_break_in(); bool sendFTcommand(std::string, int, bool); std::vector& bwtable(int); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); void get_band_selection(int v); virtual double get_idd(); virtual double get_voltmeter(void); }; #endif flrig-2.0.04/src/include/yaesu/FT920.h0000664000175000017500000000345414502041135014101 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT920_H #define FT920_H #include "rigbase.h" class RIG_FT920 : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; int amode, aBW; int bmode, bBW; unsigned long long afreq; unsigned long long bfreq; public: RIG_FT920(); ~RIG_FT920(){}; void initialize(); bool get_info(); bool can_split() { return true;} void set_split(bool val); bool twovfos() {return false;} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int def_bandwidth(int m); int adjust_bandwidth(int); void selectA(); void selectB(); // int get_smeter(); // int get_swr(); // int get_power_out(); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT991.h0000664000175000017500000000763714502041135014120 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT991_H #define _FT991_H #include "rigbase.h" class RIG_FT991 : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FT991(); ~RIG_FT991(){} void initialize(); void post_initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool twovfos() { return true; } bool canswap() { return true; } void selectA(); void selectB(); void A2B(); void B2A(); void swapAB(); bool can_split(); void set_split(bool val); int get_split(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); int get_smeter(); int get_swr(); int get_alc(); double get_idd(); double get_voltmeter(); int get_power_out(); double get_power_control(); void set_volume_control(int val); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); std::vector& bwtable(int); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_vox_on_dataport(); void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); 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; } void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 5; } void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step); void sync_date(char *dt); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/yaesu/FT767.h0000664000175000017500000000234014502041135014103 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT767_H #define FT767_H #include "rigbase.h" class RIG_FT767 : public rigbase { public: RIG_FT767(); ~RIG_FT767(){}; void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); bool snd_cmd(std::string cmd, size_t n); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT900.h0000664000175000017500000000360314502041135014073 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // 2015-10-04 adapted from FT890.h by Ernst F. Schroeder DJ7HS // 2016-04-03 made getinfo() private DJ7HS // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT900_H #define _FT900_H #include "rigbase.h" class RIG_FT900 : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; int amode, aBW; int bmode, bBW; unsigned long long afreq; unsigned long long bfreq; int vfoAorB; int splitison; public: RIG_FT900(); ~RIG_FT900(){}; void initialize(); bool can_split() { return true;} void set_split(bool val); int get_split(); bool twovfos() {return true;} bool canswap() {return false;} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); int get_vfoAorB(); void selectA(); void selectB(); void set_PTT_control(int val); int get_smeter(); int get_power_out(); private: void init_cmd(); bool get_info(); }; #endif flrig-2.0.04/src/include/yaesu/FT710.h0000664000175000017500000001055014502041135014071 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2023 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT710_H #define _FT710_H #include "rigbase.h" class RIG_FT710 : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FT710(); ~RIG_FT710() {} virtual void initialize(); virtual bool check(); virtual unsigned long long get_vfoA(); virtual void set_vfoA(unsigned long long); virtual unsigned long long get_vfoB(); virtual void set_vfoB(unsigned long long); virtual int get_vfoAorB(); virtual bool twovfos(); virtual void selectA(); virtual void selectB(); virtual void A2B(); virtual bool can_split(); virtual void set_split(bool val); virtual int get_split(); virtual void swapAB(); virtual bool canswap() { return true; } virtual void set_modeA(int val); virtual int get_modeA(); virtual int get_modetype(int n); virtual void set_modeB(int val); virtual int get_modeB(); virtual void set_bwA(int val); virtual int get_bwA(); virtual void set_bwB(int val); virtual int get_bwB(); virtual int adjust_bandwidth(int val); virtual int def_bandwidth(int val); virtual void set_BANDWIDTHS(std::string s); virtual std::string get_BANDWIDTHS(); virtual int get_smeter(); virtual int get_swr(); virtual int get_alc(); virtual double get_idd(); virtual double get_voltmeter(); virtual int get_power_out(); virtual double get_power_control(); virtual void set_power_control(double val); virtual void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } virtual void set_volume_control(int val); virtual int get_volume_control(); virtual void set_PTT_control(int val); virtual int get_PTT(); virtual void tune_rig(int); virtual int get_tune(); virtual int next_attenuator(); virtual void set_attenuator(int val); virtual int get_attenuator(); virtual int next_preamp(); virtual void set_preamp(int val); virtual int get_preamp(); const char * ATT_label(); const char * PRE_label(); virtual void set_if_shift(int val); virtual bool get_if_shift(int &val); virtual void get_if_min_max_step(int &min, int &max, int &step); virtual void set_notch(bool on, int val); virtual bool get_notch(int &val); virtual void get_notch_min_max_step(int &min, int &max, int &step); virtual void set_auto_notch(int v); virtual int get_auto_notch(); virtual void set_noise(bool b); virtual int get_noise(); virtual void set_mic_gain(int val); virtual int get_mic_gain(); virtual void get_mic_min_max_step(int &min, int &max, int &step); virtual void set_rf_gain(int val); virtual int get_rf_gain(); virtual void get_rf_min_max_step(int &min, int &max, int &step); virtual std::vector& bwtable(int); virtual void set_vox_onoff(); virtual void set_vox_gain(); virtual void set_vox_anti(); virtual void set_vox_hang(); virtual void set_vox_on_dataport(); virtual void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } virtual void set_cw_weight(); virtual void set_cw_wpm(); virtual void enable_keyer(); virtual void set_cw_qsk(); // 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); void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 15; step = 1; } void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void sync_date(char *dt); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/yaesu/FT450.h0000664000175000017500000000737114502041135014101 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT450_H #define _FT450_H #include "rigbase.h" class RIG_FT450 : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FT450(); ~RIG_FT450(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void A2B(); int get_vfoAorB(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int); int def_bandwidth(int); std::vector& bwtable(int); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); bool twovfos() {return true;} bool can_split() {return true;} void set_split(bool); int get_split(); int get_smeter(); int get_swr(); int get_power_out(); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_power_control(double val); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_noise(bool b); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); void set_special(int v); void set_vox_onoff(); void set_vox_gain(); void get_vox_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 100; max = 3000; step = 100; } void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); void set_cw_qsk(); bool set_cw_spot(); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 400; max = 800; step = 100; } void get_band_selection(int v); void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 11; step = 1; } void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); }; #endif flrig-2.0.04/src/include/yaesu/FTdx3000.h0000664000175000017500000000656014502041135014506 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FTdx3000_H #define _FTdx3000_H #include "rigbase.h" class RIG_FTdx3000 : public rigbase { private: bool notch_on; int m_60m_indx; // void update_bandwidths(); public: RIG_FTdx3000(); ~RIG_FTdx3000(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool twovfos(); void selectA(); void selectB(); void A2B(); bool can_split(); void set_split(bool val); int get_split(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); int get_smeter(); int get_swr(); int get_alc(); double get_idd(); double get_voltmeter(); int get_power_out(); double get_power_control(); void set_volume_control(int val); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 200; step = 1; } int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); std::vector& bwtable(int); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_vox_on_dataport(); void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); void set_cw_qsk(); // 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); }; #endif flrig-2.0.04/src/include/yaesu/FT990.h0000664000175000017500000000353614502041135014111 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT990_H #define FT990_H #include "rigbase.h" class RIG_FT990 : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; int amode, aBW; int bmode, bBW; unsigned afreq; unsigned bfreq; public: RIG_FT990(); ~RIG_FT990(){}; void initialize(); bool get_info(); bool can_split() { return true;} void set_split(bool val); bool twovfos() {return false;} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int get_vfoAorB(); int def_bandwidth(int m); void selectA(); void selectB(); void set_PTT_control(int val); void tune_rig(int); int get_smeter(); int get_swr(); int get_power_out(); int adjust_bandwidth(int); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FTdx1200.h0000664000175000017500000000755314502041135014511 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FTDX1200_H #define _FTDX1200_H #include "rigbase.h" class RIG_FTdx1200 : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FTdx1200(); ~RIG_FTdx1200(){} void initialize(); void post_initialize(); void shutdown(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool twovfos(); void selectA(); void selectB(); void A2B(); bool can_split(); void set_split(bool val); int get_split(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); int get_smeter(); int get_swr(); int get_alc(); int get_power_out(); double get_power_control(); void set_volume_control(int val); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); std::vector& bwtable(int); void set_vox_onoff(); void set_vox_gain(); void set_vox_anti(); void set_vox_hang(); void set_vox_on_dataport(); void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); 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; } void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 5; } void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/yaesu/FT1000MP.h0000664000175000017500000000360514502041135014402 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT1000MP_H #define FT1000MP_H #include "rigbase.h" class RIG_FT1000MP : public rigbase { public : RIG_FT1000MP(); ~RIG_FT1000MP() {}; void initialize(); bool can_split() { return true;} void set_split(bool val); bool twovfos() {return true;} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(void); void set_vfoB(unsigned long long f); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); void selectA(); void selectB(); int get_bwA(); void set_bwA(int n); int get_bwB(); void set_bwB(int n); void set_PTT_control(int val); void tune_rig(); int get_power_out(void); int get_smeter(void); int get_swr(void); int get_alc(void); void set_auto_notch(int v); // usurped for Tuner ON/OFF control int get_auto_notch(); int def_bandwidth(int m); int adjust_bandwidth(int); private: bool tune_on; void init_cmd(); bool get_info(void); bool tuner_on; }; #endif flrig-2.0.04/src/include/yaesu/FT817.h0000664000175000017500000000314414502041135014102 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT817_H #define FT817_H #include "rigbase.h" class RIG_FT817 : public rigbase { public: RIG_FT817(); ~RIG_FT817(){}; void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_PTT_control(int val); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_modetype(int n); int get_power_out(); int get_smeter(); int get_swr(); int get_alc(); bool can_split() { return true;} void set_split(bool val); int get_split(); int adjust_bandwidth(int m) { return 0;} int power_scale(); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT990a.h0000664000175000017500000000356714502041135014256 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT990A_H #define FT990A_H #include "rigbase.h" class RIG_FT990A : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; int amode, aBW; int bmode, bBW; unsigned long long afreq; unsigned long long bfreq; public: RIG_FT990A(); ~RIG_FT990A(){}; void initialize(); bool can_split() { return true;} void set_split(bool val); bool twovfos() {return false;} bool check(); bool get_info(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); int get_vfoAorB(); int def_bandwidth(int m); void selectA(); void selectB(); void set_PTT_control(int val); void tune_rig(int); int get_smeter(); int get_swr(); int get_power_out(); int adjust_bandwidth(int); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT991A.h0000664000175000017500000001010114502041135014175 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT991A_H #define _FT991A_H #include "rigbase.h" class RIG_FT991A : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FT991A(); ~RIG_FT991A(){} void initialize(); void post_initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); bool twovfos() { return true; } bool canswap() { return true; } void selectA(); void selectB(); void A2B(); void B2A(); void swapAB(); bool can_split(); void set_split(bool val); int get_split(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int adjust_bandwidth(int val); int def_bandwidth(int val); int get_smeter(); int get_swr(); int get_alc(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); double get_idd(); double get_voltmeter(); int get_power_out(); double get_power_control(); void set_volume_control(int val); void set_power_control(double val); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } int get_volume_control(); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); int next_attenuator(); void set_attenuator(int val); int get_attenuator(); int next_preamp(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_auto_notch(int v); int get_auto_notch(); void set_noise(bool b); int get_noise(); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); std::vector& bwtable(int); void set_vox_onoff(); void set_vox_gain(); void get_vox_gain(); void set_vox_anti(); void set_vox_hang(); void get_vox_hang(); void set_vox_on_dataport(); void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); 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) { min = 1; max = 15; step = 1; } void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); void set_compression(int, int); void get_comp_min_max_step(int &min, int &max, int &step) { min = 0; max = 100; step = 5; } void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step); void sync_date(char *dt); void sync_clock(char *tm); }; #endif flrig-2.0.04/src/include/yaesu/FT757GX2.h0000664000175000017500000000330014502041135014420 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2020 // David Freese, W1HKJ // Michael Keitz, KD4QDM // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT757GX2_H #define FT757GX2_H #include "rigbase.h" class RIG_FT757GX2 : public rigbase { public: RIG_FT757GX2(); ~RIG_FT757GX2(){}; bool can_split() { return true;} void set_split(bool val); int get_split(); bool twovfos() {return false;} void initialize(); bool check(); int get_smeter(); int get_vfoAorB(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void selectA(); void selectB(); bool get_info(); bool snd_cmd(std::string cmd, size_t n); // FT757GX2 does not support PTT via CAT. // void set_PTT_control(int val); int get_PTT_control(); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT890.h0000664000175000017500000000325414502041135014105 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT890_H #define _FT890_H #include "rigbase.h" class RIG_FT890 : public rigbase { private: double fwdpwr; double refpwr; double fwdv; double refv; int amode, aBW; int bmode, bBW; unsigned long long afreq; unsigned long long bfreq; public: RIG_FT890(); ~RIG_FT890(){}; void initialize(); bool get_info(); bool can_split() { return true;} void set_split(bool val); bool twovfos() {return false;} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void selectA(); void selectB(); void set_PTT_control(int val); int get_smeter(); int get_power_out(); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT747.h0000664000175000017500000000304114502041135014100 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT747_H #define FT747_H #include "rigbase.h" class RIG_FT747 : public rigbase { public: RIG_FT747(); ~RIG_FT747(){}; bool can_split() { return true;} void set_split(bool val); bool twovfos() {return false;} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void selectA(); void selectB(); bool get_info(); bool snd_cmd(std::string cmd, size_t n); void set_PTT_control(int val); int get_PTT_control(); private: void init_cmd(); }; #endif flrig-2.0.04/src/include/yaesu/FT857D.h0000664000175000017500000000343214502041135014212 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT857D_H #define FT857D_H #include "FT817.h" class RIG_FT857D : public rigbase { public: RIG_FT857D(); ~RIG_FT857D(){}; void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_PTT_control(int val); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_modeB(int val); int get_modeB(); int get_power_out(void); int get_smeter(void); void selectA(); void selectB(); bool can_split() { return true;} void set_split(bool val); int get_split(); int adjust_bandwidth(int m) { return 0; } void set_band_selection(int v); void set_tones(int, int); void set_offset(int, int); private: void init_cmd(); protected: bool onB; }; class RIG_FT897D : public RIG_FT857D { public : RIG_FT897D(); ~RIG_FT897D() {}; void initialize(); }; #endif flrig-2.0.04/src/include/yaesu/FT736R.h0000664000175000017500000000313614502041135014225 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FT736R_H #define FT736R_H #include "rigbase.h" class RIG_FT736R : public rigbase { public: RIG_FT736R(); ~RIG_FT736R(){}; bool check(); void initialize(); void shutdown(); unsigned long long get_vfoA(); unsigned long long get_vfoB(); void set_vfoA(unsigned long long); void set_vfoB(unsigned long long); int get_modeA(); int get_modeB(); int get_modetype(int n); void set_modeA(int); void set_modeB(int); void selectA(); void selectB(); void set_PTT_control(int val); int get_PTT(); int get_smeter(); private: void init_cmd(); void set_vfo(unsigned long long); void set_mode(int); void send(); // S Meter data minimum & maximum values from rig. wbx int rig_smin; int rig_smax; }; #endif flrig-2.0.04/src/include/yaesu/FT450D.h0000664000175000017500000001040014502041135014170 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _FT450D_H #define _FT450D_H #include "rigbase.h" class RIG_FT450D : public rigbase { private: bool notch_on; int m_60m_indx; public: RIG_FT450D(); ~RIG_FT450D(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void A2B(); int get_vfoAorB(); void set_modeA(int val); int get_modeA(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); bool twovfos() {return true;} bool can_split() {return true;} void set_split(bool); int get_split(); int get_smeter(); int get_swr(); int get_alc(); int get_agc(); int incr_agc(); const char *agc_label(); int agc_val(); int get_power_out(); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step) { min = 5; pmax = max = 100; step = 1; } void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void set_power_control(double val); void set_PTT_control(int val); int get_PTT(); void tune_rig(int); int get_tune(); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); const char * ATT_label(); const char * PRE_label(); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void set_notch(bool on, int val); bool get_notch(int &val); void get_notch_min_max_step(int &min, int &max, int &step); void set_noise(bool b); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_special(int v); void set_vox_onoff(); void set_vox_gain(); void get_vox_gain_min_max_step(int &min, int &max, int &step) { min = 0; max = 255; step = 1; } void set_vox_hang(); void get_vox_hang_min_max_step(int &min, int &max, int &step) { min = 100; max = 3000; step = 100; } void get_cw_wpm_min_max(int &min, int &max) { min = 4; max = 60; } void set_cw_weight(); void set_cw_wpm(); void enable_keyer(); void set_break_in(); int get_break_in(); void get_cw_weight(); void get_cw_wpm(); void get_qsk(); void get_qsk_delay(); void get_cw_spot_tone(); void get_vox_gain(); void get_vox_hang(); void set_cw_qsk(); void get_cw_qsk_min_max_step(double &min, double &max, double &step) { min = 30; max = 3000; step = 10; } void set_cw_delay(); void get_cw_delay_min_max_step(double &min, double &max, double &step) { min = 30; max = 3000; step = 10; } bool set_cw_spot(); void set_cw_spot_tone(); void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) { min = 400; max = 800; step = 100; } void get_nr_min_max_step(int &min, int &max, int &step) { min = 1; max = 11; step = 1; } void set_noise_reduction_val(int val); int get_noise_reduction_val(); void set_noise_reduction(int val); int get_noise_reduction(); void set_xcvr_auto_on(); void set_xcvr_auto_off(); int adjust_bandwidth(int); int def_bandwidth(int); std::vector& bwtable(int); void set_BANDWIDTHS(std::string s); std::string get_BANDWIDTHS(); void get_band_selection(int v); }; #endif flrig-2.0.04/src/include/fsklog.h0000664000175000017500000000273314502720371013501 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2022 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FSKLOG_H #define FSKLOG_H extern bool fsklog_editing; extern void fsklog_sort_by_call(); extern void fsklog_sort_by_datetime(); extern void fsklog_sort_by_nbr(); extern void fsklog_sort_by_freq(); extern void fsklog_clear_qso(); extern void fsklog_save_qso(); extern void fsklog_edit_entry(); extern void fsklog_delete_entry(); extern void fsklog_view(); extern void fsklog_close(); extern void fsklog_open(); extern void fsklog_new(); extern void fsklog_load(); extern void fsklog_save(); extern void fsklog_save_as(); extern void fsklog_export_adif(); extern void fsklog_import_adif(); #endif flrig-2.0.04/src/include/flbrowser2.h0000664000175000017500000000213714502720371014301 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef FL_BROWSER2_ #define FL_BROWSER2_ #include class Fl_Browser2 : public Fl_Browser { public: Fl_Browser2(int x, int y, int w, int h, const char* l = 0); int handle(int event); }; #endif // FL_BROWSER2_ flrig-2.0.04/src/include/pixmaps.h0000664000175000017500000000666414502720371013704 00000000000000// ===================================================================== // pixmaps.h // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef PIXMAPS_H_ #define PIXMAPS_H_ extern const char *address_book_icon[]; extern const char *edit_undo_icon[]; extern const char *edit_select_all_icon[]; extern const char *edit_clear_icon[]; extern const char *edit_copy_icon[]; extern const char *edit_cut_icon[]; extern const char *edit_paste_icon[]; extern const char *file_open_icon[]; extern const char *format_indent_more_icon[]; extern const char *left_arrow_icon[]; extern const char *log_out_icon[]; extern const char *minus_icon[]; extern const char *net_icon[]; extern const char *plus_icon[]; extern const char *process_stop_icon[]; extern const char *right_arrow_icon[]; extern const char *save_as_icon[]; extern const char *save_icon[]; extern const char *time_icon[]; extern const char *trash_icon[]; extern const char *image_icon[]; extern const char *weather_clear_icon[]; extern const char *start_here_icon[]; extern const char *help_browser_icon[]; extern const char *system_search_icon[]; extern const char *system_software_update_icon[]; extern const char *utilities_terminal_icon[]; extern const char *emblem_symbolic_link_icon[]; extern const char *emblems_system_icon[]; extern const char *dialog_information_icon[]; extern const char *executable_icon[]; extern const char *other_icon[]; extern const char *folder_open_icon[]; extern const char *preferences_system_icon[]; extern const char *preferences_desktop_font_icon[]; extern const char *system_users_icon[]; extern const char *utilities_system_monitor_icon[]; extern const char *multimedia_player_icon[]; extern const char *chat_icon[]; extern const char *dialog_information_48_icon[]; extern const char *dialog_warning_48_icon[]; extern const char *refresh_icon[]; extern const char *text_editor_icon[]; extern const char *text_icon[]; extern const char *shutdown_icon[]; extern const char *applications_system_icon[]; extern const char *audio_card_icon[]; extern const char *help_about_icon[]; extern const char *insert_link_icon[]; extern const char *close_icon[]; extern const char *enter_key_icon[]; extern const char *dialog_question_48_icon[]; extern const char *clear_sq_icon[]; extern const char *clear_row_icon[]; extern const char *rx1_icon[]; extern const char *tx1_icon[]; extern const char *rx2_icon[]; extern const char *tx2_icon[]; extern const char *rx_icon[]; extern const char *tx_icon[]; extern const char *fldigi_icon[]; extern const char *flarq_icon[]; extern const char *waterfall_icon[]; extern const char *dice_icon[]; extern const char *pskr_icon[]; #endif // PIXMAPS_H_ flrig-2.0.04/src/include/hidapi.h0000664000175000017500000000175614502720371013456 00000000000000/*********************************************************************** HIDAPI - Multi-Platform library for communication with HID devices. Alan Ott Signal 11 Software Copyright 2009, All Rights Reserved. C++ implementation * Copyright 2021 * David Freese, W1HKJ * for use in flrig This software is licensed under the terms of the GNU General Public License v3. ***********************************************************************/ #include #define HID_API_VERSION_MAJOR 0 #define HID_API_VERSION_MINOR 10 #define HID_API_VERSION_PATCH 1 /* Helper macros */ #define HID_API_AS_STR_IMPL(x) #x #define HID_API_AS_STR(x) HID_API_AS_STR_IMPL(x) #define HID_API_TO_VERSION_STR(v1, v2, v3) HID_API_AS_STR(v1.v2.v3) #define HID_API_VERSION_STR HID_API_TO_VERSION_STR(HID_API_VERSION_MAJOR, HID_API_VERSION_MINOR, HID_API_VERSION_PATCH) #ifdef __WIN32__ # include "hid_win.h" # else # ifdef __APPLE__ # include "hid_mac.h" # else # include "hid_lin.h" # endif #endif flrig-2.0.04/src/include/FreqControl.h0000664000175000017500000001242714502720371014453 00000000000000// ---------------------------------------------------------------------------- // // Frequency Control Widget for the Fast Light Tool Kit // // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- // // Usage: // Create a multi-digit receiver / transceiver frequency control widget // // 'lbl' param used to specify # digits to display // The widget can be used in Fluid & initialized with the // number of digits as the label string // default is 7; min number is 4, max number is 10. // // cFreqControl myFreqControl(x0, y0, w0, h0, "N"); where N is # digits // cFreqControl *pMyFreqControl = new cFreqControl(x0,y0,w0,h0,"N"); #ifndef _FREQCONTROL_H_ #define _FREQCONTROL_H_ #include #include #include #include #include #include #include #include #include #ifdef MAX_DIGITS #undef MAX_DIGITS #endif #define MAX_DIGITS 10 #ifdef MIN_DIGITS #undef MIN_DIGITS #endif #define MIN_DIGITS 4 class cFreqControl : public Fl_Group { friend void cbSelectDigit (Fl_Widget *btn, void * nbr); public: cFreqControl(int x, int y, int w, int h, const char *lbl = "7"); ~cFreqControl(); void updatevalue(); void value(unsigned long long lv); unsigned long long value() {return val;}; std::string strval() { char szfreq[20]; snprintf(szfreq, sizeof(szfreq), "%f", val / 1e6); return szfreq; } unsigned long long maximum(void); void font(Fl_Font fnt); void SetBGCOLOR (uchar r, uchar g, uchar b); void GetBGCOLOR (uchar &r, uchar &g, uchar &b) { Fl::get_color(BGCOLOR, r, g, b); }; void SetLBLCOLOR (uchar r, uchar g, uchar b); void GetLBLCOLOR (uchar &r, uchar &g, uchar &b) { Fl::get_color(LBLCOLOR, r, g, b); }; void SetCOLORS(Fl_Color, Fl_Color); void UpdateCOLORS(Fl_Color, Fl_Color); void callback (void (*cbf)(Fl_Widget *, void *) ){ cbFunc = cbf;} void do_callback() { if (cbFunc) cbFunc(this, (void*)0); } int handle(int event); void visual_beep(); void set_hrd(bool b) {hrd_buttons = b;} void reverse_colors(); void restore_colors(); bool is_reversed_colors() { return colors_reversed; } void resize (int X, int Y, int W, int H); void set_ndigits(int nbr); void set_lsd(int lsd) { if (lsd < 0) return; if (lsd > 3) return; set_precision ((int) pow(10, lsd)); } void set_precision(int prec) { switch (prec) { case 1000: dpoint = 0; precision = lsd = 1000; break; case 100: dpoint = 1; precision = lsd = 100; break; case 10: dpoint = 2; precision = lsd = 10; break; default: dpoint = 3; precision = lsd = 1; break; } set_ndigits(nD); } void activate() { active = true; } // This function overrides the standard fltk widget func of same name void deactivate() { active = false; } // This function overrides the standard fltk widget func of same name bool isactive() { return active; } bool numeric_entry_mode() { return numeric_entry_active; } void numeric_entry_mode(bool); private: Fl_Repeat_Button *Digit[MAX_DIGITS]; Fl_Boxtype Digit_box_type; Fl_Float_Input *finp; static const char *Label[]; unsigned long long mult[MAX_DIGITS]; Fl_Box *decbx; Fl_Box *hfill; Fl_Font font_number; Fl_Color LBLCOLOR; Fl_Color BGCOLOR; Fl_Color REVBGCOLOR; Fl_Color REVLBLCOLOR; Fl_Color SELCOLOR; int nD; unsigned long long maxVal; // Hz unsigned long long minVal; // Hz bool active; int X, Y, W, H; // Usable space inside FreqControl border int bdr_x, bdr_y; // Thickness of X and Y Freq Control box borders in pixels int fw; // font width - pixels int fh; // font height - pixels int fs; // font size - pixels int dw; // (Fl_Repeat_Button) digit box width - pixels int pw; // (Fl_Box) decimal point box width - pixels void DecFreq(int n); void IncFreq(int n); void (*cbFunc)(Fl_Widget *, void *); static void freq_input_cb(Fl_Widget* input, void* arg); void cancel_kb_entry(void); protected: unsigned long long val, oldval; // Value displayed in Repeat Button boxes; units are Hz int precision; // Really, resolution - Number of Hz represented by least sig digit displayed; for flrig compatibility int dpoint; // Number of digits to the right of decimal point int lsd; // Least significant digit value displayed is 10^lsd Hz bool hrd_buttons; // Toggle between Left/Right mouse click for inc/dec and click top/bottom of digit bool colors_reversed; // Colors (label and background) are reversed to indicate control has focus bool numeric_entry_active; // User pressed numeric keys for freq entry }; #endif flrig-2.0.04/src/include/elecraft/0000775000175000017500000000000014511461606013706 500000000000000flrig-2.0.04/src/include/elecraft/K2.h0000664000175000017500000000366614502041135014255 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _H #define _H #include "rigbase.h" class RIG_K2 : public rigbase { protected: bool hipower; bool K2split; public: RIG_K2(); ~RIG_K2(){} void initialize(); bool get_info(); bool twovfos() {return true;} bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); void set_modeA(int val); int get_modeA(); void set_bwA(int val); int get_bwA(); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeB(int val); int get_modeB(); void set_bwB(int val); int get_bwB(); void selectA(); void selectB(); // void A2B(); int get_modetype(int n); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); void tune_rig(int); void set_PTT_control(int val); int get_PTT(); void get_pc_min_max_step(double &min, double &max, double &step); double get_power_control(); void set_power_control(double val); int get_smeter(); int get_power_out(); bool can_split(); void set_split(bool val); int get_split(); int adjust_bandwidth(int m); }; #endif flrig-2.0.04/src/include/elecraft/K3.h0000664000175000017500000000475614502041135014257 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef K3_H #define K3_H #include "rigbase.h" class RIG_K3 : public rigbase { public: RIG_K3(); ~RIG_K3(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_volume_control(int val); int get_volume_control(); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &, double &, double &); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void get_if_mid(); void set_PTT_control(int val); void set_attenuator(int val); int get_attenuator(); void set_preamp(int val); int get_preamp(); int get_smeter(); void set_noise(bool on); int get_noise(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int get_power_out(); int adjust_bandwidth(int m); int def_bandwidth(int m); bool can_split(); void set_split(bool val); int get_split(); bool twovfos() {return true;} void shutdown(); void set_pbt_values(int val); private: double minpwr; double maxpwr; double steppwr; // if shift value int if_mid; int if_min; int if_max; bool split_on; /* int get_swr(); void tune_rig(); */ }; #endif flrig-2.0.04/src/include/elecraft/KX3.h0000664000175000017500000000541614502041135014401 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef KX3_H #define KX3_H #include "rigbase.h" class RIG_KX3 : public rigbase { #define KX3_WAIT_TIME 5000 public: RIG_KX3(); ~RIG_KX3(){} void initialize(); bool check(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void selectA() { inuse = onA;} void selectB() { inuse = onB;} void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step) { min = 0; max = 60; step = 1; } void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &, double &, double &); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void get_if_mid(); void set_PTT_control(int val); int get_PTT(); void set_attenuator(int val); int get_attenuator(); int next_attenuator(); void set_preamp(int val); int get_preamp(); int next_preamp(); int get_smeter(); void set_noise(bool on); int get_noise(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int get_power_out(); int adjust_bandwidth(int m); int def_bandwidth(int m); bool can_split(); void set_split(bool val); int get_split(); bool twovfos() {return true;} void shutdown(); int power_scale(); private: // if shift value int if_mid; int if_min; int if_max; bool split_on; int get_swr(); // void tune_rig(); void get_options(); }; class RIG_KX2 : public RIG_KX3 { public: RIG_KX2(); ~RIG_KX2() {} }; #endif flrig-2.0.04/src/include/elecraft/K4.h0000664000175000017500000000556714502041135014261 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2022 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef K4_H #define K4_H #include "rigbase.h" class RIG_K4 : public rigbase { protected: bool K4split; public: RIG_K4(); ~RIG_K4(){} void initialize(); bool check(); int power_scale(); unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(double &min, double &max, double &step); void set_power_control(double val); double get_power_control(); void get_pc_min_max_step(double &min, double &max, double &step); void set_rf_gain(int val); int get_rf_gain(); void get_rf_min_max_step(int &min, int &max, int &step); void set_mic_gain(int val); int get_mic_gain(); void get_mic_min_max_step(int &min, int &max, int &step); void set_if_shift(int val); bool get_if_shift(int &val); void get_if_min_max_step(int &min, int &max, int &step); void get_if_mid(); void set_PTT_control(int val); int get_PTT(); void set_attenuator(int val); int get_attenuator(); int next_attenuator(); void set_preamp(int val); int get_preamp(); int next_preamp(); const char * PRE_label(); const char * ATT_label(); int get_smeter(); void set_noise(bool on); int get_noise(); int get_modetype(int n); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); int get_power_out(); void selectA(); void selectB(); int get_agc(); int incr_agc(); void set_agc_level(int); const char *agc_label(); int adjust_bandwidth(int m); int def_bandwidth(int m); bool can_split(); void set_split(bool val); int get_split(); bool twovfos() {return true;} void shutdown(); void set_pbt_values(int val); private: double minpwr; double maxpwr; double steppwr; // if shift value int if_mid; int if_min; int if_max; bool split_on; /* int get_swr(); void tune_rig(); */ }; #endif flrig-2.0.04/src/include/status.h0000664000175000017500000002651714502720371013545 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _status_H #define _status_H #include #include #include #include "rig.h" #define FPLEN 20 // used in tt550 power sample #define MAX_DEFBUFFER_SIZE 500 struct status { int mainX; int mainY; int mainW; int mainH; int UIsize; bool UIchanged; int memX; int memY; int memW; int memH; int metersX; int metersY; bool meters_dialog_visible; int ddX; int ddY; std::string xcvr_serial_port; int serial_baudrate; int stopbits; int serial_retries; int serial_write_delay; int serial_post_write_delay; int serial_timeout; int serial_catptt; int serial_rtsptt; int serial_dtrptt; bool serial_rtscts; bool serial_rtsplus; bool serial_dtrplus; int serloop_timing; std::string aux_serial_port; bool aux_SCU_17; bool aux_rts; bool aux_dtr; std::string xmlport; std::string sep_serial_port; int sep_rtsptt; int sep_dtrptt; bool sep_rtsplus; bool sep_dtrplus; bool sep_SCU_17; std::string cmedia_device; std::string cmedia_gpio_line; int cmedia_ptt; std::string tmate2_device; std::string tmate2_freq_step; bool tmate2_connected; bool disable_CW_ptt; int CIV; bool USBaudio; int poll_smeter; int poll_frequency; int poll_mode; int poll_bandwidth; int poll_volume; int poll_auto_notch; int poll_notch; int poll_ifshift; int poll_pbt; int poll_power_control; int poll_pre_att; int poll_micgain; int poll_squelch; int poll_rfgain; int poll_pout; int poll_swr; int poll_alc; int poll_split; int poll_noise; int poll_nr; // int poll_vfoAorB; int poll_meters; int poll_ops; int poll_compression; int poll_tuner; int poll_ptt; int poll_break_in; int poll_all; int iBW_A; int imode_A; unsigned long long freq_A; int iBW_B; int imode_B; unsigned long long freq_B; std::string filters; std::string bandwidths; bool use_rig_data; bool spkr_on; int volume; double power_level; double power_limit; bool enable_power_limit; int mic_gain; bool notch; int notch_val; bool shift; int shift_val; bool pbt_lock; int pbt_inner; int pbt_outer; int rfgain; int squelch; int schema; int embed_tabs; int show_tabs; bool first_use; std::string visible_tab; bool hrd_buttons; int sliders_button; int line_out; bool data_port; int agc_level; int cw_wpm; float cw_weight; int cw_vol; int cw_spot; bool spot_onoff; int cw_spot_tone; bool enable_keyer; int break_in; double cw_qsk; double cw_delay; bool vox_onoff; int vox_gain; int vox_anti; int vox_hang; bool vox_on_dataport; int compression; bool compON; int noise_reduction; int noise_reduction_val; int nb_level; bool noise; int attenuator; int preamp; int auto_notch; int split; int no_txqsy; int rx_avg; int rx_peak; int pwr_avg; int pwr_peak; int pwr_scale; bool sync_clock; bool sync_gmt; // ic7610 special controls bool digi_sel_on_off; int digi_sel_val; int index_ic7610att; bool dual_watch; // ft950 reverse RG0; readings bool ft950_rg_reverse; bool restore_frequency; bool restore_mode; bool restore_bandwidth; bool restore_volume; bool restore_mic_gain; bool restore_rf_gain; bool restore_power_control; bool restore_if_shift; bool restore_notch; bool restore_auto_notch; bool restore_noise; bool restore_squelch; bool restore_split; bool restore_pre_att; bool restore_nr; bool restore_comp_on_off; bool restore_comp_level; //============= transceiver specific prameters //tt550 controls int tt550_line_out; int tt550_agc_level; int tt550_cw_wpm; double tt550_cw_weight; int tt550_cw_vol; int tt550_cw_spot; bool tt550_spot_onoff; int tt550_cw_qsk; bool tt550_enable_keyer; bool tt550_vox_onoff; int tt550_vox_gain; int tt550_vox_anti; int tt550_vox_hang; int tt550_mon_vol; int tt550_squelch_level; int tt550_compression; int tt550_nb_level; bool tt550_compON; bool tt550_tuner_bypass; bool tt550_enable_xmtr; bool tt550_enable_tloop; bool tt550_use_line_in; int tt550_xmt_bw; bool tt550_use_xmt_bw; int tt550_AM_level; int tt550_encoder_step; int tt550_encoder_sensitivity; int tt550_keypad_timeout; int tt550_F1_func; int tt550_F2_func; int tt550_F3_func; int tt550_Nsamples; bool tt550_at11_inline; bool tt550_at11_hiZ; // ========================= //and others double vfo_adj; int bfo_freq; int rit_freq; int xit_freq; int bpf_center; bool use_bpf_center; // IC706MKIIG filters bool use706filters; std::string ssb_cw_wide; //FL-103 std::string ssb_cw_normal; //FL-272 std::string ssb_cw_narrow; //FL-232 // ========================= // User command buttons std::string label1; std::string command1; std::string shftcmd1; std::string label2; std::string command2; std::string shftcmd2; std::string label3; std::string command3; std::string shftcmd3; std::string label4; std::string command4; std::string shftcmd4; std::string label5; std::string command5; std::string shftcmd5; std::string label6; std::string command6; std::string shftcmd6; std::string label7; std::string command7; std::string shftcmd7; std::string label8; std::string command8; std::string shftcmd8; std::string label9; std::string command9; std::string shftcmd9; std::string label10; std::string command10; std::string shftcmd10; std::string label11; std::string command11; std::string shftcmd11; std::string label12; std::string command12; std::string shftcmd12; std::string label13; std::string command13; std::string shftcmd13; std::string label14; std::string command14; std::string shftcmd14; std::string label15; std::string command15; std::string shftcmd15; std::string label16; std::string command16; std::string shftcmd16; std::string label17; std::string command17; std::string shftcmd17; std::string label18; std::string command18; std::string shftcmd18; std::string label19; std::string command19; std::string shftcmd19; std::string label20; std::string command20; std::string shftcmd20; std::string label21; std::string command21; std::string shftcmd21; std::string label22; std::string command22; std::string shftcmd22; std::string label23; std::string command23; std::string shftcmd23; std::string label24; std::string command24; std::string shftcmd24; std::string label_on_start1; std::string cmd_on_start1; std::string label_on_start2; std::string cmd_on_start2; std::string label_on_start3; std::string cmd_on_start3; std::string label_on_start4; std::string cmd_on_start4; std::string label_on_exit1; std::string cmd_on_exit1; std::string label_on_exit2; std::string cmd_on_exit2; std::string label_on_exit3; std::string cmd_on_exit3; std::string label_on_exit4; std::string cmd_on_exit4; // ========================= int bg_red; int bg_green; int bg_blue; int fg_red; int fg_green; int fg_blue; int swrRed; int swrGreen; int swrBlue; int pwrRed; int pwrGreen; int pwrBlue; int smeterRed; int smeterGreen; int smeterBlue; int peakRed; int peakGreen; int peakBlue; int voltRed; int voltGreen; int voltBlue; int display_voltmeter; int fg_sys_red; int fg_sys_green; int fg_sys_blue; int bg_sys_red; int bg_sys_green; int bg_sys_blue; int bg2_sys_red; int bg2_sys_green; int bg2_sys_blue; int slider_red; int slider_green; int slider_blue; int slider_btn_red; int slider_btn_green; int slider_btn_blue; int lighted_btn_red; int lighted_btn_green; int lighted_btn_blue; int tab_red; int tab_green; int tab_blue; Fl_Font fontnbr; bool tooltips; std::string ui_scheme; // std::string server_port; // std::string server_addr; std::string xmlrig_addr; std::string xmlrig_port; bool xmlrpc_rig; std::string tcpip_port; std::string tcpip_addr; int tcpip_ping_delay; int tcpip_reconnect_after; int tcpip_drops_allowed; bool use_tcpip; std::string tci_port; std::string tci_addr; int tci_center; bool xcvr_auto_on; bool xcvr_auto_off; bool external_tuner; bool trace; bool rigtrace; bool settrace; bool gettrace; bool debugtrace; bool xmltrace; bool rpctrace; bool serialtrace; bool tcitrace; bool start_stop_trace; int rpc_level; // bands; defaults for FT857 / FT897 / Xiegu-G90 // frequency, mode, txCTCSS, rxCTCSS, offset, offset_freq; int f160, m160, txT_160, rxT_160, offset_160, oF_160; int f80, m80, txT_80, rxT_80, offset_80, oF_80; int f40, m40, txT_40, rxT_40, offset_40, oF_40; int f30, m30, txT_30, rxT_30, offset_30, oF_30; int f20, m20, txT_20, rxT_20, offset_20, oF_20; int f17, m17, txT_17, rxT_17, offset_17, oF_17; int f15, m15, txT_15, rxT_15, offset_15, oF_15; int f12, m12, txT_12, rxT_12, offset_12, oF_12; int f10, m10, txT_10, rxT_10, offset_10, oF_10; int f6, m6, txT_6, rxT_6, offset_6, oF_6; int f2, m2, txT_2, rxT_2, offset_2, oF_2; int f70, m70, txT_70, rxT_70, offset_70, oF_70; int f12G, m12G, txT_12G, rxT_12G, offset_12G, oF_12G; int fgen, mgen, txT_gen, rxT_gen, offset_gen, oF_gen; // memory management Fl_Font memfontnbr; int memfontsize; // gpio parameters int gpio_ptt; int enable_gpio; int gpio_on; int gpio_pulse_width; // KXPA 100 presence // int kxpa; // cwio parameters int cwioWPM; int cwioKEYLINE; int cwioSHARED; int cwioPTT; int cwioCONNECTED; int cwioINVERTED; double cwio_comp; double cwio_keycorr; std::string cwioPORT; std::string cwio_msgs[12]; std::string cwio_labels[12]; std::string BT; std::string AA; std::string AS; std::string AR; std::string KN; std::string SK; std::string INT; std::string HM; std::string VE; // FSK_ parameters int FSK_KEYLINE; int FSK_SHARED; int FSK_PTT; int FSK_CONNECTED; int FSK_INVERTED; int FSK_STOPBITS; int fsk_idles; std::string FSK_PORT; std::string FSK_msgs[12]; std::string FSK_labels[12]; // CW logbook parameters std::string cw_log_name; int cw_log_cut_numbers; int cw_log_leading_zeros; int cw_log_dupcheck; int cw_log_nbr; // FSK logbook parameters std::string fsk_log_name; int fsk_log_cut_numbers; int fsk_log_leading_zeros; int fsk_log_dupcheck; int fsk_log_nbr; void saveLastState(); void loadLastState(); bool loadXcvrState(std::string); void UI_laststate(); std::string info(); }; extern status progStatus; extern std::string xcvr_name; extern void ss_trace(bool on); #endif flrig-2.0.04/src/include/socket_io.h0000664000175000017500000000237414502720371014174 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef WRAP_H #define WRAP_H #ifdef WIN32 # include "compat.h" #else # include #endif #include #include #include "threads.h" #include "socket.h" extern Socket *tcpip; extern Address *remote_addr; void connect_to_remote(); void disconnect_from_remote(); void send_to_remote(std::string cmd_string); int read_from_remote(std::string &str); #endif flrig-2.0.04/src/include/rig_io.h0000664000175000017500000000357514502720371013471 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _RIG_IO_H #define _RIG_IO_H #include #include #include enum { QUIET, ERR, WARN, INFO, DEBUG }; enum { ASC, HEX }; enum MODES {LSB, USB, CW}; enum BAUDS { BR300, BR600, BR1200, BR2400, BR4800, BR9600, BR19200, BR38400, BR57600, BR115200, BR230400, BR460800 }; extern const char *szBaudRates[]; extern bool startXcvrSerial(); extern bool startAuxSerial(); extern bool startSepSerial(); extern int readResponse(std::string req1 = "", std::string req2 = ""); extern int sendCommand(std::string s, int nread = 0, int wait = 0); extern int waitResponse(int); extern bool waitCommand( std::string command, int nread, std::string info = "", int msec = 200, char term = 0x0d, // carriage return int how = ASC, int level = INFO ); extern char replybuff[]; extern std::string respstr; extern void showresp(int level, int how, std::string s, std::string tx, std::string rx); extern std::string to_hex(std::string); extern std::string fm_hex(std::string); #endif flrig-2.0.04/src/include/xml_server.h0000664000175000017500000000262114502720371014376 00000000000000// --------------------------------------------------------------------- // // xml_server.h, a part of flrig // // Copyright (C) 2014 // Dave Freese, W1HKJ // // This library is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with the program; if not, write to the // // Free Software Foundation, Inc. // 51 Franklin Street, Fifth Floor // Boston, MA 02110-1301 USA. // // --------------------------------------------------------------------- #ifndef XML_SERVER_H #define XML_SERVER_H #include #include #include #include #ifndef WIN32 #include #include #include #endif #include "status.h" #include #include extern void start_server(int port = 12345); extern void exit_server(); extern void set_server_port(int port = 12345); extern std::string print_xmlhelp(); #endif flrig-2.0.04/src/include/ptt.h0000664000175000017500000000211114502720371013011 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef PTT_H #define PTT_H #include #include #include #include enum {PTT_NONE, PTT_BOTH, PTT_SET, PTT_GET}; extern void rigPTT(bool); extern bool ptt_state(); #endif flrig-2.0.04/src/include/KX3_ui.h0000664000175000017500000000232514502720371013313 00000000000000// ===================================================================== // KX3 user interface support // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef KX3_UI_H #define KX3_UI_H extern void read_KX3_vfo(); extern void read_KX3_mode(); extern void read_KX3_bw(); extern void KX3_set_split(int val); extern void cb_KX3_A2B(); extern void cb_KX3_swapAB(); extern void cb_KX3_IFsh(); #endif flrig-2.0.04/src/include/K3_ui.h0000664000175000017500000000213314502720371013160 00000000000000// ===================================================================== // K3 user interface support // ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- void read_K3_vfo(); void read_K3_mode(); void read_K3_bw(); void K3_set_split(int val); void K3_A2B(); void cb_K3_swapAB(); flrig-2.0.04/src/include/compat.h0000664000175000017500000000355314502720371013500 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef COMPAT_H #define COMPAT_H #include "config.h" /* adapted from git-compat-util.h in git-1.6.1.2 */ #ifdef __WIN32__ # include # include # include # include # include # undef _WINSOCKAPI_ // Required only if windows.h has already been included - it shouldn't have been. # include "compat-mingw.h" #endif #ifdef __cplusplus extern "C" { #endif // Prior to the UCRT in Visual Studio 2015 and Windows 10, snprintf was not C99 // standard conformant; hence this work-around. #if defined(__WIN32__) && (!defined(__GNUC__) || __GNUC__ < 4) # define SNPRINTF_RETURNS_BOGUS 1 #else # define SNPRINTF_RETURNS_BOGUS 0 #endif #if SNPRINTF_RETURNS_BOGUS #define snprintf git_snprintf extern int git_snprintf(char *str, size_t maxsize, const char *format, ...); #define vsnprintf git_vsnprintf extern int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap); #endif #ifdef __cplusplus } #endif #endif // COMPAT_H flrig-2.0.04/src/include/qrp_labs/0000775000175000017500000000000014511461606013724 500000000000000flrig-2.0.04/src/include/qrp_labs/QDX.h0000664000175000017500000000377214502041135014451 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _QDX_H #define _QDX_H #include "kenwood/KENWOOD.h" class RIG_QDX : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; bool menu_45; int alc; bool swralc_polled; public: RIG_QDX(); ~RIG_QDX(){} void initialize(); void shutdown(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB (); void set_vfoB (unsigned long long freq); void selectA(); void selectB(); void set_split(bool val) ; bool can_split(); int get_split(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void set_PTT_control(int val); int get_PTT(); int get_IF(); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step); void set_vox_onoff(); int get_vox_onoff(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void setRit(int val); int getRit(); }; #endif flrig-2.0.04/src/include/qrp_labs/QCXplus.h0000664000175000017500000000332314502041135015344 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2022 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _QCXP_H #define _QCXP_H #include "kenwood/KENWOOD.h" class RIG_QCXP : public KENWOOD { private: bool preamp_on; bool att_on; const char *_mode_type; public: RIG_QCXP(); ~RIG_QCXP(){} void initialize(); void shutdown() {} unsigned long long get_vfoA(); void set_vfoA(unsigned long long); unsigned long long get_vfoB(); void set_vfoB(unsigned long long); void selectA(); void selectB(); void set_split(bool val); bool can_split(); int get_split(); void set_PTT_control(int val); int get_PTT(); int get_modetype(int n); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); int get_smeter(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void sync_date(char *dt); void sync_clock(char *tm); std::string read_menu(int m1, int m2); }; #endif flrig-2.0.04/src/include/qrp_labs/QMX.h0000664000175000017500000000377214502041135014462 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _QMX_H #define _QMX_H #include "kenwood/KENWOOD.h" class RIG_QMX : public KENWOOD { private: bool beatcancel_on; bool preamp_on; bool att_on; const char *_mode_type; bool menu_45; int alc; bool swralc_polled; public: RIG_QMX(); ~RIG_QMX(){} void initialize(); void shutdown(); bool check(); unsigned long long get_vfoA (); void set_vfoA (unsigned long long freq); unsigned long long get_vfoB (); void set_vfoB (unsigned long long freq); void selectA(); void selectB(); void set_split(bool val) ; bool can_split(); int get_split(); void set_bwA(int val); int get_bwA(); void set_bwB(int val); int get_bwB(); void set_PTT_control(int val); int get_PTT(); int get_IF(); void set_modeA(int val); int get_modeA(); void set_modeB(int val); int get_modeB(); void setVfoAdj(double v); double getVfoAdj(); void get_vfoadj_min_max_step(double &min, double &max, double &step); void set_vox_onoff(); int get_vox_onoff(); void set_volume_control(int val); int get_volume_control(); void get_vol_min_max_step(int &min, int &max, int &step); void setRit(int val); int getRit(); }; #endif flrig-2.0.04/src/Makefile.in0000664000175000017500000163300714511461157012476 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (c) 2008 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com) VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = flrig$(EXEEXT) @ENABLE_FLXMLRPC_FALSE@am__append_1 = $(XMLRPCPP_SRC) @HAVE_WINDRES_TRUE@@MINGW32_TRUE@am__append_2 = $(MINGW32_SRC) @HAVE_NSIS_TRUE@am__append_3 = $(INSTALLER_FILE) @DARWIN_TRUE@am__append_4 = $(APPBUNDLE_NOLIBS) $(APPBUNDLE) $(APPBUNDLE)*.dmg subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/build.m4 \ $(top_srcdir)/m4/debug.m4 $(top_srcdir)/m4/fltk.m4 \ $(top_srcdir)/m4/funcs.m4 $(top_srcdir)/m4/macosx.m4 \ $(top_srcdir)/m4/np-compat.m4 $(top_srcdir)/m4/opt.m4 \ $(top_srcdir)/m4/pkg-config.m4 $(top_srcdir)/m4/static.m4 \ $(top_srcdir)/m4/win32.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__flrig_SOURCES_DIST = xmlrpcpp/XmlRpcBase64.h \ xmlrpcpp/XmlRpcClient.cpp xmlrpcpp/XmlRpcClient.h \ xmlrpcpp/XmlRpcDispatch.cpp xmlrpcpp/XmlRpcDispatch.h \ xmlrpcpp/XmlRpcException.h xmlrpcpp/XmlRpc.h \ xmlrpcpp/XmlRpcMutex.cpp xmlrpcpp/XmlRpcMutex.h \ xmlrpcpp/XmlRpcServerConnection.cpp \ xmlrpcpp/XmlRpcServerConnection.h xmlrpcpp/XmlRpcServer.cpp \ xmlrpcpp/XmlRpcServer.h xmlrpcpp/XmlRpcServerMethod.cpp \ xmlrpcpp/XmlRpcServerMethod.h xmlrpcpp/XmlRpcSocket.cpp \ xmlrpcpp/XmlRpcSocket.h xmlrpcpp/XmlRpcSource.cpp \ xmlrpcpp/XmlRpcSource.h xmlrpcpp/XmlRpcUtil.cpp \ xmlrpcpp/XmlRpcUtil.h xmlrpcpp/XmlRpcValue.cpp \ xmlrpcpp/XmlRpcValue.h flrig-rc.rc include/flrigrc.h \ support/mingw.c include/compat.h include/compat-mingw.h \ rigs/rigbase.cxx rigs/rigs.cxx rigs/elad/FDMDUO.cxx \ rigs/elecraft/K2.cxx rigs/elecraft/K3.cxx \ rigs/elecraft/KX3.cxx rigs/elecraft/K4.cxx \ rigs/icom/ICbase.cxx rigs/icom/IC703.cxx rigs/icom/IC705.cxx \ rigs/icom/IC706MKIIG.cxx rigs/icom/IC718.cxx \ rigs/icom/IC728.cxx rigs/icom/IC735.cxx rigs/icom/IC746.cxx \ rigs/icom/IC751.cxx rigs/icom/IC756.cxx \ rigs/icom/IC756PRO2.cxx rigs/icom/IC756PRO3.cxx \ rigs/icom/IC910.cxx rigs/icom/IC7000.cxx rigs/icom/IC7100.cxx \ rigs/icom/IC7200.cxx rigs/icom/IC7300.cxx rigs/icom/IC7410.cxx \ rigs/icom/IC7600.cxx rigs/icom/IC7610.cxx rigs/icom/IC7800.cxx \ rigs/icom/IC7851.cxx rigs/icom/IC9100.cxx rigs/icom/IC9700.cxx \ rigs/icom/IC7700.cxx rigs/icom/ICF8101.cxx rigs/icom/ICR71.cxx \ rigs/kenwood/KENWOOD.cxx rigs/kenwood/TS140.cxx \ rigs/kenwood/TS440.cxx rigs/kenwood/TS450S.cxx \ rigs/kenwood/TS480HX.cxx rigs/kenwood/TS480SAT.cxx \ rigs/kenwood/TS570.cxx rigs/kenwood/TS590S.cxx \ rigs/kenwood/TS590SG.cxx rigs/kenwood/TS790.cxx \ rigs/kenwood/TS850.cxx rigs/kenwood/TS870S.cxx \ rigs/kenwood/TS890S.cxx rigs/kenwood/TS940S.cxx \ rigs/kenwood/TS950.cxx rigs/kenwood/TS990.cxx \ rigs/kenwood/TS2000.cxx rigs/lab599/TX500.cxx \ rigs/other/AOR5K.cxx rigs/other/FLEX1500.cxx \ rigs/other/PCR1000.cxx rigs/other/PowerSDR.cxx \ rigs/other/RAY152.cxx rigs/other/SmartSDR.cxx \ rigs/other/sunsdr2.cxx rigs/other/tcisdr.cxx \ rigs/other/trusdx.cxx rigs/other/TMD710.cxx \ rigs/qrp_labs/QCXplus.cxx rigs/qrp_labs/QDX.cxx \ rigs/qrp_labs/QMX.cxx rigs/tentec/TT516.cxx \ rigs/tentec/DELTA-II.cxx rigs/tentec/TT538.cxx \ rigs/tentec/TT550.cxx rigs/tentec/TT563.cxx \ rigs/tentec/TT566.cxx rigs/tentec/TT588.cxx \ rigs/tentec/TT599.cxx rigs/xiegu/Xiegu-5105.cxx \ rigs/xiegu/Xiegu-G90.cxx rigs/xiegu/X6100.cxx \ rigs/yaesu/FT100D.cxx rigs/yaesu/FT450.cxx \ rigs/yaesu/FT450D.cxx rigs/yaesu/FT710.cxx \ rigs/yaesu/FT736R.cxx rigs/yaesu/FT747.cxx \ rigs/yaesu/FT757GX2.cxx rigs/yaesu/FT767.cxx \ rigs/yaesu/FT817.cxx rigs/yaesu/FT817BB.cxx \ rigs/yaesu/FT818.cxx rigs/yaesu/FT847.cxx \ rigs/yaesu/FT857D.cxx rigs/yaesu/FT890.cxx \ rigs/yaesu/FT891.cxx rigs/yaesu/FT900.cxx rigs/yaesu/FT920.cxx \ rigs/yaesu/FT950.cxx rigs/yaesu/FT990.cxx \ rigs/yaesu/FT990a.cxx rigs/yaesu/FT991.cxx \ rigs/yaesu/FT991A.cxx rigs/yaesu/FT1000.cxx \ rigs/yaesu/FT1000MP.cxx rigs/yaesu/FT1000MP_A.cxx \ rigs/yaesu/FT2000.cxx rigs/yaesu/FTdx101D.cxx \ rigs/yaesu/FTdx10.cxx rigs/yaesu/FTdx1200.cxx \ rigs/yaesu/FTdx3000.cxx rigs/yaesu/FT5000.cxx \ rigs/yaesu/FTdx9000.cxx support/debug.cxx support/dialogs.cxx \ support/gpio_ptt.cxx support/ptt.cxx support/rig_io.cxx \ support/serial.cxx support/socket.cxx support/socket_io.cxx \ support/status.cxx support/support.cxx support/read_rig.cxx \ support/restore_rig.cxx support/init_rig.cxx \ support/TT550_support.cxx support/init_user_interface.cxx \ support/threads.cxx support/timeops.cxx support/trace.cxx \ support/util.cxx wc/tci_io.cxx wc/WSclient.cxx UI/K3_ui.cxx \ UI/KX3_ui.cxx UI/K4_ui.cxx UI/rigpanel.cxx \ UI/meters_dialog.cxx widgets/combo.cxx widgets/Fl_SigBar.cxx \ widgets/flbrowser2.cxx widgets/flinput2.cxx \ widgets/flslider2.cxx widgets/font_browser.cxx \ widgets/FreqControl.cxx widgets/pl_tones.cxx \ widgets/ValueSlider.cxx widgets/hspinner.cxx \ support/tod_clock.cxx server/xml_server.cxx \ server/xmlrpc_rig.cxx cwio/cwio.cxx cwio/morse.cxx \ cwio/cwioUI.cxx cwio/precise_time.cxx cmedia/cmedia.cxx \ cmedia/hid.cxx cmedia/tmate2.cxx fskio/fsk.cxx \ fskio/fskioUI.cxx log/cwlog.cxx log/fsklog.cxx \ graphics/pixmaps.cxx graphics/icons.cxx graphics/images.cxx \ main.cxx am__dirstamp = $(am__leading_dot)dirstamp am__objects_1 = xmlrpcpp/flrig-XmlRpcClient.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcDispatch.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcMutex.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcServerConnection.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcServer.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcServerMethod.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcSocket.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcSource.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcUtil.$(OBJEXT) \ xmlrpcpp/flrig-XmlRpcValue.$(OBJEXT) @ENABLE_FLXMLRPC_FALSE@am__objects_2 = $(am__objects_1) am__objects_3 = flrig-rc.$(OBJEXT) support/flrig-mingw.$(OBJEXT) @HAVE_WINDRES_TRUE@@MINGW32_TRUE@am__objects_4 = $(am__objects_3) am_flrig_OBJECTS = $(am__objects_2) $(am__objects_4) \ rigs/flrig-rigbase.$(OBJEXT) rigs/flrig-rigs.$(OBJEXT) \ rigs/elad/flrig-FDMDUO.$(OBJEXT) \ rigs/elecraft/flrig-K2.$(OBJEXT) \ rigs/elecraft/flrig-K3.$(OBJEXT) \ rigs/elecraft/flrig-KX3.$(OBJEXT) \ rigs/elecraft/flrig-K4.$(OBJEXT) \ rigs/icom/flrig-ICbase.$(OBJEXT) \ rigs/icom/flrig-IC703.$(OBJEXT) \ rigs/icom/flrig-IC705.$(OBJEXT) \ rigs/icom/flrig-IC706MKIIG.$(OBJEXT) \ rigs/icom/flrig-IC718.$(OBJEXT) \ rigs/icom/flrig-IC728.$(OBJEXT) \ rigs/icom/flrig-IC735.$(OBJEXT) \ rigs/icom/flrig-IC746.$(OBJEXT) \ rigs/icom/flrig-IC751.$(OBJEXT) \ rigs/icom/flrig-IC756.$(OBJEXT) \ rigs/icom/flrig-IC756PRO2.$(OBJEXT) \ rigs/icom/flrig-IC756PRO3.$(OBJEXT) \ rigs/icom/flrig-IC910.$(OBJEXT) \ rigs/icom/flrig-IC7000.$(OBJEXT) \ rigs/icom/flrig-IC7100.$(OBJEXT) \ rigs/icom/flrig-IC7200.$(OBJEXT) \ rigs/icom/flrig-IC7300.$(OBJEXT) \ rigs/icom/flrig-IC7410.$(OBJEXT) \ rigs/icom/flrig-IC7600.$(OBJEXT) \ rigs/icom/flrig-IC7610.$(OBJEXT) \ rigs/icom/flrig-IC7800.$(OBJEXT) \ rigs/icom/flrig-IC7851.$(OBJEXT) \ rigs/icom/flrig-IC9100.$(OBJEXT) \ rigs/icom/flrig-IC9700.$(OBJEXT) \ rigs/icom/flrig-IC7700.$(OBJEXT) \ rigs/icom/flrig-ICF8101.$(OBJEXT) \ rigs/icom/flrig-ICR71.$(OBJEXT) \ rigs/kenwood/flrig-KENWOOD.$(OBJEXT) \ rigs/kenwood/flrig-TS140.$(OBJEXT) \ rigs/kenwood/flrig-TS440.$(OBJEXT) \ rigs/kenwood/flrig-TS450S.$(OBJEXT) \ rigs/kenwood/flrig-TS480HX.$(OBJEXT) \ rigs/kenwood/flrig-TS480SAT.$(OBJEXT) \ rigs/kenwood/flrig-TS570.$(OBJEXT) \ rigs/kenwood/flrig-TS590S.$(OBJEXT) \ rigs/kenwood/flrig-TS590SG.$(OBJEXT) \ rigs/kenwood/flrig-TS790.$(OBJEXT) \ rigs/kenwood/flrig-TS850.$(OBJEXT) \ rigs/kenwood/flrig-TS870S.$(OBJEXT) \ rigs/kenwood/flrig-TS890S.$(OBJEXT) \ rigs/kenwood/flrig-TS940S.$(OBJEXT) \ rigs/kenwood/flrig-TS950.$(OBJEXT) \ rigs/kenwood/flrig-TS990.$(OBJEXT) \ rigs/kenwood/flrig-TS2000.$(OBJEXT) \ rigs/lab599/flrig-TX500.$(OBJEXT) \ rigs/other/flrig-AOR5K.$(OBJEXT) \ rigs/other/flrig-FLEX1500.$(OBJEXT) \ rigs/other/flrig-PCR1000.$(OBJEXT) \ rigs/other/flrig-PowerSDR.$(OBJEXT) \ rigs/other/flrig-RAY152.$(OBJEXT) \ rigs/other/flrig-SmartSDR.$(OBJEXT) \ rigs/other/flrig-sunsdr2.$(OBJEXT) \ rigs/other/flrig-tcisdr.$(OBJEXT) \ rigs/other/flrig-trusdx.$(OBJEXT) \ rigs/other/flrig-TMD710.$(OBJEXT) \ rigs/qrp_labs/flrig-QCXplus.$(OBJEXT) \ rigs/qrp_labs/flrig-QDX.$(OBJEXT) \ rigs/qrp_labs/flrig-QMX.$(OBJEXT) \ rigs/tentec/flrig-TT516.$(OBJEXT) \ rigs/tentec/flrig-DELTA-II.$(OBJEXT) \ rigs/tentec/flrig-TT538.$(OBJEXT) \ rigs/tentec/flrig-TT550.$(OBJEXT) \ rigs/tentec/flrig-TT563.$(OBJEXT) \ rigs/tentec/flrig-TT566.$(OBJEXT) \ rigs/tentec/flrig-TT588.$(OBJEXT) \ rigs/tentec/flrig-TT599.$(OBJEXT) \ rigs/xiegu/flrig-Xiegu-5105.$(OBJEXT) \ rigs/xiegu/flrig-Xiegu-G90.$(OBJEXT) \ rigs/xiegu/flrig-X6100.$(OBJEXT) \ rigs/yaesu/flrig-FT100D.$(OBJEXT) \ rigs/yaesu/flrig-FT450.$(OBJEXT) \ rigs/yaesu/flrig-FT450D.$(OBJEXT) \ rigs/yaesu/flrig-FT710.$(OBJEXT) \ rigs/yaesu/flrig-FT736R.$(OBJEXT) \ rigs/yaesu/flrig-FT747.$(OBJEXT) \ rigs/yaesu/flrig-FT757GX2.$(OBJEXT) \ rigs/yaesu/flrig-FT767.$(OBJEXT) \ rigs/yaesu/flrig-FT817.$(OBJEXT) \ rigs/yaesu/flrig-FT817BB.$(OBJEXT) \ rigs/yaesu/flrig-FT818.$(OBJEXT) \ rigs/yaesu/flrig-FT847.$(OBJEXT) \ rigs/yaesu/flrig-FT857D.$(OBJEXT) \ rigs/yaesu/flrig-FT890.$(OBJEXT) \ rigs/yaesu/flrig-FT891.$(OBJEXT) \ rigs/yaesu/flrig-FT900.$(OBJEXT) \ rigs/yaesu/flrig-FT920.$(OBJEXT) \ rigs/yaesu/flrig-FT950.$(OBJEXT) \ rigs/yaesu/flrig-FT990.$(OBJEXT) \ rigs/yaesu/flrig-FT990a.$(OBJEXT) \ rigs/yaesu/flrig-FT991.$(OBJEXT) \ rigs/yaesu/flrig-FT991A.$(OBJEXT) \ rigs/yaesu/flrig-FT1000.$(OBJEXT) \ rigs/yaesu/flrig-FT1000MP.$(OBJEXT) \ rigs/yaesu/flrig-FT1000MP_A.$(OBJEXT) \ rigs/yaesu/flrig-FT2000.$(OBJEXT) \ rigs/yaesu/flrig-FTdx101D.$(OBJEXT) \ rigs/yaesu/flrig-FTdx10.$(OBJEXT) \ rigs/yaesu/flrig-FTdx1200.$(OBJEXT) \ rigs/yaesu/flrig-FTdx3000.$(OBJEXT) \ rigs/yaesu/flrig-FT5000.$(OBJEXT) \ rigs/yaesu/flrig-FTdx9000.$(OBJEXT) \ support/flrig-debug.$(OBJEXT) support/flrig-dialogs.$(OBJEXT) \ support/flrig-gpio_ptt.$(OBJEXT) support/flrig-ptt.$(OBJEXT) \ support/flrig-rig_io.$(OBJEXT) support/flrig-serial.$(OBJEXT) \ support/flrig-socket.$(OBJEXT) \ support/flrig-socket_io.$(OBJEXT) \ support/flrig-status.$(OBJEXT) support/flrig-support.$(OBJEXT) \ support/flrig-read_rig.$(OBJEXT) \ support/flrig-restore_rig.$(OBJEXT) \ support/flrig-init_rig.$(OBJEXT) \ support/flrig-TT550_support.$(OBJEXT) \ support/flrig-init_user_interface.$(OBJEXT) \ support/flrig-threads.$(OBJEXT) \ support/flrig-timeops.$(OBJEXT) support/flrig-trace.$(OBJEXT) \ support/flrig-util.$(OBJEXT) wc/flrig-tci_io.$(OBJEXT) \ wc/flrig-WSclient.$(OBJEXT) UI/flrig-K3_ui.$(OBJEXT) \ UI/flrig-KX3_ui.$(OBJEXT) UI/flrig-K4_ui.$(OBJEXT) \ UI/flrig-rigpanel.$(OBJEXT) UI/flrig-meters_dialog.$(OBJEXT) \ widgets/flrig-combo.$(OBJEXT) \ widgets/flrig-Fl_SigBar.$(OBJEXT) \ widgets/flrig-flbrowser2.$(OBJEXT) \ widgets/flrig-flinput2.$(OBJEXT) \ widgets/flrig-flslider2.$(OBJEXT) \ widgets/flrig-font_browser.$(OBJEXT) \ widgets/flrig-FreqControl.$(OBJEXT) \ widgets/flrig-pl_tones.$(OBJEXT) \ widgets/flrig-ValueSlider.$(OBJEXT) \ widgets/flrig-hspinner.$(OBJEXT) \ support/flrig-tod_clock.$(OBJEXT) \ server/flrig-xml_server.$(OBJEXT) \ server/flrig-xmlrpc_rig.$(OBJEXT) cwio/flrig-cwio.$(OBJEXT) \ cwio/flrig-morse.$(OBJEXT) cwio/flrig-cwioUI.$(OBJEXT) \ cwio/flrig-precise_time.$(OBJEXT) \ cmedia/flrig-cmedia.$(OBJEXT) cmedia/flrig-hid.$(OBJEXT) \ cmedia/flrig-tmate2.$(OBJEXT) fskio/flrig-fsk.$(OBJEXT) \ fskio/flrig-fskioUI.$(OBJEXT) log/flrig-cwlog.$(OBJEXT) \ log/flrig-fsklog.$(OBJEXT) graphics/flrig-pixmaps.$(OBJEXT) \ graphics/flrig-icons.$(OBJEXT) graphics/flrig-images.$(OBJEXT) \ flrig-main.$(OBJEXT) am__objects_5 = nodist_flrig_OBJECTS = $(am__objects_5) flrig_OBJECTS = $(am_flrig_OBJECTS) $(nodist_flrig_OBJECTS) flrig_DEPENDENCIES = flrig_LINK = $(CXXLD) $(flrig_CXXFLAGS) $(CXXFLAGS) $(flrig_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/flrig-main.Po \ UI/$(DEPDIR)/flrig-K3_ui.Po UI/$(DEPDIR)/flrig-K4_ui.Po \ UI/$(DEPDIR)/flrig-KX3_ui.Po \ UI/$(DEPDIR)/flrig-meters_dialog.Po \ UI/$(DEPDIR)/flrig-rigpanel.Po \ cmedia/$(DEPDIR)/flrig-cmedia.Po cmedia/$(DEPDIR)/flrig-hid.Po \ cmedia/$(DEPDIR)/flrig-tmate2.Po cwio/$(DEPDIR)/flrig-cwio.Po \ cwio/$(DEPDIR)/flrig-cwioUI.Po cwio/$(DEPDIR)/flrig-morse.Po \ cwio/$(DEPDIR)/flrig-precise_time.Po \ fskio/$(DEPDIR)/flrig-fsk.Po fskio/$(DEPDIR)/flrig-fskioUI.Po \ graphics/$(DEPDIR)/flrig-icons.Po \ graphics/$(DEPDIR)/flrig-images.Po \ graphics/$(DEPDIR)/flrig-pixmaps.Po \ log/$(DEPDIR)/flrig-cwlog.Po log/$(DEPDIR)/flrig-fsklog.Po \ rigs/$(DEPDIR)/flrig-rigbase.Po rigs/$(DEPDIR)/flrig-rigs.Po \ rigs/elad/$(DEPDIR)/flrig-FDMDUO.Po \ rigs/elecraft/$(DEPDIR)/flrig-K2.Po \ rigs/elecraft/$(DEPDIR)/flrig-K3.Po \ rigs/elecraft/$(DEPDIR)/flrig-K4.Po \ rigs/elecraft/$(DEPDIR)/flrig-KX3.Po \ rigs/icom/$(DEPDIR)/flrig-IC7000.Po \ rigs/icom/$(DEPDIR)/flrig-IC703.Po \ rigs/icom/$(DEPDIR)/flrig-IC705.Po \ rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Po \ rigs/icom/$(DEPDIR)/flrig-IC7100.Po \ rigs/icom/$(DEPDIR)/flrig-IC718.Po \ rigs/icom/$(DEPDIR)/flrig-IC7200.Po \ rigs/icom/$(DEPDIR)/flrig-IC728.Po \ rigs/icom/$(DEPDIR)/flrig-IC7300.Po \ rigs/icom/$(DEPDIR)/flrig-IC735.Po \ rigs/icom/$(DEPDIR)/flrig-IC7410.Po \ rigs/icom/$(DEPDIR)/flrig-IC746.Po \ rigs/icom/$(DEPDIR)/flrig-IC751.Po \ rigs/icom/$(DEPDIR)/flrig-IC756.Po \ rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Po \ rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Po \ rigs/icom/$(DEPDIR)/flrig-IC7600.Po \ rigs/icom/$(DEPDIR)/flrig-IC7610.Po \ rigs/icom/$(DEPDIR)/flrig-IC7700.Po \ rigs/icom/$(DEPDIR)/flrig-IC7800.Po \ rigs/icom/$(DEPDIR)/flrig-IC7851.Po \ rigs/icom/$(DEPDIR)/flrig-IC910.Po \ rigs/icom/$(DEPDIR)/flrig-IC9100.Po \ rigs/icom/$(DEPDIR)/flrig-IC9700.Po \ rigs/icom/$(DEPDIR)/flrig-ICF8101.Po \ rigs/icom/$(DEPDIR)/flrig-ICR71.Po \ rigs/icom/$(DEPDIR)/flrig-ICbase.Po \ rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS140.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS2000.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS440.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS450S.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS570.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS590S.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS790.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS850.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS870S.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS890S.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS940S.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS950.Po \ rigs/kenwood/$(DEPDIR)/flrig-TS990.Po \ rigs/lab599/$(DEPDIR)/flrig-TX500.Po \ rigs/other/$(DEPDIR)/flrig-AOR5K.Po \ rigs/other/$(DEPDIR)/flrig-FLEX1500.Po \ rigs/other/$(DEPDIR)/flrig-PCR1000.Po \ rigs/other/$(DEPDIR)/flrig-PowerSDR.Po \ rigs/other/$(DEPDIR)/flrig-RAY152.Po \ rigs/other/$(DEPDIR)/flrig-SmartSDR.Po \ rigs/other/$(DEPDIR)/flrig-TMD710.Po \ rigs/other/$(DEPDIR)/flrig-sunsdr2.Po \ rigs/other/$(DEPDIR)/flrig-tcisdr.Po \ rigs/other/$(DEPDIR)/flrig-trusdx.Po \ rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Po \ rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Po \ rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Po \ rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Po \ rigs/tentec/$(DEPDIR)/flrig-TT516.Po \ rigs/tentec/$(DEPDIR)/flrig-TT538.Po \ rigs/tentec/$(DEPDIR)/flrig-TT550.Po \ rigs/tentec/$(DEPDIR)/flrig-TT563.Po \ rigs/tentec/$(DEPDIR)/flrig-TT566.Po \ rigs/tentec/$(DEPDIR)/flrig-TT588.Po \ rigs/tentec/$(DEPDIR)/flrig-TT599.Po \ rigs/xiegu/$(DEPDIR)/flrig-X6100.Po \ rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Po \ rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT1000.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT100D.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT2000.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT450.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT450D.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT5000.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT710.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT736R.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT747.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT767.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT817.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT818.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT847.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT857D.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT890.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT891.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT900.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT920.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT950.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT990.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT990a.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT991.Po \ rigs/yaesu/$(DEPDIR)/flrig-FT991A.Po \ rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Po \ rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Po \ rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Po \ rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Po \ rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Po \ server/$(DEPDIR)/flrig-xml_server.Po \ server/$(DEPDIR)/flrig-xmlrpc_rig.Po \ support/$(DEPDIR)/flrig-TT550_support.Po \ support/$(DEPDIR)/flrig-debug.Po \ support/$(DEPDIR)/flrig-dialogs.Po \ support/$(DEPDIR)/flrig-gpio_ptt.Po \ support/$(DEPDIR)/flrig-init_rig.Po \ support/$(DEPDIR)/flrig-init_user_interface.Po \ support/$(DEPDIR)/flrig-mingw.Po \ support/$(DEPDIR)/flrig-ptt.Po \ support/$(DEPDIR)/flrig-read_rig.Po \ support/$(DEPDIR)/flrig-restore_rig.Po \ support/$(DEPDIR)/flrig-rig_io.Po \ support/$(DEPDIR)/flrig-serial.Po \ support/$(DEPDIR)/flrig-socket.Po \ support/$(DEPDIR)/flrig-socket_io.Po \ support/$(DEPDIR)/flrig-status.Po \ support/$(DEPDIR)/flrig-support.Po \ support/$(DEPDIR)/flrig-threads.Po \ support/$(DEPDIR)/flrig-timeops.Po \ support/$(DEPDIR)/flrig-tod_clock.Po \ support/$(DEPDIR)/flrig-trace.Po \ support/$(DEPDIR)/flrig-util.Po wc/$(DEPDIR)/flrig-WSclient.Po \ wc/$(DEPDIR)/flrig-tci_io.Po \ widgets/$(DEPDIR)/flrig-Fl_SigBar.Po \ widgets/$(DEPDIR)/flrig-FreqControl.Po \ widgets/$(DEPDIR)/flrig-ValueSlider.Po \ widgets/$(DEPDIR)/flrig-combo.Po \ widgets/$(DEPDIR)/flrig-flbrowser2.Po \ widgets/$(DEPDIR)/flrig-flinput2.Po \ widgets/$(DEPDIR)/flrig-flslider2.Po \ widgets/$(DEPDIR)/flrig-font_browser.Po \ widgets/$(DEPDIR)/flrig-hspinner.Po \ widgets/$(DEPDIR)/flrig-pl_tones.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Po \ xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(flrig_SOURCES) $(EXTRA_flrig_SOURCES) \ $(nodist_flrig_SOURCES) DIST_SOURCES = $(am__flrig_SOURCES_DIST) $(EXTRA_flrig_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AC_CONFIG_ARGS = @AC_CONFIG_ARGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CFLAGS = @BFD_CFLAGS@ BFD_LIBS = @BFD_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUG_CFLAGS = @DEBUG_CFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ EXTRA_LIBS = @EXTRA_LIBS@ FLRIG_BUILD_CPPFLAGS = @FLRIG_BUILD_CPPFLAGS@ FLRIG_BUILD_CXXFLAGS = @FLRIG_BUILD_CXXFLAGS@ FLRIG_BUILD_LDADD = @FLRIG_BUILD_LDADD@ FLRIG_BUILD_LDFLAGS = @FLRIG_BUILD_LDFLAGS@ FLRIG_VERSION = @FLRIG_VERSION@ ######################################################################## FLRIG_VERSION_MAJOR = @FLRIG_VERSION_MAJOR@ FLRIG_VERSION_MINOR = @FLRIG_VERSION_MINOR@ FLRIG_VERSION_PATCH = @FLRIG_VERSION_PATCH@ FLTK_CFLAGS = @FLTK_CFLAGS@ FLTK_CONFIG = @FLTK_CONFIG@ FLTK_LIBS = @FLTK_LIBS@ FLUID = @FLUID@ FLXMLRPC_CFLAGS = @FLXMLRPC_CFLAGS@ FLXMLRPC_LIBS = @FLXMLRPC_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAC_UNIVERSAL_CFLAGS = @MAC_UNIVERSAL_CFLAGS@ MAC_UNIVERSAL_LDFLAGS = @MAC_UNIVERSAL_LDFLAGS@ MAKEINFO = @MAKEINFO@ MAKENSIS = @MAKENSIS@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTW32_CFLAGS = @PTW32_CFLAGS@ PTW32_LIBS = @PTW32_LIBS@ RDYNAMIC = @RDYNAMIC@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ MINGW32_SRC = \ flrig-rc.rc \ include/flrigrc.h \ support/mingw.c \ include/compat.h \ include/compat-mingw.h # Build the xmlrpcpp source if libflxmlrpc is not found XMLRPCPP_SRC = \ xmlrpcpp/XmlRpcBase64.h \ xmlrpcpp/XmlRpcClient.cpp \ xmlrpcpp/XmlRpcClient.h \ xmlrpcpp/XmlRpcDispatch.cpp \ xmlrpcpp/XmlRpcDispatch.h \ xmlrpcpp/XmlRpcException.h \ xmlrpcpp/XmlRpc.h \ xmlrpcpp/XmlRpcMutex.cpp \ xmlrpcpp/XmlRpcMutex.h \ xmlrpcpp/XmlRpcServerConnection.cpp \ xmlrpcpp/XmlRpcServerConnection.h \ xmlrpcpp/XmlRpcServer.cpp \ xmlrpcpp/XmlRpcServer.h \ xmlrpcpp/XmlRpcServerMethod.cpp \ xmlrpcpp/XmlRpcServerMethod.h \ xmlrpcpp/XmlRpcSocket.cpp \ xmlrpcpp/XmlRpcSocket.h \ xmlrpcpp/XmlRpcSource.cpp \ xmlrpcpp/XmlRpcSource.h \ xmlrpcpp/XmlRpcUtil.cpp \ xmlrpcpp/XmlRpcUtil.h \ xmlrpcpp/XmlRpcValue.cpp \ xmlrpcpp/XmlRpcValue.h # We distribute these but do not always compile them EXTRA_flrig_SOURCES = $(FLRIG_WIN32_RES_SRC) $(MINGW32_SRC) $(XMLRPCPP_SRC) # Sources that we build. It is OK to have headers here. flrig_SOURCES = $(am__append_1) $(am__append_2) rigs/rigbase.cxx \ rigs/rigs.cxx rigs/elad/FDMDUO.cxx rigs/elecraft/K2.cxx \ rigs/elecraft/K3.cxx rigs/elecraft/KX3.cxx \ rigs/elecraft/K4.cxx rigs/icom/ICbase.cxx rigs/icom/IC703.cxx \ rigs/icom/IC705.cxx rigs/icom/IC706MKIIG.cxx \ rigs/icom/IC718.cxx rigs/icom/IC728.cxx rigs/icom/IC735.cxx \ rigs/icom/IC746.cxx rigs/icom/IC751.cxx rigs/icom/IC756.cxx \ rigs/icom/IC756PRO2.cxx rigs/icom/IC756PRO3.cxx \ rigs/icom/IC910.cxx rigs/icom/IC7000.cxx rigs/icom/IC7100.cxx \ rigs/icom/IC7200.cxx rigs/icom/IC7300.cxx rigs/icom/IC7410.cxx \ rigs/icom/IC7600.cxx rigs/icom/IC7610.cxx rigs/icom/IC7800.cxx \ rigs/icom/IC7851.cxx rigs/icom/IC9100.cxx rigs/icom/IC9700.cxx \ rigs/icom/IC7700.cxx rigs/icom/ICF8101.cxx rigs/icom/ICR71.cxx \ rigs/kenwood/KENWOOD.cxx rigs/kenwood/TS140.cxx \ rigs/kenwood/TS440.cxx rigs/kenwood/TS450S.cxx \ rigs/kenwood/TS480HX.cxx rigs/kenwood/TS480SAT.cxx \ rigs/kenwood/TS570.cxx rigs/kenwood/TS590S.cxx \ rigs/kenwood/TS590SG.cxx rigs/kenwood/TS790.cxx \ rigs/kenwood/TS850.cxx rigs/kenwood/TS870S.cxx \ rigs/kenwood/TS890S.cxx rigs/kenwood/TS940S.cxx \ rigs/kenwood/TS950.cxx rigs/kenwood/TS990.cxx \ rigs/kenwood/TS2000.cxx rigs/lab599/TX500.cxx \ rigs/other/AOR5K.cxx rigs/other/FLEX1500.cxx \ rigs/other/PCR1000.cxx rigs/other/PowerSDR.cxx \ rigs/other/RAY152.cxx rigs/other/SmartSDR.cxx \ rigs/other/sunsdr2.cxx rigs/other/tcisdr.cxx \ rigs/other/trusdx.cxx rigs/other/TMD710.cxx \ rigs/qrp_labs/QCXplus.cxx rigs/qrp_labs/QDX.cxx \ rigs/qrp_labs/QMX.cxx rigs/tentec/TT516.cxx \ rigs/tentec/DELTA-II.cxx rigs/tentec/TT538.cxx \ rigs/tentec/TT550.cxx rigs/tentec/TT563.cxx \ rigs/tentec/TT566.cxx rigs/tentec/TT588.cxx \ rigs/tentec/TT599.cxx rigs/xiegu/Xiegu-5105.cxx \ rigs/xiegu/Xiegu-G90.cxx rigs/xiegu/X6100.cxx \ rigs/yaesu/FT100D.cxx rigs/yaesu/FT450.cxx \ rigs/yaesu/FT450D.cxx rigs/yaesu/FT710.cxx \ rigs/yaesu/FT736R.cxx rigs/yaesu/FT747.cxx \ rigs/yaesu/FT757GX2.cxx rigs/yaesu/FT767.cxx \ rigs/yaesu/FT817.cxx rigs/yaesu/FT817BB.cxx \ rigs/yaesu/FT818.cxx rigs/yaesu/FT847.cxx \ rigs/yaesu/FT857D.cxx rigs/yaesu/FT890.cxx \ rigs/yaesu/FT891.cxx rigs/yaesu/FT900.cxx rigs/yaesu/FT920.cxx \ rigs/yaesu/FT950.cxx rigs/yaesu/FT990.cxx \ rigs/yaesu/FT990a.cxx rigs/yaesu/FT991.cxx \ rigs/yaesu/FT991A.cxx rigs/yaesu/FT1000.cxx \ rigs/yaesu/FT1000MP.cxx rigs/yaesu/FT1000MP_A.cxx \ rigs/yaesu/FT2000.cxx rigs/yaesu/FTdx101D.cxx \ rigs/yaesu/FTdx10.cxx rigs/yaesu/FTdx1200.cxx \ rigs/yaesu/FTdx3000.cxx rigs/yaesu/FT5000.cxx \ rigs/yaesu/FTdx9000.cxx support/debug.cxx support/dialogs.cxx \ support/gpio_ptt.cxx support/ptt.cxx support/rig_io.cxx \ support/serial.cxx support/socket.cxx support/socket_io.cxx \ support/status.cxx support/support.cxx support/read_rig.cxx \ support/restore_rig.cxx support/init_rig.cxx \ support/TT550_support.cxx support/init_user_interface.cxx \ support/threads.cxx support/timeops.cxx support/trace.cxx \ support/util.cxx wc/tci_io.cxx wc/WSclient.cxx UI/K3_ui.cxx \ UI/KX3_ui.cxx UI/K4_ui.cxx UI/rigpanel.cxx \ UI/meters_dialog.cxx widgets/combo.cxx widgets/Fl_SigBar.cxx \ widgets/flbrowser2.cxx widgets/flinput2.cxx \ widgets/flslider2.cxx widgets/font_browser.cxx \ widgets/FreqControl.cxx widgets/pl_tones.cxx \ widgets/ValueSlider.cxx widgets/hspinner.cxx \ support/tod_clock.cxx server/xml_server.cxx \ server/xmlrpc_rig.cxx cwio/cwio.cxx cwio/morse.cxx \ cwio/cwioUI.cxx cwio/precise_time.cxx cmedia/cmedia.cxx \ cmedia/hid.cxx cmedia/tmate2.cxx fskio/fsk.cxx \ fskio/fskioUI.cxx log/cwlog.cxx log/fsklog.cxx \ graphics/pixmaps.cxx graphics/icons.cxx graphics/images.cxx \ main.cxx @ENABLE_FLXMLRPC_FALSE@flrig_CPPFLAGS = @FLRIG_BUILD_CPPFLAGS@ @ENABLE_FLXMLRPC_TRUE@flrig_CPPFLAGS = @FLRIG_BUILD_CPPFLAGS@ @FLXMLRPC_CFLAGS@ @ENABLE_FLXMLRPC_FALSE@flrig_CXXFLAGS = @FLRIG_BUILD_CXXFLAGS@ @ENABLE_FLXMLRPC_TRUE@flrig_CXXFLAGS = @FLRIG_BUILD_CXXFLAGS@ @FLXMLRPC_CFLAGS@ @ENABLE_FLXMLRPC_FALSE@flrig_CFLAGS = $(flrig_CXXFLAGS) @ENABLE_FLXMLRPC_TRUE@flrig_CFLAGS = $(flrig_CXXFLAGS) @ENABLE_FLXMLRPC_FALSE@flrig_LDFLAGS = @FLRIG_BUILD_LDFLAGS@ @ENABLE_FLXMLRPC_TRUE@flrig_LDFLAGS = @FLRIG_BUILD_LDFLAGS@ @FLXMLRPC_LIBS@ @ENABLE_FLXMLRPC_FALSE@flrig_LDADD = @FLRIG_BUILD_LDADD@ @ENABLE_FLXMLRPC_TRUE@flrig_LDADD = @FLRIG_BUILD_LDADD@ # Sources that are generated, BUILT_SOURCES = # not distributed, nodist_flrig_SOURCES = $(BUILT_SOURCES) # and deleted by the clean targets CLEANFILES = $(BUILT_SOURCES) $(am__append_3) CLEAN_LOCAL = $(am__append_4) INSTALLER_FILE = flrig-$(FLRIG_VERSION)_setup.exe APPBUNDLE = flrig-$(FLRIG_VERSION) APPBUNDLE_NOLIBS = $(APPBUNDLE)-nolibs # Additional source files that are distributed # Additional non-source files that are distributed # Additional source files that support non-Linux cross compilation EXTRA_DIST = config.h flrig_icon.cxx cmedia/hid_lin.cxx \ cmedia/hid_mac.cxx cmedia/hid_win.cxx UI/ui_bitmaps.cxx \ UI/gpio.cxx UI/ui_wide.cxx UI/ui_small.cxx UI/ui_touch.cxx \ UI/ui_setup.cxx UI/ui_memory.cxx UI/xcvr_setup.cxx \ UI/meters_setup.cxx UI/power_meter_setup.cxx include/cmedia.h \ include/hid_lin.h include/hid_mac.h include/hid_win.h \ include/hidapi.h include/tmate2.h include/cwio.h \ include/cwlog.h include/cwioUI.h include/fsk.h \ include/fskioUI.h include/fsklog.h include/gpio.h \ include/gpio_ptt.h include/morse.h include/debug.h \ include/dialogs.h include/flbrowser2.h include/flinput2.h \ include/flslider2.h include/fileselect.h \ include/font_browser.h include/flrigrc.h include/icons.h \ include/kenwood/KENWOOD.h include/pixmaps.h \ include/Fl_SigBar.h include/FreqControl.h include/hspinner.h \ include/other/AOR5K.h include/other/sunsdr2.h \ include/other/tcisdr.h include/other/trusdx.h \ include/generic.h include/gettext.h include/hidapi.h \ include/hid_mac.h include/hid_win.h include/xmlrpc_rig.h \ include/elad/FDMDUO.h include/icom/ICbase.h \ include/icom/IC703.h include/icom/IC705.h \ include/icom/IC706MKIIG.h include/icom/IC718.h \ include/icom/IC728.h include/icom/IC735.h include/icom/IC746.h \ include/icom/IC751.h include/icom/IC756.h \ include/icom/IC756PRO2.h include/icom/IC756PRO3.h \ include/icom/IC910.h include/icom/IC7000.h \ include/icom/IC7100.h include/icom/IC7410.h \ include/icom/IC7200.h include/icom/IC7300.h \ include/icom/IC7600.h include/icom/IC7610.h \ include/icom/IC7700.h include/icom/IC7800.h \ include/icom/IC7851.h include/icom/IC9100.h \ include/icom/IC9700.h include/icom/ICF8101.h \ include/icom/ICR71.h include/images.h include/elecraft/K2.h \ include/elecraft/K3.h include/elecraft/K4.h include/K3_ui.h \ include/elecraft/KX3.h include/KX3_ui.h include/K4_ui.h \ include/mingw.h include/other/FLEX1500.h \ include/other/PCR1000.h include/other/RAY152.h \ include/other/PowerSDR.h include/other/SmartSDR.h \ include/other/TMD710.h include/pl_tones.h include/ptt.h \ include/qrp_labs/QCXplus.h include/qrp_labs/QDX.h \ include/qrp_labs/QMX.h include/rig.h include/rigs.h \ include/rigbase.h include/rig_io.h include/rigpanel.h \ include/serial.h include/socket.h include/socket_io.h \ include/status.h include/support.h include/threads.h \ include/trace.h include/lab599/TX500.h \ include/kenwood/KENWOOD.h include/kenwood/TS140.h \ include/kenwood/TS440.h include/kenwood/TS450S.h \ include/kenwood/TS480HX.h include/kenwood/TS480SAT.h \ include/kenwood/TS570.h include/kenwood/TS590S.h \ include/kenwood/TS590SG.h include/kenwood/TS790.h \ include/kenwood/TS850.h include/kenwood/TS870S.h \ include/kenwood/TS890S.h include/kenwood/TS940S.h \ include/kenwood/TS950.h include/kenwood/TS990.h \ include/kenwood/TS2000.h include/tentec/DELTA-II.h \ include/tentec/TT516.h include/tentec/TT538.h \ include/tentec/TT550.h include/tentec/TT563.h \ include/tentec/TT566.h include/tentec/TT588.h \ include/tentec/TT599.h include/tci_io.h include/WSclient.h \ include/timeops.h include/tod_clock.h include/ui.h \ include/util.h include/ValueSlider.h include/xml_server.h \ include/xiegu/Xiegu-5105.h include/xiegu/Xiegu-G90.h \ include/xiegu/X6100.h include/yaesu/FT100D.h \ include/yaesu/FT450.h include/yaesu/FT450D.h \ include/yaesu/FT710.h include/yaesu/FT736R.h \ include/yaesu/FT747.h include/yaesu/FT757GX2.h \ include/yaesu/FT767.h include/yaesu/FT817.h \ include/yaesu/FT817BB.h include/yaesu/FT818.h \ include/yaesu/FT847.h include/yaesu/FT857D.h \ include/yaesu/FT920.h include/yaesu/FT890.h \ include/yaesu/FT891.h include/yaesu/FT900.h \ include/yaesu/FT950.h include/yaesu/FT990.h \ include/yaesu/FT990a.h include/yaesu/FT991.h \ include/yaesu/FT991A.h include/yaesu/FT1000.h \ include/yaesu/FT1000MP.h include/yaesu/FT1000MP_A.h \ include/yaesu/FT2000.h include/yaesu/FTdx10.h \ include/yaesu/FTdx101D.h include/yaesu/FTdx1200.h \ include/yaesu/FTdx3000.h include/yaesu/FT5000.h \ include/yaesu/FTdx9000.h include/combo.h images/alc.xbm \ images/alc40db.xbm images/P5.xbm images/P10.xbm images/P15.xbm \ images/P20.xbm images/P25.xbm images/P50.xbm images/P100.xbm \ images/P200.xbm images/P200log.xbm images/S60.xbm \ images/SWR.xbm images/volts.xbm images/volts13.xbm \ images/volts50.xbm images/idd25.xbm images/idd50.xbm \ cwio/cwioUI.fl fskio/fskioUI.fl \ $(srcdir)/../data/flrig.desktop $(srcdir)/../data/flrig.xpm \ $(srcdir)/../data/win32/fl_app.nsi \ $(srcdir)/../data/win32/flrig.ico \ $(srcdir)/../scripts/mknsisinst.sh \ $(srcdir)/../scripts/buildmxe.sh \ $(srcdir)/../scripts/builddist.sh \ $(srcdir)/../data/mac/Info.plist.in \ $(srcdir)/../data/mac/flrig.icns \ $(srcdir)/../scripts/mkappbundle.sh $(FLRIG_WIN32_SRC) \ $(FLRIG_FL_SRC) all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .cpp .cxx .o .obj .rc $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) installcheck-binPROGRAMS: $(bin_PROGRAMS) bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | \ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad xmlrpcpp/$(am__dirstamp): @$(MKDIR_P) xmlrpcpp @: > xmlrpcpp/$(am__dirstamp) xmlrpcpp/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) xmlrpcpp/$(DEPDIR) @: > xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcClient.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcDispatch.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcMutex.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcServerConnection.$(OBJEXT): \ xmlrpcpp/$(am__dirstamp) xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcServer.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcServerMethod.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcSocket.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcSource.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcUtil.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) xmlrpcpp/flrig-XmlRpcValue.$(OBJEXT): xmlrpcpp/$(am__dirstamp) \ xmlrpcpp/$(DEPDIR)/$(am__dirstamp) support/$(am__dirstamp): @$(MKDIR_P) support @: > support/$(am__dirstamp) support/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) support/$(DEPDIR) @: > support/$(DEPDIR)/$(am__dirstamp) support/flrig-mingw.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) rigs/$(am__dirstamp): @$(MKDIR_P) rigs @: > rigs/$(am__dirstamp) rigs/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/$(DEPDIR) @: > rigs/$(DEPDIR)/$(am__dirstamp) rigs/flrig-rigbase.$(OBJEXT): rigs/$(am__dirstamp) \ rigs/$(DEPDIR)/$(am__dirstamp) rigs/flrig-rigs.$(OBJEXT): rigs/$(am__dirstamp) \ rigs/$(DEPDIR)/$(am__dirstamp) rigs/elad/$(am__dirstamp): @$(MKDIR_P) rigs/elad @: > rigs/elad/$(am__dirstamp) rigs/elad/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/elad/$(DEPDIR) @: > rigs/elad/$(DEPDIR)/$(am__dirstamp) rigs/elad/flrig-FDMDUO.$(OBJEXT): rigs/elad/$(am__dirstamp) \ rigs/elad/$(DEPDIR)/$(am__dirstamp) rigs/elecraft/$(am__dirstamp): @$(MKDIR_P) rigs/elecraft @: > rigs/elecraft/$(am__dirstamp) rigs/elecraft/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/elecraft/$(DEPDIR) @: > rigs/elecraft/$(DEPDIR)/$(am__dirstamp) rigs/elecraft/flrig-K2.$(OBJEXT): rigs/elecraft/$(am__dirstamp) \ rigs/elecraft/$(DEPDIR)/$(am__dirstamp) rigs/elecraft/flrig-K3.$(OBJEXT): rigs/elecraft/$(am__dirstamp) \ rigs/elecraft/$(DEPDIR)/$(am__dirstamp) rigs/elecraft/flrig-KX3.$(OBJEXT): rigs/elecraft/$(am__dirstamp) \ rigs/elecraft/$(DEPDIR)/$(am__dirstamp) rigs/elecraft/flrig-K4.$(OBJEXT): rigs/elecraft/$(am__dirstamp) \ rigs/elecraft/$(DEPDIR)/$(am__dirstamp) rigs/icom/$(am__dirstamp): @$(MKDIR_P) rigs/icom @: > rigs/icom/$(am__dirstamp) rigs/icom/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/icom/$(DEPDIR) @: > rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-ICbase.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC703.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC705.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC706MKIIG.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC718.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC728.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC735.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC746.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC751.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC756.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC756PRO2.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC756PRO3.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC910.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7000.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7100.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7200.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7300.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7410.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7600.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7610.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7800.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7851.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC9100.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC9700.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-IC7700.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-ICF8101.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/icom/flrig-ICR71.$(OBJEXT): rigs/icom/$(am__dirstamp) \ rigs/icom/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/$(am__dirstamp): @$(MKDIR_P) rigs/kenwood @: > rigs/kenwood/$(am__dirstamp) rigs/kenwood/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/kenwood/$(DEPDIR) @: > rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-KENWOOD.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS140.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS440.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS450S.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS480HX.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS480SAT.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS570.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS590S.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS590SG.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS790.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS850.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS870S.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS890S.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS940S.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS950.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS990.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/kenwood/flrig-TS2000.$(OBJEXT): rigs/kenwood/$(am__dirstamp) \ rigs/kenwood/$(DEPDIR)/$(am__dirstamp) rigs/lab599/$(am__dirstamp): @$(MKDIR_P) rigs/lab599 @: > rigs/lab599/$(am__dirstamp) rigs/lab599/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/lab599/$(DEPDIR) @: > rigs/lab599/$(DEPDIR)/$(am__dirstamp) rigs/lab599/flrig-TX500.$(OBJEXT): rigs/lab599/$(am__dirstamp) \ rigs/lab599/$(DEPDIR)/$(am__dirstamp) rigs/other/$(am__dirstamp): @$(MKDIR_P) rigs/other @: > rigs/other/$(am__dirstamp) rigs/other/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/other/$(DEPDIR) @: > rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-AOR5K.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-FLEX1500.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-PCR1000.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-PowerSDR.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-RAY152.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-SmartSDR.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-sunsdr2.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-tcisdr.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-trusdx.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/other/flrig-TMD710.$(OBJEXT): rigs/other/$(am__dirstamp) \ rigs/other/$(DEPDIR)/$(am__dirstamp) rigs/qrp_labs/$(am__dirstamp): @$(MKDIR_P) rigs/qrp_labs @: > rigs/qrp_labs/$(am__dirstamp) rigs/qrp_labs/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/qrp_labs/$(DEPDIR) @: > rigs/qrp_labs/$(DEPDIR)/$(am__dirstamp) rigs/qrp_labs/flrig-QCXplus.$(OBJEXT): rigs/qrp_labs/$(am__dirstamp) \ rigs/qrp_labs/$(DEPDIR)/$(am__dirstamp) rigs/qrp_labs/flrig-QDX.$(OBJEXT): rigs/qrp_labs/$(am__dirstamp) \ rigs/qrp_labs/$(DEPDIR)/$(am__dirstamp) rigs/qrp_labs/flrig-QMX.$(OBJEXT): rigs/qrp_labs/$(am__dirstamp) \ rigs/qrp_labs/$(DEPDIR)/$(am__dirstamp) rigs/tentec/$(am__dirstamp): @$(MKDIR_P) rigs/tentec @: > rigs/tentec/$(am__dirstamp) rigs/tentec/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/tentec/$(DEPDIR) @: > rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/tentec/flrig-TT516.$(OBJEXT): rigs/tentec/$(am__dirstamp) \ rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/tentec/flrig-DELTA-II.$(OBJEXT): rigs/tentec/$(am__dirstamp) \ rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/tentec/flrig-TT538.$(OBJEXT): rigs/tentec/$(am__dirstamp) \ rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/tentec/flrig-TT550.$(OBJEXT): rigs/tentec/$(am__dirstamp) \ rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/tentec/flrig-TT563.$(OBJEXT): rigs/tentec/$(am__dirstamp) \ rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/tentec/flrig-TT566.$(OBJEXT): rigs/tentec/$(am__dirstamp) \ rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/tentec/flrig-TT588.$(OBJEXT): rigs/tentec/$(am__dirstamp) \ rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/tentec/flrig-TT599.$(OBJEXT): rigs/tentec/$(am__dirstamp) \ rigs/tentec/$(DEPDIR)/$(am__dirstamp) rigs/xiegu/$(am__dirstamp): @$(MKDIR_P) rigs/xiegu @: > rigs/xiegu/$(am__dirstamp) rigs/xiegu/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/xiegu/$(DEPDIR) @: > rigs/xiegu/$(DEPDIR)/$(am__dirstamp) rigs/xiegu/flrig-Xiegu-5105.$(OBJEXT): rigs/xiegu/$(am__dirstamp) \ rigs/xiegu/$(DEPDIR)/$(am__dirstamp) rigs/xiegu/flrig-Xiegu-G90.$(OBJEXT): rigs/xiegu/$(am__dirstamp) \ rigs/xiegu/$(DEPDIR)/$(am__dirstamp) rigs/xiegu/flrig-X6100.$(OBJEXT): rigs/xiegu/$(am__dirstamp) \ rigs/xiegu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/$(am__dirstamp): @$(MKDIR_P) rigs/yaesu @: > rigs/yaesu/$(am__dirstamp) rigs/yaesu/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rigs/yaesu/$(DEPDIR) @: > rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT100D.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT450.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT450D.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT710.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT736R.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT747.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT757GX2.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT767.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT817.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT817BB.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT818.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT847.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT857D.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT890.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT891.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT900.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT920.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT950.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT990.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT990a.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT991.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT991A.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT1000.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT1000MP.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT1000MP_A.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT2000.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FTdx101D.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FTdx10.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FTdx1200.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FTdx3000.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FT5000.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) rigs/yaesu/flrig-FTdx9000.$(OBJEXT): rigs/yaesu/$(am__dirstamp) \ rigs/yaesu/$(DEPDIR)/$(am__dirstamp) support/flrig-debug.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-dialogs.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-gpio_ptt.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-ptt.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-rig_io.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-serial.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-socket.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-socket_io.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-status.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-support.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-read_rig.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-restore_rig.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-init_rig.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-TT550_support.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-init_user_interface.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-threads.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-timeops.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-trace.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) support/flrig-util.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) wc/$(am__dirstamp): @$(MKDIR_P) wc @: > wc/$(am__dirstamp) wc/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) wc/$(DEPDIR) @: > wc/$(DEPDIR)/$(am__dirstamp) wc/flrig-tci_io.$(OBJEXT): wc/$(am__dirstamp) \ wc/$(DEPDIR)/$(am__dirstamp) wc/flrig-WSclient.$(OBJEXT): wc/$(am__dirstamp) \ wc/$(DEPDIR)/$(am__dirstamp) UI/$(am__dirstamp): @$(MKDIR_P) UI @: > UI/$(am__dirstamp) UI/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) UI/$(DEPDIR) @: > UI/$(DEPDIR)/$(am__dirstamp) UI/flrig-K3_ui.$(OBJEXT): UI/$(am__dirstamp) \ UI/$(DEPDIR)/$(am__dirstamp) UI/flrig-KX3_ui.$(OBJEXT): UI/$(am__dirstamp) \ UI/$(DEPDIR)/$(am__dirstamp) UI/flrig-K4_ui.$(OBJEXT): UI/$(am__dirstamp) \ UI/$(DEPDIR)/$(am__dirstamp) UI/flrig-rigpanel.$(OBJEXT): UI/$(am__dirstamp) \ UI/$(DEPDIR)/$(am__dirstamp) UI/flrig-meters_dialog.$(OBJEXT): UI/$(am__dirstamp) \ UI/$(DEPDIR)/$(am__dirstamp) widgets/$(am__dirstamp): @$(MKDIR_P) widgets @: > widgets/$(am__dirstamp) widgets/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) widgets/$(DEPDIR) @: > widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-combo.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-Fl_SigBar.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-flbrowser2.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-flinput2.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-flslider2.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-font_browser.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-FreqControl.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-pl_tones.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-ValueSlider.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) widgets/flrig-hspinner.$(OBJEXT): widgets/$(am__dirstamp) \ widgets/$(DEPDIR)/$(am__dirstamp) support/flrig-tod_clock.$(OBJEXT): support/$(am__dirstamp) \ support/$(DEPDIR)/$(am__dirstamp) server/$(am__dirstamp): @$(MKDIR_P) server @: > server/$(am__dirstamp) server/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) server/$(DEPDIR) @: > server/$(DEPDIR)/$(am__dirstamp) server/flrig-xml_server.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/flrig-xmlrpc_rig.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) cwio/$(am__dirstamp): @$(MKDIR_P) cwio @: > cwio/$(am__dirstamp) cwio/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) cwio/$(DEPDIR) @: > cwio/$(DEPDIR)/$(am__dirstamp) cwio/flrig-cwio.$(OBJEXT): cwio/$(am__dirstamp) \ cwio/$(DEPDIR)/$(am__dirstamp) cwio/flrig-morse.$(OBJEXT): cwio/$(am__dirstamp) \ cwio/$(DEPDIR)/$(am__dirstamp) cwio/flrig-cwioUI.$(OBJEXT): cwio/$(am__dirstamp) \ cwio/$(DEPDIR)/$(am__dirstamp) cwio/flrig-precise_time.$(OBJEXT): cwio/$(am__dirstamp) \ cwio/$(DEPDIR)/$(am__dirstamp) cmedia/$(am__dirstamp): @$(MKDIR_P) cmedia @: > cmedia/$(am__dirstamp) cmedia/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) cmedia/$(DEPDIR) @: > cmedia/$(DEPDIR)/$(am__dirstamp) cmedia/flrig-cmedia.$(OBJEXT): cmedia/$(am__dirstamp) \ cmedia/$(DEPDIR)/$(am__dirstamp) cmedia/flrig-hid.$(OBJEXT): cmedia/$(am__dirstamp) \ cmedia/$(DEPDIR)/$(am__dirstamp) cmedia/flrig-tmate2.$(OBJEXT): cmedia/$(am__dirstamp) \ cmedia/$(DEPDIR)/$(am__dirstamp) fskio/$(am__dirstamp): @$(MKDIR_P) fskio @: > fskio/$(am__dirstamp) fskio/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) fskio/$(DEPDIR) @: > fskio/$(DEPDIR)/$(am__dirstamp) fskio/flrig-fsk.$(OBJEXT): fskio/$(am__dirstamp) \ fskio/$(DEPDIR)/$(am__dirstamp) fskio/flrig-fskioUI.$(OBJEXT): fskio/$(am__dirstamp) \ fskio/$(DEPDIR)/$(am__dirstamp) log/$(am__dirstamp): @$(MKDIR_P) log @: > log/$(am__dirstamp) log/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) log/$(DEPDIR) @: > log/$(DEPDIR)/$(am__dirstamp) log/flrig-cwlog.$(OBJEXT): log/$(am__dirstamp) \ log/$(DEPDIR)/$(am__dirstamp) log/flrig-fsklog.$(OBJEXT): log/$(am__dirstamp) \ log/$(DEPDIR)/$(am__dirstamp) graphics/$(am__dirstamp): @$(MKDIR_P) graphics @: > graphics/$(am__dirstamp) graphics/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) graphics/$(DEPDIR) @: > graphics/$(DEPDIR)/$(am__dirstamp) graphics/flrig-pixmaps.$(OBJEXT): graphics/$(am__dirstamp) \ graphics/$(DEPDIR)/$(am__dirstamp) graphics/flrig-icons.$(OBJEXT): graphics/$(am__dirstamp) \ graphics/$(DEPDIR)/$(am__dirstamp) graphics/flrig-images.$(OBJEXT): graphics/$(am__dirstamp) \ graphics/$(DEPDIR)/$(am__dirstamp) flrig$(EXEEXT): $(flrig_OBJECTS) $(flrig_DEPENDENCIES) $(EXTRA_flrig_DEPENDENCIES) @rm -f flrig$(EXEEXT) $(AM_V_CXXLD)$(flrig_LINK) $(flrig_OBJECTS) $(flrig_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f UI/*.$(OBJEXT) -rm -f cmedia/*.$(OBJEXT) -rm -f cwio/*.$(OBJEXT) -rm -f fskio/*.$(OBJEXT) -rm -f graphics/*.$(OBJEXT) -rm -f log/*.$(OBJEXT) -rm -f rigs/*.$(OBJEXT) -rm -f rigs/elad/*.$(OBJEXT) -rm -f rigs/elecraft/*.$(OBJEXT) -rm -f rigs/icom/*.$(OBJEXT) -rm -f rigs/kenwood/*.$(OBJEXT) -rm -f rigs/lab599/*.$(OBJEXT) -rm -f rigs/other/*.$(OBJEXT) -rm -f rigs/qrp_labs/*.$(OBJEXT) -rm -f rigs/tentec/*.$(OBJEXT) -rm -f rigs/xiegu/*.$(OBJEXT) -rm -f rigs/yaesu/*.$(OBJEXT) -rm -f server/*.$(OBJEXT) -rm -f support/*.$(OBJEXT) -rm -f wc/*.$(OBJEXT) -rm -f widgets/*.$(OBJEXT) -rm -f xmlrpcpp/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flrig-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@UI/$(DEPDIR)/flrig-K3_ui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@UI/$(DEPDIR)/flrig-K4_ui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@UI/$(DEPDIR)/flrig-KX3_ui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@UI/$(DEPDIR)/flrig-meters_dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@UI/$(DEPDIR)/flrig-rigpanel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@cmedia/$(DEPDIR)/flrig-cmedia.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@cmedia/$(DEPDIR)/flrig-hid.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@cmedia/$(DEPDIR)/flrig-tmate2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@cwio/$(DEPDIR)/flrig-cwio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@cwio/$(DEPDIR)/flrig-cwioUI.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@cwio/$(DEPDIR)/flrig-morse.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@cwio/$(DEPDIR)/flrig-precise_time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fskio/$(DEPDIR)/flrig-fsk.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fskio/$(DEPDIR)/flrig-fskioUI.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@graphics/$(DEPDIR)/flrig-icons.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@graphics/$(DEPDIR)/flrig-images.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@graphics/$(DEPDIR)/flrig-pixmaps.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@log/$(DEPDIR)/flrig-cwlog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@log/$(DEPDIR)/flrig-fsklog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/$(DEPDIR)/flrig-rigbase.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/$(DEPDIR)/flrig-rigs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/elad/$(DEPDIR)/flrig-FDMDUO.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/elecraft/$(DEPDIR)/flrig-K2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/elecraft/$(DEPDIR)/flrig-K3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/elecraft/$(DEPDIR)/flrig-K4.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/elecraft/$(DEPDIR)/flrig-KX3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7000.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC703.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC705.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7100.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC718.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7200.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC728.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7300.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC735.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7410.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC746.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC751.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC756.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7600.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7610.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7700.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7800.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC7851.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC910.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC9100.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-IC9700.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-ICF8101.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-ICR71.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/icom/$(DEPDIR)/flrig-ICbase.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS140.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS2000.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS440.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS450S.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS570.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS590S.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS790.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS850.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS870S.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS890S.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS940S.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS950.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/kenwood/$(DEPDIR)/flrig-TS990.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/lab599/$(DEPDIR)/flrig-TX500.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-AOR5K.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-FLEX1500.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-PCR1000.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-PowerSDR.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-RAY152.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-SmartSDR.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-TMD710.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-sunsdr2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-tcisdr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/other/$(DEPDIR)/flrig-trusdx.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/tentec/$(DEPDIR)/flrig-TT516.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/tentec/$(DEPDIR)/flrig-TT538.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/tentec/$(DEPDIR)/flrig-TT550.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/tentec/$(DEPDIR)/flrig-TT563.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/tentec/$(DEPDIR)/flrig-TT566.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/tentec/$(DEPDIR)/flrig-TT588.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/tentec/$(DEPDIR)/flrig-TT599.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/xiegu/$(DEPDIR)/flrig-X6100.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT1000.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT100D.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT2000.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT450.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT450D.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT5000.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT710.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT736R.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT747.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT767.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT817.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT818.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT847.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT857D.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT890.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT891.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT900.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT920.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT950.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT990.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT990a.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT991.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FT991A.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/flrig-xml_server.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/flrig-xmlrpc_rig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-TT550_support.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-debug.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-dialogs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-gpio_ptt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-init_rig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-init_user_interface.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-mingw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-ptt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-read_rig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-restore_rig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-rig_io.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-serial.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-socket.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-socket_io.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-status.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-support.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-threads.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-timeops.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-tod_clock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-trace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@support/$(DEPDIR)/flrig-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@wc/$(DEPDIR)/flrig-WSclient.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@wc/$(DEPDIR)/flrig-tci_io.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-Fl_SigBar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-FreqControl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-ValueSlider.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-combo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-flbrowser2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-flinput2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-flslider2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-font_browser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-hspinner.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@widgets/$(DEPDIR)/flrig-pl_tones.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` support/flrig-mingw.o: support/mingw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CFLAGS) $(CFLAGS) -MT support/flrig-mingw.o -MD -MP -MF support/$(DEPDIR)/flrig-mingw.Tpo -c -o support/flrig-mingw.o `test -f 'support/mingw.c' || echo '$(srcdir)/'`support/mingw.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-mingw.Tpo support/$(DEPDIR)/flrig-mingw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='support/mingw.c' object='support/flrig-mingw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CFLAGS) $(CFLAGS) -c -o support/flrig-mingw.o `test -f 'support/mingw.c' || echo '$(srcdir)/'`support/mingw.c support/flrig-mingw.obj: support/mingw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CFLAGS) $(CFLAGS) -MT support/flrig-mingw.obj -MD -MP -MF support/$(DEPDIR)/flrig-mingw.Tpo -c -o support/flrig-mingw.obj `if test -f 'support/mingw.c'; then $(CYGPATH_W) 'support/mingw.c'; else $(CYGPATH_W) '$(srcdir)/support/mingw.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-mingw.Tpo support/$(DEPDIR)/flrig-mingw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='support/mingw.c' object='support/flrig-mingw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CFLAGS) $(CFLAGS) -c -o support/flrig-mingw.obj `if test -f 'support/mingw.c'; then $(CYGPATH_W) 'support/mingw.c'; else $(CYGPATH_W) '$(srcdir)/support/mingw.c'; fi` .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` xmlrpcpp/flrig-XmlRpcClient.o: xmlrpcpp/XmlRpcClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcClient.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Tpo -c -o xmlrpcpp/flrig-XmlRpcClient.o `test -f 'xmlrpcpp/XmlRpcClient.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcClient.cpp' object='xmlrpcpp/flrig-XmlRpcClient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcClient.o `test -f 'xmlrpcpp/XmlRpcClient.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcClient.cpp xmlrpcpp/flrig-XmlRpcClient.obj: xmlrpcpp/XmlRpcClient.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcClient.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Tpo -c -o xmlrpcpp/flrig-XmlRpcClient.obj `if test -f 'xmlrpcpp/XmlRpcClient.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcClient.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcClient.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcClient.cpp' object='xmlrpcpp/flrig-XmlRpcClient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcClient.obj `if test -f 'xmlrpcpp/XmlRpcClient.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcClient.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcClient.cpp'; fi` xmlrpcpp/flrig-XmlRpcDispatch.o: xmlrpcpp/XmlRpcDispatch.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcDispatch.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Tpo -c -o xmlrpcpp/flrig-XmlRpcDispatch.o `test -f 'xmlrpcpp/XmlRpcDispatch.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcDispatch.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcDispatch.cpp' object='xmlrpcpp/flrig-XmlRpcDispatch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcDispatch.o `test -f 'xmlrpcpp/XmlRpcDispatch.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcDispatch.cpp xmlrpcpp/flrig-XmlRpcDispatch.obj: xmlrpcpp/XmlRpcDispatch.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcDispatch.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Tpo -c -o xmlrpcpp/flrig-XmlRpcDispatch.obj `if test -f 'xmlrpcpp/XmlRpcDispatch.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcDispatch.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcDispatch.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcDispatch.cpp' object='xmlrpcpp/flrig-XmlRpcDispatch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcDispatch.obj `if test -f 'xmlrpcpp/XmlRpcDispatch.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcDispatch.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcDispatch.cpp'; fi` xmlrpcpp/flrig-XmlRpcMutex.o: xmlrpcpp/XmlRpcMutex.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcMutex.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Tpo -c -o xmlrpcpp/flrig-XmlRpcMutex.o `test -f 'xmlrpcpp/XmlRpcMutex.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcMutex.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcMutex.cpp' object='xmlrpcpp/flrig-XmlRpcMutex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcMutex.o `test -f 'xmlrpcpp/XmlRpcMutex.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcMutex.cpp xmlrpcpp/flrig-XmlRpcMutex.obj: xmlrpcpp/XmlRpcMutex.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcMutex.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Tpo -c -o xmlrpcpp/flrig-XmlRpcMutex.obj `if test -f 'xmlrpcpp/XmlRpcMutex.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcMutex.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcMutex.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcMutex.cpp' object='xmlrpcpp/flrig-XmlRpcMutex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcMutex.obj `if test -f 'xmlrpcpp/XmlRpcMutex.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcMutex.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcMutex.cpp'; fi` xmlrpcpp/flrig-XmlRpcServerConnection.o: xmlrpcpp/XmlRpcServerConnection.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcServerConnection.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Tpo -c -o xmlrpcpp/flrig-XmlRpcServerConnection.o `test -f 'xmlrpcpp/XmlRpcServerConnection.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServerConnection.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcServerConnection.cpp' object='xmlrpcpp/flrig-XmlRpcServerConnection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcServerConnection.o `test -f 'xmlrpcpp/XmlRpcServerConnection.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServerConnection.cpp xmlrpcpp/flrig-XmlRpcServerConnection.obj: xmlrpcpp/XmlRpcServerConnection.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcServerConnection.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Tpo -c -o xmlrpcpp/flrig-XmlRpcServerConnection.obj `if test -f 'xmlrpcpp/XmlRpcServerConnection.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServerConnection.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServerConnection.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcServerConnection.cpp' object='xmlrpcpp/flrig-XmlRpcServerConnection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcServerConnection.obj `if test -f 'xmlrpcpp/XmlRpcServerConnection.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServerConnection.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServerConnection.cpp'; fi` xmlrpcpp/flrig-XmlRpcServer.o: xmlrpcpp/XmlRpcServer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcServer.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Tpo -c -o xmlrpcpp/flrig-XmlRpcServer.o `test -f 'xmlrpcpp/XmlRpcServer.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServer.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcServer.cpp' object='xmlrpcpp/flrig-XmlRpcServer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcServer.o `test -f 'xmlrpcpp/XmlRpcServer.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServer.cpp xmlrpcpp/flrig-XmlRpcServer.obj: xmlrpcpp/XmlRpcServer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcServer.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Tpo -c -o xmlrpcpp/flrig-XmlRpcServer.obj `if test -f 'xmlrpcpp/XmlRpcServer.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServer.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServer.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcServer.cpp' object='xmlrpcpp/flrig-XmlRpcServer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcServer.obj `if test -f 'xmlrpcpp/XmlRpcServer.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServer.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServer.cpp'; fi` xmlrpcpp/flrig-XmlRpcServerMethod.o: xmlrpcpp/XmlRpcServerMethod.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcServerMethod.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Tpo -c -o xmlrpcpp/flrig-XmlRpcServerMethod.o `test -f 'xmlrpcpp/XmlRpcServerMethod.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServerMethod.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcServerMethod.cpp' object='xmlrpcpp/flrig-XmlRpcServerMethod.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcServerMethod.o `test -f 'xmlrpcpp/XmlRpcServerMethod.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServerMethod.cpp xmlrpcpp/flrig-XmlRpcServerMethod.obj: xmlrpcpp/XmlRpcServerMethod.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcServerMethod.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Tpo -c -o xmlrpcpp/flrig-XmlRpcServerMethod.obj `if test -f 'xmlrpcpp/XmlRpcServerMethod.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServerMethod.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServerMethod.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcServerMethod.cpp' object='xmlrpcpp/flrig-XmlRpcServerMethod.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcServerMethod.obj `if test -f 'xmlrpcpp/XmlRpcServerMethod.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServerMethod.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServerMethod.cpp'; fi` xmlrpcpp/flrig-XmlRpcSocket.o: xmlrpcpp/XmlRpcSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcSocket.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Tpo -c -o xmlrpcpp/flrig-XmlRpcSocket.o `test -f 'xmlrpcpp/XmlRpcSocket.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcSocket.cpp' object='xmlrpcpp/flrig-XmlRpcSocket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcSocket.o `test -f 'xmlrpcpp/XmlRpcSocket.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcSocket.cpp xmlrpcpp/flrig-XmlRpcSocket.obj: xmlrpcpp/XmlRpcSocket.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcSocket.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Tpo -c -o xmlrpcpp/flrig-XmlRpcSocket.obj `if test -f 'xmlrpcpp/XmlRpcSocket.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcSocket.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcSocket.cpp' object='xmlrpcpp/flrig-XmlRpcSocket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcSocket.obj `if test -f 'xmlrpcpp/XmlRpcSocket.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcSocket.cpp'; fi` xmlrpcpp/flrig-XmlRpcSource.o: xmlrpcpp/XmlRpcSource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcSource.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Tpo -c -o xmlrpcpp/flrig-XmlRpcSource.o `test -f 'xmlrpcpp/XmlRpcSource.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcSource.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcSource.cpp' object='xmlrpcpp/flrig-XmlRpcSource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcSource.o `test -f 'xmlrpcpp/XmlRpcSource.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcSource.cpp xmlrpcpp/flrig-XmlRpcSource.obj: xmlrpcpp/XmlRpcSource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcSource.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Tpo -c -o xmlrpcpp/flrig-XmlRpcSource.obj `if test -f 'xmlrpcpp/XmlRpcSource.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcSource.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcSource.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcSource.cpp' object='xmlrpcpp/flrig-XmlRpcSource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcSource.obj `if test -f 'xmlrpcpp/XmlRpcSource.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcSource.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcSource.cpp'; fi` xmlrpcpp/flrig-XmlRpcUtil.o: xmlrpcpp/XmlRpcUtil.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcUtil.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Tpo -c -o xmlrpcpp/flrig-XmlRpcUtil.o `test -f 'xmlrpcpp/XmlRpcUtil.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcUtil.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcUtil.cpp' object='xmlrpcpp/flrig-XmlRpcUtil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcUtil.o `test -f 'xmlrpcpp/XmlRpcUtil.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcUtil.cpp xmlrpcpp/flrig-XmlRpcUtil.obj: xmlrpcpp/XmlRpcUtil.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcUtil.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Tpo -c -o xmlrpcpp/flrig-XmlRpcUtil.obj `if test -f 'xmlrpcpp/XmlRpcUtil.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcUtil.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcUtil.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcUtil.cpp' object='xmlrpcpp/flrig-XmlRpcUtil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcUtil.obj `if test -f 'xmlrpcpp/XmlRpcUtil.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcUtil.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcUtil.cpp'; fi` xmlrpcpp/flrig-XmlRpcValue.o: xmlrpcpp/XmlRpcValue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcValue.o -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Tpo -c -o xmlrpcpp/flrig-XmlRpcValue.o `test -f 'xmlrpcpp/XmlRpcValue.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcValue.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcValue.cpp' object='xmlrpcpp/flrig-XmlRpcValue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcValue.o `test -f 'xmlrpcpp/XmlRpcValue.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcValue.cpp xmlrpcpp/flrig-XmlRpcValue.obj: xmlrpcpp/XmlRpcValue.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT xmlrpcpp/flrig-XmlRpcValue.obj -MD -MP -MF xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Tpo -c -o xmlrpcpp/flrig-XmlRpcValue.obj `if test -f 'xmlrpcpp/XmlRpcValue.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcValue.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcValue.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Tpo xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='xmlrpcpp/XmlRpcValue.cpp' object='xmlrpcpp/flrig-XmlRpcValue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o xmlrpcpp/flrig-XmlRpcValue.obj `if test -f 'xmlrpcpp/XmlRpcValue.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcValue.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcValue.cpp'; fi` rigs/flrig-rigbase.o: rigs/rigbase.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/flrig-rigbase.o -MD -MP -MF rigs/$(DEPDIR)/flrig-rigbase.Tpo -c -o rigs/flrig-rigbase.o `test -f 'rigs/rigbase.cxx' || echo '$(srcdir)/'`rigs/rigbase.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/$(DEPDIR)/flrig-rigbase.Tpo rigs/$(DEPDIR)/flrig-rigbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/rigbase.cxx' object='rigs/flrig-rigbase.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/flrig-rigbase.o `test -f 'rigs/rigbase.cxx' || echo '$(srcdir)/'`rigs/rigbase.cxx rigs/flrig-rigbase.obj: rigs/rigbase.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/flrig-rigbase.obj -MD -MP -MF rigs/$(DEPDIR)/flrig-rigbase.Tpo -c -o rigs/flrig-rigbase.obj `if test -f 'rigs/rigbase.cxx'; then $(CYGPATH_W) 'rigs/rigbase.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/rigbase.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/$(DEPDIR)/flrig-rigbase.Tpo rigs/$(DEPDIR)/flrig-rigbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/rigbase.cxx' object='rigs/flrig-rigbase.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/flrig-rigbase.obj `if test -f 'rigs/rigbase.cxx'; then $(CYGPATH_W) 'rigs/rigbase.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/rigbase.cxx'; fi` rigs/flrig-rigs.o: rigs/rigs.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/flrig-rigs.o -MD -MP -MF rigs/$(DEPDIR)/flrig-rigs.Tpo -c -o rigs/flrig-rigs.o `test -f 'rigs/rigs.cxx' || echo '$(srcdir)/'`rigs/rigs.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/$(DEPDIR)/flrig-rigs.Tpo rigs/$(DEPDIR)/flrig-rigs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/rigs.cxx' object='rigs/flrig-rigs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/flrig-rigs.o `test -f 'rigs/rigs.cxx' || echo '$(srcdir)/'`rigs/rigs.cxx rigs/flrig-rigs.obj: rigs/rigs.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/flrig-rigs.obj -MD -MP -MF rigs/$(DEPDIR)/flrig-rigs.Tpo -c -o rigs/flrig-rigs.obj `if test -f 'rigs/rigs.cxx'; then $(CYGPATH_W) 'rigs/rigs.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/rigs.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/$(DEPDIR)/flrig-rigs.Tpo rigs/$(DEPDIR)/flrig-rigs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/rigs.cxx' object='rigs/flrig-rigs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/flrig-rigs.obj `if test -f 'rigs/rigs.cxx'; then $(CYGPATH_W) 'rigs/rigs.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/rigs.cxx'; fi` rigs/elad/flrig-FDMDUO.o: rigs/elad/FDMDUO.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elad/flrig-FDMDUO.o -MD -MP -MF rigs/elad/$(DEPDIR)/flrig-FDMDUO.Tpo -c -o rigs/elad/flrig-FDMDUO.o `test -f 'rigs/elad/FDMDUO.cxx' || echo '$(srcdir)/'`rigs/elad/FDMDUO.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elad/$(DEPDIR)/flrig-FDMDUO.Tpo rigs/elad/$(DEPDIR)/flrig-FDMDUO.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elad/FDMDUO.cxx' object='rigs/elad/flrig-FDMDUO.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elad/flrig-FDMDUO.o `test -f 'rigs/elad/FDMDUO.cxx' || echo '$(srcdir)/'`rigs/elad/FDMDUO.cxx rigs/elad/flrig-FDMDUO.obj: rigs/elad/FDMDUO.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elad/flrig-FDMDUO.obj -MD -MP -MF rigs/elad/$(DEPDIR)/flrig-FDMDUO.Tpo -c -o rigs/elad/flrig-FDMDUO.obj `if test -f 'rigs/elad/FDMDUO.cxx'; then $(CYGPATH_W) 'rigs/elad/FDMDUO.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elad/FDMDUO.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elad/$(DEPDIR)/flrig-FDMDUO.Tpo rigs/elad/$(DEPDIR)/flrig-FDMDUO.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elad/FDMDUO.cxx' object='rigs/elad/flrig-FDMDUO.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elad/flrig-FDMDUO.obj `if test -f 'rigs/elad/FDMDUO.cxx'; then $(CYGPATH_W) 'rigs/elad/FDMDUO.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elad/FDMDUO.cxx'; fi` rigs/elecraft/flrig-K2.o: rigs/elecraft/K2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elecraft/flrig-K2.o -MD -MP -MF rigs/elecraft/$(DEPDIR)/flrig-K2.Tpo -c -o rigs/elecraft/flrig-K2.o `test -f 'rigs/elecraft/K2.cxx' || echo '$(srcdir)/'`rigs/elecraft/K2.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elecraft/$(DEPDIR)/flrig-K2.Tpo rigs/elecraft/$(DEPDIR)/flrig-K2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elecraft/K2.cxx' object='rigs/elecraft/flrig-K2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elecraft/flrig-K2.o `test -f 'rigs/elecraft/K2.cxx' || echo '$(srcdir)/'`rigs/elecraft/K2.cxx rigs/elecraft/flrig-K2.obj: rigs/elecraft/K2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elecraft/flrig-K2.obj -MD -MP -MF rigs/elecraft/$(DEPDIR)/flrig-K2.Tpo -c -o rigs/elecraft/flrig-K2.obj `if test -f 'rigs/elecraft/K2.cxx'; then $(CYGPATH_W) 'rigs/elecraft/K2.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elecraft/K2.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elecraft/$(DEPDIR)/flrig-K2.Tpo rigs/elecraft/$(DEPDIR)/flrig-K2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elecraft/K2.cxx' object='rigs/elecraft/flrig-K2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elecraft/flrig-K2.obj `if test -f 'rigs/elecraft/K2.cxx'; then $(CYGPATH_W) 'rigs/elecraft/K2.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elecraft/K2.cxx'; fi` rigs/elecraft/flrig-K3.o: rigs/elecraft/K3.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elecraft/flrig-K3.o -MD -MP -MF rigs/elecraft/$(DEPDIR)/flrig-K3.Tpo -c -o rigs/elecraft/flrig-K3.o `test -f 'rigs/elecraft/K3.cxx' || echo '$(srcdir)/'`rigs/elecraft/K3.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elecraft/$(DEPDIR)/flrig-K3.Tpo rigs/elecraft/$(DEPDIR)/flrig-K3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elecraft/K3.cxx' object='rigs/elecraft/flrig-K3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elecraft/flrig-K3.o `test -f 'rigs/elecraft/K3.cxx' || echo '$(srcdir)/'`rigs/elecraft/K3.cxx rigs/elecraft/flrig-K3.obj: rigs/elecraft/K3.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elecraft/flrig-K3.obj -MD -MP -MF rigs/elecraft/$(DEPDIR)/flrig-K3.Tpo -c -o rigs/elecraft/flrig-K3.obj `if test -f 'rigs/elecraft/K3.cxx'; then $(CYGPATH_W) 'rigs/elecraft/K3.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elecraft/K3.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elecraft/$(DEPDIR)/flrig-K3.Tpo rigs/elecraft/$(DEPDIR)/flrig-K3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elecraft/K3.cxx' object='rigs/elecraft/flrig-K3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elecraft/flrig-K3.obj `if test -f 'rigs/elecraft/K3.cxx'; then $(CYGPATH_W) 'rigs/elecraft/K3.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elecraft/K3.cxx'; fi` rigs/elecraft/flrig-KX3.o: rigs/elecraft/KX3.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elecraft/flrig-KX3.o -MD -MP -MF rigs/elecraft/$(DEPDIR)/flrig-KX3.Tpo -c -o rigs/elecraft/flrig-KX3.o `test -f 'rigs/elecraft/KX3.cxx' || echo '$(srcdir)/'`rigs/elecraft/KX3.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elecraft/$(DEPDIR)/flrig-KX3.Tpo rigs/elecraft/$(DEPDIR)/flrig-KX3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elecraft/KX3.cxx' object='rigs/elecraft/flrig-KX3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elecraft/flrig-KX3.o `test -f 'rigs/elecraft/KX3.cxx' || echo '$(srcdir)/'`rigs/elecraft/KX3.cxx rigs/elecraft/flrig-KX3.obj: rigs/elecraft/KX3.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elecraft/flrig-KX3.obj -MD -MP -MF rigs/elecraft/$(DEPDIR)/flrig-KX3.Tpo -c -o rigs/elecraft/flrig-KX3.obj `if test -f 'rigs/elecraft/KX3.cxx'; then $(CYGPATH_W) 'rigs/elecraft/KX3.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elecraft/KX3.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elecraft/$(DEPDIR)/flrig-KX3.Tpo rigs/elecraft/$(DEPDIR)/flrig-KX3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elecraft/KX3.cxx' object='rigs/elecraft/flrig-KX3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elecraft/flrig-KX3.obj `if test -f 'rigs/elecraft/KX3.cxx'; then $(CYGPATH_W) 'rigs/elecraft/KX3.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elecraft/KX3.cxx'; fi` rigs/elecraft/flrig-K4.o: rigs/elecraft/K4.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elecraft/flrig-K4.o -MD -MP -MF rigs/elecraft/$(DEPDIR)/flrig-K4.Tpo -c -o rigs/elecraft/flrig-K4.o `test -f 'rigs/elecraft/K4.cxx' || echo '$(srcdir)/'`rigs/elecraft/K4.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elecraft/$(DEPDIR)/flrig-K4.Tpo rigs/elecraft/$(DEPDIR)/flrig-K4.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elecraft/K4.cxx' object='rigs/elecraft/flrig-K4.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elecraft/flrig-K4.o `test -f 'rigs/elecraft/K4.cxx' || echo '$(srcdir)/'`rigs/elecraft/K4.cxx rigs/elecraft/flrig-K4.obj: rigs/elecraft/K4.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/elecraft/flrig-K4.obj -MD -MP -MF rigs/elecraft/$(DEPDIR)/flrig-K4.Tpo -c -o rigs/elecraft/flrig-K4.obj `if test -f 'rigs/elecraft/K4.cxx'; then $(CYGPATH_W) 'rigs/elecraft/K4.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elecraft/K4.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/elecraft/$(DEPDIR)/flrig-K4.Tpo rigs/elecraft/$(DEPDIR)/flrig-K4.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/elecraft/K4.cxx' object='rigs/elecraft/flrig-K4.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/elecraft/flrig-K4.obj `if test -f 'rigs/elecraft/K4.cxx'; then $(CYGPATH_W) 'rigs/elecraft/K4.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/elecraft/K4.cxx'; fi` rigs/icom/flrig-ICbase.o: rigs/icom/ICbase.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-ICbase.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-ICbase.Tpo -c -o rigs/icom/flrig-ICbase.o `test -f 'rigs/icom/ICbase.cxx' || echo '$(srcdir)/'`rigs/icom/ICbase.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-ICbase.Tpo rigs/icom/$(DEPDIR)/flrig-ICbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/ICbase.cxx' object='rigs/icom/flrig-ICbase.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-ICbase.o `test -f 'rigs/icom/ICbase.cxx' || echo '$(srcdir)/'`rigs/icom/ICbase.cxx rigs/icom/flrig-ICbase.obj: rigs/icom/ICbase.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-ICbase.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-ICbase.Tpo -c -o rigs/icom/flrig-ICbase.obj `if test -f 'rigs/icom/ICbase.cxx'; then $(CYGPATH_W) 'rigs/icom/ICbase.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/ICbase.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-ICbase.Tpo rigs/icom/$(DEPDIR)/flrig-ICbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/ICbase.cxx' object='rigs/icom/flrig-ICbase.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-ICbase.obj `if test -f 'rigs/icom/ICbase.cxx'; then $(CYGPATH_W) 'rigs/icom/ICbase.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/ICbase.cxx'; fi` rigs/icom/flrig-IC703.o: rigs/icom/IC703.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC703.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC703.Tpo -c -o rigs/icom/flrig-IC703.o `test -f 'rigs/icom/IC703.cxx' || echo '$(srcdir)/'`rigs/icom/IC703.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC703.Tpo rigs/icom/$(DEPDIR)/flrig-IC703.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC703.cxx' object='rigs/icom/flrig-IC703.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC703.o `test -f 'rigs/icom/IC703.cxx' || echo '$(srcdir)/'`rigs/icom/IC703.cxx rigs/icom/flrig-IC703.obj: rigs/icom/IC703.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC703.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC703.Tpo -c -o rigs/icom/flrig-IC703.obj `if test -f 'rigs/icom/IC703.cxx'; then $(CYGPATH_W) 'rigs/icom/IC703.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC703.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC703.Tpo rigs/icom/$(DEPDIR)/flrig-IC703.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC703.cxx' object='rigs/icom/flrig-IC703.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC703.obj `if test -f 'rigs/icom/IC703.cxx'; then $(CYGPATH_W) 'rigs/icom/IC703.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC703.cxx'; fi` rigs/icom/flrig-IC705.o: rigs/icom/IC705.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC705.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC705.Tpo -c -o rigs/icom/flrig-IC705.o `test -f 'rigs/icom/IC705.cxx' || echo '$(srcdir)/'`rigs/icom/IC705.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC705.Tpo rigs/icom/$(DEPDIR)/flrig-IC705.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC705.cxx' object='rigs/icom/flrig-IC705.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC705.o `test -f 'rigs/icom/IC705.cxx' || echo '$(srcdir)/'`rigs/icom/IC705.cxx rigs/icom/flrig-IC705.obj: rigs/icom/IC705.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC705.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC705.Tpo -c -o rigs/icom/flrig-IC705.obj `if test -f 'rigs/icom/IC705.cxx'; then $(CYGPATH_W) 'rigs/icom/IC705.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC705.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC705.Tpo rigs/icom/$(DEPDIR)/flrig-IC705.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC705.cxx' object='rigs/icom/flrig-IC705.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC705.obj `if test -f 'rigs/icom/IC705.cxx'; then $(CYGPATH_W) 'rigs/icom/IC705.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC705.cxx'; fi` rigs/icom/flrig-IC706MKIIG.o: rigs/icom/IC706MKIIG.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC706MKIIG.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Tpo -c -o rigs/icom/flrig-IC706MKIIG.o `test -f 'rigs/icom/IC706MKIIG.cxx' || echo '$(srcdir)/'`rigs/icom/IC706MKIIG.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Tpo rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC706MKIIG.cxx' object='rigs/icom/flrig-IC706MKIIG.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC706MKIIG.o `test -f 'rigs/icom/IC706MKIIG.cxx' || echo '$(srcdir)/'`rigs/icom/IC706MKIIG.cxx rigs/icom/flrig-IC706MKIIG.obj: rigs/icom/IC706MKIIG.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC706MKIIG.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Tpo -c -o rigs/icom/flrig-IC706MKIIG.obj `if test -f 'rigs/icom/IC706MKIIG.cxx'; then $(CYGPATH_W) 'rigs/icom/IC706MKIIG.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC706MKIIG.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Tpo rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC706MKIIG.cxx' object='rigs/icom/flrig-IC706MKIIG.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC706MKIIG.obj `if test -f 'rigs/icom/IC706MKIIG.cxx'; then $(CYGPATH_W) 'rigs/icom/IC706MKIIG.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC706MKIIG.cxx'; fi` rigs/icom/flrig-IC718.o: rigs/icom/IC718.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC718.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC718.Tpo -c -o rigs/icom/flrig-IC718.o `test -f 'rigs/icom/IC718.cxx' || echo '$(srcdir)/'`rigs/icom/IC718.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC718.Tpo rigs/icom/$(DEPDIR)/flrig-IC718.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC718.cxx' object='rigs/icom/flrig-IC718.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC718.o `test -f 'rigs/icom/IC718.cxx' || echo '$(srcdir)/'`rigs/icom/IC718.cxx rigs/icom/flrig-IC718.obj: rigs/icom/IC718.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC718.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC718.Tpo -c -o rigs/icom/flrig-IC718.obj `if test -f 'rigs/icom/IC718.cxx'; then $(CYGPATH_W) 'rigs/icom/IC718.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC718.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC718.Tpo rigs/icom/$(DEPDIR)/flrig-IC718.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC718.cxx' object='rigs/icom/flrig-IC718.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC718.obj `if test -f 'rigs/icom/IC718.cxx'; then $(CYGPATH_W) 'rigs/icom/IC718.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC718.cxx'; fi` rigs/icom/flrig-IC728.o: rigs/icom/IC728.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC728.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC728.Tpo -c -o rigs/icom/flrig-IC728.o `test -f 'rigs/icom/IC728.cxx' || echo '$(srcdir)/'`rigs/icom/IC728.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC728.Tpo rigs/icom/$(DEPDIR)/flrig-IC728.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC728.cxx' object='rigs/icom/flrig-IC728.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC728.o `test -f 'rigs/icom/IC728.cxx' || echo '$(srcdir)/'`rigs/icom/IC728.cxx rigs/icom/flrig-IC728.obj: rigs/icom/IC728.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC728.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC728.Tpo -c -o rigs/icom/flrig-IC728.obj `if test -f 'rigs/icom/IC728.cxx'; then $(CYGPATH_W) 'rigs/icom/IC728.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC728.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC728.Tpo rigs/icom/$(DEPDIR)/flrig-IC728.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC728.cxx' object='rigs/icom/flrig-IC728.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC728.obj `if test -f 'rigs/icom/IC728.cxx'; then $(CYGPATH_W) 'rigs/icom/IC728.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC728.cxx'; fi` rigs/icom/flrig-IC735.o: rigs/icom/IC735.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC735.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC735.Tpo -c -o rigs/icom/flrig-IC735.o `test -f 'rigs/icom/IC735.cxx' || echo '$(srcdir)/'`rigs/icom/IC735.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC735.Tpo rigs/icom/$(DEPDIR)/flrig-IC735.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC735.cxx' object='rigs/icom/flrig-IC735.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC735.o `test -f 'rigs/icom/IC735.cxx' || echo '$(srcdir)/'`rigs/icom/IC735.cxx rigs/icom/flrig-IC735.obj: rigs/icom/IC735.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC735.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC735.Tpo -c -o rigs/icom/flrig-IC735.obj `if test -f 'rigs/icom/IC735.cxx'; then $(CYGPATH_W) 'rigs/icom/IC735.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC735.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC735.Tpo rigs/icom/$(DEPDIR)/flrig-IC735.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC735.cxx' object='rigs/icom/flrig-IC735.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC735.obj `if test -f 'rigs/icom/IC735.cxx'; then $(CYGPATH_W) 'rigs/icom/IC735.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC735.cxx'; fi` rigs/icom/flrig-IC746.o: rigs/icom/IC746.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC746.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC746.Tpo -c -o rigs/icom/flrig-IC746.o `test -f 'rigs/icom/IC746.cxx' || echo '$(srcdir)/'`rigs/icom/IC746.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC746.Tpo rigs/icom/$(DEPDIR)/flrig-IC746.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC746.cxx' object='rigs/icom/flrig-IC746.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC746.o `test -f 'rigs/icom/IC746.cxx' || echo '$(srcdir)/'`rigs/icom/IC746.cxx rigs/icom/flrig-IC746.obj: rigs/icom/IC746.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC746.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC746.Tpo -c -o rigs/icom/flrig-IC746.obj `if test -f 'rigs/icom/IC746.cxx'; then $(CYGPATH_W) 'rigs/icom/IC746.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC746.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC746.Tpo rigs/icom/$(DEPDIR)/flrig-IC746.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC746.cxx' object='rigs/icom/flrig-IC746.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC746.obj `if test -f 'rigs/icom/IC746.cxx'; then $(CYGPATH_W) 'rigs/icom/IC746.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC746.cxx'; fi` rigs/icom/flrig-IC751.o: rigs/icom/IC751.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC751.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC751.Tpo -c -o rigs/icom/flrig-IC751.o `test -f 'rigs/icom/IC751.cxx' || echo '$(srcdir)/'`rigs/icom/IC751.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC751.Tpo rigs/icom/$(DEPDIR)/flrig-IC751.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC751.cxx' object='rigs/icom/flrig-IC751.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC751.o `test -f 'rigs/icom/IC751.cxx' || echo '$(srcdir)/'`rigs/icom/IC751.cxx rigs/icom/flrig-IC751.obj: rigs/icom/IC751.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC751.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC751.Tpo -c -o rigs/icom/flrig-IC751.obj `if test -f 'rigs/icom/IC751.cxx'; then $(CYGPATH_W) 'rigs/icom/IC751.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC751.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC751.Tpo rigs/icom/$(DEPDIR)/flrig-IC751.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC751.cxx' object='rigs/icom/flrig-IC751.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC751.obj `if test -f 'rigs/icom/IC751.cxx'; then $(CYGPATH_W) 'rigs/icom/IC751.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC751.cxx'; fi` rigs/icom/flrig-IC756.o: rigs/icom/IC756.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC756.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC756.Tpo -c -o rigs/icom/flrig-IC756.o `test -f 'rigs/icom/IC756.cxx' || echo '$(srcdir)/'`rigs/icom/IC756.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC756.Tpo rigs/icom/$(DEPDIR)/flrig-IC756.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC756.cxx' object='rigs/icom/flrig-IC756.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC756.o `test -f 'rigs/icom/IC756.cxx' || echo '$(srcdir)/'`rigs/icom/IC756.cxx rigs/icom/flrig-IC756.obj: rigs/icom/IC756.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC756.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC756.Tpo -c -o rigs/icom/flrig-IC756.obj `if test -f 'rigs/icom/IC756.cxx'; then $(CYGPATH_W) 'rigs/icom/IC756.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC756.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC756.Tpo rigs/icom/$(DEPDIR)/flrig-IC756.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC756.cxx' object='rigs/icom/flrig-IC756.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC756.obj `if test -f 'rigs/icom/IC756.cxx'; then $(CYGPATH_W) 'rigs/icom/IC756.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC756.cxx'; fi` rigs/icom/flrig-IC756PRO2.o: rigs/icom/IC756PRO2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC756PRO2.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Tpo -c -o rigs/icom/flrig-IC756PRO2.o `test -f 'rigs/icom/IC756PRO2.cxx' || echo '$(srcdir)/'`rigs/icom/IC756PRO2.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Tpo rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC756PRO2.cxx' object='rigs/icom/flrig-IC756PRO2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC756PRO2.o `test -f 'rigs/icom/IC756PRO2.cxx' || echo '$(srcdir)/'`rigs/icom/IC756PRO2.cxx rigs/icom/flrig-IC756PRO2.obj: rigs/icom/IC756PRO2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC756PRO2.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Tpo -c -o rigs/icom/flrig-IC756PRO2.obj `if test -f 'rigs/icom/IC756PRO2.cxx'; then $(CYGPATH_W) 'rigs/icom/IC756PRO2.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC756PRO2.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Tpo rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC756PRO2.cxx' object='rigs/icom/flrig-IC756PRO2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC756PRO2.obj `if test -f 'rigs/icom/IC756PRO2.cxx'; then $(CYGPATH_W) 'rigs/icom/IC756PRO2.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC756PRO2.cxx'; fi` rigs/icom/flrig-IC756PRO3.o: rigs/icom/IC756PRO3.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC756PRO3.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Tpo -c -o rigs/icom/flrig-IC756PRO3.o `test -f 'rigs/icom/IC756PRO3.cxx' || echo '$(srcdir)/'`rigs/icom/IC756PRO3.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Tpo rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC756PRO3.cxx' object='rigs/icom/flrig-IC756PRO3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC756PRO3.o `test -f 'rigs/icom/IC756PRO3.cxx' || echo '$(srcdir)/'`rigs/icom/IC756PRO3.cxx rigs/icom/flrig-IC756PRO3.obj: rigs/icom/IC756PRO3.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC756PRO3.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Tpo -c -o rigs/icom/flrig-IC756PRO3.obj `if test -f 'rigs/icom/IC756PRO3.cxx'; then $(CYGPATH_W) 'rigs/icom/IC756PRO3.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC756PRO3.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Tpo rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC756PRO3.cxx' object='rigs/icom/flrig-IC756PRO3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC756PRO3.obj `if test -f 'rigs/icom/IC756PRO3.cxx'; then $(CYGPATH_W) 'rigs/icom/IC756PRO3.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC756PRO3.cxx'; fi` rigs/icom/flrig-IC910.o: rigs/icom/IC910.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC910.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC910.Tpo -c -o rigs/icom/flrig-IC910.o `test -f 'rigs/icom/IC910.cxx' || echo '$(srcdir)/'`rigs/icom/IC910.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC910.Tpo rigs/icom/$(DEPDIR)/flrig-IC910.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC910.cxx' object='rigs/icom/flrig-IC910.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC910.o `test -f 'rigs/icom/IC910.cxx' || echo '$(srcdir)/'`rigs/icom/IC910.cxx rigs/icom/flrig-IC910.obj: rigs/icom/IC910.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC910.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC910.Tpo -c -o rigs/icom/flrig-IC910.obj `if test -f 'rigs/icom/IC910.cxx'; then $(CYGPATH_W) 'rigs/icom/IC910.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC910.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC910.Tpo rigs/icom/$(DEPDIR)/flrig-IC910.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC910.cxx' object='rigs/icom/flrig-IC910.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC910.obj `if test -f 'rigs/icom/IC910.cxx'; then $(CYGPATH_W) 'rigs/icom/IC910.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC910.cxx'; fi` rigs/icom/flrig-IC7000.o: rigs/icom/IC7000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7000.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7000.Tpo -c -o rigs/icom/flrig-IC7000.o `test -f 'rigs/icom/IC7000.cxx' || echo '$(srcdir)/'`rigs/icom/IC7000.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7000.Tpo rigs/icom/$(DEPDIR)/flrig-IC7000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7000.cxx' object='rigs/icom/flrig-IC7000.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7000.o `test -f 'rigs/icom/IC7000.cxx' || echo '$(srcdir)/'`rigs/icom/IC7000.cxx rigs/icom/flrig-IC7000.obj: rigs/icom/IC7000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7000.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7000.Tpo -c -o rigs/icom/flrig-IC7000.obj `if test -f 'rigs/icom/IC7000.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7000.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7000.Tpo rigs/icom/$(DEPDIR)/flrig-IC7000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7000.cxx' object='rigs/icom/flrig-IC7000.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7000.obj `if test -f 'rigs/icom/IC7000.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7000.cxx'; fi` rigs/icom/flrig-IC7100.o: rigs/icom/IC7100.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7100.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7100.Tpo -c -o rigs/icom/flrig-IC7100.o `test -f 'rigs/icom/IC7100.cxx' || echo '$(srcdir)/'`rigs/icom/IC7100.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7100.Tpo rigs/icom/$(DEPDIR)/flrig-IC7100.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7100.cxx' object='rigs/icom/flrig-IC7100.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7100.o `test -f 'rigs/icom/IC7100.cxx' || echo '$(srcdir)/'`rigs/icom/IC7100.cxx rigs/icom/flrig-IC7100.obj: rigs/icom/IC7100.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7100.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7100.Tpo -c -o rigs/icom/flrig-IC7100.obj `if test -f 'rigs/icom/IC7100.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7100.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7100.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7100.Tpo rigs/icom/$(DEPDIR)/flrig-IC7100.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7100.cxx' object='rigs/icom/flrig-IC7100.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7100.obj `if test -f 'rigs/icom/IC7100.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7100.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7100.cxx'; fi` rigs/icom/flrig-IC7200.o: rigs/icom/IC7200.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7200.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7200.Tpo -c -o rigs/icom/flrig-IC7200.o `test -f 'rigs/icom/IC7200.cxx' || echo '$(srcdir)/'`rigs/icom/IC7200.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7200.Tpo rigs/icom/$(DEPDIR)/flrig-IC7200.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7200.cxx' object='rigs/icom/flrig-IC7200.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7200.o `test -f 'rigs/icom/IC7200.cxx' || echo '$(srcdir)/'`rigs/icom/IC7200.cxx rigs/icom/flrig-IC7200.obj: rigs/icom/IC7200.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7200.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7200.Tpo -c -o rigs/icom/flrig-IC7200.obj `if test -f 'rigs/icom/IC7200.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7200.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7200.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7200.Tpo rigs/icom/$(DEPDIR)/flrig-IC7200.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7200.cxx' object='rigs/icom/flrig-IC7200.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7200.obj `if test -f 'rigs/icom/IC7200.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7200.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7200.cxx'; fi` rigs/icom/flrig-IC7300.o: rigs/icom/IC7300.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7300.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7300.Tpo -c -o rigs/icom/flrig-IC7300.o `test -f 'rigs/icom/IC7300.cxx' || echo '$(srcdir)/'`rigs/icom/IC7300.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7300.Tpo rigs/icom/$(DEPDIR)/flrig-IC7300.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7300.cxx' object='rigs/icom/flrig-IC7300.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7300.o `test -f 'rigs/icom/IC7300.cxx' || echo '$(srcdir)/'`rigs/icom/IC7300.cxx rigs/icom/flrig-IC7300.obj: rigs/icom/IC7300.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7300.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7300.Tpo -c -o rigs/icom/flrig-IC7300.obj `if test -f 'rigs/icom/IC7300.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7300.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7300.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7300.Tpo rigs/icom/$(DEPDIR)/flrig-IC7300.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7300.cxx' object='rigs/icom/flrig-IC7300.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7300.obj `if test -f 'rigs/icom/IC7300.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7300.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7300.cxx'; fi` rigs/icom/flrig-IC7410.o: rigs/icom/IC7410.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7410.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7410.Tpo -c -o rigs/icom/flrig-IC7410.o `test -f 'rigs/icom/IC7410.cxx' || echo '$(srcdir)/'`rigs/icom/IC7410.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7410.Tpo rigs/icom/$(DEPDIR)/flrig-IC7410.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7410.cxx' object='rigs/icom/flrig-IC7410.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7410.o `test -f 'rigs/icom/IC7410.cxx' || echo '$(srcdir)/'`rigs/icom/IC7410.cxx rigs/icom/flrig-IC7410.obj: rigs/icom/IC7410.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7410.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7410.Tpo -c -o rigs/icom/flrig-IC7410.obj `if test -f 'rigs/icom/IC7410.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7410.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7410.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7410.Tpo rigs/icom/$(DEPDIR)/flrig-IC7410.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7410.cxx' object='rigs/icom/flrig-IC7410.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7410.obj `if test -f 'rigs/icom/IC7410.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7410.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7410.cxx'; fi` rigs/icom/flrig-IC7600.o: rigs/icom/IC7600.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7600.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7600.Tpo -c -o rigs/icom/flrig-IC7600.o `test -f 'rigs/icom/IC7600.cxx' || echo '$(srcdir)/'`rigs/icom/IC7600.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7600.Tpo rigs/icom/$(DEPDIR)/flrig-IC7600.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7600.cxx' object='rigs/icom/flrig-IC7600.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7600.o `test -f 'rigs/icom/IC7600.cxx' || echo '$(srcdir)/'`rigs/icom/IC7600.cxx rigs/icom/flrig-IC7600.obj: rigs/icom/IC7600.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7600.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7600.Tpo -c -o rigs/icom/flrig-IC7600.obj `if test -f 'rigs/icom/IC7600.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7600.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7600.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7600.Tpo rigs/icom/$(DEPDIR)/flrig-IC7600.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7600.cxx' object='rigs/icom/flrig-IC7600.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7600.obj `if test -f 'rigs/icom/IC7600.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7600.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7600.cxx'; fi` rigs/icom/flrig-IC7610.o: rigs/icom/IC7610.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7610.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7610.Tpo -c -o rigs/icom/flrig-IC7610.o `test -f 'rigs/icom/IC7610.cxx' || echo '$(srcdir)/'`rigs/icom/IC7610.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7610.Tpo rigs/icom/$(DEPDIR)/flrig-IC7610.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7610.cxx' object='rigs/icom/flrig-IC7610.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7610.o `test -f 'rigs/icom/IC7610.cxx' || echo '$(srcdir)/'`rigs/icom/IC7610.cxx rigs/icom/flrig-IC7610.obj: rigs/icom/IC7610.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7610.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7610.Tpo -c -o rigs/icom/flrig-IC7610.obj `if test -f 'rigs/icom/IC7610.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7610.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7610.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7610.Tpo rigs/icom/$(DEPDIR)/flrig-IC7610.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7610.cxx' object='rigs/icom/flrig-IC7610.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7610.obj `if test -f 'rigs/icom/IC7610.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7610.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7610.cxx'; fi` rigs/icom/flrig-IC7800.o: rigs/icom/IC7800.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7800.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7800.Tpo -c -o rigs/icom/flrig-IC7800.o `test -f 'rigs/icom/IC7800.cxx' || echo '$(srcdir)/'`rigs/icom/IC7800.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7800.Tpo rigs/icom/$(DEPDIR)/flrig-IC7800.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7800.cxx' object='rigs/icom/flrig-IC7800.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7800.o `test -f 'rigs/icom/IC7800.cxx' || echo '$(srcdir)/'`rigs/icom/IC7800.cxx rigs/icom/flrig-IC7800.obj: rigs/icom/IC7800.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7800.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7800.Tpo -c -o rigs/icom/flrig-IC7800.obj `if test -f 'rigs/icom/IC7800.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7800.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7800.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7800.Tpo rigs/icom/$(DEPDIR)/flrig-IC7800.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7800.cxx' object='rigs/icom/flrig-IC7800.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7800.obj `if test -f 'rigs/icom/IC7800.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7800.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7800.cxx'; fi` rigs/icom/flrig-IC7851.o: rigs/icom/IC7851.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7851.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7851.Tpo -c -o rigs/icom/flrig-IC7851.o `test -f 'rigs/icom/IC7851.cxx' || echo '$(srcdir)/'`rigs/icom/IC7851.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7851.Tpo rigs/icom/$(DEPDIR)/flrig-IC7851.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7851.cxx' object='rigs/icom/flrig-IC7851.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7851.o `test -f 'rigs/icom/IC7851.cxx' || echo '$(srcdir)/'`rigs/icom/IC7851.cxx rigs/icom/flrig-IC7851.obj: rigs/icom/IC7851.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7851.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7851.Tpo -c -o rigs/icom/flrig-IC7851.obj `if test -f 'rigs/icom/IC7851.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7851.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7851.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7851.Tpo rigs/icom/$(DEPDIR)/flrig-IC7851.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7851.cxx' object='rigs/icom/flrig-IC7851.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7851.obj `if test -f 'rigs/icom/IC7851.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7851.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7851.cxx'; fi` rigs/icom/flrig-IC9100.o: rigs/icom/IC9100.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC9100.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC9100.Tpo -c -o rigs/icom/flrig-IC9100.o `test -f 'rigs/icom/IC9100.cxx' || echo '$(srcdir)/'`rigs/icom/IC9100.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC9100.Tpo rigs/icom/$(DEPDIR)/flrig-IC9100.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC9100.cxx' object='rigs/icom/flrig-IC9100.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC9100.o `test -f 'rigs/icom/IC9100.cxx' || echo '$(srcdir)/'`rigs/icom/IC9100.cxx rigs/icom/flrig-IC9100.obj: rigs/icom/IC9100.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC9100.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC9100.Tpo -c -o rigs/icom/flrig-IC9100.obj `if test -f 'rigs/icom/IC9100.cxx'; then $(CYGPATH_W) 'rigs/icom/IC9100.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC9100.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC9100.Tpo rigs/icom/$(DEPDIR)/flrig-IC9100.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC9100.cxx' object='rigs/icom/flrig-IC9100.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC9100.obj `if test -f 'rigs/icom/IC9100.cxx'; then $(CYGPATH_W) 'rigs/icom/IC9100.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC9100.cxx'; fi` rigs/icom/flrig-IC9700.o: rigs/icom/IC9700.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC9700.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC9700.Tpo -c -o rigs/icom/flrig-IC9700.o `test -f 'rigs/icom/IC9700.cxx' || echo '$(srcdir)/'`rigs/icom/IC9700.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC9700.Tpo rigs/icom/$(DEPDIR)/flrig-IC9700.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC9700.cxx' object='rigs/icom/flrig-IC9700.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC9700.o `test -f 'rigs/icom/IC9700.cxx' || echo '$(srcdir)/'`rigs/icom/IC9700.cxx rigs/icom/flrig-IC9700.obj: rigs/icom/IC9700.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC9700.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC9700.Tpo -c -o rigs/icom/flrig-IC9700.obj `if test -f 'rigs/icom/IC9700.cxx'; then $(CYGPATH_W) 'rigs/icom/IC9700.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC9700.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC9700.Tpo rigs/icom/$(DEPDIR)/flrig-IC9700.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC9700.cxx' object='rigs/icom/flrig-IC9700.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC9700.obj `if test -f 'rigs/icom/IC9700.cxx'; then $(CYGPATH_W) 'rigs/icom/IC9700.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC9700.cxx'; fi` rigs/icom/flrig-IC7700.o: rigs/icom/IC7700.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7700.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7700.Tpo -c -o rigs/icom/flrig-IC7700.o `test -f 'rigs/icom/IC7700.cxx' || echo '$(srcdir)/'`rigs/icom/IC7700.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7700.Tpo rigs/icom/$(DEPDIR)/flrig-IC7700.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7700.cxx' object='rigs/icom/flrig-IC7700.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7700.o `test -f 'rigs/icom/IC7700.cxx' || echo '$(srcdir)/'`rigs/icom/IC7700.cxx rigs/icom/flrig-IC7700.obj: rigs/icom/IC7700.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-IC7700.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-IC7700.Tpo -c -o rigs/icom/flrig-IC7700.obj `if test -f 'rigs/icom/IC7700.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7700.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7700.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-IC7700.Tpo rigs/icom/$(DEPDIR)/flrig-IC7700.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/IC7700.cxx' object='rigs/icom/flrig-IC7700.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-IC7700.obj `if test -f 'rigs/icom/IC7700.cxx'; then $(CYGPATH_W) 'rigs/icom/IC7700.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/IC7700.cxx'; fi` rigs/icom/flrig-ICF8101.o: rigs/icom/ICF8101.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-ICF8101.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-ICF8101.Tpo -c -o rigs/icom/flrig-ICF8101.o `test -f 'rigs/icom/ICF8101.cxx' || echo '$(srcdir)/'`rigs/icom/ICF8101.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-ICF8101.Tpo rigs/icom/$(DEPDIR)/flrig-ICF8101.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/ICF8101.cxx' object='rigs/icom/flrig-ICF8101.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-ICF8101.o `test -f 'rigs/icom/ICF8101.cxx' || echo '$(srcdir)/'`rigs/icom/ICF8101.cxx rigs/icom/flrig-ICF8101.obj: rigs/icom/ICF8101.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-ICF8101.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-ICF8101.Tpo -c -o rigs/icom/flrig-ICF8101.obj `if test -f 'rigs/icom/ICF8101.cxx'; then $(CYGPATH_W) 'rigs/icom/ICF8101.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/ICF8101.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-ICF8101.Tpo rigs/icom/$(DEPDIR)/flrig-ICF8101.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/ICF8101.cxx' object='rigs/icom/flrig-ICF8101.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-ICF8101.obj `if test -f 'rigs/icom/ICF8101.cxx'; then $(CYGPATH_W) 'rigs/icom/ICF8101.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/ICF8101.cxx'; fi` rigs/icom/flrig-ICR71.o: rigs/icom/ICR71.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-ICR71.o -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-ICR71.Tpo -c -o rigs/icom/flrig-ICR71.o `test -f 'rigs/icom/ICR71.cxx' || echo '$(srcdir)/'`rigs/icom/ICR71.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-ICR71.Tpo rigs/icom/$(DEPDIR)/flrig-ICR71.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/ICR71.cxx' object='rigs/icom/flrig-ICR71.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-ICR71.o `test -f 'rigs/icom/ICR71.cxx' || echo '$(srcdir)/'`rigs/icom/ICR71.cxx rigs/icom/flrig-ICR71.obj: rigs/icom/ICR71.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/icom/flrig-ICR71.obj -MD -MP -MF rigs/icom/$(DEPDIR)/flrig-ICR71.Tpo -c -o rigs/icom/flrig-ICR71.obj `if test -f 'rigs/icom/ICR71.cxx'; then $(CYGPATH_W) 'rigs/icom/ICR71.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/ICR71.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/icom/$(DEPDIR)/flrig-ICR71.Tpo rigs/icom/$(DEPDIR)/flrig-ICR71.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/icom/ICR71.cxx' object='rigs/icom/flrig-ICR71.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/icom/flrig-ICR71.obj `if test -f 'rigs/icom/ICR71.cxx'; then $(CYGPATH_W) 'rigs/icom/ICR71.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/icom/ICR71.cxx'; fi` rigs/kenwood/flrig-KENWOOD.o: rigs/kenwood/KENWOOD.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-KENWOOD.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Tpo -c -o rigs/kenwood/flrig-KENWOOD.o `test -f 'rigs/kenwood/KENWOOD.cxx' || echo '$(srcdir)/'`rigs/kenwood/KENWOOD.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Tpo rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/KENWOOD.cxx' object='rigs/kenwood/flrig-KENWOOD.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-KENWOOD.o `test -f 'rigs/kenwood/KENWOOD.cxx' || echo '$(srcdir)/'`rigs/kenwood/KENWOOD.cxx rigs/kenwood/flrig-KENWOOD.obj: rigs/kenwood/KENWOOD.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-KENWOOD.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Tpo -c -o rigs/kenwood/flrig-KENWOOD.obj `if test -f 'rigs/kenwood/KENWOOD.cxx'; then $(CYGPATH_W) 'rigs/kenwood/KENWOOD.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/KENWOOD.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Tpo rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/KENWOOD.cxx' object='rigs/kenwood/flrig-KENWOOD.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-KENWOOD.obj `if test -f 'rigs/kenwood/KENWOOD.cxx'; then $(CYGPATH_W) 'rigs/kenwood/KENWOOD.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/KENWOOD.cxx'; fi` rigs/kenwood/flrig-TS140.o: rigs/kenwood/TS140.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS140.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS140.Tpo -c -o rigs/kenwood/flrig-TS140.o `test -f 'rigs/kenwood/TS140.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS140.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS140.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS140.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS140.cxx' object='rigs/kenwood/flrig-TS140.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS140.o `test -f 'rigs/kenwood/TS140.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS140.cxx rigs/kenwood/flrig-TS140.obj: rigs/kenwood/TS140.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS140.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS140.Tpo -c -o rigs/kenwood/flrig-TS140.obj `if test -f 'rigs/kenwood/TS140.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS140.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS140.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS140.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS140.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS140.cxx' object='rigs/kenwood/flrig-TS140.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS140.obj `if test -f 'rigs/kenwood/TS140.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS140.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS140.cxx'; fi` rigs/kenwood/flrig-TS440.o: rigs/kenwood/TS440.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS440.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS440.Tpo -c -o rigs/kenwood/flrig-TS440.o `test -f 'rigs/kenwood/TS440.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS440.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS440.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS440.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS440.cxx' object='rigs/kenwood/flrig-TS440.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS440.o `test -f 'rigs/kenwood/TS440.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS440.cxx rigs/kenwood/flrig-TS440.obj: rigs/kenwood/TS440.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS440.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS440.Tpo -c -o rigs/kenwood/flrig-TS440.obj `if test -f 'rigs/kenwood/TS440.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS440.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS440.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS440.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS440.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS440.cxx' object='rigs/kenwood/flrig-TS440.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS440.obj `if test -f 'rigs/kenwood/TS440.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS440.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS440.cxx'; fi` rigs/kenwood/flrig-TS450S.o: rigs/kenwood/TS450S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS450S.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS450S.Tpo -c -o rigs/kenwood/flrig-TS450S.o `test -f 'rigs/kenwood/TS450S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS450S.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS450S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS450S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS450S.cxx' object='rigs/kenwood/flrig-TS450S.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS450S.o `test -f 'rigs/kenwood/TS450S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS450S.cxx rigs/kenwood/flrig-TS450S.obj: rigs/kenwood/TS450S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS450S.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS450S.Tpo -c -o rigs/kenwood/flrig-TS450S.obj `if test -f 'rigs/kenwood/TS450S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS450S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS450S.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS450S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS450S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS450S.cxx' object='rigs/kenwood/flrig-TS450S.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS450S.obj `if test -f 'rigs/kenwood/TS450S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS450S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS450S.cxx'; fi` rigs/kenwood/flrig-TS480HX.o: rigs/kenwood/TS480HX.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS480HX.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Tpo -c -o rigs/kenwood/flrig-TS480HX.o `test -f 'rigs/kenwood/TS480HX.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS480HX.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS480HX.cxx' object='rigs/kenwood/flrig-TS480HX.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS480HX.o `test -f 'rigs/kenwood/TS480HX.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS480HX.cxx rigs/kenwood/flrig-TS480HX.obj: rigs/kenwood/TS480HX.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS480HX.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Tpo -c -o rigs/kenwood/flrig-TS480HX.obj `if test -f 'rigs/kenwood/TS480HX.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS480HX.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS480HX.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS480HX.cxx' object='rigs/kenwood/flrig-TS480HX.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS480HX.obj `if test -f 'rigs/kenwood/TS480HX.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS480HX.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS480HX.cxx'; fi` rigs/kenwood/flrig-TS480SAT.o: rigs/kenwood/TS480SAT.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS480SAT.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Tpo -c -o rigs/kenwood/flrig-TS480SAT.o `test -f 'rigs/kenwood/TS480SAT.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS480SAT.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS480SAT.cxx' object='rigs/kenwood/flrig-TS480SAT.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS480SAT.o `test -f 'rigs/kenwood/TS480SAT.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS480SAT.cxx rigs/kenwood/flrig-TS480SAT.obj: rigs/kenwood/TS480SAT.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS480SAT.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Tpo -c -o rigs/kenwood/flrig-TS480SAT.obj `if test -f 'rigs/kenwood/TS480SAT.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS480SAT.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS480SAT.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS480SAT.cxx' object='rigs/kenwood/flrig-TS480SAT.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS480SAT.obj `if test -f 'rigs/kenwood/TS480SAT.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS480SAT.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS480SAT.cxx'; fi` rigs/kenwood/flrig-TS570.o: rigs/kenwood/TS570.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS570.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS570.Tpo -c -o rigs/kenwood/flrig-TS570.o `test -f 'rigs/kenwood/TS570.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS570.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS570.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS570.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS570.cxx' object='rigs/kenwood/flrig-TS570.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS570.o `test -f 'rigs/kenwood/TS570.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS570.cxx rigs/kenwood/flrig-TS570.obj: rigs/kenwood/TS570.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS570.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS570.Tpo -c -o rigs/kenwood/flrig-TS570.obj `if test -f 'rigs/kenwood/TS570.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS570.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS570.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS570.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS570.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS570.cxx' object='rigs/kenwood/flrig-TS570.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS570.obj `if test -f 'rigs/kenwood/TS570.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS570.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS570.cxx'; fi` rigs/kenwood/flrig-TS590S.o: rigs/kenwood/TS590S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS590S.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS590S.Tpo -c -o rigs/kenwood/flrig-TS590S.o `test -f 'rigs/kenwood/TS590S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS590S.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS590S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS590S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS590S.cxx' object='rigs/kenwood/flrig-TS590S.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS590S.o `test -f 'rigs/kenwood/TS590S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS590S.cxx rigs/kenwood/flrig-TS590S.obj: rigs/kenwood/TS590S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS590S.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS590S.Tpo -c -o rigs/kenwood/flrig-TS590S.obj `if test -f 'rigs/kenwood/TS590S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS590S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS590S.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS590S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS590S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS590S.cxx' object='rigs/kenwood/flrig-TS590S.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS590S.obj `if test -f 'rigs/kenwood/TS590S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS590S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS590S.cxx'; fi` rigs/kenwood/flrig-TS590SG.o: rigs/kenwood/TS590SG.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS590SG.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Tpo -c -o rigs/kenwood/flrig-TS590SG.o `test -f 'rigs/kenwood/TS590SG.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS590SG.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS590SG.cxx' object='rigs/kenwood/flrig-TS590SG.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS590SG.o `test -f 'rigs/kenwood/TS590SG.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS590SG.cxx rigs/kenwood/flrig-TS590SG.obj: rigs/kenwood/TS590SG.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS590SG.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Tpo -c -o rigs/kenwood/flrig-TS590SG.obj `if test -f 'rigs/kenwood/TS590SG.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS590SG.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS590SG.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS590SG.cxx' object='rigs/kenwood/flrig-TS590SG.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS590SG.obj `if test -f 'rigs/kenwood/TS590SG.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS590SG.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS590SG.cxx'; fi` rigs/kenwood/flrig-TS790.o: rigs/kenwood/TS790.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS790.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS790.Tpo -c -o rigs/kenwood/flrig-TS790.o `test -f 'rigs/kenwood/TS790.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS790.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS790.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS790.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS790.cxx' object='rigs/kenwood/flrig-TS790.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS790.o `test -f 'rigs/kenwood/TS790.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS790.cxx rigs/kenwood/flrig-TS790.obj: rigs/kenwood/TS790.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS790.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS790.Tpo -c -o rigs/kenwood/flrig-TS790.obj `if test -f 'rigs/kenwood/TS790.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS790.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS790.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS790.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS790.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS790.cxx' object='rigs/kenwood/flrig-TS790.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS790.obj `if test -f 'rigs/kenwood/TS790.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS790.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS790.cxx'; fi` rigs/kenwood/flrig-TS850.o: rigs/kenwood/TS850.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS850.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS850.Tpo -c -o rigs/kenwood/flrig-TS850.o `test -f 'rigs/kenwood/TS850.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS850.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS850.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS850.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS850.cxx' object='rigs/kenwood/flrig-TS850.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS850.o `test -f 'rigs/kenwood/TS850.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS850.cxx rigs/kenwood/flrig-TS850.obj: rigs/kenwood/TS850.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS850.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS850.Tpo -c -o rigs/kenwood/flrig-TS850.obj `if test -f 'rigs/kenwood/TS850.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS850.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS850.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS850.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS850.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS850.cxx' object='rigs/kenwood/flrig-TS850.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS850.obj `if test -f 'rigs/kenwood/TS850.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS850.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS850.cxx'; fi` rigs/kenwood/flrig-TS870S.o: rigs/kenwood/TS870S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS870S.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS870S.Tpo -c -o rigs/kenwood/flrig-TS870S.o `test -f 'rigs/kenwood/TS870S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS870S.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS870S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS870S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS870S.cxx' object='rigs/kenwood/flrig-TS870S.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS870S.o `test -f 'rigs/kenwood/TS870S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS870S.cxx rigs/kenwood/flrig-TS870S.obj: rigs/kenwood/TS870S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS870S.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS870S.Tpo -c -o rigs/kenwood/flrig-TS870S.obj `if test -f 'rigs/kenwood/TS870S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS870S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS870S.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS870S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS870S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS870S.cxx' object='rigs/kenwood/flrig-TS870S.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS870S.obj `if test -f 'rigs/kenwood/TS870S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS870S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS870S.cxx'; fi` rigs/kenwood/flrig-TS890S.o: rigs/kenwood/TS890S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS890S.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS890S.Tpo -c -o rigs/kenwood/flrig-TS890S.o `test -f 'rigs/kenwood/TS890S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS890S.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS890S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS890S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS890S.cxx' object='rigs/kenwood/flrig-TS890S.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS890S.o `test -f 'rigs/kenwood/TS890S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS890S.cxx rigs/kenwood/flrig-TS890S.obj: rigs/kenwood/TS890S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS890S.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS890S.Tpo -c -o rigs/kenwood/flrig-TS890S.obj `if test -f 'rigs/kenwood/TS890S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS890S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS890S.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS890S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS890S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS890S.cxx' object='rigs/kenwood/flrig-TS890S.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS890S.obj `if test -f 'rigs/kenwood/TS890S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS890S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS890S.cxx'; fi` rigs/kenwood/flrig-TS940S.o: rigs/kenwood/TS940S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS940S.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS940S.Tpo -c -o rigs/kenwood/flrig-TS940S.o `test -f 'rigs/kenwood/TS940S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS940S.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS940S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS940S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS940S.cxx' object='rigs/kenwood/flrig-TS940S.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS940S.o `test -f 'rigs/kenwood/TS940S.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS940S.cxx rigs/kenwood/flrig-TS940S.obj: rigs/kenwood/TS940S.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS940S.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS940S.Tpo -c -o rigs/kenwood/flrig-TS940S.obj `if test -f 'rigs/kenwood/TS940S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS940S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS940S.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS940S.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS940S.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS940S.cxx' object='rigs/kenwood/flrig-TS940S.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS940S.obj `if test -f 'rigs/kenwood/TS940S.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS940S.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS940S.cxx'; fi` rigs/kenwood/flrig-TS950.o: rigs/kenwood/TS950.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS950.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS950.Tpo -c -o rigs/kenwood/flrig-TS950.o `test -f 'rigs/kenwood/TS950.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS950.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS950.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS950.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS950.cxx' object='rigs/kenwood/flrig-TS950.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS950.o `test -f 'rigs/kenwood/TS950.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS950.cxx rigs/kenwood/flrig-TS950.obj: rigs/kenwood/TS950.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS950.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS950.Tpo -c -o rigs/kenwood/flrig-TS950.obj `if test -f 'rigs/kenwood/TS950.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS950.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS950.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS950.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS950.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS950.cxx' object='rigs/kenwood/flrig-TS950.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS950.obj `if test -f 'rigs/kenwood/TS950.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS950.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS950.cxx'; fi` rigs/kenwood/flrig-TS990.o: rigs/kenwood/TS990.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS990.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS990.Tpo -c -o rigs/kenwood/flrig-TS990.o `test -f 'rigs/kenwood/TS990.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS990.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS990.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS990.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS990.cxx' object='rigs/kenwood/flrig-TS990.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS990.o `test -f 'rigs/kenwood/TS990.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS990.cxx rigs/kenwood/flrig-TS990.obj: rigs/kenwood/TS990.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS990.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS990.Tpo -c -o rigs/kenwood/flrig-TS990.obj `if test -f 'rigs/kenwood/TS990.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS990.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS990.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS990.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS990.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS990.cxx' object='rigs/kenwood/flrig-TS990.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS990.obj `if test -f 'rigs/kenwood/TS990.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS990.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS990.cxx'; fi` rigs/kenwood/flrig-TS2000.o: rigs/kenwood/TS2000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS2000.o -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS2000.Tpo -c -o rigs/kenwood/flrig-TS2000.o `test -f 'rigs/kenwood/TS2000.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS2000.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS2000.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS2000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS2000.cxx' object='rigs/kenwood/flrig-TS2000.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS2000.o `test -f 'rigs/kenwood/TS2000.cxx' || echo '$(srcdir)/'`rigs/kenwood/TS2000.cxx rigs/kenwood/flrig-TS2000.obj: rigs/kenwood/TS2000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/kenwood/flrig-TS2000.obj -MD -MP -MF rigs/kenwood/$(DEPDIR)/flrig-TS2000.Tpo -c -o rigs/kenwood/flrig-TS2000.obj `if test -f 'rigs/kenwood/TS2000.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS2000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS2000.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/kenwood/$(DEPDIR)/flrig-TS2000.Tpo rigs/kenwood/$(DEPDIR)/flrig-TS2000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/kenwood/TS2000.cxx' object='rigs/kenwood/flrig-TS2000.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/kenwood/flrig-TS2000.obj `if test -f 'rigs/kenwood/TS2000.cxx'; then $(CYGPATH_W) 'rigs/kenwood/TS2000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/kenwood/TS2000.cxx'; fi` rigs/lab599/flrig-TX500.o: rigs/lab599/TX500.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/lab599/flrig-TX500.o -MD -MP -MF rigs/lab599/$(DEPDIR)/flrig-TX500.Tpo -c -o rigs/lab599/flrig-TX500.o `test -f 'rigs/lab599/TX500.cxx' || echo '$(srcdir)/'`rigs/lab599/TX500.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/lab599/$(DEPDIR)/flrig-TX500.Tpo rigs/lab599/$(DEPDIR)/flrig-TX500.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/lab599/TX500.cxx' object='rigs/lab599/flrig-TX500.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/lab599/flrig-TX500.o `test -f 'rigs/lab599/TX500.cxx' || echo '$(srcdir)/'`rigs/lab599/TX500.cxx rigs/lab599/flrig-TX500.obj: rigs/lab599/TX500.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/lab599/flrig-TX500.obj -MD -MP -MF rigs/lab599/$(DEPDIR)/flrig-TX500.Tpo -c -o rigs/lab599/flrig-TX500.obj `if test -f 'rigs/lab599/TX500.cxx'; then $(CYGPATH_W) 'rigs/lab599/TX500.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/lab599/TX500.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/lab599/$(DEPDIR)/flrig-TX500.Tpo rigs/lab599/$(DEPDIR)/flrig-TX500.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/lab599/TX500.cxx' object='rigs/lab599/flrig-TX500.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/lab599/flrig-TX500.obj `if test -f 'rigs/lab599/TX500.cxx'; then $(CYGPATH_W) 'rigs/lab599/TX500.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/lab599/TX500.cxx'; fi` rigs/other/flrig-AOR5K.o: rigs/other/AOR5K.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-AOR5K.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-AOR5K.Tpo -c -o rigs/other/flrig-AOR5K.o `test -f 'rigs/other/AOR5K.cxx' || echo '$(srcdir)/'`rigs/other/AOR5K.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-AOR5K.Tpo rigs/other/$(DEPDIR)/flrig-AOR5K.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/AOR5K.cxx' object='rigs/other/flrig-AOR5K.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-AOR5K.o `test -f 'rigs/other/AOR5K.cxx' || echo '$(srcdir)/'`rigs/other/AOR5K.cxx rigs/other/flrig-AOR5K.obj: rigs/other/AOR5K.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-AOR5K.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-AOR5K.Tpo -c -o rigs/other/flrig-AOR5K.obj `if test -f 'rigs/other/AOR5K.cxx'; then $(CYGPATH_W) 'rigs/other/AOR5K.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/AOR5K.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-AOR5K.Tpo rigs/other/$(DEPDIR)/flrig-AOR5K.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/AOR5K.cxx' object='rigs/other/flrig-AOR5K.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-AOR5K.obj `if test -f 'rigs/other/AOR5K.cxx'; then $(CYGPATH_W) 'rigs/other/AOR5K.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/AOR5K.cxx'; fi` rigs/other/flrig-FLEX1500.o: rigs/other/FLEX1500.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-FLEX1500.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-FLEX1500.Tpo -c -o rigs/other/flrig-FLEX1500.o `test -f 'rigs/other/FLEX1500.cxx' || echo '$(srcdir)/'`rigs/other/FLEX1500.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-FLEX1500.Tpo rigs/other/$(DEPDIR)/flrig-FLEX1500.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/FLEX1500.cxx' object='rigs/other/flrig-FLEX1500.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-FLEX1500.o `test -f 'rigs/other/FLEX1500.cxx' || echo '$(srcdir)/'`rigs/other/FLEX1500.cxx rigs/other/flrig-FLEX1500.obj: rigs/other/FLEX1500.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-FLEX1500.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-FLEX1500.Tpo -c -o rigs/other/flrig-FLEX1500.obj `if test -f 'rigs/other/FLEX1500.cxx'; then $(CYGPATH_W) 'rigs/other/FLEX1500.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/FLEX1500.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-FLEX1500.Tpo rigs/other/$(DEPDIR)/flrig-FLEX1500.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/FLEX1500.cxx' object='rigs/other/flrig-FLEX1500.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-FLEX1500.obj `if test -f 'rigs/other/FLEX1500.cxx'; then $(CYGPATH_W) 'rigs/other/FLEX1500.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/FLEX1500.cxx'; fi` rigs/other/flrig-PCR1000.o: rigs/other/PCR1000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-PCR1000.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-PCR1000.Tpo -c -o rigs/other/flrig-PCR1000.o `test -f 'rigs/other/PCR1000.cxx' || echo '$(srcdir)/'`rigs/other/PCR1000.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-PCR1000.Tpo rigs/other/$(DEPDIR)/flrig-PCR1000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/PCR1000.cxx' object='rigs/other/flrig-PCR1000.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-PCR1000.o `test -f 'rigs/other/PCR1000.cxx' || echo '$(srcdir)/'`rigs/other/PCR1000.cxx rigs/other/flrig-PCR1000.obj: rigs/other/PCR1000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-PCR1000.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-PCR1000.Tpo -c -o rigs/other/flrig-PCR1000.obj `if test -f 'rigs/other/PCR1000.cxx'; then $(CYGPATH_W) 'rigs/other/PCR1000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/PCR1000.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-PCR1000.Tpo rigs/other/$(DEPDIR)/flrig-PCR1000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/PCR1000.cxx' object='rigs/other/flrig-PCR1000.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-PCR1000.obj `if test -f 'rigs/other/PCR1000.cxx'; then $(CYGPATH_W) 'rigs/other/PCR1000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/PCR1000.cxx'; fi` rigs/other/flrig-PowerSDR.o: rigs/other/PowerSDR.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-PowerSDR.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-PowerSDR.Tpo -c -o rigs/other/flrig-PowerSDR.o `test -f 'rigs/other/PowerSDR.cxx' || echo '$(srcdir)/'`rigs/other/PowerSDR.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-PowerSDR.Tpo rigs/other/$(DEPDIR)/flrig-PowerSDR.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/PowerSDR.cxx' object='rigs/other/flrig-PowerSDR.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-PowerSDR.o `test -f 'rigs/other/PowerSDR.cxx' || echo '$(srcdir)/'`rigs/other/PowerSDR.cxx rigs/other/flrig-PowerSDR.obj: rigs/other/PowerSDR.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-PowerSDR.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-PowerSDR.Tpo -c -o rigs/other/flrig-PowerSDR.obj `if test -f 'rigs/other/PowerSDR.cxx'; then $(CYGPATH_W) 'rigs/other/PowerSDR.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/PowerSDR.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-PowerSDR.Tpo rigs/other/$(DEPDIR)/flrig-PowerSDR.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/PowerSDR.cxx' object='rigs/other/flrig-PowerSDR.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-PowerSDR.obj `if test -f 'rigs/other/PowerSDR.cxx'; then $(CYGPATH_W) 'rigs/other/PowerSDR.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/PowerSDR.cxx'; fi` rigs/other/flrig-RAY152.o: rigs/other/RAY152.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-RAY152.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-RAY152.Tpo -c -o rigs/other/flrig-RAY152.o `test -f 'rigs/other/RAY152.cxx' || echo '$(srcdir)/'`rigs/other/RAY152.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-RAY152.Tpo rigs/other/$(DEPDIR)/flrig-RAY152.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/RAY152.cxx' object='rigs/other/flrig-RAY152.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-RAY152.o `test -f 'rigs/other/RAY152.cxx' || echo '$(srcdir)/'`rigs/other/RAY152.cxx rigs/other/flrig-RAY152.obj: rigs/other/RAY152.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-RAY152.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-RAY152.Tpo -c -o rigs/other/flrig-RAY152.obj `if test -f 'rigs/other/RAY152.cxx'; then $(CYGPATH_W) 'rigs/other/RAY152.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/RAY152.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-RAY152.Tpo rigs/other/$(DEPDIR)/flrig-RAY152.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/RAY152.cxx' object='rigs/other/flrig-RAY152.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-RAY152.obj `if test -f 'rigs/other/RAY152.cxx'; then $(CYGPATH_W) 'rigs/other/RAY152.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/RAY152.cxx'; fi` rigs/other/flrig-SmartSDR.o: rigs/other/SmartSDR.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-SmartSDR.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-SmartSDR.Tpo -c -o rigs/other/flrig-SmartSDR.o `test -f 'rigs/other/SmartSDR.cxx' || echo '$(srcdir)/'`rigs/other/SmartSDR.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-SmartSDR.Tpo rigs/other/$(DEPDIR)/flrig-SmartSDR.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/SmartSDR.cxx' object='rigs/other/flrig-SmartSDR.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-SmartSDR.o `test -f 'rigs/other/SmartSDR.cxx' || echo '$(srcdir)/'`rigs/other/SmartSDR.cxx rigs/other/flrig-SmartSDR.obj: rigs/other/SmartSDR.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-SmartSDR.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-SmartSDR.Tpo -c -o rigs/other/flrig-SmartSDR.obj `if test -f 'rigs/other/SmartSDR.cxx'; then $(CYGPATH_W) 'rigs/other/SmartSDR.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/SmartSDR.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-SmartSDR.Tpo rigs/other/$(DEPDIR)/flrig-SmartSDR.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/SmartSDR.cxx' object='rigs/other/flrig-SmartSDR.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-SmartSDR.obj `if test -f 'rigs/other/SmartSDR.cxx'; then $(CYGPATH_W) 'rigs/other/SmartSDR.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/SmartSDR.cxx'; fi` rigs/other/flrig-sunsdr2.o: rigs/other/sunsdr2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-sunsdr2.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-sunsdr2.Tpo -c -o rigs/other/flrig-sunsdr2.o `test -f 'rigs/other/sunsdr2.cxx' || echo '$(srcdir)/'`rigs/other/sunsdr2.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-sunsdr2.Tpo rigs/other/$(DEPDIR)/flrig-sunsdr2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/sunsdr2.cxx' object='rigs/other/flrig-sunsdr2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-sunsdr2.o `test -f 'rigs/other/sunsdr2.cxx' || echo '$(srcdir)/'`rigs/other/sunsdr2.cxx rigs/other/flrig-sunsdr2.obj: rigs/other/sunsdr2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-sunsdr2.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-sunsdr2.Tpo -c -o rigs/other/flrig-sunsdr2.obj `if test -f 'rigs/other/sunsdr2.cxx'; then $(CYGPATH_W) 'rigs/other/sunsdr2.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/sunsdr2.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-sunsdr2.Tpo rigs/other/$(DEPDIR)/flrig-sunsdr2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/sunsdr2.cxx' object='rigs/other/flrig-sunsdr2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-sunsdr2.obj `if test -f 'rigs/other/sunsdr2.cxx'; then $(CYGPATH_W) 'rigs/other/sunsdr2.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/sunsdr2.cxx'; fi` rigs/other/flrig-tcisdr.o: rigs/other/tcisdr.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-tcisdr.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-tcisdr.Tpo -c -o rigs/other/flrig-tcisdr.o `test -f 'rigs/other/tcisdr.cxx' || echo '$(srcdir)/'`rigs/other/tcisdr.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-tcisdr.Tpo rigs/other/$(DEPDIR)/flrig-tcisdr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/tcisdr.cxx' object='rigs/other/flrig-tcisdr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-tcisdr.o `test -f 'rigs/other/tcisdr.cxx' || echo '$(srcdir)/'`rigs/other/tcisdr.cxx rigs/other/flrig-tcisdr.obj: rigs/other/tcisdr.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-tcisdr.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-tcisdr.Tpo -c -o rigs/other/flrig-tcisdr.obj `if test -f 'rigs/other/tcisdr.cxx'; then $(CYGPATH_W) 'rigs/other/tcisdr.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/tcisdr.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-tcisdr.Tpo rigs/other/$(DEPDIR)/flrig-tcisdr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/tcisdr.cxx' object='rigs/other/flrig-tcisdr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-tcisdr.obj `if test -f 'rigs/other/tcisdr.cxx'; then $(CYGPATH_W) 'rigs/other/tcisdr.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/tcisdr.cxx'; fi` rigs/other/flrig-trusdx.o: rigs/other/trusdx.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-trusdx.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-trusdx.Tpo -c -o rigs/other/flrig-trusdx.o `test -f 'rigs/other/trusdx.cxx' || echo '$(srcdir)/'`rigs/other/trusdx.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-trusdx.Tpo rigs/other/$(DEPDIR)/flrig-trusdx.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/trusdx.cxx' object='rigs/other/flrig-trusdx.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-trusdx.o `test -f 'rigs/other/trusdx.cxx' || echo '$(srcdir)/'`rigs/other/trusdx.cxx rigs/other/flrig-trusdx.obj: rigs/other/trusdx.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-trusdx.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-trusdx.Tpo -c -o rigs/other/flrig-trusdx.obj `if test -f 'rigs/other/trusdx.cxx'; then $(CYGPATH_W) 'rigs/other/trusdx.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/trusdx.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-trusdx.Tpo rigs/other/$(DEPDIR)/flrig-trusdx.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/trusdx.cxx' object='rigs/other/flrig-trusdx.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-trusdx.obj `if test -f 'rigs/other/trusdx.cxx'; then $(CYGPATH_W) 'rigs/other/trusdx.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/trusdx.cxx'; fi` rigs/other/flrig-TMD710.o: rigs/other/TMD710.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-TMD710.o -MD -MP -MF rigs/other/$(DEPDIR)/flrig-TMD710.Tpo -c -o rigs/other/flrig-TMD710.o `test -f 'rigs/other/TMD710.cxx' || echo '$(srcdir)/'`rigs/other/TMD710.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-TMD710.Tpo rigs/other/$(DEPDIR)/flrig-TMD710.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/TMD710.cxx' object='rigs/other/flrig-TMD710.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-TMD710.o `test -f 'rigs/other/TMD710.cxx' || echo '$(srcdir)/'`rigs/other/TMD710.cxx rigs/other/flrig-TMD710.obj: rigs/other/TMD710.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/other/flrig-TMD710.obj -MD -MP -MF rigs/other/$(DEPDIR)/flrig-TMD710.Tpo -c -o rigs/other/flrig-TMD710.obj `if test -f 'rigs/other/TMD710.cxx'; then $(CYGPATH_W) 'rigs/other/TMD710.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/TMD710.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/other/$(DEPDIR)/flrig-TMD710.Tpo rigs/other/$(DEPDIR)/flrig-TMD710.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/other/TMD710.cxx' object='rigs/other/flrig-TMD710.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/other/flrig-TMD710.obj `if test -f 'rigs/other/TMD710.cxx'; then $(CYGPATH_W) 'rigs/other/TMD710.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/other/TMD710.cxx'; fi` rigs/qrp_labs/flrig-QCXplus.o: rigs/qrp_labs/QCXplus.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/qrp_labs/flrig-QCXplus.o -MD -MP -MF rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Tpo -c -o rigs/qrp_labs/flrig-QCXplus.o `test -f 'rigs/qrp_labs/QCXplus.cxx' || echo '$(srcdir)/'`rigs/qrp_labs/QCXplus.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Tpo rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/qrp_labs/QCXplus.cxx' object='rigs/qrp_labs/flrig-QCXplus.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/qrp_labs/flrig-QCXplus.o `test -f 'rigs/qrp_labs/QCXplus.cxx' || echo '$(srcdir)/'`rigs/qrp_labs/QCXplus.cxx rigs/qrp_labs/flrig-QCXplus.obj: rigs/qrp_labs/QCXplus.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/qrp_labs/flrig-QCXplus.obj -MD -MP -MF rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Tpo -c -o rigs/qrp_labs/flrig-QCXplus.obj `if test -f 'rigs/qrp_labs/QCXplus.cxx'; then $(CYGPATH_W) 'rigs/qrp_labs/QCXplus.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/qrp_labs/QCXplus.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Tpo rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/qrp_labs/QCXplus.cxx' object='rigs/qrp_labs/flrig-QCXplus.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/qrp_labs/flrig-QCXplus.obj `if test -f 'rigs/qrp_labs/QCXplus.cxx'; then $(CYGPATH_W) 'rigs/qrp_labs/QCXplus.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/qrp_labs/QCXplus.cxx'; fi` rigs/qrp_labs/flrig-QDX.o: rigs/qrp_labs/QDX.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/qrp_labs/flrig-QDX.o -MD -MP -MF rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Tpo -c -o rigs/qrp_labs/flrig-QDX.o `test -f 'rigs/qrp_labs/QDX.cxx' || echo '$(srcdir)/'`rigs/qrp_labs/QDX.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Tpo rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/qrp_labs/QDX.cxx' object='rigs/qrp_labs/flrig-QDX.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/qrp_labs/flrig-QDX.o `test -f 'rigs/qrp_labs/QDX.cxx' || echo '$(srcdir)/'`rigs/qrp_labs/QDX.cxx rigs/qrp_labs/flrig-QDX.obj: rigs/qrp_labs/QDX.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/qrp_labs/flrig-QDX.obj -MD -MP -MF rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Tpo -c -o rigs/qrp_labs/flrig-QDX.obj `if test -f 'rigs/qrp_labs/QDX.cxx'; then $(CYGPATH_W) 'rigs/qrp_labs/QDX.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/qrp_labs/QDX.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Tpo rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/qrp_labs/QDX.cxx' object='rigs/qrp_labs/flrig-QDX.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/qrp_labs/flrig-QDX.obj `if test -f 'rigs/qrp_labs/QDX.cxx'; then $(CYGPATH_W) 'rigs/qrp_labs/QDX.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/qrp_labs/QDX.cxx'; fi` rigs/qrp_labs/flrig-QMX.o: rigs/qrp_labs/QMX.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/qrp_labs/flrig-QMX.o -MD -MP -MF rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Tpo -c -o rigs/qrp_labs/flrig-QMX.o `test -f 'rigs/qrp_labs/QMX.cxx' || echo '$(srcdir)/'`rigs/qrp_labs/QMX.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Tpo rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/qrp_labs/QMX.cxx' object='rigs/qrp_labs/flrig-QMX.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/qrp_labs/flrig-QMX.o `test -f 'rigs/qrp_labs/QMX.cxx' || echo '$(srcdir)/'`rigs/qrp_labs/QMX.cxx rigs/qrp_labs/flrig-QMX.obj: rigs/qrp_labs/QMX.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/qrp_labs/flrig-QMX.obj -MD -MP -MF rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Tpo -c -o rigs/qrp_labs/flrig-QMX.obj `if test -f 'rigs/qrp_labs/QMX.cxx'; then $(CYGPATH_W) 'rigs/qrp_labs/QMX.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/qrp_labs/QMX.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Tpo rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/qrp_labs/QMX.cxx' object='rigs/qrp_labs/flrig-QMX.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/qrp_labs/flrig-QMX.obj `if test -f 'rigs/qrp_labs/QMX.cxx'; then $(CYGPATH_W) 'rigs/qrp_labs/QMX.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/qrp_labs/QMX.cxx'; fi` rigs/tentec/flrig-TT516.o: rigs/tentec/TT516.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT516.o -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT516.Tpo -c -o rigs/tentec/flrig-TT516.o `test -f 'rigs/tentec/TT516.cxx' || echo '$(srcdir)/'`rigs/tentec/TT516.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT516.Tpo rigs/tentec/$(DEPDIR)/flrig-TT516.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT516.cxx' object='rigs/tentec/flrig-TT516.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT516.o `test -f 'rigs/tentec/TT516.cxx' || echo '$(srcdir)/'`rigs/tentec/TT516.cxx rigs/tentec/flrig-TT516.obj: rigs/tentec/TT516.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT516.obj -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT516.Tpo -c -o rigs/tentec/flrig-TT516.obj `if test -f 'rigs/tentec/TT516.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT516.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT516.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT516.Tpo rigs/tentec/$(DEPDIR)/flrig-TT516.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT516.cxx' object='rigs/tentec/flrig-TT516.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT516.obj `if test -f 'rigs/tentec/TT516.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT516.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT516.cxx'; fi` rigs/tentec/flrig-DELTA-II.o: rigs/tentec/DELTA-II.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-DELTA-II.o -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Tpo -c -o rigs/tentec/flrig-DELTA-II.o `test -f 'rigs/tentec/DELTA-II.cxx' || echo '$(srcdir)/'`rigs/tentec/DELTA-II.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Tpo rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/DELTA-II.cxx' object='rigs/tentec/flrig-DELTA-II.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-DELTA-II.o `test -f 'rigs/tentec/DELTA-II.cxx' || echo '$(srcdir)/'`rigs/tentec/DELTA-II.cxx rigs/tentec/flrig-DELTA-II.obj: rigs/tentec/DELTA-II.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-DELTA-II.obj -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Tpo -c -o rigs/tentec/flrig-DELTA-II.obj `if test -f 'rigs/tentec/DELTA-II.cxx'; then $(CYGPATH_W) 'rigs/tentec/DELTA-II.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/DELTA-II.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Tpo rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/DELTA-II.cxx' object='rigs/tentec/flrig-DELTA-II.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-DELTA-II.obj `if test -f 'rigs/tentec/DELTA-II.cxx'; then $(CYGPATH_W) 'rigs/tentec/DELTA-II.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/DELTA-II.cxx'; fi` rigs/tentec/flrig-TT538.o: rigs/tentec/TT538.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT538.o -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT538.Tpo -c -o rigs/tentec/flrig-TT538.o `test -f 'rigs/tentec/TT538.cxx' || echo '$(srcdir)/'`rigs/tentec/TT538.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT538.Tpo rigs/tentec/$(DEPDIR)/flrig-TT538.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT538.cxx' object='rigs/tentec/flrig-TT538.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT538.o `test -f 'rigs/tentec/TT538.cxx' || echo '$(srcdir)/'`rigs/tentec/TT538.cxx rigs/tentec/flrig-TT538.obj: rigs/tentec/TT538.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT538.obj -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT538.Tpo -c -o rigs/tentec/flrig-TT538.obj `if test -f 'rigs/tentec/TT538.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT538.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT538.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT538.Tpo rigs/tentec/$(DEPDIR)/flrig-TT538.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT538.cxx' object='rigs/tentec/flrig-TT538.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT538.obj `if test -f 'rigs/tentec/TT538.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT538.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT538.cxx'; fi` rigs/tentec/flrig-TT550.o: rigs/tentec/TT550.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT550.o -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT550.Tpo -c -o rigs/tentec/flrig-TT550.o `test -f 'rigs/tentec/TT550.cxx' || echo '$(srcdir)/'`rigs/tentec/TT550.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT550.Tpo rigs/tentec/$(DEPDIR)/flrig-TT550.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT550.cxx' object='rigs/tentec/flrig-TT550.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT550.o `test -f 'rigs/tentec/TT550.cxx' || echo '$(srcdir)/'`rigs/tentec/TT550.cxx rigs/tentec/flrig-TT550.obj: rigs/tentec/TT550.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT550.obj -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT550.Tpo -c -o rigs/tentec/flrig-TT550.obj `if test -f 'rigs/tentec/TT550.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT550.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT550.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT550.Tpo rigs/tentec/$(DEPDIR)/flrig-TT550.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT550.cxx' object='rigs/tentec/flrig-TT550.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT550.obj `if test -f 'rigs/tentec/TT550.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT550.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT550.cxx'; fi` rigs/tentec/flrig-TT563.o: rigs/tentec/TT563.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT563.o -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT563.Tpo -c -o rigs/tentec/flrig-TT563.o `test -f 'rigs/tentec/TT563.cxx' || echo '$(srcdir)/'`rigs/tentec/TT563.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT563.Tpo rigs/tentec/$(DEPDIR)/flrig-TT563.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT563.cxx' object='rigs/tentec/flrig-TT563.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT563.o `test -f 'rigs/tentec/TT563.cxx' || echo '$(srcdir)/'`rigs/tentec/TT563.cxx rigs/tentec/flrig-TT563.obj: rigs/tentec/TT563.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT563.obj -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT563.Tpo -c -o rigs/tentec/flrig-TT563.obj `if test -f 'rigs/tentec/TT563.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT563.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT563.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT563.Tpo rigs/tentec/$(DEPDIR)/flrig-TT563.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT563.cxx' object='rigs/tentec/flrig-TT563.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT563.obj `if test -f 'rigs/tentec/TT563.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT563.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT563.cxx'; fi` rigs/tentec/flrig-TT566.o: rigs/tentec/TT566.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT566.o -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT566.Tpo -c -o rigs/tentec/flrig-TT566.o `test -f 'rigs/tentec/TT566.cxx' || echo '$(srcdir)/'`rigs/tentec/TT566.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT566.Tpo rigs/tentec/$(DEPDIR)/flrig-TT566.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT566.cxx' object='rigs/tentec/flrig-TT566.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT566.o `test -f 'rigs/tentec/TT566.cxx' || echo '$(srcdir)/'`rigs/tentec/TT566.cxx rigs/tentec/flrig-TT566.obj: rigs/tentec/TT566.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT566.obj -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT566.Tpo -c -o rigs/tentec/flrig-TT566.obj `if test -f 'rigs/tentec/TT566.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT566.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT566.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT566.Tpo rigs/tentec/$(DEPDIR)/flrig-TT566.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT566.cxx' object='rigs/tentec/flrig-TT566.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT566.obj `if test -f 'rigs/tentec/TT566.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT566.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT566.cxx'; fi` rigs/tentec/flrig-TT588.o: rigs/tentec/TT588.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT588.o -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT588.Tpo -c -o rigs/tentec/flrig-TT588.o `test -f 'rigs/tentec/TT588.cxx' || echo '$(srcdir)/'`rigs/tentec/TT588.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT588.Tpo rigs/tentec/$(DEPDIR)/flrig-TT588.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT588.cxx' object='rigs/tentec/flrig-TT588.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT588.o `test -f 'rigs/tentec/TT588.cxx' || echo '$(srcdir)/'`rigs/tentec/TT588.cxx rigs/tentec/flrig-TT588.obj: rigs/tentec/TT588.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT588.obj -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT588.Tpo -c -o rigs/tentec/flrig-TT588.obj `if test -f 'rigs/tentec/TT588.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT588.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT588.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT588.Tpo rigs/tentec/$(DEPDIR)/flrig-TT588.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT588.cxx' object='rigs/tentec/flrig-TT588.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT588.obj `if test -f 'rigs/tentec/TT588.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT588.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT588.cxx'; fi` rigs/tentec/flrig-TT599.o: rigs/tentec/TT599.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT599.o -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT599.Tpo -c -o rigs/tentec/flrig-TT599.o `test -f 'rigs/tentec/TT599.cxx' || echo '$(srcdir)/'`rigs/tentec/TT599.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT599.Tpo rigs/tentec/$(DEPDIR)/flrig-TT599.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT599.cxx' object='rigs/tentec/flrig-TT599.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT599.o `test -f 'rigs/tentec/TT599.cxx' || echo '$(srcdir)/'`rigs/tentec/TT599.cxx rigs/tentec/flrig-TT599.obj: rigs/tentec/TT599.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/tentec/flrig-TT599.obj -MD -MP -MF rigs/tentec/$(DEPDIR)/flrig-TT599.Tpo -c -o rigs/tentec/flrig-TT599.obj `if test -f 'rigs/tentec/TT599.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT599.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT599.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/tentec/$(DEPDIR)/flrig-TT599.Tpo rigs/tentec/$(DEPDIR)/flrig-TT599.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/tentec/TT599.cxx' object='rigs/tentec/flrig-TT599.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/tentec/flrig-TT599.obj `if test -f 'rigs/tentec/TT599.cxx'; then $(CYGPATH_W) 'rigs/tentec/TT599.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/tentec/TT599.cxx'; fi` rigs/xiegu/flrig-Xiegu-5105.o: rigs/xiegu/Xiegu-5105.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/xiegu/flrig-Xiegu-5105.o -MD -MP -MF rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Tpo -c -o rigs/xiegu/flrig-Xiegu-5105.o `test -f 'rigs/xiegu/Xiegu-5105.cxx' || echo '$(srcdir)/'`rigs/xiegu/Xiegu-5105.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Tpo rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/xiegu/Xiegu-5105.cxx' object='rigs/xiegu/flrig-Xiegu-5105.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/xiegu/flrig-Xiegu-5105.o `test -f 'rigs/xiegu/Xiegu-5105.cxx' || echo '$(srcdir)/'`rigs/xiegu/Xiegu-5105.cxx rigs/xiegu/flrig-Xiegu-5105.obj: rigs/xiegu/Xiegu-5105.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/xiegu/flrig-Xiegu-5105.obj -MD -MP -MF rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Tpo -c -o rigs/xiegu/flrig-Xiegu-5105.obj `if test -f 'rigs/xiegu/Xiegu-5105.cxx'; then $(CYGPATH_W) 'rigs/xiegu/Xiegu-5105.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/xiegu/Xiegu-5105.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Tpo rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/xiegu/Xiegu-5105.cxx' object='rigs/xiegu/flrig-Xiegu-5105.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/xiegu/flrig-Xiegu-5105.obj `if test -f 'rigs/xiegu/Xiegu-5105.cxx'; then $(CYGPATH_W) 'rigs/xiegu/Xiegu-5105.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/xiegu/Xiegu-5105.cxx'; fi` rigs/xiegu/flrig-Xiegu-G90.o: rigs/xiegu/Xiegu-G90.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/xiegu/flrig-Xiegu-G90.o -MD -MP -MF rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Tpo -c -o rigs/xiegu/flrig-Xiegu-G90.o `test -f 'rigs/xiegu/Xiegu-G90.cxx' || echo '$(srcdir)/'`rigs/xiegu/Xiegu-G90.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Tpo rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/xiegu/Xiegu-G90.cxx' object='rigs/xiegu/flrig-Xiegu-G90.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/xiegu/flrig-Xiegu-G90.o `test -f 'rigs/xiegu/Xiegu-G90.cxx' || echo '$(srcdir)/'`rigs/xiegu/Xiegu-G90.cxx rigs/xiegu/flrig-Xiegu-G90.obj: rigs/xiegu/Xiegu-G90.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/xiegu/flrig-Xiegu-G90.obj -MD -MP -MF rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Tpo -c -o rigs/xiegu/flrig-Xiegu-G90.obj `if test -f 'rigs/xiegu/Xiegu-G90.cxx'; then $(CYGPATH_W) 'rigs/xiegu/Xiegu-G90.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/xiegu/Xiegu-G90.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Tpo rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/xiegu/Xiegu-G90.cxx' object='rigs/xiegu/flrig-Xiegu-G90.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/xiegu/flrig-Xiegu-G90.obj `if test -f 'rigs/xiegu/Xiegu-G90.cxx'; then $(CYGPATH_W) 'rigs/xiegu/Xiegu-G90.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/xiegu/Xiegu-G90.cxx'; fi` rigs/xiegu/flrig-X6100.o: rigs/xiegu/X6100.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/xiegu/flrig-X6100.o -MD -MP -MF rigs/xiegu/$(DEPDIR)/flrig-X6100.Tpo -c -o rigs/xiegu/flrig-X6100.o `test -f 'rigs/xiegu/X6100.cxx' || echo '$(srcdir)/'`rigs/xiegu/X6100.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/xiegu/$(DEPDIR)/flrig-X6100.Tpo rigs/xiegu/$(DEPDIR)/flrig-X6100.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/xiegu/X6100.cxx' object='rigs/xiegu/flrig-X6100.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/xiegu/flrig-X6100.o `test -f 'rigs/xiegu/X6100.cxx' || echo '$(srcdir)/'`rigs/xiegu/X6100.cxx rigs/xiegu/flrig-X6100.obj: rigs/xiegu/X6100.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/xiegu/flrig-X6100.obj -MD -MP -MF rigs/xiegu/$(DEPDIR)/flrig-X6100.Tpo -c -o rigs/xiegu/flrig-X6100.obj `if test -f 'rigs/xiegu/X6100.cxx'; then $(CYGPATH_W) 'rigs/xiegu/X6100.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/xiegu/X6100.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/xiegu/$(DEPDIR)/flrig-X6100.Tpo rigs/xiegu/$(DEPDIR)/flrig-X6100.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/xiegu/X6100.cxx' object='rigs/xiegu/flrig-X6100.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/xiegu/flrig-X6100.obj `if test -f 'rigs/xiegu/X6100.cxx'; then $(CYGPATH_W) 'rigs/xiegu/X6100.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/xiegu/X6100.cxx'; fi` rigs/yaesu/flrig-FT100D.o: rigs/yaesu/FT100D.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT100D.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT100D.Tpo -c -o rigs/yaesu/flrig-FT100D.o `test -f 'rigs/yaesu/FT100D.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT100D.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT100D.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT100D.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT100D.cxx' object='rigs/yaesu/flrig-FT100D.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT100D.o `test -f 'rigs/yaesu/FT100D.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT100D.cxx rigs/yaesu/flrig-FT100D.obj: rigs/yaesu/FT100D.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT100D.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT100D.Tpo -c -o rigs/yaesu/flrig-FT100D.obj `if test -f 'rigs/yaesu/FT100D.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT100D.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT100D.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT100D.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT100D.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT100D.cxx' object='rigs/yaesu/flrig-FT100D.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT100D.obj `if test -f 'rigs/yaesu/FT100D.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT100D.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT100D.cxx'; fi` rigs/yaesu/flrig-FT450.o: rigs/yaesu/FT450.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT450.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT450.Tpo -c -o rigs/yaesu/flrig-FT450.o `test -f 'rigs/yaesu/FT450.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT450.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT450.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT450.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT450.cxx' object='rigs/yaesu/flrig-FT450.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT450.o `test -f 'rigs/yaesu/FT450.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT450.cxx rigs/yaesu/flrig-FT450.obj: rigs/yaesu/FT450.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT450.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT450.Tpo -c -o rigs/yaesu/flrig-FT450.obj `if test -f 'rigs/yaesu/FT450.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT450.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT450.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT450.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT450.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT450.cxx' object='rigs/yaesu/flrig-FT450.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT450.obj `if test -f 'rigs/yaesu/FT450.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT450.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT450.cxx'; fi` rigs/yaesu/flrig-FT450D.o: rigs/yaesu/FT450D.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT450D.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT450D.Tpo -c -o rigs/yaesu/flrig-FT450D.o `test -f 'rigs/yaesu/FT450D.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT450D.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT450D.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT450D.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT450D.cxx' object='rigs/yaesu/flrig-FT450D.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT450D.o `test -f 'rigs/yaesu/FT450D.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT450D.cxx rigs/yaesu/flrig-FT450D.obj: rigs/yaesu/FT450D.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT450D.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT450D.Tpo -c -o rigs/yaesu/flrig-FT450D.obj `if test -f 'rigs/yaesu/FT450D.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT450D.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT450D.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT450D.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT450D.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT450D.cxx' object='rigs/yaesu/flrig-FT450D.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT450D.obj `if test -f 'rigs/yaesu/FT450D.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT450D.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT450D.cxx'; fi` rigs/yaesu/flrig-FT710.o: rigs/yaesu/FT710.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT710.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT710.Tpo -c -o rigs/yaesu/flrig-FT710.o `test -f 'rigs/yaesu/FT710.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT710.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT710.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT710.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT710.cxx' object='rigs/yaesu/flrig-FT710.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT710.o `test -f 'rigs/yaesu/FT710.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT710.cxx rigs/yaesu/flrig-FT710.obj: rigs/yaesu/FT710.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT710.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT710.Tpo -c -o rigs/yaesu/flrig-FT710.obj `if test -f 'rigs/yaesu/FT710.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT710.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT710.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT710.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT710.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT710.cxx' object='rigs/yaesu/flrig-FT710.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT710.obj `if test -f 'rigs/yaesu/FT710.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT710.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT710.cxx'; fi` rigs/yaesu/flrig-FT736R.o: rigs/yaesu/FT736R.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT736R.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT736R.Tpo -c -o rigs/yaesu/flrig-FT736R.o `test -f 'rigs/yaesu/FT736R.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT736R.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT736R.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT736R.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT736R.cxx' object='rigs/yaesu/flrig-FT736R.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT736R.o `test -f 'rigs/yaesu/FT736R.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT736R.cxx rigs/yaesu/flrig-FT736R.obj: rigs/yaesu/FT736R.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT736R.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT736R.Tpo -c -o rigs/yaesu/flrig-FT736R.obj `if test -f 'rigs/yaesu/FT736R.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT736R.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT736R.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT736R.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT736R.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT736R.cxx' object='rigs/yaesu/flrig-FT736R.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT736R.obj `if test -f 'rigs/yaesu/FT736R.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT736R.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT736R.cxx'; fi` rigs/yaesu/flrig-FT747.o: rigs/yaesu/FT747.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT747.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT747.Tpo -c -o rigs/yaesu/flrig-FT747.o `test -f 'rigs/yaesu/FT747.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT747.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT747.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT747.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT747.cxx' object='rigs/yaesu/flrig-FT747.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT747.o `test -f 'rigs/yaesu/FT747.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT747.cxx rigs/yaesu/flrig-FT747.obj: rigs/yaesu/FT747.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT747.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT747.Tpo -c -o rigs/yaesu/flrig-FT747.obj `if test -f 'rigs/yaesu/FT747.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT747.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT747.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT747.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT747.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT747.cxx' object='rigs/yaesu/flrig-FT747.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT747.obj `if test -f 'rigs/yaesu/FT747.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT747.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT747.cxx'; fi` rigs/yaesu/flrig-FT757GX2.o: rigs/yaesu/FT757GX2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT757GX2.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Tpo -c -o rigs/yaesu/flrig-FT757GX2.o `test -f 'rigs/yaesu/FT757GX2.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT757GX2.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT757GX2.cxx' object='rigs/yaesu/flrig-FT757GX2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT757GX2.o `test -f 'rigs/yaesu/FT757GX2.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT757GX2.cxx rigs/yaesu/flrig-FT757GX2.obj: rigs/yaesu/FT757GX2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT757GX2.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Tpo -c -o rigs/yaesu/flrig-FT757GX2.obj `if test -f 'rigs/yaesu/FT757GX2.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT757GX2.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT757GX2.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT757GX2.cxx' object='rigs/yaesu/flrig-FT757GX2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT757GX2.obj `if test -f 'rigs/yaesu/FT757GX2.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT757GX2.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT757GX2.cxx'; fi` rigs/yaesu/flrig-FT767.o: rigs/yaesu/FT767.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT767.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT767.Tpo -c -o rigs/yaesu/flrig-FT767.o `test -f 'rigs/yaesu/FT767.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT767.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT767.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT767.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT767.cxx' object='rigs/yaesu/flrig-FT767.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT767.o `test -f 'rigs/yaesu/FT767.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT767.cxx rigs/yaesu/flrig-FT767.obj: rigs/yaesu/FT767.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT767.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT767.Tpo -c -o rigs/yaesu/flrig-FT767.obj `if test -f 'rigs/yaesu/FT767.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT767.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT767.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT767.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT767.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT767.cxx' object='rigs/yaesu/flrig-FT767.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT767.obj `if test -f 'rigs/yaesu/FT767.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT767.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT767.cxx'; fi` rigs/yaesu/flrig-FT817.o: rigs/yaesu/FT817.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT817.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT817.Tpo -c -o rigs/yaesu/flrig-FT817.o `test -f 'rigs/yaesu/FT817.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT817.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT817.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT817.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT817.cxx' object='rigs/yaesu/flrig-FT817.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT817.o `test -f 'rigs/yaesu/FT817.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT817.cxx rigs/yaesu/flrig-FT817.obj: rigs/yaesu/FT817.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT817.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT817.Tpo -c -o rigs/yaesu/flrig-FT817.obj `if test -f 'rigs/yaesu/FT817.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT817.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT817.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT817.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT817.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT817.cxx' object='rigs/yaesu/flrig-FT817.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT817.obj `if test -f 'rigs/yaesu/FT817.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT817.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT817.cxx'; fi` rigs/yaesu/flrig-FT817BB.o: rigs/yaesu/FT817BB.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT817BB.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Tpo -c -o rigs/yaesu/flrig-FT817BB.o `test -f 'rigs/yaesu/FT817BB.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT817BB.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT817BB.cxx' object='rigs/yaesu/flrig-FT817BB.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT817BB.o `test -f 'rigs/yaesu/FT817BB.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT817BB.cxx rigs/yaesu/flrig-FT817BB.obj: rigs/yaesu/FT817BB.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT817BB.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Tpo -c -o rigs/yaesu/flrig-FT817BB.obj `if test -f 'rigs/yaesu/FT817BB.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT817BB.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT817BB.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT817BB.cxx' object='rigs/yaesu/flrig-FT817BB.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT817BB.obj `if test -f 'rigs/yaesu/FT817BB.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT817BB.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT817BB.cxx'; fi` rigs/yaesu/flrig-FT818.o: rigs/yaesu/FT818.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT818.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT818.Tpo -c -o rigs/yaesu/flrig-FT818.o `test -f 'rigs/yaesu/FT818.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT818.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT818.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT818.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT818.cxx' object='rigs/yaesu/flrig-FT818.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT818.o `test -f 'rigs/yaesu/FT818.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT818.cxx rigs/yaesu/flrig-FT818.obj: rigs/yaesu/FT818.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT818.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT818.Tpo -c -o rigs/yaesu/flrig-FT818.obj `if test -f 'rigs/yaesu/FT818.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT818.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT818.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT818.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT818.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT818.cxx' object='rigs/yaesu/flrig-FT818.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT818.obj `if test -f 'rigs/yaesu/FT818.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT818.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT818.cxx'; fi` rigs/yaesu/flrig-FT847.o: rigs/yaesu/FT847.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT847.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT847.Tpo -c -o rigs/yaesu/flrig-FT847.o `test -f 'rigs/yaesu/FT847.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT847.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT847.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT847.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT847.cxx' object='rigs/yaesu/flrig-FT847.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT847.o `test -f 'rigs/yaesu/FT847.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT847.cxx rigs/yaesu/flrig-FT847.obj: rigs/yaesu/FT847.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT847.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT847.Tpo -c -o rigs/yaesu/flrig-FT847.obj `if test -f 'rigs/yaesu/FT847.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT847.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT847.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT847.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT847.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT847.cxx' object='rigs/yaesu/flrig-FT847.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT847.obj `if test -f 'rigs/yaesu/FT847.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT847.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT847.cxx'; fi` rigs/yaesu/flrig-FT857D.o: rigs/yaesu/FT857D.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT857D.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT857D.Tpo -c -o rigs/yaesu/flrig-FT857D.o `test -f 'rigs/yaesu/FT857D.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT857D.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT857D.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT857D.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT857D.cxx' object='rigs/yaesu/flrig-FT857D.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT857D.o `test -f 'rigs/yaesu/FT857D.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT857D.cxx rigs/yaesu/flrig-FT857D.obj: rigs/yaesu/FT857D.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT857D.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT857D.Tpo -c -o rigs/yaesu/flrig-FT857D.obj `if test -f 'rigs/yaesu/FT857D.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT857D.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT857D.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT857D.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT857D.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT857D.cxx' object='rigs/yaesu/flrig-FT857D.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT857D.obj `if test -f 'rigs/yaesu/FT857D.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT857D.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT857D.cxx'; fi` rigs/yaesu/flrig-FT890.o: rigs/yaesu/FT890.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT890.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT890.Tpo -c -o rigs/yaesu/flrig-FT890.o `test -f 'rigs/yaesu/FT890.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT890.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT890.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT890.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT890.cxx' object='rigs/yaesu/flrig-FT890.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT890.o `test -f 'rigs/yaesu/FT890.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT890.cxx rigs/yaesu/flrig-FT890.obj: rigs/yaesu/FT890.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT890.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT890.Tpo -c -o rigs/yaesu/flrig-FT890.obj `if test -f 'rigs/yaesu/FT890.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT890.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT890.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT890.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT890.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT890.cxx' object='rigs/yaesu/flrig-FT890.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT890.obj `if test -f 'rigs/yaesu/FT890.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT890.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT890.cxx'; fi` rigs/yaesu/flrig-FT891.o: rigs/yaesu/FT891.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT891.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT891.Tpo -c -o rigs/yaesu/flrig-FT891.o `test -f 'rigs/yaesu/FT891.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT891.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT891.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT891.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT891.cxx' object='rigs/yaesu/flrig-FT891.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT891.o `test -f 'rigs/yaesu/FT891.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT891.cxx rigs/yaesu/flrig-FT891.obj: rigs/yaesu/FT891.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT891.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT891.Tpo -c -o rigs/yaesu/flrig-FT891.obj `if test -f 'rigs/yaesu/FT891.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT891.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT891.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT891.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT891.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT891.cxx' object='rigs/yaesu/flrig-FT891.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT891.obj `if test -f 'rigs/yaesu/FT891.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT891.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT891.cxx'; fi` rigs/yaesu/flrig-FT900.o: rigs/yaesu/FT900.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT900.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT900.Tpo -c -o rigs/yaesu/flrig-FT900.o `test -f 'rigs/yaesu/FT900.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT900.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT900.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT900.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT900.cxx' object='rigs/yaesu/flrig-FT900.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT900.o `test -f 'rigs/yaesu/FT900.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT900.cxx rigs/yaesu/flrig-FT900.obj: rigs/yaesu/FT900.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT900.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT900.Tpo -c -o rigs/yaesu/flrig-FT900.obj `if test -f 'rigs/yaesu/FT900.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT900.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT900.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT900.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT900.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT900.cxx' object='rigs/yaesu/flrig-FT900.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT900.obj `if test -f 'rigs/yaesu/FT900.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT900.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT900.cxx'; fi` rigs/yaesu/flrig-FT920.o: rigs/yaesu/FT920.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT920.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT920.Tpo -c -o rigs/yaesu/flrig-FT920.o `test -f 'rigs/yaesu/FT920.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT920.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT920.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT920.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT920.cxx' object='rigs/yaesu/flrig-FT920.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT920.o `test -f 'rigs/yaesu/FT920.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT920.cxx rigs/yaesu/flrig-FT920.obj: rigs/yaesu/FT920.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT920.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT920.Tpo -c -o rigs/yaesu/flrig-FT920.obj `if test -f 'rigs/yaesu/FT920.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT920.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT920.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT920.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT920.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT920.cxx' object='rigs/yaesu/flrig-FT920.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT920.obj `if test -f 'rigs/yaesu/FT920.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT920.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT920.cxx'; fi` rigs/yaesu/flrig-FT950.o: rigs/yaesu/FT950.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT950.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT950.Tpo -c -o rigs/yaesu/flrig-FT950.o `test -f 'rigs/yaesu/FT950.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT950.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT950.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT950.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT950.cxx' object='rigs/yaesu/flrig-FT950.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT950.o `test -f 'rigs/yaesu/FT950.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT950.cxx rigs/yaesu/flrig-FT950.obj: rigs/yaesu/FT950.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT950.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT950.Tpo -c -o rigs/yaesu/flrig-FT950.obj `if test -f 'rigs/yaesu/FT950.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT950.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT950.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT950.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT950.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT950.cxx' object='rigs/yaesu/flrig-FT950.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT950.obj `if test -f 'rigs/yaesu/FT950.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT950.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT950.cxx'; fi` rigs/yaesu/flrig-FT990.o: rigs/yaesu/FT990.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT990.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT990.Tpo -c -o rigs/yaesu/flrig-FT990.o `test -f 'rigs/yaesu/FT990.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT990.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT990.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT990.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT990.cxx' object='rigs/yaesu/flrig-FT990.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT990.o `test -f 'rigs/yaesu/FT990.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT990.cxx rigs/yaesu/flrig-FT990.obj: rigs/yaesu/FT990.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT990.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT990.Tpo -c -o rigs/yaesu/flrig-FT990.obj `if test -f 'rigs/yaesu/FT990.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT990.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT990.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT990.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT990.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT990.cxx' object='rigs/yaesu/flrig-FT990.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT990.obj `if test -f 'rigs/yaesu/FT990.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT990.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT990.cxx'; fi` rigs/yaesu/flrig-FT990a.o: rigs/yaesu/FT990a.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT990a.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT990a.Tpo -c -o rigs/yaesu/flrig-FT990a.o `test -f 'rigs/yaesu/FT990a.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT990a.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT990a.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT990a.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT990a.cxx' object='rigs/yaesu/flrig-FT990a.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT990a.o `test -f 'rigs/yaesu/FT990a.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT990a.cxx rigs/yaesu/flrig-FT990a.obj: rigs/yaesu/FT990a.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT990a.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT990a.Tpo -c -o rigs/yaesu/flrig-FT990a.obj `if test -f 'rigs/yaesu/FT990a.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT990a.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT990a.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT990a.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT990a.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT990a.cxx' object='rigs/yaesu/flrig-FT990a.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT990a.obj `if test -f 'rigs/yaesu/FT990a.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT990a.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT990a.cxx'; fi` rigs/yaesu/flrig-FT991.o: rigs/yaesu/FT991.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT991.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT991.Tpo -c -o rigs/yaesu/flrig-FT991.o `test -f 'rigs/yaesu/FT991.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT991.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT991.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT991.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT991.cxx' object='rigs/yaesu/flrig-FT991.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT991.o `test -f 'rigs/yaesu/FT991.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT991.cxx rigs/yaesu/flrig-FT991.obj: rigs/yaesu/FT991.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT991.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT991.Tpo -c -o rigs/yaesu/flrig-FT991.obj `if test -f 'rigs/yaesu/FT991.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT991.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT991.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT991.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT991.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT991.cxx' object='rigs/yaesu/flrig-FT991.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT991.obj `if test -f 'rigs/yaesu/FT991.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT991.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT991.cxx'; fi` rigs/yaesu/flrig-FT991A.o: rigs/yaesu/FT991A.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT991A.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT991A.Tpo -c -o rigs/yaesu/flrig-FT991A.o `test -f 'rigs/yaesu/FT991A.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT991A.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT991A.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT991A.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT991A.cxx' object='rigs/yaesu/flrig-FT991A.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT991A.o `test -f 'rigs/yaesu/FT991A.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT991A.cxx rigs/yaesu/flrig-FT991A.obj: rigs/yaesu/FT991A.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT991A.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT991A.Tpo -c -o rigs/yaesu/flrig-FT991A.obj `if test -f 'rigs/yaesu/FT991A.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT991A.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT991A.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT991A.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT991A.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT991A.cxx' object='rigs/yaesu/flrig-FT991A.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT991A.obj `if test -f 'rigs/yaesu/FT991A.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT991A.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT991A.cxx'; fi` rigs/yaesu/flrig-FT1000.o: rigs/yaesu/FT1000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT1000.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT1000.Tpo -c -o rigs/yaesu/flrig-FT1000.o `test -f 'rigs/yaesu/FT1000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT1000.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT1000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT1000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT1000.cxx' object='rigs/yaesu/flrig-FT1000.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT1000.o `test -f 'rigs/yaesu/FT1000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT1000.cxx rigs/yaesu/flrig-FT1000.obj: rigs/yaesu/FT1000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT1000.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT1000.Tpo -c -o rigs/yaesu/flrig-FT1000.obj `if test -f 'rigs/yaesu/FT1000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT1000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT1000.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT1000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT1000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT1000.cxx' object='rigs/yaesu/flrig-FT1000.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT1000.obj `if test -f 'rigs/yaesu/FT1000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT1000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT1000.cxx'; fi` rigs/yaesu/flrig-FT1000MP.o: rigs/yaesu/FT1000MP.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT1000MP.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Tpo -c -o rigs/yaesu/flrig-FT1000MP.o `test -f 'rigs/yaesu/FT1000MP.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT1000MP.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT1000MP.cxx' object='rigs/yaesu/flrig-FT1000MP.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT1000MP.o `test -f 'rigs/yaesu/FT1000MP.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT1000MP.cxx rigs/yaesu/flrig-FT1000MP.obj: rigs/yaesu/FT1000MP.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT1000MP.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Tpo -c -o rigs/yaesu/flrig-FT1000MP.obj `if test -f 'rigs/yaesu/FT1000MP.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT1000MP.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT1000MP.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT1000MP.cxx' object='rigs/yaesu/flrig-FT1000MP.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT1000MP.obj `if test -f 'rigs/yaesu/FT1000MP.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT1000MP.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT1000MP.cxx'; fi` rigs/yaesu/flrig-FT1000MP_A.o: rigs/yaesu/FT1000MP_A.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT1000MP_A.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Tpo -c -o rigs/yaesu/flrig-FT1000MP_A.o `test -f 'rigs/yaesu/FT1000MP_A.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT1000MP_A.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT1000MP_A.cxx' object='rigs/yaesu/flrig-FT1000MP_A.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT1000MP_A.o `test -f 'rigs/yaesu/FT1000MP_A.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT1000MP_A.cxx rigs/yaesu/flrig-FT1000MP_A.obj: rigs/yaesu/FT1000MP_A.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT1000MP_A.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Tpo -c -o rigs/yaesu/flrig-FT1000MP_A.obj `if test -f 'rigs/yaesu/FT1000MP_A.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT1000MP_A.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT1000MP_A.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT1000MP_A.cxx' object='rigs/yaesu/flrig-FT1000MP_A.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT1000MP_A.obj `if test -f 'rigs/yaesu/FT1000MP_A.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT1000MP_A.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT1000MP_A.cxx'; fi` rigs/yaesu/flrig-FT2000.o: rigs/yaesu/FT2000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT2000.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT2000.Tpo -c -o rigs/yaesu/flrig-FT2000.o `test -f 'rigs/yaesu/FT2000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT2000.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT2000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT2000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT2000.cxx' object='rigs/yaesu/flrig-FT2000.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT2000.o `test -f 'rigs/yaesu/FT2000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT2000.cxx rigs/yaesu/flrig-FT2000.obj: rigs/yaesu/FT2000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT2000.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT2000.Tpo -c -o rigs/yaesu/flrig-FT2000.obj `if test -f 'rigs/yaesu/FT2000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT2000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT2000.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT2000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT2000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT2000.cxx' object='rigs/yaesu/flrig-FT2000.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT2000.obj `if test -f 'rigs/yaesu/FT2000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT2000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT2000.cxx'; fi` rigs/yaesu/flrig-FTdx101D.o: rigs/yaesu/FTdx101D.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx101D.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Tpo -c -o rigs/yaesu/flrig-FTdx101D.o `test -f 'rigs/yaesu/FTdx101D.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx101D.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx101D.cxx' object='rigs/yaesu/flrig-FTdx101D.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx101D.o `test -f 'rigs/yaesu/FTdx101D.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx101D.cxx rigs/yaesu/flrig-FTdx101D.obj: rigs/yaesu/FTdx101D.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx101D.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Tpo -c -o rigs/yaesu/flrig-FTdx101D.obj `if test -f 'rigs/yaesu/FTdx101D.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx101D.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx101D.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx101D.cxx' object='rigs/yaesu/flrig-FTdx101D.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx101D.obj `if test -f 'rigs/yaesu/FTdx101D.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx101D.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx101D.cxx'; fi` rigs/yaesu/flrig-FTdx10.o: rigs/yaesu/FTdx10.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx10.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Tpo -c -o rigs/yaesu/flrig-FTdx10.o `test -f 'rigs/yaesu/FTdx10.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx10.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx10.cxx' object='rigs/yaesu/flrig-FTdx10.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx10.o `test -f 'rigs/yaesu/FTdx10.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx10.cxx rigs/yaesu/flrig-FTdx10.obj: rigs/yaesu/FTdx10.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx10.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Tpo -c -o rigs/yaesu/flrig-FTdx10.obj `if test -f 'rigs/yaesu/FTdx10.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx10.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx10.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx10.cxx' object='rigs/yaesu/flrig-FTdx10.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx10.obj `if test -f 'rigs/yaesu/FTdx10.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx10.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx10.cxx'; fi` rigs/yaesu/flrig-FTdx1200.o: rigs/yaesu/FTdx1200.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx1200.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Tpo -c -o rigs/yaesu/flrig-FTdx1200.o `test -f 'rigs/yaesu/FTdx1200.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx1200.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx1200.cxx' object='rigs/yaesu/flrig-FTdx1200.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx1200.o `test -f 'rigs/yaesu/FTdx1200.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx1200.cxx rigs/yaesu/flrig-FTdx1200.obj: rigs/yaesu/FTdx1200.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx1200.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Tpo -c -o rigs/yaesu/flrig-FTdx1200.obj `if test -f 'rigs/yaesu/FTdx1200.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx1200.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx1200.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx1200.cxx' object='rigs/yaesu/flrig-FTdx1200.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx1200.obj `if test -f 'rigs/yaesu/FTdx1200.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx1200.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx1200.cxx'; fi` rigs/yaesu/flrig-FTdx3000.o: rigs/yaesu/FTdx3000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx3000.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Tpo -c -o rigs/yaesu/flrig-FTdx3000.o `test -f 'rigs/yaesu/FTdx3000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx3000.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx3000.cxx' object='rigs/yaesu/flrig-FTdx3000.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx3000.o `test -f 'rigs/yaesu/FTdx3000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx3000.cxx rigs/yaesu/flrig-FTdx3000.obj: rigs/yaesu/FTdx3000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx3000.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Tpo -c -o rigs/yaesu/flrig-FTdx3000.obj `if test -f 'rigs/yaesu/FTdx3000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx3000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx3000.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx3000.cxx' object='rigs/yaesu/flrig-FTdx3000.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx3000.obj `if test -f 'rigs/yaesu/FTdx3000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx3000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx3000.cxx'; fi` rigs/yaesu/flrig-FT5000.o: rigs/yaesu/FT5000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT5000.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT5000.Tpo -c -o rigs/yaesu/flrig-FT5000.o `test -f 'rigs/yaesu/FT5000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT5000.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT5000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT5000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT5000.cxx' object='rigs/yaesu/flrig-FT5000.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT5000.o `test -f 'rigs/yaesu/FT5000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FT5000.cxx rigs/yaesu/flrig-FT5000.obj: rigs/yaesu/FT5000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FT5000.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FT5000.Tpo -c -o rigs/yaesu/flrig-FT5000.obj `if test -f 'rigs/yaesu/FT5000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT5000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT5000.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FT5000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FT5000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FT5000.cxx' object='rigs/yaesu/flrig-FT5000.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FT5000.obj `if test -f 'rigs/yaesu/FT5000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FT5000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FT5000.cxx'; fi` rigs/yaesu/flrig-FTdx9000.o: rigs/yaesu/FTdx9000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx9000.o -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Tpo -c -o rigs/yaesu/flrig-FTdx9000.o `test -f 'rigs/yaesu/FTdx9000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx9000.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx9000.cxx' object='rigs/yaesu/flrig-FTdx9000.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx9000.o `test -f 'rigs/yaesu/FTdx9000.cxx' || echo '$(srcdir)/'`rigs/yaesu/FTdx9000.cxx rigs/yaesu/flrig-FTdx9000.obj: rigs/yaesu/FTdx9000.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT rigs/yaesu/flrig-FTdx9000.obj -MD -MP -MF rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Tpo -c -o rigs/yaesu/flrig-FTdx9000.obj `if test -f 'rigs/yaesu/FTdx9000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx9000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx9000.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Tpo rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rigs/yaesu/FTdx9000.cxx' object='rigs/yaesu/flrig-FTdx9000.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o rigs/yaesu/flrig-FTdx9000.obj `if test -f 'rigs/yaesu/FTdx9000.cxx'; then $(CYGPATH_W) 'rigs/yaesu/FTdx9000.cxx'; else $(CYGPATH_W) '$(srcdir)/rigs/yaesu/FTdx9000.cxx'; fi` support/flrig-debug.o: support/debug.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-debug.o -MD -MP -MF support/$(DEPDIR)/flrig-debug.Tpo -c -o support/flrig-debug.o `test -f 'support/debug.cxx' || echo '$(srcdir)/'`support/debug.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-debug.Tpo support/$(DEPDIR)/flrig-debug.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/debug.cxx' object='support/flrig-debug.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-debug.o `test -f 'support/debug.cxx' || echo '$(srcdir)/'`support/debug.cxx support/flrig-debug.obj: support/debug.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-debug.obj -MD -MP -MF support/$(DEPDIR)/flrig-debug.Tpo -c -o support/flrig-debug.obj `if test -f 'support/debug.cxx'; then $(CYGPATH_W) 'support/debug.cxx'; else $(CYGPATH_W) '$(srcdir)/support/debug.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-debug.Tpo support/$(DEPDIR)/flrig-debug.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/debug.cxx' object='support/flrig-debug.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-debug.obj `if test -f 'support/debug.cxx'; then $(CYGPATH_W) 'support/debug.cxx'; else $(CYGPATH_W) '$(srcdir)/support/debug.cxx'; fi` support/flrig-dialogs.o: support/dialogs.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-dialogs.o -MD -MP -MF support/$(DEPDIR)/flrig-dialogs.Tpo -c -o support/flrig-dialogs.o `test -f 'support/dialogs.cxx' || echo '$(srcdir)/'`support/dialogs.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-dialogs.Tpo support/$(DEPDIR)/flrig-dialogs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/dialogs.cxx' object='support/flrig-dialogs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-dialogs.o `test -f 'support/dialogs.cxx' || echo '$(srcdir)/'`support/dialogs.cxx support/flrig-dialogs.obj: support/dialogs.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-dialogs.obj -MD -MP -MF support/$(DEPDIR)/flrig-dialogs.Tpo -c -o support/flrig-dialogs.obj `if test -f 'support/dialogs.cxx'; then $(CYGPATH_W) 'support/dialogs.cxx'; else $(CYGPATH_W) '$(srcdir)/support/dialogs.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-dialogs.Tpo support/$(DEPDIR)/flrig-dialogs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/dialogs.cxx' object='support/flrig-dialogs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-dialogs.obj `if test -f 'support/dialogs.cxx'; then $(CYGPATH_W) 'support/dialogs.cxx'; else $(CYGPATH_W) '$(srcdir)/support/dialogs.cxx'; fi` support/flrig-gpio_ptt.o: support/gpio_ptt.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-gpio_ptt.o -MD -MP -MF support/$(DEPDIR)/flrig-gpio_ptt.Tpo -c -o support/flrig-gpio_ptt.o `test -f 'support/gpio_ptt.cxx' || echo '$(srcdir)/'`support/gpio_ptt.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-gpio_ptt.Tpo support/$(DEPDIR)/flrig-gpio_ptt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/gpio_ptt.cxx' object='support/flrig-gpio_ptt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-gpio_ptt.o `test -f 'support/gpio_ptt.cxx' || echo '$(srcdir)/'`support/gpio_ptt.cxx support/flrig-gpio_ptt.obj: support/gpio_ptt.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-gpio_ptt.obj -MD -MP -MF support/$(DEPDIR)/flrig-gpio_ptt.Tpo -c -o support/flrig-gpio_ptt.obj `if test -f 'support/gpio_ptt.cxx'; then $(CYGPATH_W) 'support/gpio_ptt.cxx'; else $(CYGPATH_W) '$(srcdir)/support/gpio_ptt.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-gpio_ptt.Tpo support/$(DEPDIR)/flrig-gpio_ptt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/gpio_ptt.cxx' object='support/flrig-gpio_ptt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-gpio_ptt.obj `if test -f 'support/gpio_ptt.cxx'; then $(CYGPATH_W) 'support/gpio_ptt.cxx'; else $(CYGPATH_W) '$(srcdir)/support/gpio_ptt.cxx'; fi` support/flrig-ptt.o: support/ptt.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-ptt.o -MD -MP -MF support/$(DEPDIR)/flrig-ptt.Tpo -c -o support/flrig-ptt.o `test -f 'support/ptt.cxx' || echo '$(srcdir)/'`support/ptt.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-ptt.Tpo support/$(DEPDIR)/flrig-ptt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/ptt.cxx' object='support/flrig-ptt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-ptt.o `test -f 'support/ptt.cxx' || echo '$(srcdir)/'`support/ptt.cxx support/flrig-ptt.obj: support/ptt.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-ptt.obj -MD -MP -MF support/$(DEPDIR)/flrig-ptt.Tpo -c -o support/flrig-ptt.obj `if test -f 'support/ptt.cxx'; then $(CYGPATH_W) 'support/ptt.cxx'; else $(CYGPATH_W) '$(srcdir)/support/ptt.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-ptt.Tpo support/$(DEPDIR)/flrig-ptt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/ptt.cxx' object='support/flrig-ptt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-ptt.obj `if test -f 'support/ptt.cxx'; then $(CYGPATH_W) 'support/ptt.cxx'; else $(CYGPATH_W) '$(srcdir)/support/ptt.cxx'; fi` support/flrig-rig_io.o: support/rig_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-rig_io.o -MD -MP -MF support/$(DEPDIR)/flrig-rig_io.Tpo -c -o support/flrig-rig_io.o `test -f 'support/rig_io.cxx' || echo '$(srcdir)/'`support/rig_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-rig_io.Tpo support/$(DEPDIR)/flrig-rig_io.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/rig_io.cxx' object='support/flrig-rig_io.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-rig_io.o `test -f 'support/rig_io.cxx' || echo '$(srcdir)/'`support/rig_io.cxx support/flrig-rig_io.obj: support/rig_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-rig_io.obj -MD -MP -MF support/$(DEPDIR)/flrig-rig_io.Tpo -c -o support/flrig-rig_io.obj `if test -f 'support/rig_io.cxx'; then $(CYGPATH_W) 'support/rig_io.cxx'; else $(CYGPATH_W) '$(srcdir)/support/rig_io.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-rig_io.Tpo support/$(DEPDIR)/flrig-rig_io.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/rig_io.cxx' object='support/flrig-rig_io.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-rig_io.obj `if test -f 'support/rig_io.cxx'; then $(CYGPATH_W) 'support/rig_io.cxx'; else $(CYGPATH_W) '$(srcdir)/support/rig_io.cxx'; fi` support/flrig-serial.o: support/serial.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-serial.o -MD -MP -MF support/$(DEPDIR)/flrig-serial.Tpo -c -o support/flrig-serial.o `test -f 'support/serial.cxx' || echo '$(srcdir)/'`support/serial.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-serial.Tpo support/$(DEPDIR)/flrig-serial.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/serial.cxx' object='support/flrig-serial.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-serial.o `test -f 'support/serial.cxx' || echo '$(srcdir)/'`support/serial.cxx support/flrig-serial.obj: support/serial.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-serial.obj -MD -MP -MF support/$(DEPDIR)/flrig-serial.Tpo -c -o support/flrig-serial.obj `if test -f 'support/serial.cxx'; then $(CYGPATH_W) 'support/serial.cxx'; else $(CYGPATH_W) '$(srcdir)/support/serial.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-serial.Tpo support/$(DEPDIR)/flrig-serial.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/serial.cxx' object='support/flrig-serial.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-serial.obj `if test -f 'support/serial.cxx'; then $(CYGPATH_W) 'support/serial.cxx'; else $(CYGPATH_W) '$(srcdir)/support/serial.cxx'; fi` support/flrig-socket.o: support/socket.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-socket.o -MD -MP -MF support/$(DEPDIR)/flrig-socket.Tpo -c -o support/flrig-socket.o `test -f 'support/socket.cxx' || echo '$(srcdir)/'`support/socket.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-socket.Tpo support/$(DEPDIR)/flrig-socket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/socket.cxx' object='support/flrig-socket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-socket.o `test -f 'support/socket.cxx' || echo '$(srcdir)/'`support/socket.cxx support/flrig-socket.obj: support/socket.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-socket.obj -MD -MP -MF support/$(DEPDIR)/flrig-socket.Tpo -c -o support/flrig-socket.obj `if test -f 'support/socket.cxx'; then $(CYGPATH_W) 'support/socket.cxx'; else $(CYGPATH_W) '$(srcdir)/support/socket.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-socket.Tpo support/$(DEPDIR)/flrig-socket.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/socket.cxx' object='support/flrig-socket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-socket.obj `if test -f 'support/socket.cxx'; then $(CYGPATH_W) 'support/socket.cxx'; else $(CYGPATH_W) '$(srcdir)/support/socket.cxx'; fi` support/flrig-socket_io.o: support/socket_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-socket_io.o -MD -MP -MF support/$(DEPDIR)/flrig-socket_io.Tpo -c -o support/flrig-socket_io.o `test -f 'support/socket_io.cxx' || echo '$(srcdir)/'`support/socket_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-socket_io.Tpo support/$(DEPDIR)/flrig-socket_io.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/socket_io.cxx' object='support/flrig-socket_io.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-socket_io.o `test -f 'support/socket_io.cxx' || echo '$(srcdir)/'`support/socket_io.cxx support/flrig-socket_io.obj: support/socket_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-socket_io.obj -MD -MP -MF support/$(DEPDIR)/flrig-socket_io.Tpo -c -o support/flrig-socket_io.obj `if test -f 'support/socket_io.cxx'; then $(CYGPATH_W) 'support/socket_io.cxx'; else $(CYGPATH_W) '$(srcdir)/support/socket_io.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-socket_io.Tpo support/$(DEPDIR)/flrig-socket_io.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/socket_io.cxx' object='support/flrig-socket_io.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-socket_io.obj `if test -f 'support/socket_io.cxx'; then $(CYGPATH_W) 'support/socket_io.cxx'; else $(CYGPATH_W) '$(srcdir)/support/socket_io.cxx'; fi` support/flrig-status.o: support/status.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-status.o -MD -MP -MF support/$(DEPDIR)/flrig-status.Tpo -c -o support/flrig-status.o `test -f 'support/status.cxx' || echo '$(srcdir)/'`support/status.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-status.Tpo support/$(DEPDIR)/flrig-status.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/status.cxx' object='support/flrig-status.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-status.o `test -f 'support/status.cxx' || echo '$(srcdir)/'`support/status.cxx support/flrig-status.obj: support/status.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-status.obj -MD -MP -MF support/$(DEPDIR)/flrig-status.Tpo -c -o support/flrig-status.obj `if test -f 'support/status.cxx'; then $(CYGPATH_W) 'support/status.cxx'; else $(CYGPATH_W) '$(srcdir)/support/status.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-status.Tpo support/$(DEPDIR)/flrig-status.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/status.cxx' object='support/flrig-status.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-status.obj `if test -f 'support/status.cxx'; then $(CYGPATH_W) 'support/status.cxx'; else $(CYGPATH_W) '$(srcdir)/support/status.cxx'; fi` support/flrig-support.o: support/support.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-support.o -MD -MP -MF support/$(DEPDIR)/flrig-support.Tpo -c -o support/flrig-support.o `test -f 'support/support.cxx' || echo '$(srcdir)/'`support/support.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-support.Tpo support/$(DEPDIR)/flrig-support.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/support.cxx' object='support/flrig-support.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-support.o `test -f 'support/support.cxx' || echo '$(srcdir)/'`support/support.cxx support/flrig-support.obj: support/support.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-support.obj -MD -MP -MF support/$(DEPDIR)/flrig-support.Tpo -c -o support/flrig-support.obj `if test -f 'support/support.cxx'; then $(CYGPATH_W) 'support/support.cxx'; else $(CYGPATH_W) '$(srcdir)/support/support.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-support.Tpo support/$(DEPDIR)/flrig-support.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/support.cxx' object='support/flrig-support.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-support.obj `if test -f 'support/support.cxx'; then $(CYGPATH_W) 'support/support.cxx'; else $(CYGPATH_W) '$(srcdir)/support/support.cxx'; fi` support/flrig-read_rig.o: support/read_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-read_rig.o -MD -MP -MF support/$(DEPDIR)/flrig-read_rig.Tpo -c -o support/flrig-read_rig.o `test -f 'support/read_rig.cxx' || echo '$(srcdir)/'`support/read_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-read_rig.Tpo support/$(DEPDIR)/flrig-read_rig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/read_rig.cxx' object='support/flrig-read_rig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-read_rig.o `test -f 'support/read_rig.cxx' || echo '$(srcdir)/'`support/read_rig.cxx support/flrig-read_rig.obj: support/read_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-read_rig.obj -MD -MP -MF support/$(DEPDIR)/flrig-read_rig.Tpo -c -o support/flrig-read_rig.obj `if test -f 'support/read_rig.cxx'; then $(CYGPATH_W) 'support/read_rig.cxx'; else $(CYGPATH_W) '$(srcdir)/support/read_rig.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-read_rig.Tpo support/$(DEPDIR)/flrig-read_rig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/read_rig.cxx' object='support/flrig-read_rig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-read_rig.obj `if test -f 'support/read_rig.cxx'; then $(CYGPATH_W) 'support/read_rig.cxx'; else $(CYGPATH_W) '$(srcdir)/support/read_rig.cxx'; fi` support/flrig-restore_rig.o: support/restore_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-restore_rig.o -MD -MP -MF support/$(DEPDIR)/flrig-restore_rig.Tpo -c -o support/flrig-restore_rig.o `test -f 'support/restore_rig.cxx' || echo '$(srcdir)/'`support/restore_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-restore_rig.Tpo support/$(DEPDIR)/flrig-restore_rig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/restore_rig.cxx' object='support/flrig-restore_rig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-restore_rig.o `test -f 'support/restore_rig.cxx' || echo '$(srcdir)/'`support/restore_rig.cxx support/flrig-restore_rig.obj: support/restore_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-restore_rig.obj -MD -MP -MF support/$(DEPDIR)/flrig-restore_rig.Tpo -c -o support/flrig-restore_rig.obj `if test -f 'support/restore_rig.cxx'; then $(CYGPATH_W) 'support/restore_rig.cxx'; else $(CYGPATH_W) '$(srcdir)/support/restore_rig.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-restore_rig.Tpo support/$(DEPDIR)/flrig-restore_rig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/restore_rig.cxx' object='support/flrig-restore_rig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-restore_rig.obj `if test -f 'support/restore_rig.cxx'; then $(CYGPATH_W) 'support/restore_rig.cxx'; else $(CYGPATH_W) '$(srcdir)/support/restore_rig.cxx'; fi` support/flrig-init_rig.o: support/init_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-init_rig.o -MD -MP -MF support/$(DEPDIR)/flrig-init_rig.Tpo -c -o support/flrig-init_rig.o `test -f 'support/init_rig.cxx' || echo '$(srcdir)/'`support/init_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-init_rig.Tpo support/$(DEPDIR)/flrig-init_rig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/init_rig.cxx' object='support/flrig-init_rig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-init_rig.o `test -f 'support/init_rig.cxx' || echo '$(srcdir)/'`support/init_rig.cxx support/flrig-init_rig.obj: support/init_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-init_rig.obj -MD -MP -MF support/$(DEPDIR)/flrig-init_rig.Tpo -c -o support/flrig-init_rig.obj `if test -f 'support/init_rig.cxx'; then $(CYGPATH_W) 'support/init_rig.cxx'; else $(CYGPATH_W) '$(srcdir)/support/init_rig.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-init_rig.Tpo support/$(DEPDIR)/flrig-init_rig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/init_rig.cxx' object='support/flrig-init_rig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-init_rig.obj `if test -f 'support/init_rig.cxx'; then $(CYGPATH_W) 'support/init_rig.cxx'; else $(CYGPATH_W) '$(srcdir)/support/init_rig.cxx'; fi` support/flrig-TT550_support.o: support/TT550_support.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-TT550_support.o -MD -MP -MF support/$(DEPDIR)/flrig-TT550_support.Tpo -c -o support/flrig-TT550_support.o `test -f 'support/TT550_support.cxx' || echo '$(srcdir)/'`support/TT550_support.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-TT550_support.Tpo support/$(DEPDIR)/flrig-TT550_support.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/TT550_support.cxx' object='support/flrig-TT550_support.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-TT550_support.o `test -f 'support/TT550_support.cxx' || echo '$(srcdir)/'`support/TT550_support.cxx support/flrig-TT550_support.obj: support/TT550_support.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-TT550_support.obj -MD -MP -MF support/$(DEPDIR)/flrig-TT550_support.Tpo -c -o support/flrig-TT550_support.obj `if test -f 'support/TT550_support.cxx'; then $(CYGPATH_W) 'support/TT550_support.cxx'; else $(CYGPATH_W) '$(srcdir)/support/TT550_support.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-TT550_support.Tpo support/$(DEPDIR)/flrig-TT550_support.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/TT550_support.cxx' object='support/flrig-TT550_support.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-TT550_support.obj `if test -f 'support/TT550_support.cxx'; then $(CYGPATH_W) 'support/TT550_support.cxx'; else $(CYGPATH_W) '$(srcdir)/support/TT550_support.cxx'; fi` support/flrig-init_user_interface.o: support/init_user_interface.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-init_user_interface.o -MD -MP -MF support/$(DEPDIR)/flrig-init_user_interface.Tpo -c -o support/flrig-init_user_interface.o `test -f 'support/init_user_interface.cxx' || echo '$(srcdir)/'`support/init_user_interface.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-init_user_interface.Tpo support/$(DEPDIR)/flrig-init_user_interface.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/init_user_interface.cxx' object='support/flrig-init_user_interface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-init_user_interface.o `test -f 'support/init_user_interface.cxx' || echo '$(srcdir)/'`support/init_user_interface.cxx support/flrig-init_user_interface.obj: support/init_user_interface.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-init_user_interface.obj -MD -MP -MF support/$(DEPDIR)/flrig-init_user_interface.Tpo -c -o support/flrig-init_user_interface.obj `if test -f 'support/init_user_interface.cxx'; then $(CYGPATH_W) 'support/init_user_interface.cxx'; else $(CYGPATH_W) '$(srcdir)/support/init_user_interface.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-init_user_interface.Tpo support/$(DEPDIR)/flrig-init_user_interface.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/init_user_interface.cxx' object='support/flrig-init_user_interface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-init_user_interface.obj `if test -f 'support/init_user_interface.cxx'; then $(CYGPATH_W) 'support/init_user_interface.cxx'; else $(CYGPATH_W) '$(srcdir)/support/init_user_interface.cxx'; fi` support/flrig-threads.o: support/threads.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-threads.o -MD -MP -MF support/$(DEPDIR)/flrig-threads.Tpo -c -o support/flrig-threads.o `test -f 'support/threads.cxx' || echo '$(srcdir)/'`support/threads.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-threads.Tpo support/$(DEPDIR)/flrig-threads.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/threads.cxx' object='support/flrig-threads.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-threads.o `test -f 'support/threads.cxx' || echo '$(srcdir)/'`support/threads.cxx support/flrig-threads.obj: support/threads.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-threads.obj -MD -MP -MF support/$(DEPDIR)/flrig-threads.Tpo -c -o support/flrig-threads.obj `if test -f 'support/threads.cxx'; then $(CYGPATH_W) 'support/threads.cxx'; else $(CYGPATH_W) '$(srcdir)/support/threads.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-threads.Tpo support/$(DEPDIR)/flrig-threads.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/threads.cxx' object='support/flrig-threads.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-threads.obj `if test -f 'support/threads.cxx'; then $(CYGPATH_W) 'support/threads.cxx'; else $(CYGPATH_W) '$(srcdir)/support/threads.cxx'; fi` support/flrig-timeops.o: support/timeops.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-timeops.o -MD -MP -MF support/$(DEPDIR)/flrig-timeops.Tpo -c -o support/flrig-timeops.o `test -f 'support/timeops.cxx' || echo '$(srcdir)/'`support/timeops.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-timeops.Tpo support/$(DEPDIR)/flrig-timeops.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/timeops.cxx' object='support/flrig-timeops.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-timeops.o `test -f 'support/timeops.cxx' || echo '$(srcdir)/'`support/timeops.cxx support/flrig-timeops.obj: support/timeops.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-timeops.obj -MD -MP -MF support/$(DEPDIR)/flrig-timeops.Tpo -c -o support/flrig-timeops.obj `if test -f 'support/timeops.cxx'; then $(CYGPATH_W) 'support/timeops.cxx'; else $(CYGPATH_W) '$(srcdir)/support/timeops.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-timeops.Tpo support/$(DEPDIR)/flrig-timeops.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/timeops.cxx' object='support/flrig-timeops.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-timeops.obj `if test -f 'support/timeops.cxx'; then $(CYGPATH_W) 'support/timeops.cxx'; else $(CYGPATH_W) '$(srcdir)/support/timeops.cxx'; fi` support/flrig-trace.o: support/trace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-trace.o -MD -MP -MF support/$(DEPDIR)/flrig-trace.Tpo -c -o support/flrig-trace.o `test -f 'support/trace.cxx' || echo '$(srcdir)/'`support/trace.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-trace.Tpo support/$(DEPDIR)/flrig-trace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/trace.cxx' object='support/flrig-trace.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-trace.o `test -f 'support/trace.cxx' || echo '$(srcdir)/'`support/trace.cxx support/flrig-trace.obj: support/trace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-trace.obj -MD -MP -MF support/$(DEPDIR)/flrig-trace.Tpo -c -o support/flrig-trace.obj `if test -f 'support/trace.cxx'; then $(CYGPATH_W) 'support/trace.cxx'; else $(CYGPATH_W) '$(srcdir)/support/trace.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-trace.Tpo support/$(DEPDIR)/flrig-trace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/trace.cxx' object='support/flrig-trace.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-trace.obj `if test -f 'support/trace.cxx'; then $(CYGPATH_W) 'support/trace.cxx'; else $(CYGPATH_W) '$(srcdir)/support/trace.cxx'; fi` support/flrig-util.o: support/util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-util.o -MD -MP -MF support/$(DEPDIR)/flrig-util.Tpo -c -o support/flrig-util.o `test -f 'support/util.cxx' || echo '$(srcdir)/'`support/util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-util.Tpo support/$(DEPDIR)/flrig-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/util.cxx' object='support/flrig-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-util.o `test -f 'support/util.cxx' || echo '$(srcdir)/'`support/util.cxx support/flrig-util.obj: support/util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-util.obj -MD -MP -MF support/$(DEPDIR)/flrig-util.Tpo -c -o support/flrig-util.obj `if test -f 'support/util.cxx'; then $(CYGPATH_W) 'support/util.cxx'; else $(CYGPATH_W) '$(srcdir)/support/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-util.Tpo support/$(DEPDIR)/flrig-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/util.cxx' object='support/flrig-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-util.obj `if test -f 'support/util.cxx'; then $(CYGPATH_W) 'support/util.cxx'; else $(CYGPATH_W) '$(srcdir)/support/util.cxx'; fi` wc/flrig-tci_io.o: wc/tci_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT wc/flrig-tci_io.o -MD -MP -MF wc/$(DEPDIR)/flrig-tci_io.Tpo -c -o wc/flrig-tci_io.o `test -f 'wc/tci_io.cxx' || echo '$(srcdir)/'`wc/tci_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) wc/$(DEPDIR)/flrig-tci_io.Tpo wc/$(DEPDIR)/flrig-tci_io.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='wc/tci_io.cxx' object='wc/flrig-tci_io.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o wc/flrig-tci_io.o `test -f 'wc/tci_io.cxx' || echo '$(srcdir)/'`wc/tci_io.cxx wc/flrig-tci_io.obj: wc/tci_io.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT wc/flrig-tci_io.obj -MD -MP -MF wc/$(DEPDIR)/flrig-tci_io.Tpo -c -o wc/flrig-tci_io.obj `if test -f 'wc/tci_io.cxx'; then $(CYGPATH_W) 'wc/tci_io.cxx'; else $(CYGPATH_W) '$(srcdir)/wc/tci_io.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) wc/$(DEPDIR)/flrig-tci_io.Tpo wc/$(DEPDIR)/flrig-tci_io.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='wc/tci_io.cxx' object='wc/flrig-tci_io.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o wc/flrig-tci_io.obj `if test -f 'wc/tci_io.cxx'; then $(CYGPATH_W) 'wc/tci_io.cxx'; else $(CYGPATH_W) '$(srcdir)/wc/tci_io.cxx'; fi` wc/flrig-WSclient.o: wc/WSclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT wc/flrig-WSclient.o -MD -MP -MF wc/$(DEPDIR)/flrig-WSclient.Tpo -c -o wc/flrig-WSclient.o `test -f 'wc/WSclient.cxx' || echo '$(srcdir)/'`wc/WSclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) wc/$(DEPDIR)/flrig-WSclient.Tpo wc/$(DEPDIR)/flrig-WSclient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='wc/WSclient.cxx' object='wc/flrig-WSclient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o wc/flrig-WSclient.o `test -f 'wc/WSclient.cxx' || echo '$(srcdir)/'`wc/WSclient.cxx wc/flrig-WSclient.obj: wc/WSclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT wc/flrig-WSclient.obj -MD -MP -MF wc/$(DEPDIR)/flrig-WSclient.Tpo -c -o wc/flrig-WSclient.obj `if test -f 'wc/WSclient.cxx'; then $(CYGPATH_W) 'wc/WSclient.cxx'; else $(CYGPATH_W) '$(srcdir)/wc/WSclient.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) wc/$(DEPDIR)/flrig-WSclient.Tpo wc/$(DEPDIR)/flrig-WSclient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='wc/WSclient.cxx' object='wc/flrig-WSclient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o wc/flrig-WSclient.obj `if test -f 'wc/WSclient.cxx'; then $(CYGPATH_W) 'wc/WSclient.cxx'; else $(CYGPATH_W) '$(srcdir)/wc/WSclient.cxx'; fi` UI/flrig-K3_ui.o: UI/K3_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-K3_ui.o -MD -MP -MF UI/$(DEPDIR)/flrig-K3_ui.Tpo -c -o UI/flrig-K3_ui.o `test -f 'UI/K3_ui.cxx' || echo '$(srcdir)/'`UI/K3_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-K3_ui.Tpo UI/$(DEPDIR)/flrig-K3_ui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/K3_ui.cxx' object='UI/flrig-K3_ui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-K3_ui.o `test -f 'UI/K3_ui.cxx' || echo '$(srcdir)/'`UI/K3_ui.cxx UI/flrig-K3_ui.obj: UI/K3_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-K3_ui.obj -MD -MP -MF UI/$(DEPDIR)/flrig-K3_ui.Tpo -c -o UI/flrig-K3_ui.obj `if test -f 'UI/K3_ui.cxx'; then $(CYGPATH_W) 'UI/K3_ui.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/K3_ui.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-K3_ui.Tpo UI/$(DEPDIR)/flrig-K3_ui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/K3_ui.cxx' object='UI/flrig-K3_ui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-K3_ui.obj `if test -f 'UI/K3_ui.cxx'; then $(CYGPATH_W) 'UI/K3_ui.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/K3_ui.cxx'; fi` UI/flrig-KX3_ui.o: UI/KX3_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-KX3_ui.o -MD -MP -MF UI/$(DEPDIR)/flrig-KX3_ui.Tpo -c -o UI/flrig-KX3_ui.o `test -f 'UI/KX3_ui.cxx' || echo '$(srcdir)/'`UI/KX3_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-KX3_ui.Tpo UI/$(DEPDIR)/flrig-KX3_ui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/KX3_ui.cxx' object='UI/flrig-KX3_ui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-KX3_ui.o `test -f 'UI/KX3_ui.cxx' || echo '$(srcdir)/'`UI/KX3_ui.cxx UI/flrig-KX3_ui.obj: UI/KX3_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-KX3_ui.obj -MD -MP -MF UI/$(DEPDIR)/flrig-KX3_ui.Tpo -c -o UI/flrig-KX3_ui.obj `if test -f 'UI/KX3_ui.cxx'; then $(CYGPATH_W) 'UI/KX3_ui.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/KX3_ui.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-KX3_ui.Tpo UI/$(DEPDIR)/flrig-KX3_ui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/KX3_ui.cxx' object='UI/flrig-KX3_ui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-KX3_ui.obj `if test -f 'UI/KX3_ui.cxx'; then $(CYGPATH_W) 'UI/KX3_ui.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/KX3_ui.cxx'; fi` UI/flrig-K4_ui.o: UI/K4_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-K4_ui.o -MD -MP -MF UI/$(DEPDIR)/flrig-K4_ui.Tpo -c -o UI/flrig-K4_ui.o `test -f 'UI/K4_ui.cxx' || echo '$(srcdir)/'`UI/K4_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-K4_ui.Tpo UI/$(DEPDIR)/flrig-K4_ui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/K4_ui.cxx' object='UI/flrig-K4_ui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-K4_ui.o `test -f 'UI/K4_ui.cxx' || echo '$(srcdir)/'`UI/K4_ui.cxx UI/flrig-K4_ui.obj: UI/K4_ui.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-K4_ui.obj -MD -MP -MF UI/$(DEPDIR)/flrig-K4_ui.Tpo -c -o UI/flrig-K4_ui.obj `if test -f 'UI/K4_ui.cxx'; then $(CYGPATH_W) 'UI/K4_ui.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/K4_ui.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-K4_ui.Tpo UI/$(DEPDIR)/flrig-K4_ui.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/K4_ui.cxx' object='UI/flrig-K4_ui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-K4_ui.obj `if test -f 'UI/K4_ui.cxx'; then $(CYGPATH_W) 'UI/K4_ui.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/K4_ui.cxx'; fi` UI/flrig-rigpanel.o: UI/rigpanel.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-rigpanel.o -MD -MP -MF UI/$(DEPDIR)/flrig-rigpanel.Tpo -c -o UI/flrig-rigpanel.o `test -f 'UI/rigpanel.cxx' || echo '$(srcdir)/'`UI/rigpanel.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-rigpanel.Tpo UI/$(DEPDIR)/flrig-rigpanel.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/rigpanel.cxx' object='UI/flrig-rigpanel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-rigpanel.o `test -f 'UI/rigpanel.cxx' || echo '$(srcdir)/'`UI/rigpanel.cxx UI/flrig-rigpanel.obj: UI/rigpanel.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-rigpanel.obj -MD -MP -MF UI/$(DEPDIR)/flrig-rigpanel.Tpo -c -o UI/flrig-rigpanel.obj `if test -f 'UI/rigpanel.cxx'; then $(CYGPATH_W) 'UI/rigpanel.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/rigpanel.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-rigpanel.Tpo UI/$(DEPDIR)/flrig-rigpanel.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/rigpanel.cxx' object='UI/flrig-rigpanel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-rigpanel.obj `if test -f 'UI/rigpanel.cxx'; then $(CYGPATH_W) 'UI/rigpanel.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/rigpanel.cxx'; fi` UI/flrig-meters_dialog.o: UI/meters_dialog.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-meters_dialog.o -MD -MP -MF UI/$(DEPDIR)/flrig-meters_dialog.Tpo -c -o UI/flrig-meters_dialog.o `test -f 'UI/meters_dialog.cxx' || echo '$(srcdir)/'`UI/meters_dialog.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-meters_dialog.Tpo UI/$(DEPDIR)/flrig-meters_dialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/meters_dialog.cxx' object='UI/flrig-meters_dialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-meters_dialog.o `test -f 'UI/meters_dialog.cxx' || echo '$(srcdir)/'`UI/meters_dialog.cxx UI/flrig-meters_dialog.obj: UI/meters_dialog.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT UI/flrig-meters_dialog.obj -MD -MP -MF UI/$(DEPDIR)/flrig-meters_dialog.Tpo -c -o UI/flrig-meters_dialog.obj `if test -f 'UI/meters_dialog.cxx'; then $(CYGPATH_W) 'UI/meters_dialog.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/meters_dialog.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) UI/$(DEPDIR)/flrig-meters_dialog.Tpo UI/$(DEPDIR)/flrig-meters_dialog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UI/meters_dialog.cxx' object='UI/flrig-meters_dialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o UI/flrig-meters_dialog.obj `if test -f 'UI/meters_dialog.cxx'; then $(CYGPATH_W) 'UI/meters_dialog.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/meters_dialog.cxx'; fi` widgets/flrig-combo.o: widgets/combo.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-combo.o -MD -MP -MF widgets/$(DEPDIR)/flrig-combo.Tpo -c -o widgets/flrig-combo.o `test -f 'widgets/combo.cxx' || echo '$(srcdir)/'`widgets/combo.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-combo.Tpo widgets/$(DEPDIR)/flrig-combo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/combo.cxx' object='widgets/flrig-combo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-combo.o `test -f 'widgets/combo.cxx' || echo '$(srcdir)/'`widgets/combo.cxx widgets/flrig-combo.obj: widgets/combo.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-combo.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-combo.Tpo -c -o widgets/flrig-combo.obj `if test -f 'widgets/combo.cxx'; then $(CYGPATH_W) 'widgets/combo.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/combo.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-combo.Tpo widgets/$(DEPDIR)/flrig-combo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/combo.cxx' object='widgets/flrig-combo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-combo.obj `if test -f 'widgets/combo.cxx'; then $(CYGPATH_W) 'widgets/combo.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/combo.cxx'; fi` widgets/flrig-Fl_SigBar.o: widgets/Fl_SigBar.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-Fl_SigBar.o -MD -MP -MF widgets/$(DEPDIR)/flrig-Fl_SigBar.Tpo -c -o widgets/flrig-Fl_SigBar.o `test -f 'widgets/Fl_SigBar.cxx' || echo '$(srcdir)/'`widgets/Fl_SigBar.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-Fl_SigBar.Tpo widgets/$(DEPDIR)/flrig-Fl_SigBar.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/Fl_SigBar.cxx' object='widgets/flrig-Fl_SigBar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-Fl_SigBar.o `test -f 'widgets/Fl_SigBar.cxx' || echo '$(srcdir)/'`widgets/Fl_SigBar.cxx widgets/flrig-Fl_SigBar.obj: widgets/Fl_SigBar.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-Fl_SigBar.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-Fl_SigBar.Tpo -c -o widgets/flrig-Fl_SigBar.obj `if test -f 'widgets/Fl_SigBar.cxx'; then $(CYGPATH_W) 'widgets/Fl_SigBar.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/Fl_SigBar.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-Fl_SigBar.Tpo widgets/$(DEPDIR)/flrig-Fl_SigBar.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/Fl_SigBar.cxx' object='widgets/flrig-Fl_SigBar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-Fl_SigBar.obj `if test -f 'widgets/Fl_SigBar.cxx'; then $(CYGPATH_W) 'widgets/Fl_SigBar.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/Fl_SigBar.cxx'; fi` widgets/flrig-flbrowser2.o: widgets/flbrowser2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-flbrowser2.o -MD -MP -MF widgets/$(DEPDIR)/flrig-flbrowser2.Tpo -c -o widgets/flrig-flbrowser2.o `test -f 'widgets/flbrowser2.cxx' || echo '$(srcdir)/'`widgets/flbrowser2.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-flbrowser2.Tpo widgets/$(DEPDIR)/flrig-flbrowser2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/flbrowser2.cxx' object='widgets/flrig-flbrowser2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-flbrowser2.o `test -f 'widgets/flbrowser2.cxx' || echo '$(srcdir)/'`widgets/flbrowser2.cxx widgets/flrig-flbrowser2.obj: widgets/flbrowser2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-flbrowser2.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-flbrowser2.Tpo -c -o widgets/flrig-flbrowser2.obj `if test -f 'widgets/flbrowser2.cxx'; then $(CYGPATH_W) 'widgets/flbrowser2.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/flbrowser2.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-flbrowser2.Tpo widgets/$(DEPDIR)/flrig-flbrowser2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/flbrowser2.cxx' object='widgets/flrig-flbrowser2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-flbrowser2.obj `if test -f 'widgets/flbrowser2.cxx'; then $(CYGPATH_W) 'widgets/flbrowser2.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/flbrowser2.cxx'; fi` widgets/flrig-flinput2.o: widgets/flinput2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-flinput2.o -MD -MP -MF widgets/$(DEPDIR)/flrig-flinput2.Tpo -c -o widgets/flrig-flinput2.o `test -f 'widgets/flinput2.cxx' || echo '$(srcdir)/'`widgets/flinput2.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-flinput2.Tpo widgets/$(DEPDIR)/flrig-flinput2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/flinput2.cxx' object='widgets/flrig-flinput2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-flinput2.o `test -f 'widgets/flinput2.cxx' || echo '$(srcdir)/'`widgets/flinput2.cxx widgets/flrig-flinput2.obj: widgets/flinput2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-flinput2.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-flinput2.Tpo -c -o widgets/flrig-flinput2.obj `if test -f 'widgets/flinput2.cxx'; then $(CYGPATH_W) 'widgets/flinput2.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/flinput2.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-flinput2.Tpo widgets/$(DEPDIR)/flrig-flinput2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/flinput2.cxx' object='widgets/flrig-flinput2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-flinput2.obj `if test -f 'widgets/flinput2.cxx'; then $(CYGPATH_W) 'widgets/flinput2.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/flinput2.cxx'; fi` widgets/flrig-flslider2.o: widgets/flslider2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-flslider2.o -MD -MP -MF widgets/$(DEPDIR)/flrig-flslider2.Tpo -c -o widgets/flrig-flslider2.o `test -f 'widgets/flslider2.cxx' || echo '$(srcdir)/'`widgets/flslider2.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-flslider2.Tpo widgets/$(DEPDIR)/flrig-flslider2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/flslider2.cxx' object='widgets/flrig-flslider2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-flslider2.o `test -f 'widgets/flslider2.cxx' || echo '$(srcdir)/'`widgets/flslider2.cxx widgets/flrig-flslider2.obj: widgets/flslider2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-flslider2.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-flslider2.Tpo -c -o widgets/flrig-flslider2.obj `if test -f 'widgets/flslider2.cxx'; then $(CYGPATH_W) 'widgets/flslider2.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/flslider2.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-flslider2.Tpo widgets/$(DEPDIR)/flrig-flslider2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/flslider2.cxx' object='widgets/flrig-flslider2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-flslider2.obj `if test -f 'widgets/flslider2.cxx'; then $(CYGPATH_W) 'widgets/flslider2.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/flslider2.cxx'; fi` widgets/flrig-font_browser.o: widgets/font_browser.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-font_browser.o -MD -MP -MF widgets/$(DEPDIR)/flrig-font_browser.Tpo -c -o widgets/flrig-font_browser.o `test -f 'widgets/font_browser.cxx' || echo '$(srcdir)/'`widgets/font_browser.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-font_browser.Tpo widgets/$(DEPDIR)/flrig-font_browser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/font_browser.cxx' object='widgets/flrig-font_browser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-font_browser.o `test -f 'widgets/font_browser.cxx' || echo '$(srcdir)/'`widgets/font_browser.cxx widgets/flrig-font_browser.obj: widgets/font_browser.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-font_browser.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-font_browser.Tpo -c -o widgets/flrig-font_browser.obj `if test -f 'widgets/font_browser.cxx'; then $(CYGPATH_W) 'widgets/font_browser.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/font_browser.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-font_browser.Tpo widgets/$(DEPDIR)/flrig-font_browser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/font_browser.cxx' object='widgets/flrig-font_browser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-font_browser.obj `if test -f 'widgets/font_browser.cxx'; then $(CYGPATH_W) 'widgets/font_browser.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/font_browser.cxx'; fi` widgets/flrig-FreqControl.o: widgets/FreqControl.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-FreqControl.o -MD -MP -MF widgets/$(DEPDIR)/flrig-FreqControl.Tpo -c -o widgets/flrig-FreqControl.o `test -f 'widgets/FreqControl.cxx' || echo '$(srcdir)/'`widgets/FreqControl.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-FreqControl.Tpo widgets/$(DEPDIR)/flrig-FreqControl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/FreqControl.cxx' object='widgets/flrig-FreqControl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-FreqControl.o `test -f 'widgets/FreqControl.cxx' || echo '$(srcdir)/'`widgets/FreqControl.cxx widgets/flrig-FreqControl.obj: widgets/FreqControl.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-FreqControl.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-FreqControl.Tpo -c -o widgets/flrig-FreqControl.obj `if test -f 'widgets/FreqControl.cxx'; then $(CYGPATH_W) 'widgets/FreqControl.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/FreqControl.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-FreqControl.Tpo widgets/$(DEPDIR)/flrig-FreqControl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/FreqControl.cxx' object='widgets/flrig-FreqControl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-FreqControl.obj `if test -f 'widgets/FreqControl.cxx'; then $(CYGPATH_W) 'widgets/FreqControl.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/FreqControl.cxx'; fi` widgets/flrig-pl_tones.o: widgets/pl_tones.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-pl_tones.o -MD -MP -MF widgets/$(DEPDIR)/flrig-pl_tones.Tpo -c -o widgets/flrig-pl_tones.o `test -f 'widgets/pl_tones.cxx' || echo '$(srcdir)/'`widgets/pl_tones.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-pl_tones.Tpo widgets/$(DEPDIR)/flrig-pl_tones.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/pl_tones.cxx' object='widgets/flrig-pl_tones.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-pl_tones.o `test -f 'widgets/pl_tones.cxx' || echo '$(srcdir)/'`widgets/pl_tones.cxx widgets/flrig-pl_tones.obj: widgets/pl_tones.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-pl_tones.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-pl_tones.Tpo -c -o widgets/flrig-pl_tones.obj `if test -f 'widgets/pl_tones.cxx'; then $(CYGPATH_W) 'widgets/pl_tones.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/pl_tones.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-pl_tones.Tpo widgets/$(DEPDIR)/flrig-pl_tones.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/pl_tones.cxx' object='widgets/flrig-pl_tones.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-pl_tones.obj `if test -f 'widgets/pl_tones.cxx'; then $(CYGPATH_W) 'widgets/pl_tones.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/pl_tones.cxx'; fi` widgets/flrig-ValueSlider.o: widgets/ValueSlider.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-ValueSlider.o -MD -MP -MF widgets/$(DEPDIR)/flrig-ValueSlider.Tpo -c -o widgets/flrig-ValueSlider.o `test -f 'widgets/ValueSlider.cxx' || echo '$(srcdir)/'`widgets/ValueSlider.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-ValueSlider.Tpo widgets/$(DEPDIR)/flrig-ValueSlider.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/ValueSlider.cxx' object='widgets/flrig-ValueSlider.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-ValueSlider.o `test -f 'widgets/ValueSlider.cxx' || echo '$(srcdir)/'`widgets/ValueSlider.cxx widgets/flrig-ValueSlider.obj: widgets/ValueSlider.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-ValueSlider.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-ValueSlider.Tpo -c -o widgets/flrig-ValueSlider.obj `if test -f 'widgets/ValueSlider.cxx'; then $(CYGPATH_W) 'widgets/ValueSlider.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/ValueSlider.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-ValueSlider.Tpo widgets/$(DEPDIR)/flrig-ValueSlider.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/ValueSlider.cxx' object='widgets/flrig-ValueSlider.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-ValueSlider.obj `if test -f 'widgets/ValueSlider.cxx'; then $(CYGPATH_W) 'widgets/ValueSlider.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/ValueSlider.cxx'; fi` widgets/flrig-hspinner.o: widgets/hspinner.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-hspinner.o -MD -MP -MF widgets/$(DEPDIR)/flrig-hspinner.Tpo -c -o widgets/flrig-hspinner.o `test -f 'widgets/hspinner.cxx' || echo '$(srcdir)/'`widgets/hspinner.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-hspinner.Tpo widgets/$(DEPDIR)/flrig-hspinner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/hspinner.cxx' object='widgets/flrig-hspinner.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-hspinner.o `test -f 'widgets/hspinner.cxx' || echo '$(srcdir)/'`widgets/hspinner.cxx widgets/flrig-hspinner.obj: widgets/hspinner.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT widgets/flrig-hspinner.obj -MD -MP -MF widgets/$(DEPDIR)/flrig-hspinner.Tpo -c -o widgets/flrig-hspinner.obj `if test -f 'widgets/hspinner.cxx'; then $(CYGPATH_W) 'widgets/hspinner.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/hspinner.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) widgets/$(DEPDIR)/flrig-hspinner.Tpo widgets/$(DEPDIR)/flrig-hspinner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='widgets/hspinner.cxx' object='widgets/flrig-hspinner.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o widgets/flrig-hspinner.obj `if test -f 'widgets/hspinner.cxx'; then $(CYGPATH_W) 'widgets/hspinner.cxx'; else $(CYGPATH_W) '$(srcdir)/widgets/hspinner.cxx'; fi` support/flrig-tod_clock.o: support/tod_clock.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-tod_clock.o -MD -MP -MF support/$(DEPDIR)/flrig-tod_clock.Tpo -c -o support/flrig-tod_clock.o `test -f 'support/tod_clock.cxx' || echo '$(srcdir)/'`support/tod_clock.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-tod_clock.Tpo support/$(DEPDIR)/flrig-tod_clock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/tod_clock.cxx' object='support/flrig-tod_clock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-tod_clock.o `test -f 'support/tod_clock.cxx' || echo '$(srcdir)/'`support/tod_clock.cxx support/flrig-tod_clock.obj: support/tod_clock.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT support/flrig-tod_clock.obj -MD -MP -MF support/$(DEPDIR)/flrig-tod_clock.Tpo -c -o support/flrig-tod_clock.obj `if test -f 'support/tod_clock.cxx'; then $(CYGPATH_W) 'support/tod_clock.cxx'; else $(CYGPATH_W) '$(srcdir)/support/tod_clock.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) support/$(DEPDIR)/flrig-tod_clock.Tpo support/$(DEPDIR)/flrig-tod_clock.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='support/tod_clock.cxx' object='support/flrig-tod_clock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o support/flrig-tod_clock.obj `if test -f 'support/tod_clock.cxx'; then $(CYGPATH_W) 'support/tod_clock.cxx'; else $(CYGPATH_W) '$(srcdir)/support/tod_clock.cxx'; fi` server/flrig-xml_server.o: server/xml_server.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT server/flrig-xml_server.o -MD -MP -MF server/$(DEPDIR)/flrig-xml_server.Tpo -c -o server/flrig-xml_server.o `test -f 'server/xml_server.cxx' || echo '$(srcdir)/'`server/xml_server.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) server/$(DEPDIR)/flrig-xml_server.Tpo server/$(DEPDIR)/flrig-xml_server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server/xml_server.cxx' object='server/flrig-xml_server.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o server/flrig-xml_server.o `test -f 'server/xml_server.cxx' || echo '$(srcdir)/'`server/xml_server.cxx server/flrig-xml_server.obj: server/xml_server.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT server/flrig-xml_server.obj -MD -MP -MF server/$(DEPDIR)/flrig-xml_server.Tpo -c -o server/flrig-xml_server.obj `if test -f 'server/xml_server.cxx'; then $(CYGPATH_W) 'server/xml_server.cxx'; else $(CYGPATH_W) '$(srcdir)/server/xml_server.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) server/$(DEPDIR)/flrig-xml_server.Tpo server/$(DEPDIR)/flrig-xml_server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server/xml_server.cxx' object='server/flrig-xml_server.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o server/flrig-xml_server.obj `if test -f 'server/xml_server.cxx'; then $(CYGPATH_W) 'server/xml_server.cxx'; else $(CYGPATH_W) '$(srcdir)/server/xml_server.cxx'; fi` server/flrig-xmlrpc_rig.o: server/xmlrpc_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT server/flrig-xmlrpc_rig.o -MD -MP -MF server/$(DEPDIR)/flrig-xmlrpc_rig.Tpo -c -o server/flrig-xmlrpc_rig.o `test -f 'server/xmlrpc_rig.cxx' || echo '$(srcdir)/'`server/xmlrpc_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) server/$(DEPDIR)/flrig-xmlrpc_rig.Tpo server/$(DEPDIR)/flrig-xmlrpc_rig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server/xmlrpc_rig.cxx' object='server/flrig-xmlrpc_rig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o server/flrig-xmlrpc_rig.o `test -f 'server/xmlrpc_rig.cxx' || echo '$(srcdir)/'`server/xmlrpc_rig.cxx server/flrig-xmlrpc_rig.obj: server/xmlrpc_rig.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT server/flrig-xmlrpc_rig.obj -MD -MP -MF server/$(DEPDIR)/flrig-xmlrpc_rig.Tpo -c -o server/flrig-xmlrpc_rig.obj `if test -f 'server/xmlrpc_rig.cxx'; then $(CYGPATH_W) 'server/xmlrpc_rig.cxx'; else $(CYGPATH_W) '$(srcdir)/server/xmlrpc_rig.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) server/$(DEPDIR)/flrig-xmlrpc_rig.Tpo server/$(DEPDIR)/flrig-xmlrpc_rig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server/xmlrpc_rig.cxx' object='server/flrig-xmlrpc_rig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o server/flrig-xmlrpc_rig.obj `if test -f 'server/xmlrpc_rig.cxx'; then $(CYGPATH_W) 'server/xmlrpc_rig.cxx'; else $(CYGPATH_W) '$(srcdir)/server/xmlrpc_rig.cxx'; fi` cwio/flrig-cwio.o: cwio/cwio.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cwio/flrig-cwio.o -MD -MP -MF cwio/$(DEPDIR)/flrig-cwio.Tpo -c -o cwio/flrig-cwio.o `test -f 'cwio/cwio.cxx' || echo '$(srcdir)/'`cwio/cwio.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cwio/$(DEPDIR)/flrig-cwio.Tpo cwio/$(DEPDIR)/flrig-cwio.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cwio/cwio.cxx' object='cwio/flrig-cwio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cwio/flrig-cwio.o `test -f 'cwio/cwio.cxx' || echo '$(srcdir)/'`cwio/cwio.cxx cwio/flrig-cwio.obj: cwio/cwio.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cwio/flrig-cwio.obj -MD -MP -MF cwio/$(DEPDIR)/flrig-cwio.Tpo -c -o cwio/flrig-cwio.obj `if test -f 'cwio/cwio.cxx'; then $(CYGPATH_W) 'cwio/cwio.cxx'; else $(CYGPATH_W) '$(srcdir)/cwio/cwio.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cwio/$(DEPDIR)/flrig-cwio.Tpo cwio/$(DEPDIR)/flrig-cwio.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cwio/cwio.cxx' object='cwio/flrig-cwio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cwio/flrig-cwio.obj `if test -f 'cwio/cwio.cxx'; then $(CYGPATH_W) 'cwio/cwio.cxx'; else $(CYGPATH_W) '$(srcdir)/cwio/cwio.cxx'; fi` cwio/flrig-morse.o: cwio/morse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cwio/flrig-morse.o -MD -MP -MF cwio/$(DEPDIR)/flrig-morse.Tpo -c -o cwio/flrig-morse.o `test -f 'cwio/morse.cxx' || echo '$(srcdir)/'`cwio/morse.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cwio/$(DEPDIR)/flrig-morse.Tpo cwio/$(DEPDIR)/flrig-morse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cwio/morse.cxx' object='cwio/flrig-morse.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cwio/flrig-morse.o `test -f 'cwio/morse.cxx' || echo '$(srcdir)/'`cwio/morse.cxx cwio/flrig-morse.obj: cwio/morse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cwio/flrig-morse.obj -MD -MP -MF cwio/$(DEPDIR)/flrig-morse.Tpo -c -o cwio/flrig-morse.obj `if test -f 'cwio/morse.cxx'; then $(CYGPATH_W) 'cwio/morse.cxx'; else $(CYGPATH_W) '$(srcdir)/cwio/morse.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cwio/$(DEPDIR)/flrig-morse.Tpo cwio/$(DEPDIR)/flrig-morse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cwio/morse.cxx' object='cwio/flrig-morse.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cwio/flrig-morse.obj `if test -f 'cwio/morse.cxx'; then $(CYGPATH_W) 'cwio/morse.cxx'; else $(CYGPATH_W) '$(srcdir)/cwio/morse.cxx'; fi` cwio/flrig-cwioUI.o: cwio/cwioUI.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cwio/flrig-cwioUI.o -MD -MP -MF cwio/$(DEPDIR)/flrig-cwioUI.Tpo -c -o cwio/flrig-cwioUI.o `test -f 'cwio/cwioUI.cxx' || echo '$(srcdir)/'`cwio/cwioUI.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cwio/$(DEPDIR)/flrig-cwioUI.Tpo cwio/$(DEPDIR)/flrig-cwioUI.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cwio/cwioUI.cxx' object='cwio/flrig-cwioUI.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cwio/flrig-cwioUI.o `test -f 'cwio/cwioUI.cxx' || echo '$(srcdir)/'`cwio/cwioUI.cxx cwio/flrig-cwioUI.obj: cwio/cwioUI.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cwio/flrig-cwioUI.obj -MD -MP -MF cwio/$(DEPDIR)/flrig-cwioUI.Tpo -c -o cwio/flrig-cwioUI.obj `if test -f 'cwio/cwioUI.cxx'; then $(CYGPATH_W) 'cwio/cwioUI.cxx'; else $(CYGPATH_W) '$(srcdir)/cwio/cwioUI.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cwio/$(DEPDIR)/flrig-cwioUI.Tpo cwio/$(DEPDIR)/flrig-cwioUI.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cwio/cwioUI.cxx' object='cwio/flrig-cwioUI.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cwio/flrig-cwioUI.obj `if test -f 'cwio/cwioUI.cxx'; then $(CYGPATH_W) 'cwio/cwioUI.cxx'; else $(CYGPATH_W) '$(srcdir)/cwio/cwioUI.cxx'; fi` cwio/flrig-precise_time.o: cwio/precise_time.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cwio/flrig-precise_time.o -MD -MP -MF cwio/$(DEPDIR)/flrig-precise_time.Tpo -c -o cwio/flrig-precise_time.o `test -f 'cwio/precise_time.cxx' || echo '$(srcdir)/'`cwio/precise_time.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cwio/$(DEPDIR)/flrig-precise_time.Tpo cwio/$(DEPDIR)/flrig-precise_time.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cwio/precise_time.cxx' object='cwio/flrig-precise_time.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cwio/flrig-precise_time.o `test -f 'cwio/precise_time.cxx' || echo '$(srcdir)/'`cwio/precise_time.cxx cwio/flrig-precise_time.obj: cwio/precise_time.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cwio/flrig-precise_time.obj -MD -MP -MF cwio/$(DEPDIR)/flrig-precise_time.Tpo -c -o cwio/flrig-precise_time.obj `if test -f 'cwio/precise_time.cxx'; then $(CYGPATH_W) 'cwio/precise_time.cxx'; else $(CYGPATH_W) '$(srcdir)/cwio/precise_time.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cwio/$(DEPDIR)/flrig-precise_time.Tpo cwio/$(DEPDIR)/flrig-precise_time.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cwio/precise_time.cxx' object='cwio/flrig-precise_time.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cwio/flrig-precise_time.obj `if test -f 'cwio/precise_time.cxx'; then $(CYGPATH_W) 'cwio/precise_time.cxx'; else $(CYGPATH_W) '$(srcdir)/cwio/precise_time.cxx'; fi` cmedia/flrig-cmedia.o: cmedia/cmedia.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cmedia/flrig-cmedia.o -MD -MP -MF cmedia/$(DEPDIR)/flrig-cmedia.Tpo -c -o cmedia/flrig-cmedia.o `test -f 'cmedia/cmedia.cxx' || echo '$(srcdir)/'`cmedia/cmedia.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cmedia/$(DEPDIR)/flrig-cmedia.Tpo cmedia/$(DEPDIR)/flrig-cmedia.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmedia/cmedia.cxx' object='cmedia/flrig-cmedia.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cmedia/flrig-cmedia.o `test -f 'cmedia/cmedia.cxx' || echo '$(srcdir)/'`cmedia/cmedia.cxx cmedia/flrig-cmedia.obj: cmedia/cmedia.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cmedia/flrig-cmedia.obj -MD -MP -MF cmedia/$(DEPDIR)/flrig-cmedia.Tpo -c -o cmedia/flrig-cmedia.obj `if test -f 'cmedia/cmedia.cxx'; then $(CYGPATH_W) 'cmedia/cmedia.cxx'; else $(CYGPATH_W) '$(srcdir)/cmedia/cmedia.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cmedia/$(DEPDIR)/flrig-cmedia.Tpo cmedia/$(DEPDIR)/flrig-cmedia.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmedia/cmedia.cxx' object='cmedia/flrig-cmedia.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cmedia/flrig-cmedia.obj `if test -f 'cmedia/cmedia.cxx'; then $(CYGPATH_W) 'cmedia/cmedia.cxx'; else $(CYGPATH_W) '$(srcdir)/cmedia/cmedia.cxx'; fi` cmedia/flrig-hid.o: cmedia/hid.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cmedia/flrig-hid.o -MD -MP -MF cmedia/$(DEPDIR)/flrig-hid.Tpo -c -o cmedia/flrig-hid.o `test -f 'cmedia/hid.cxx' || echo '$(srcdir)/'`cmedia/hid.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cmedia/$(DEPDIR)/flrig-hid.Tpo cmedia/$(DEPDIR)/flrig-hid.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmedia/hid.cxx' object='cmedia/flrig-hid.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cmedia/flrig-hid.o `test -f 'cmedia/hid.cxx' || echo '$(srcdir)/'`cmedia/hid.cxx cmedia/flrig-hid.obj: cmedia/hid.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cmedia/flrig-hid.obj -MD -MP -MF cmedia/$(DEPDIR)/flrig-hid.Tpo -c -o cmedia/flrig-hid.obj `if test -f 'cmedia/hid.cxx'; then $(CYGPATH_W) 'cmedia/hid.cxx'; else $(CYGPATH_W) '$(srcdir)/cmedia/hid.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cmedia/$(DEPDIR)/flrig-hid.Tpo cmedia/$(DEPDIR)/flrig-hid.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmedia/hid.cxx' object='cmedia/flrig-hid.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cmedia/flrig-hid.obj `if test -f 'cmedia/hid.cxx'; then $(CYGPATH_W) 'cmedia/hid.cxx'; else $(CYGPATH_W) '$(srcdir)/cmedia/hid.cxx'; fi` cmedia/flrig-tmate2.o: cmedia/tmate2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cmedia/flrig-tmate2.o -MD -MP -MF cmedia/$(DEPDIR)/flrig-tmate2.Tpo -c -o cmedia/flrig-tmate2.o `test -f 'cmedia/tmate2.cxx' || echo '$(srcdir)/'`cmedia/tmate2.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cmedia/$(DEPDIR)/flrig-tmate2.Tpo cmedia/$(DEPDIR)/flrig-tmate2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmedia/tmate2.cxx' object='cmedia/flrig-tmate2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cmedia/flrig-tmate2.o `test -f 'cmedia/tmate2.cxx' || echo '$(srcdir)/'`cmedia/tmate2.cxx cmedia/flrig-tmate2.obj: cmedia/tmate2.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT cmedia/flrig-tmate2.obj -MD -MP -MF cmedia/$(DEPDIR)/flrig-tmate2.Tpo -c -o cmedia/flrig-tmate2.obj `if test -f 'cmedia/tmate2.cxx'; then $(CYGPATH_W) 'cmedia/tmate2.cxx'; else $(CYGPATH_W) '$(srcdir)/cmedia/tmate2.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) cmedia/$(DEPDIR)/flrig-tmate2.Tpo cmedia/$(DEPDIR)/flrig-tmate2.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmedia/tmate2.cxx' object='cmedia/flrig-tmate2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o cmedia/flrig-tmate2.obj `if test -f 'cmedia/tmate2.cxx'; then $(CYGPATH_W) 'cmedia/tmate2.cxx'; else $(CYGPATH_W) '$(srcdir)/cmedia/tmate2.cxx'; fi` fskio/flrig-fsk.o: fskio/fsk.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT fskio/flrig-fsk.o -MD -MP -MF fskio/$(DEPDIR)/flrig-fsk.Tpo -c -o fskio/flrig-fsk.o `test -f 'fskio/fsk.cxx' || echo '$(srcdir)/'`fskio/fsk.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fskio/$(DEPDIR)/flrig-fsk.Tpo fskio/$(DEPDIR)/flrig-fsk.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fskio/fsk.cxx' object='fskio/flrig-fsk.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o fskio/flrig-fsk.o `test -f 'fskio/fsk.cxx' || echo '$(srcdir)/'`fskio/fsk.cxx fskio/flrig-fsk.obj: fskio/fsk.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT fskio/flrig-fsk.obj -MD -MP -MF fskio/$(DEPDIR)/flrig-fsk.Tpo -c -o fskio/flrig-fsk.obj `if test -f 'fskio/fsk.cxx'; then $(CYGPATH_W) 'fskio/fsk.cxx'; else $(CYGPATH_W) '$(srcdir)/fskio/fsk.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fskio/$(DEPDIR)/flrig-fsk.Tpo fskio/$(DEPDIR)/flrig-fsk.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fskio/fsk.cxx' object='fskio/flrig-fsk.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o fskio/flrig-fsk.obj `if test -f 'fskio/fsk.cxx'; then $(CYGPATH_W) 'fskio/fsk.cxx'; else $(CYGPATH_W) '$(srcdir)/fskio/fsk.cxx'; fi` fskio/flrig-fskioUI.o: fskio/fskioUI.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT fskio/flrig-fskioUI.o -MD -MP -MF fskio/$(DEPDIR)/flrig-fskioUI.Tpo -c -o fskio/flrig-fskioUI.o `test -f 'fskio/fskioUI.cxx' || echo '$(srcdir)/'`fskio/fskioUI.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fskio/$(DEPDIR)/flrig-fskioUI.Tpo fskio/$(DEPDIR)/flrig-fskioUI.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fskio/fskioUI.cxx' object='fskio/flrig-fskioUI.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o fskio/flrig-fskioUI.o `test -f 'fskio/fskioUI.cxx' || echo '$(srcdir)/'`fskio/fskioUI.cxx fskio/flrig-fskioUI.obj: fskio/fskioUI.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT fskio/flrig-fskioUI.obj -MD -MP -MF fskio/$(DEPDIR)/flrig-fskioUI.Tpo -c -o fskio/flrig-fskioUI.obj `if test -f 'fskio/fskioUI.cxx'; then $(CYGPATH_W) 'fskio/fskioUI.cxx'; else $(CYGPATH_W) '$(srcdir)/fskio/fskioUI.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fskio/$(DEPDIR)/flrig-fskioUI.Tpo fskio/$(DEPDIR)/flrig-fskioUI.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fskio/fskioUI.cxx' object='fskio/flrig-fskioUI.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o fskio/flrig-fskioUI.obj `if test -f 'fskio/fskioUI.cxx'; then $(CYGPATH_W) 'fskio/fskioUI.cxx'; else $(CYGPATH_W) '$(srcdir)/fskio/fskioUI.cxx'; fi` log/flrig-cwlog.o: log/cwlog.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT log/flrig-cwlog.o -MD -MP -MF log/$(DEPDIR)/flrig-cwlog.Tpo -c -o log/flrig-cwlog.o `test -f 'log/cwlog.cxx' || echo '$(srcdir)/'`log/cwlog.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) log/$(DEPDIR)/flrig-cwlog.Tpo log/$(DEPDIR)/flrig-cwlog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='log/cwlog.cxx' object='log/flrig-cwlog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o log/flrig-cwlog.o `test -f 'log/cwlog.cxx' || echo '$(srcdir)/'`log/cwlog.cxx log/flrig-cwlog.obj: log/cwlog.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT log/flrig-cwlog.obj -MD -MP -MF log/$(DEPDIR)/flrig-cwlog.Tpo -c -o log/flrig-cwlog.obj `if test -f 'log/cwlog.cxx'; then $(CYGPATH_W) 'log/cwlog.cxx'; else $(CYGPATH_W) '$(srcdir)/log/cwlog.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) log/$(DEPDIR)/flrig-cwlog.Tpo log/$(DEPDIR)/flrig-cwlog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='log/cwlog.cxx' object='log/flrig-cwlog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o log/flrig-cwlog.obj `if test -f 'log/cwlog.cxx'; then $(CYGPATH_W) 'log/cwlog.cxx'; else $(CYGPATH_W) '$(srcdir)/log/cwlog.cxx'; fi` log/flrig-fsklog.o: log/fsklog.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT log/flrig-fsklog.o -MD -MP -MF log/$(DEPDIR)/flrig-fsklog.Tpo -c -o log/flrig-fsklog.o `test -f 'log/fsklog.cxx' || echo '$(srcdir)/'`log/fsklog.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) log/$(DEPDIR)/flrig-fsklog.Tpo log/$(DEPDIR)/flrig-fsklog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='log/fsklog.cxx' object='log/flrig-fsklog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o log/flrig-fsklog.o `test -f 'log/fsklog.cxx' || echo '$(srcdir)/'`log/fsklog.cxx log/flrig-fsklog.obj: log/fsklog.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT log/flrig-fsklog.obj -MD -MP -MF log/$(DEPDIR)/flrig-fsklog.Tpo -c -o log/flrig-fsklog.obj `if test -f 'log/fsklog.cxx'; then $(CYGPATH_W) 'log/fsklog.cxx'; else $(CYGPATH_W) '$(srcdir)/log/fsklog.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) log/$(DEPDIR)/flrig-fsklog.Tpo log/$(DEPDIR)/flrig-fsklog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='log/fsklog.cxx' object='log/flrig-fsklog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o log/flrig-fsklog.obj `if test -f 'log/fsklog.cxx'; then $(CYGPATH_W) 'log/fsklog.cxx'; else $(CYGPATH_W) '$(srcdir)/log/fsklog.cxx'; fi` graphics/flrig-pixmaps.o: graphics/pixmaps.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT graphics/flrig-pixmaps.o -MD -MP -MF graphics/$(DEPDIR)/flrig-pixmaps.Tpo -c -o graphics/flrig-pixmaps.o `test -f 'graphics/pixmaps.cxx' || echo '$(srcdir)/'`graphics/pixmaps.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) graphics/$(DEPDIR)/flrig-pixmaps.Tpo graphics/$(DEPDIR)/flrig-pixmaps.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='graphics/pixmaps.cxx' object='graphics/flrig-pixmaps.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o graphics/flrig-pixmaps.o `test -f 'graphics/pixmaps.cxx' || echo '$(srcdir)/'`graphics/pixmaps.cxx graphics/flrig-pixmaps.obj: graphics/pixmaps.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT graphics/flrig-pixmaps.obj -MD -MP -MF graphics/$(DEPDIR)/flrig-pixmaps.Tpo -c -o graphics/flrig-pixmaps.obj `if test -f 'graphics/pixmaps.cxx'; then $(CYGPATH_W) 'graphics/pixmaps.cxx'; else $(CYGPATH_W) '$(srcdir)/graphics/pixmaps.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) graphics/$(DEPDIR)/flrig-pixmaps.Tpo graphics/$(DEPDIR)/flrig-pixmaps.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='graphics/pixmaps.cxx' object='graphics/flrig-pixmaps.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o graphics/flrig-pixmaps.obj `if test -f 'graphics/pixmaps.cxx'; then $(CYGPATH_W) 'graphics/pixmaps.cxx'; else $(CYGPATH_W) '$(srcdir)/graphics/pixmaps.cxx'; fi` graphics/flrig-icons.o: graphics/icons.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT graphics/flrig-icons.o -MD -MP -MF graphics/$(DEPDIR)/flrig-icons.Tpo -c -o graphics/flrig-icons.o `test -f 'graphics/icons.cxx' || echo '$(srcdir)/'`graphics/icons.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) graphics/$(DEPDIR)/flrig-icons.Tpo graphics/$(DEPDIR)/flrig-icons.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='graphics/icons.cxx' object='graphics/flrig-icons.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o graphics/flrig-icons.o `test -f 'graphics/icons.cxx' || echo '$(srcdir)/'`graphics/icons.cxx graphics/flrig-icons.obj: graphics/icons.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT graphics/flrig-icons.obj -MD -MP -MF graphics/$(DEPDIR)/flrig-icons.Tpo -c -o graphics/flrig-icons.obj `if test -f 'graphics/icons.cxx'; then $(CYGPATH_W) 'graphics/icons.cxx'; else $(CYGPATH_W) '$(srcdir)/graphics/icons.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) graphics/$(DEPDIR)/flrig-icons.Tpo graphics/$(DEPDIR)/flrig-icons.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='graphics/icons.cxx' object='graphics/flrig-icons.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o graphics/flrig-icons.obj `if test -f 'graphics/icons.cxx'; then $(CYGPATH_W) 'graphics/icons.cxx'; else $(CYGPATH_W) '$(srcdir)/graphics/icons.cxx'; fi` graphics/flrig-images.o: graphics/images.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT graphics/flrig-images.o -MD -MP -MF graphics/$(DEPDIR)/flrig-images.Tpo -c -o graphics/flrig-images.o `test -f 'graphics/images.cxx' || echo '$(srcdir)/'`graphics/images.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) graphics/$(DEPDIR)/flrig-images.Tpo graphics/$(DEPDIR)/flrig-images.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='graphics/images.cxx' object='graphics/flrig-images.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o graphics/flrig-images.o `test -f 'graphics/images.cxx' || echo '$(srcdir)/'`graphics/images.cxx graphics/flrig-images.obj: graphics/images.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT graphics/flrig-images.obj -MD -MP -MF graphics/$(DEPDIR)/flrig-images.Tpo -c -o graphics/flrig-images.obj `if test -f 'graphics/images.cxx'; then $(CYGPATH_W) 'graphics/images.cxx'; else $(CYGPATH_W) '$(srcdir)/graphics/images.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) graphics/$(DEPDIR)/flrig-images.Tpo graphics/$(DEPDIR)/flrig-images.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='graphics/images.cxx' object='graphics/flrig-images.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o graphics/flrig-images.obj `if test -f 'graphics/images.cxx'; then $(CYGPATH_W) 'graphics/images.cxx'; else $(CYGPATH_W) '$(srcdir)/graphics/images.cxx'; fi` flrig-main.o: main.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT flrig-main.o -MD -MP -MF $(DEPDIR)/flrig-main.Tpo -c -o flrig-main.o `test -f 'main.cxx' || echo '$(srcdir)/'`main.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/flrig-main.Tpo $(DEPDIR)/flrig-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='main.cxx' object='flrig-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o flrig-main.o `test -f 'main.cxx' || echo '$(srcdir)/'`main.cxx flrig-main.obj: main.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -MT flrig-main.obj -MD -MP -MF $(DEPDIR)/flrig-main.Tpo -c -o flrig-main.obj `if test -f 'main.cxx'; then $(CYGPATH_W) 'main.cxx'; else $(CYGPATH_W) '$(srcdir)/main.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/flrig-main.Tpo $(DEPDIR)/flrig-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='main.cxx' object='flrig-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flrig_CPPFLAGS) $(CPPFLAGS) $(flrig_CXXFLAGS) $(CXXFLAGS) -c -o flrig-main.obj `if test -f 'main.cxx'; then $(CYGPATH_W) 'main.cxx'; else $(CYGPATH_W) '$(srcdir)/main.cxx'; fi` .cxx.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) config.h installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f UI/$(DEPDIR)/$(am__dirstamp) -rm -f UI/$(am__dirstamp) -rm -f cmedia/$(DEPDIR)/$(am__dirstamp) -rm -f cmedia/$(am__dirstamp) -rm -f cwio/$(DEPDIR)/$(am__dirstamp) -rm -f cwio/$(am__dirstamp) -rm -f fskio/$(DEPDIR)/$(am__dirstamp) -rm -f fskio/$(am__dirstamp) -rm -f graphics/$(DEPDIR)/$(am__dirstamp) -rm -f graphics/$(am__dirstamp) -rm -f log/$(DEPDIR)/$(am__dirstamp) -rm -f log/$(am__dirstamp) -rm -f rigs/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/$(am__dirstamp) -rm -f rigs/elad/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/elad/$(am__dirstamp) -rm -f rigs/elecraft/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/elecraft/$(am__dirstamp) -rm -f rigs/icom/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/icom/$(am__dirstamp) -rm -f rigs/kenwood/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/kenwood/$(am__dirstamp) -rm -f rigs/lab599/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/lab599/$(am__dirstamp) -rm -f rigs/other/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/other/$(am__dirstamp) -rm -f rigs/qrp_labs/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/qrp_labs/$(am__dirstamp) -rm -f rigs/tentec/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/tentec/$(am__dirstamp) -rm -f rigs/xiegu/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/xiegu/$(am__dirstamp) -rm -f rigs/yaesu/$(DEPDIR)/$(am__dirstamp) -rm -f rigs/yaesu/$(am__dirstamp) -rm -f server/$(DEPDIR)/$(am__dirstamp) -rm -f server/$(am__dirstamp) -rm -f support/$(DEPDIR)/$(am__dirstamp) -rm -f support/$(am__dirstamp) -rm -f wc/$(DEPDIR)/$(am__dirstamp) -rm -f wc/$(am__dirstamp) -rm -f widgets/$(DEPDIR)/$(am__dirstamp) -rm -f widgets/$(am__dirstamp) -rm -f xmlrpcpp/$(DEPDIR)/$(am__dirstamp) -rm -f xmlrpcpp/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/flrig-main.Po -rm -f UI/$(DEPDIR)/flrig-K3_ui.Po -rm -f UI/$(DEPDIR)/flrig-K4_ui.Po -rm -f UI/$(DEPDIR)/flrig-KX3_ui.Po -rm -f UI/$(DEPDIR)/flrig-meters_dialog.Po -rm -f UI/$(DEPDIR)/flrig-rigpanel.Po -rm -f cmedia/$(DEPDIR)/flrig-cmedia.Po -rm -f cmedia/$(DEPDIR)/flrig-hid.Po -rm -f cmedia/$(DEPDIR)/flrig-tmate2.Po -rm -f cwio/$(DEPDIR)/flrig-cwio.Po -rm -f cwio/$(DEPDIR)/flrig-cwioUI.Po -rm -f cwio/$(DEPDIR)/flrig-morse.Po -rm -f cwio/$(DEPDIR)/flrig-precise_time.Po -rm -f fskio/$(DEPDIR)/flrig-fsk.Po -rm -f fskio/$(DEPDIR)/flrig-fskioUI.Po -rm -f graphics/$(DEPDIR)/flrig-icons.Po -rm -f graphics/$(DEPDIR)/flrig-images.Po -rm -f graphics/$(DEPDIR)/flrig-pixmaps.Po -rm -f log/$(DEPDIR)/flrig-cwlog.Po -rm -f log/$(DEPDIR)/flrig-fsklog.Po -rm -f rigs/$(DEPDIR)/flrig-rigbase.Po -rm -f rigs/$(DEPDIR)/flrig-rigs.Po -rm -f rigs/elad/$(DEPDIR)/flrig-FDMDUO.Po -rm -f rigs/elecraft/$(DEPDIR)/flrig-K2.Po -rm -f rigs/elecraft/$(DEPDIR)/flrig-K3.Po -rm -f rigs/elecraft/$(DEPDIR)/flrig-K4.Po -rm -f rigs/elecraft/$(DEPDIR)/flrig-KX3.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7000.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC703.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC705.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7100.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC718.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7200.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC728.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7300.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC735.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7410.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC746.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC751.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC756.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7600.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7610.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7700.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7800.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7851.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC910.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC9100.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC9700.Po -rm -f rigs/icom/$(DEPDIR)/flrig-ICF8101.Po -rm -f rigs/icom/$(DEPDIR)/flrig-ICR71.Po -rm -f rigs/icom/$(DEPDIR)/flrig-ICbase.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS140.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS2000.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS440.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS450S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS570.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS590S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS790.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS850.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS870S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS890S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS940S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS950.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS990.Po -rm -f rigs/lab599/$(DEPDIR)/flrig-TX500.Po -rm -f rigs/other/$(DEPDIR)/flrig-AOR5K.Po -rm -f rigs/other/$(DEPDIR)/flrig-FLEX1500.Po -rm -f rigs/other/$(DEPDIR)/flrig-PCR1000.Po -rm -f rigs/other/$(DEPDIR)/flrig-PowerSDR.Po -rm -f rigs/other/$(DEPDIR)/flrig-RAY152.Po -rm -f rigs/other/$(DEPDIR)/flrig-SmartSDR.Po -rm -f rigs/other/$(DEPDIR)/flrig-TMD710.Po -rm -f rigs/other/$(DEPDIR)/flrig-sunsdr2.Po -rm -f rigs/other/$(DEPDIR)/flrig-tcisdr.Po -rm -f rigs/other/$(DEPDIR)/flrig-trusdx.Po -rm -f rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Po -rm -f rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Po -rm -f rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT516.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT538.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT550.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT563.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT566.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT588.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT599.Po -rm -f rigs/xiegu/$(DEPDIR)/flrig-X6100.Po -rm -f rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Po -rm -f rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT1000.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT100D.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT2000.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT450.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT450D.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT5000.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT710.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT736R.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT747.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT767.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT817.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT818.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT847.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT857D.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT890.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT891.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT900.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT920.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT950.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT990.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT990a.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT991.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT991A.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Po -rm -f server/$(DEPDIR)/flrig-xml_server.Po -rm -f server/$(DEPDIR)/flrig-xmlrpc_rig.Po -rm -f support/$(DEPDIR)/flrig-TT550_support.Po -rm -f support/$(DEPDIR)/flrig-debug.Po -rm -f support/$(DEPDIR)/flrig-dialogs.Po -rm -f support/$(DEPDIR)/flrig-gpio_ptt.Po -rm -f support/$(DEPDIR)/flrig-init_rig.Po -rm -f support/$(DEPDIR)/flrig-init_user_interface.Po -rm -f support/$(DEPDIR)/flrig-mingw.Po -rm -f support/$(DEPDIR)/flrig-ptt.Po -rm -f support/$(DEPDIR)/flrig-read_rig.Po -rm -f support/$(DEPDIR)/flrig-restore_rig.Po -rm -f support/$(DEPDIR)/flrig-rig_io.Po -rm -f support/$(DEPDIR)/flrig-serial.Po -rm -f support/$(DEPDIR)/flrig-socket.Po -rm -f support/$(DEPDIR)/flrig-socket_io.Po -rm -f support/$(DEPDIR)/flrig-status.Po -rm -f support/$(DEPDIR)/flrig-support.Po -rm -f support/$(DEPDIR)/flrig-threads.Po -rm -f support/$(DEPDIR)/flrig-timeops.Po -rm -f support/$(DEPDIR)/flrig-tod_clock.Po -rm -f support/$(DEPDIR)/flrig-trace.Po -rm -f support/$(DEPDIR)/flrig-util.Po -rm -f wc/$(DEPDIR)/flrig-WSclient.Po -rm -f wc/$(DEPDIR)/flrig-tci_io.Po -rm -f widgets/$(DEPDIR)/flrig-Fl_SigBar.Po -rm -f widgets/$(DEPDIR)/flrig-FreqControl.Po -rm -f widgets/$(DEPDIR)/flrig-ValueSlider.Po -rm -f widgets/$(DEPDIR)/flrig-combo.Po -rm -f widgets/$(DEPDIR)/flrig-flbrowser2.Po -rm -f widgets/$(DEPDIR)/flrig-flinput2.Po -rm -f widgets/$(DEPDIR)/flrig-flslider2.Po -rm -f widgets/$(DEPDIR)/flrig-font_browser.Po -rm -f widgets/$(DEPDIR)/flrig-hspinner.Po -rm -f widgets/$(DEPDIR)/flrig-pl_tones.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: installcheck-binPROGRAMS maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/flrig-main.Po -rm -f UI/$(DEPDIR)/flrig-K3_ui.Po -rm -f UI/$(DEPDIR)/flrig-K4_ui.Po -rm -f UI/$(DEPDIR)/flrig-KX3_ui.Po -rm -f UI/$(DEPDIR)/flrig-meters_dialog.Po -rm -f UI/$(DEPDIR)/flrig-rigpanel.Po -rm -f cmedia/$(DEPDIR)/flrig-cmedia.Po -rm -f cmedia/$(DEPDIR)/flrig-hid.Po -rm -f cmedia/$(DEPDIR)/flrig-tmate2.Po -rm -f cwio/$(DEPDIR)/flrig-cwio.Po -rm -f cwio/$(DEPDIR)/flrig-cwioUI.Po -rm -f cwio/$(DEPDIR)/flrig-morse.Po -rm -f cwio/$(DEPDIR)/flrig-precise_time.Po -rm -f fskio/$(DEPDIR)/flrig-fsk.Po -rm -f fskio/$(DEPDIR)/flrig-fskioUI.Po -rm -f graphics/$(DEPDIR)/flrig-icons.Po -rm -f graphics/$(DEPDIR)/flrig-images.Po -rm -f graphics/$(DEPDIR)/flrig-pixmaps.Po -rm -f log/$(DEPDIR)/flrig-cwlog.Po -rm -f log/$(DEPDIR)/flrig-fsklog.Po -rm -f rigs/$(DEPDIR)/flrig-rigbase.Po -rm -f rigs/$(DEPDIR)/flrig-rigs.Po -rm -f rigs/elad/$(DEPDIR)/flrig-FDMDUO.Po -rm -f rigs/elecraft/$(DEPDIR)/flrig-K2.Po -rm -f rigs/elecraft/$(DEPDIR)/flrig-K3.Po -rm -f rigs/elecraft/$(DEPDIR)/flrig-K4.Po -rm -f rigs/elecraft/$(DEPDIR)/flrig-KX3.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7000.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC703.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC705.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC706MKIIG.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7100.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC718.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7200.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC728.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7300.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC735.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7410.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC746.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC751.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC756.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC756PRO2.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC756PRO3.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7600.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7610.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7700.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7800.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC7851.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC910.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC9100.Po -rm -f rigs/icom/$(DEPDIR)/flrig-IC9700.Po -rm -f rigs/icom/$(DEPDIR)/flrig-ICF8101.Po -rm -f rigs/icom/$(DEPDIR)/flrig-ICR71.Po -rm -f rigs/icom/$(DEPDIR)/flrig-ICbase.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-KENWOOD.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS140.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS2000.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS440.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS450S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS480HX.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS480SAT.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS570.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS590S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS590SG.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS790.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS850.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS870S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS890S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS940S.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS950.Po -rm -f rigs/kenwood/$(DEPDIR)/flrig-TS990.Po -rm -f rigs/lab599/$(DEPDIR)/flrig-TX500.Po -rm -f rigs/other/$(DEPDIR)/flrig-AOR5K.Po -rm -f rigs/other/$(DEPDIR)/flrig-FLEX1500.Po -rm -f rigs/other/$(DEPDIR)/flrig-PCR1000.Po -rm -f rigs/other/$(DEPDIR)/flrig-PowerSDR.Po -rm -f rigs/other/$(DEPDIR)/flrig-RAY152.Po -rm -f rigs/other/$(DEPDIR)/flrig-SmartSDR.Po -rm -f rigs/other/$(DEPDIR)/flrig-TMD710.Po -rm -f rigs/other/$(DEPDIR)/flrig-sunsdr2.Po -rm -f rigs/other/$(DEPDIR)/flrig-tcisdr.Po -rm -f rigs/other/$(DEPDIR)/flrig-trusdx.Po -rm -f rigs/qrp_labs/$(DEPDIR)/flrig-QCXplus.Po -rm -f rigs/qrp_labs/$(DEPDIR)/flrig-QDX.Po -rm -f rigs/qrp_labs/$(DEPDIR)/flrig-QMX.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-DELTA-II.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT516.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT538.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT550.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT563.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT566.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT588.Po -rm -f rigs/tentec/$(DEPDIR)/flrig-TT599.Po -rm -f rigs/xiegu/$(DEPDIR)/flrig-X6100.Po -rm -f rigs/xiegu/$(DEPDIR)/flrig-Xiegu-5105.Po -rm -f rigs/xiegu/$(DEPDIR)/flrig-Xiegu-G90.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT1000.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT1000MP.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT1000MP_A.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT100D.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT2000.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT450.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT450D.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT5000.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT710.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT736R.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT747.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT757GX2.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT767.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT817.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT817BB.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT818.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT847.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT857D.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT890.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT891.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT900.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT920.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT950.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT990.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT990a.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT991.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FT991A.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx10.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx101D.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx1200.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx3000.Po -rm -f rigs/yaesu/$(DEPDIR)/flrig-FTdx9000.Po -rm -f server/$(DEPDIR)/flrig-xml_server.Po -rm -f server/$(DEPDIR)/flrig-xmlrpc_rig.Po -rm -f support/$(DEPDIR)/flrig-TT550_support.Po -rm -f support/$(DEPDIR)/flrig-debug.Po -rm -f support/$(DEPDIR)/flrig-dialogs.Po -rm -f support/$(DEPDIR)/flrig-gpio_ptt.Po -rm -f support/$(DEPDIR)/flrig-init_rig.Po -rm -f support/$(DEPDIR)/flrig-init_user_interface.Po -rm -f support/$(DEPDIR)/flrig-mingw.Po -rm -f support/$(DEPDIR)/flrig-ptt.Po -rm -f support/$(DEPDIR)/flrig-read_rig.Po -rm -f support/$(DEPDIR)/flrig-restore_rig.Po -rm -f support/$(DEPDIR)/flrig-rig_io.Po -rm -f support/$(DEPDIR)/flrig-serial.Po -rm -f support/$(DEPDIR)/flrig-socket.Po -rm -f support/$(DEPDIR)/flrig-socket_io.Po -rm -f support/$(DEPDIR)/flrig-status.Po -rm -f support/$(DEPDIR)/flrig-support.Po -rm -f support/$(DEPDIR)/flrig-threads.Po -rm -f support/$(DEPDIR)/flrig-timeops.Po -rm -f support/$(DEPDIR)/flrig-tod_clock.Po -rm -f support/$(DEPDIR)/flrig-trace.Po -rm -f support/$(DEPDIR)/flrig-util.Po -rm -f wc/$(DEPDIR)/flrig-WSclient.Po -rm -f wc/$(DEPDIR)/flrig-tci_io.Po -rm -f widgets/$(DEPDIR)/flrig-Fl_SigBar.Po -rm -f widgets/$(DEPDIR)/flrig-FreqControl.Po -rm -f widgets/$(DEPDIR)/flrig-ValueSlider.Po -rm -f widgets/$(DEPDIR)/flrig-combo.Po -rm -f widgets/$(DEPDIR)/flrig-flbrowser2.Po -rm -f widgets/$(DEPDIR)/flrig-flinput2.Po -rm -f widgets/$(DEPDIR)/flrig-flslider2.Po -rm -f widgets/$(DEPDIR)/flrig-font_browser.Po -rm -f widgets/$(DEPDIR)/flrig-hspinner.Po -rm -f widgets/$(DEPDIR)/flrig-pl_tones.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcClient.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcDispatch.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcMutex.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServer.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerConnection.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcServerMethod.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSocket.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcSource.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcUtil.Po -rm -f xmlrpcpp/$(DEPDIR)/flrig-XmlRpcValue.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-local .MAKE: all check install install-am install-exec install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-local cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-hdr distclean-tags distdir dvi dvi-am html html-am \ info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am \ installcheck-binPROGRAMS installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-local .PRECIOUS: Makefile .EXPORT_ALL_VARIABLES: nsisinst appbundle @HAVE_WINDRES_TRUE@@MINGW32_TRUE@.rc.o: @HAVE_WINDRES_TRUE@@MINGW32_TRUE@ $(WINDRES) -I$(srcdir)/include -I$(srcdir)/../data/win32 $< -O coff $@ install-data-local: if test -f $(srcdir)/../data/flrig.xpm; then \ $(mkinstalldirs) $(DESTDIR)/$(datadir)/pixmaps; \ $(INSTALL_DATA) $(srcdir)/../data/flrig.xpm $(DESTDIR)/$(datadir)/pixmaps; \ fi if test -f $(srcdir)/../data/flrig.desktop; then \ $(mkinstalldirs) $(DESTDIR)/$(datadir)/applications; \ $(INSTALL_DATA) $(srcdir)/../data/flrig.desktop $(DESTDIR)/$(datadir)/applications; \ fi uninstall-local: rm -f $(DESTDIR)/$(datadir)/pixmaps/flrig.xpm rm -f $(DESTDIR)/$(datadir)/applications/flrig.desktop @HAVE_NSIS_TRUE@nsisinst: $(bin_PROGRAMS) @HAVE_NSIS_TRUE@ sh $(srcdir)/../scripts/mknsisinst.sh "$(srcdir)/../data" . @DARWIN_TRUE@appbundle: $(bin_PROGRAMS) @DARWIN_TRUE@ sh $(srcdir)/../scripts/mkappbundle.sh "$(srcdir)/../data" . clean-local: -rm -rf $(CLEAN_LOCAL) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flrig-2.0.04/src/config.h.in0000664000175000017500000002014114511461162012434 00000000000000/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Build platform */ #undef BUILD_BUILD_PLATFORM /* Compiler */ #undef BUILD_COMPILER /* Configure arguments */ #undef BUILD_CONFIGURE_ARGS /* Build date */ #undef BUILD_DATE /* Build host */ #undef BUILD_HOST /* Host platform */ #undef BUILD_HOST_PLATFORM /* Target platform */ #undef BUILD_TARGET_PLATFORM /* Build user */ #undef BUILD_USER /* FLRIG compiler flags */ #undef FLRIG_BUILD_CXXFLAGS /* FLRIG linker flags */ #undef FLRIG_BUILD_LDFLAGS /* FLTK API major version */ #undef FLRIG_FLTK_API_MAJOR /* FLTK API minor version */ #undef FLRIG_FLTK_API_MINOR /* version string */ #undef FLRIG_VERSION /* major version number */ #undef FLRIG_VERSION_MAJOR /* minor version number */ #undef FLRIG_VERSION_MINOR /* patch/alpha version string */ #undef FLRIG_VERSION_PATCH /* FLTK version */ #undef FLTK_BUILD_VERSION /* flxmlrpc version */ #undef FLXMLRPC_BUILD_VERSION /* Define to 1 if we have clock_gettime */ #undef HAVE_CLOCK_GETTIME /* Define to 0 if not using dbg::stack */ #undef HAVE_DBG_STACK /* Define to 1 if we have dlopen */ #undef HAVE_DLOPEN /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `gmtime_r' function. */ #undef HAVE_GMTIME_R /* Define to 1 if you have the `hstrerror' function. */ #undef HAVE_HSTRERROR /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the header file. */ #undef HAVE_MINIX_CONFIG_H /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if we have sem_timedwait */ #undef HAVE_SEM_TIMEDWAIT /* Define to 1 if we have sem_unlink */ #undef HAVE_SEM_UNLINK /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `socketpair' function. */ #undef HAVE_SOCKETPAIR /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strcasestr' function. */ #undef HAVE_STRCASESTR /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strlcpy' function. */ #undef HAVE_STRLCPY /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `uname' function. */ #undef HAVE_UNAME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `unsetenv' function. */ #undef HAVE_UNSETENV /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define to 1 if we are using flxmlrpc */ #undef USE_FLXMLRPC /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Define to 1 if we are using x */ #undef USE_X /* Version number of package */ #undef VERSION /* x version */ #undef X_BUILD_VERSION /* Define to 1 if we are building on cygwin or mingw */ #undef _WINDOWS /* Define to 1 if we are building on cygwin or mingw */ #undef __MINGW32__ /* Define to 1 if we are building on mingw */ #undef __WIN32__ /* Define to `unsigned int' if does not define. */ #undef size_t flrig-2.0.04/src/config.h0000664000175000017500000002224314511461605012036 00000000000000/* src/config.h. Generated from config.h.in by configure. */ /* src/config.h.in. Generated from configure.ac by autoheader. */ /* Build platform */ #define BUILD_BUILD_PLATFORM "x86_64-pc-linux-gnu" /* Compiler */ #define BUILD_COMPILER "gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) " /* Configure arguments */ #define BUILD_CONFIGURE_ARGS "" /* Build date */ #define BUILD_DATE "Wed Oct 11 03:57:41 CDT 2023" /* Build host */ #define BUILD_HOST "tk7" /* Host platform */ #define BUILD_HOST_PLATFORM "x86_64-pc-linux-gnu" /* Target platform */ #define BUILD_TARGET_PLATFORM "x86_64-pc-linux-gnu" /* Build user */ #define BUILD_USER "dave" /* FLRIG compiler flags */ #define FLRIG_BUILD_CXXFLAGS "-I$(srcdir) -I$(srcdir)/include -I$(srcdir)/xmlrpcpp -I$(srcdir)/xmlrpcpp -I/usr/local/include -I/usr/local/include/FL/images -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -I$(srcdir) -I$(srcdir)/include -pipe -Wall -fexceptions -O2 -DNDEBUG" /* FLRIG linker flags */ #define FLRIG_BUILD_LDFLAGS "-L/usr/local/lib -lfltk_images -lpng -lz -lfltk_jpeg -lfltk -lXrender -lXft -lfontconfig -lpthread -lm -lX11 -lX11 -ludev" /* FLTK API major version */ #define FLRIG_FLTK_API_MAJOR 1 /* FLTK API minor version */ #define FLRIG_FLTK_API_MINOR 3 /* version string */ #define FLRIG_VERSION "2.0.04" /* major version number */ #define FLRIG_VERSION_MAJOR 2 /* minor version number */ #define FLRIG_VERSION_MINOR 0 /* patch/alpha version string */ #define FLRIG_VERSION_PATCH ".04" /* FLTK version */ #define FLTK_BUILD_VERSION "1.3.8" /* flxmlrpc version */ #define FLXMLRPC_BUILD_VERSION "" /* Define to 1 if we have clock_gettime */ #define HAVE_CLOCK_GETTIME 1 /* Define to 0 if not using dbg::stack */ /* #undef HAVE_DBG_STACK */ /* Define to 1 if we have dlopen */ #define HAVE_DLOPEN 1 /* Define to 1 if you have the `getaddrinfo' function. */ #define HAVE_GETADDRINFO 1 /* Define to 1 if you have the `gethostbyname' function. */ #define HAVE_GETHOSTBYNAME 1 /* Define to 1 if you have the `gmtime_r' function. */ #define HAVE_GMTIME_R 1 /* Define to 1 if you have the `hstrerror' function. */ #define HAVE_HSTRERROR 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `localtime_r' function. */ #define HAVE_LOCALTIME_R 1 /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the `memset' function. */ #define HAVE_MEMSET 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_MINIX_CONFIG_H */ /* Define to 1 if you have the `mkdir' function. */ #define HAVE_MKDIR 1 /* Define to 1 if you have the `select' function. */ #define HAVE_SELECT 1 /* Define to 1 if we have sem_timedwait */ #define HAVE_SEM_TIMEDWAIT 1 /* Define to 1 if we have sem_unlink */ #define HAVE_SEM_UNLINK 1 /* Define to 1 if you have the `setenv' function. */ #define HAVE_SETENV 1 /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 /* Define to 1 if you have the `socket' function. */ #define HAVE_SOCKET 1 /* Define to 1 if you have the `socketpair' function. */ #define HAVE_SOCKETPAIR 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the `strcasestr' function. */ #define HAVE_STRCASESTR 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #define HAVE_STRERROR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strlcpy' function. */ /* #undef HAVE_STRLCPY */ /* Define to 1 if you have the `strncasecmp' function. */ #define HAVE_STRNCASECMP 1 /* Define to 1 if you have the `strrchr' function. */ #define HAVE_STRRCHR 1 /* Define to 1 if you have the `strstr' function. */ #define HAVE_STRSTR 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `uname' function. */ #define HAVE_UNAME 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the `unsetenv' function. */ #define HAVE_UNSETENV 1 /* Define to 1 if you have the `vsnprintf' function. */ #define HAVE_VSNPRINTF 1 /* Define to 1 if you have the header file. */ #define HAVE_WCHAR_H 1 /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Name of package */ #define PACKAGE "flrig" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "w1hkj AT w1hkj DOT com" /* Define to the full name of this package. */ #define PACKAGE_NAME "FLRIG" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "FLRIG 2.0.04" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "flrig" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.0.04" /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #define STDC_HEADERS 1 /* Define to 1 if we are using flxmlrpc */ #define USE_FLXMLRPC 0 /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # define _ALL_SOURCE 1 #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # define _DARWIN_C_SOURCE 1 #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # define __EXTENSIONS__ 1 #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # define _HPUX_ALT_XOPEN_SOCKET_API 1 #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX /* # undef _MINIX */ #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # define _NETBSD_SOURCE 1 #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # define _OPENBSD_SOURCE 1 #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE /* # undef _POSIX_SOURCE */ #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE /* # undef _POSIX_1_SOURCE */ #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # define __STDC_WANT_IEC_60559_DFP_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # define __STDC_WANT_LIB_EXT2__ 1 #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # define __STDC_WANT_MATH_SPEC_FUNCS__ 1 #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # define _TANDEM_SOURCE 1 #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE /* # undef _XOPEN_SOURCE */ #endif /* Define to 1 if we are using x */ #define USE_X 1 /* Version number of package */ #define VERSION "2.0.04" /* x version */ #define X_BUILD_VERSION "1.7.5" /* Define to 1 if we are building on cygwin or mingw */ /* #undef _WINDOWS */ /* Define to 1 if we are building on cygwin or mingw */ /* #undef __MINGW32__ */ /* Define to 1 if we are building on mingw */ /* #undef __WIN32__ */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ flrig-2.0.04/src/server/0000775000175000017500000000000014511461606012004 500000000000000flrig-2.0.04/src/server/xmlrpc_rig.cxx0000664000175000017500000000751214502041135014612 00000000000000// ===================================================================== // // xmlrpc_rig.cxx // // connect to client xmlrpc server // // Copyright (C) 2023 // Dave Freese, W1HKJ // // This is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // It is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // ===================================================================== #include #include #include #include #include #include "XmlRpc.h" #include "config.h" #include "status.h" #include "util.h" #include "threads.h" #include "tod_clock.h" #include "xmlrpc_rig.h" #include "trace.h" using namespace XmlRpc; int xmlrpc_verbosity = 0; XmlRpcClient *flrig_client = (XmlRpcClient *)0; bool is_binary(std::string s) { for (size_t n = 0; n < s.length(); n++) if (!isprint(s[n])) return true; return false; } void xmlrpc_ptt( int PTT) { XmlRpcValue Args, result; Args = (int)PTT; try { flrig_client->execute("rig.set_ptt", Args, result); } catch (XmlRpcException *err) { xml_trace(2, "rig.set_ptt: %s", err->getMessage().c_str()); } } bool xml_ptt_state() { XmlRpcValue Args, result; try { flrig_client->execute("rig.get_ptt", Args, result); bool ptt = (int)result; return ptt; } catch (XmlRpcException *err) { xml_trace(2, "rig.get_ptt: %s", err->getMessage().c_str()); return false; } } bool connected_to_client = false; std::string xml_cat_string( std::string send ) { XmlRpcValue Args, result; if (is_binary(send)) Args = (std::string)to_hex(send); else Args = (std::string)send; try { if (flrig_client->execute("rig.client_string", Args, result)) { std::string res = (std::string)result; if (res.find("x") != std::string::npos) { std::string raw; size_t p = 0; unsigned int val; while (( p = res.find("x", p)) != std::string::npos) { sscanf(&res[p+1], "%x", &val); raw += (unsigned char) val; p += 3; } res = raw; } return res; } else { return "?"; } } catch (XmlRpcException *err) { xml_trace(2, "rig.client_string: %s", err->getMessage().c_str()); return "?"; } } std::string client_get_xcvr() { std::string _xcvr_name; XmlRpcValue result; try { if (flrig_client->execute("rig.get_xcvr", XmlRpcValue(), result) ) { _xcvr_name = std::string(result); } } catch (XmlRpcException *err) { xml_trace(2, "rig.get_xcvr: %s", err->getMessage().c_str()); connected_to_client = false; } return _xcvr_name; } bool client_connection() { XmlRpcValue noArgs, result; try { if (flrig_client->execute("system.listMethods", noArgs, result)) { int nargs = result.size(); std::string method_str = "\nMethods:\n"; for (int i = 0; i < nargs; i++) method_str.append(" ").append(result[i]).append("\n"); connected_to_client = true; client_get_xcvr(); } else { connected_to_client = false; } } catch (...) { return false; } return connected_to_client; } bool connect_to_client() { XmlRpc::setVerbosity(xmlrpc_verbosity); if (flrig_client) { delete flrig_client; flrig_client = (XmlRpcClient *)0; } try { flrig_client = new XmlRpcClient( progStatus.xmlrig_addr.c_str(), atol(progStatus.xmlrig_port.c_str())); return client_connection(); } catch (...) { xml_trace(3,"Cannot connect to %s : %s", progStatus.xmlrig_addr.c_str(), progStatus.xmlrig_port.c_str()); return false; } } flrig-2.0.04/src/server/xml_server.cxx0000664000175000017500000031431214502041135014631 00000000000000// --------------------------------------------------------------------- // // xml_server.cxx, a part of flrig // // Copyright (C) 2014 // Dave Freese, W1HKJ // // This library is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with the program; if not, write to the // // Free Software Foundation, Inc. // 51 Franklin Street, Fifth Floor // Boston, MA 02110-1301 USA. // // --------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "support.h" #include "debug.h" #include "trace.h" #include "xml_server.h" #include "XmlRpc.h" #include "tod_clock.h" #include "cwioUI.h" #include "ptt.h" #include "rigpanel.h" // The server using namespace XmlRpc; XmlRpcServer rig_server; void connection_OFF(void*) { box_fldigi_connect->color(FL_LIGHT1); box_fldigi_connect->redraw(); } void connection_ON(void *) { box_fldigi_connect->color(FL_GREEN); box_fldigi_connect->redraw(); Fl::remove_timeout(connection_OFF); Fl::add_timeout(1.0, connection_OFF); } //------------------------------------------------------------------------------ // Request for program version //------------------------------------------------------------------------------ class main_get_version : public XmlRpcServerMethod { public: main_get_version(XmlRpcServer* s) : XmlRpcServerMethod("main.get_version", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result = FLRIG_VERSION; } std::string help() { return std::string("returns program version std::string"); } } main_get_version(&rig_server); //------------------------------------------------------------------------------ // Request for transceiver name //------------------------------------------------------------------------------ class rig_get_xcvr : public XmlRpcServerMethod { public: rig_get_xcvr(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_xcvr", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) result = ""; else result = selrig->name_; } std::string help() { return std::string("returns noun name of transceiver"); } } rig_get_xcvr(&rig_server); //------------------------------------------------------------------------------ // Request for info //------------------------------------------------------------------------------ std::string uname; std::string ufreq; std::string umode; std::string unotch; std::string ubw; std::string utx; std::string urfg; std::string uvol; std::string umic; static std::string sname() { std::string temp; temp.assign("R:").append(selrig->name_).append("\n"); return temp; } static std::string stx() { std::string temp; temp.assign("T:").append(btnPTT->value() ? "X" : "R").append("\n"); return temp; } static std::string tempfreq; static std::string tempmode; static std::string tempbw; static void freq_mode_bw() { std::string temp; int freq = 0; int mode = 0; int BW = 0; static char szval[20]; try { snprintf(szval, sizeof(szval), "%d", freq); tempfreq.assign("F").append((selrig->inuse == onB) ? "B:" : "A:").append(szval).append("\n"); BW = (selrig->inuse == onB) ? vfoB.iBW : vfoA.iBW; mode = (selrig->inuse == onB) ? vfoB.imode : vfoA.imode; std::vector& bwt = selrig->bwtable(mode); std::vector& dsplo = selrig->lotable(mode); std::vector& dsphi = selrig->hitable(mode); tempmode.assign("M:").append(selrig->modes_.at(mode)).append("\n"); tempbw.assign("L:").append((BW > 256) ? dsplo.at(BW & 0x7F) : bwt.at(BW & 0x7F)).append("\n"); tempbw.append("U:").append((BW > 256) ? dsphi.at((BW >> 8) & 0x7F) : "n/a").append("\n"); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } static std::string snotch() { std::string temp; static char szval[20]; snprintf(szval, sizeof(szval), "%d", (int)(progStatus.notch_val)); temp.assign("N:").append(szval).append("\n"); return temp; } static std::string svol() { std::string temp; static char szval[20]; int volval = 0; if (spnrVOLUME) volval = spnrVOLUME->value(); else if (sldrVOLUME) volval = sldrVOLUME->value(); snprintf(szval, sizeof(szval), "%d", volval); temp.assign("Vol:").append(szval).append("\n"); return temp; } static std::string srfg() { std::string temp; static char szval[20]; int rfgval = 0; if (spnrRFGAIN) rfgval = spnrRFGAIN->value(); else if (sldrRFGAIN) rfgval = sldrRFGAIN->value(); snprintf(szval, sizeof(szval), "%d", rfgval); temp.assign("Rfg:").append(szval).append("\n"); return temp; } static std::string smic() { std::string temp; static char szval[20]; int micval = 0; if (sldrMICGAIN) micval = sldrMICGAIN->value(); if (spnrMICGAIN) micval = spnrMICGAIN->value(); snprintf(szval, sizeof(szval), "%d", micval); temp.assign("Mic:").append(szval).append("\n"); return temp; } class rig_get_info : public XmlRpcServerMethod { public: rig_get_info(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_info", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); std::string info = ""; if (!xcvr_online || disable_xmlrpc->value()) { result = info; return; } uname = sname(); info.assign(uname); utx = stx(); info.append(utx); freq_mode_bw(); ufreq = tempfreq; info.append(ufreq); umode = tempmode; info.append(umode); ubw = tempbw; info.append(ubw); unotch = snotch(); info.append(unotch); uvol = svol(); info.append(uvol); umic = smic(); info.append(umic); urfg = srfg(); info.append(urfg); result = info; } std::string help() { return std::string("returns all info in single std::string"); } } rig_get_info(&rig_server); class rig_get_update : public XmlRpcServerMethod { public: rig_get_update(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_update", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); std::string info; info.clear(); std::string temp; temp.clear(); if (!xcvr_online || disable_xmlrpc->value()) { result = info; return; } if (selrig->has_smeter && !btnPTT->value()) { static char szval[10]; snprintf(szval, sizeof(szval), "S:%5.0f\n", smtrval); info.append(szval); } if (selrig->has_power_out && btnPTT->value()) { static char szval[10]; snprintf(szval, sizeof(szval), "P:%5.0f\n", pwrval); info.append(szval); } if ((temp = sname()) != uname) { uname = temp; info.append(uname); } if ((temp = stx()) != utx) { utx = temp; info.append(utx);} freq_mode_bw(); if (tempfreq != ufreq) { ufreq = tempfreq; info.append(ufreq); } if (tempmode != umode) { umode = tempmode; info.append(umode); } if (tempbw != ubw) { ubw = tempbw; info.append(ubw); } if ((temp = snotch()) != unotch) { unotch = temp; info.append(unotch); } uvol = svol(); info.append(uvol); umic = smic(); info.append(umic); urfg = srfg(); info.append(urfg); if (info.empty()) info.assign("NIL"); result = info; } std::string help() { return std::string("returns all updates in single std::string"); } } rig_get_update(&rig_server); //------------------------------------------------------------------------------ // Request for PTT state //------------------------------------------------------------------------------ class rig_get_ptt : public XmlRpcServerMethod { public: rig_get_ptt(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_ptt", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result = int(PTT); } std::string help() { return std::string("returns state of PTT"); } } rig_get_ptt(&rig_server); //------------------------------------------------------------------------------ // Request for split state //------------------------------------------------------------------------------ inline void wait() { return; int n = 0; while (!srvc_reqs.empty()) { MilliSleep(10); if (++n == 500) break; } static char s[50]; if (n == 500) snprintf(s, sizeof(s), "wait for srvc_reqs timed out"); else snprintf(s, sizeof(s), "wait for srvc reqs %d msec", 10 * n); xml_trace(1, s); } class rig_get_split : public XmlRpcServerMethod { public: rig_get_split(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_split", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); guard_lock serial(&mutex_serial, "xml 01"); int split_state = selrig->get_split(); progStatus.split = split_state; result = split_state; xml_trace(2, "rig_get_split ", (split_state ? "ON" : "OFF")); } std::string help() { return std::string("returns state of split"); } } rig_get_split(&rig_server); //------------------------------------------------------------------------------ // Request for active vfo frequency //------------------------------------------------------------------------------ class rig_get_vfo : public XmlRpcServerMethod { public: rig_get_vfo(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_vfo", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = "14070000"; return; } static char szfreq[20]; unsigned long long freq; wait(); guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_vfo"); guard_lock serial_lock(&mutex_serial, "xml rig_get_vfo"); if (selrig->ICOMmainsub) { if (progStatus.split && PTT) freq = vfoB.freq; else freq = vfoA.freq; } else { if (selrig->inuse == onB) freq = vfoB.freq; else freq = vfoA.freq; } snprintf(szfreq, sizeof(szfreq), "%llu", freq); std::string result_string = szfreq; xml_trace(2, "rig_get_vfo ", szfreq); result = result_string; } std::string help() { return std::string("returns active vfo in Hertz"); } } rig_get_vfo(&rig_server); //------------------------------------------------------------------------------ // Request for vfo A frequency //------------------------------------------------------------------------------ class rig_get_vfoA : public XmlRpcServerMethod { public: rig_get_vfoA(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_vfoA", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = "14070000"; return; } // int freq; guard_lock serial(&mutex_serial, "xml 02"); vfoA.freq = selrig->get_vfoA(); Fl::awake(setFreqDispA); static char szfreq[20]; snprintf(szfreq, sizeof(szfreq), "%llu", vfoA.freq); std::string result_string = szfreq; xml_trace(2, "rig_get_vfoA", szfreq); result = result_string; } std::string help() { return std::string("returns active vfo in Hertz"); } } rig_get_vfoA(&rig_server); //------------------------------------------------------------------------------ // Request for vfo A frequency //------------------------------------------------------------------------------ class rig_get_vfoB : public XmlRpcServerMethod { public: rig_get_vfoB(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_vfoB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = "14070000"; return; } guard_lock serial(&mutex_serial, "xml 03"); vfoB.freq = selrig->get_vfoB(); Fl::awake(setFreqDispB); static char szfreq[20]; snprintf(szfreq, sizeof(szfreq), "%llu", vfoB.freq); std::string result_string = szfreq; xml_trace(2, "rig_get_vfoB", szfreq); result = result_string; } std::string help() { return std::string("returns active vfo in Hertz"); } } rig_get_vfoB(&rig_server); //------------------------------------------------------------------------------ // Request for vfo in use //------------------------------------------------------------------------------ class rig_get_AB : public XmlRpcServerMethod { public: rig_get_AB(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_AB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = "A"; return; } wait(); guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_AB"); guard_lock serial_lock(&mutex_serial, "xml rig_get_AB"); xml_trace(2, "rig_get_AB: " , ((selrig->inuse == onB) ? "B" : "A")); result = (selrig->inuse == onB) ? "B" : "A"; } std::string help() { return std::string("returns vfo in use A or B"); } } rig_get_AB(&rig_server); //------------------------------------------------------------------------------ // Get notch value //------------------------------------------------------------------------------ int rig_xml_notch_val = 0; class rig_get_notch : public XmlRpcServerMethod { public: rig_get_notch(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_notch", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } if (progStatus.notch) result = (int)(progStatus.notch_val); else result = (int)0; xml_trace(1, "rig_get_notch"); } std::string help() { return std::string("returns notch value"); } } rig_get_notch(&rig_server); //------------------------------------------------------------------------------ // Set notch value //------------------------------------------------------------------------------ class rig_set_notch : public XmlRpcServerMethod { public: rig_set_notch(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_notch", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } static int ntch; ntch = (int)(params[0]); progStatus.notch_val = ntch; if (ntch) progStatus.notch = true; else progStatus.notch = false; guard_lock serial_lock(&mutex_serial, "xml rig_set_notch"); selrig->set_notch(progStatus.notch, progStatus.notch_val); xml_trace(1, "rig_set_notch"); Fl::awake(setNotchControl, static_cast(&ntch)); } std::string help() { return std::string("sets notch value"); } } rig_set_notch(&rig_server); class rig_set_verify_notch : public XmlRpcServerMethod { public: rig_set_verify_notch(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_notch", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } static int ntch; ntch = (int)(params[0]); progStatus.notch_val = ntch; if (ntch) progStatus.notch = true; else progStatus.notch = false; guard_lock serial_lock(&mutex_serial, "xml rig_set_verify_notch"); selrig->set_notch(progStatus.notch, progStatus.notch_val); xml_trace(1, "rig_set_verify_notch"); Fl::awake(setNotchControl, static_cast(&ntch)); } std::string help() { return std::string("sets & verifies notch value"); } } rig_set_verify_notch(&rig_server); //------------------------------------------------------------------------------ // Get rfgain value //------------------------------------------------------------------------------ int rig_xml_rfgain_val = 0; class rig_get_rfgain : public XmlRpcServerMethod { public: rig_get_rfgain(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_rfgain", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } if (progStatus.rfgain) result = (int)(progStatus.rfgain); else result = (int)0; xml_trace(1, "rig_get_rfgain"); } std::string help() { return std::string("returns rfgain value"); } } rig_get_rfgain(&rig_server); //------------------------------------------------------------------------------ // Set rfgain value //------------------------------------------------------------------------------ class rig_set_rfgain : public XmlRpcServerMethod { public: rig_set_rfgain(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_rfgain", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } static int rfg; rfg = static_cast((double)((params[0]))); progStatus.rfgain = rfg; guard_lock serial_lock(&mutex_serial, "xml rig_set_rfgain"); selrig->set_rf_gain(progStatus.rfgain); xml_trace(1, "rig_set_rfgain"); Fl::awake(setRFGAINControl, static_cast(0)); } std::string help() { return std::string("sets rfgain value"); } } rig_set_rfgain(&rig_server); class rig_set_verify_rfgain : public XmlRpcServerMethod { public: rig_set_verify_rfgain(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_rfgain", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } static int rfg; rfg = static_cast((double)((params[0]))); progStatus.rfgain = rfg; guard_lock serial_lock(&mutex_serial, "xml rig_set _verify_rfgain"); selrig->set_rf_gain(progStatus.rfgain); progStatus.rfgain = selrig->get_rf_gain(); xml_trace(1, "rig_set_verify_rfgain"); Fl::awake(setRFGAINControl, static_cast(0)); } std::string help() { return std::string("sets & verifies rfgain value"); } } rig_set_verify_rfgain(&rig_server); class rig_mod_rfg : public XmlRpcServerMethod { public: rig_mod_rfg(XmlRpcServer* s) : XmlRpcServerMethod("rig.mod_rfg", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int min, max, step; selrig->get_rf_min_max_step(min, max, step); int change = (int)(params[0]); progStatus.rfgain += change; if (progStatus.rfgain > max) progStatus.rfgain = max; if (progStatus.rfgain < min) progStatus.rfgain = min; guard_lock serial_lock(&mutex_serial, "xml rig_mod_rfgain"); selrig->set_rf_gain(progStatus.rfgain); xml_trace(1, "rig_mod_rfgain"); Fl::awake(setRFGAINControl, static_cast(0)); } std::string help() { return std::string("modify rfgain +/- NNN units"); } } rig_mod_rfg(&rig_server); //------------------------------------------------------------------------------ // Get micgain value //------------------------------------------------------------------------------ int rig_xml_micgain_val = 0; class rig_get_micgain : public XmlRpcServerMethod { public: rig_get_micgain(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_micgain", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } if (progStatus.mic_gain) result = (int)(progStatus.mic_gain); else result = (int)0; xml_trace(1, "rig_get_micgain"); } std::string help() { return std::string("returns micgain value"); } } rig_get_micgain(&rig_server); //------------------------------------------------------------------------------ // Set micgain value //------------------------------------------------------------------------------ class rig_set_micgain : public XmlRpcServerMethod { public: rig_set_micgain(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_micgain", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } static int micg; micg = (int)(params[0]); progStatus.mic_gain = micg; guard_lock serial_lock(&mutex_serial, "xml rig_set_micgain"); xml_trace(1, "rig_set_micgain"); selrig->set_mic_gain(progStatus.mic_gain); Fl::awake(setMicGainControl, static_cast(0)); } std::string help() { return std::string("sets micgain value"); } } rig_set_micgain(&rig_server); class rig_set_verify_micgain : public XmlRpcServerMethod { public: rig_set_verify_micgain(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_micgain", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } static int micg; micg = (int)(params[0]); progStatus.mic_gain = micg; guard_lock serial_lock(&mutex_serial, "xml rig_set_verify_micgain"); xml_trace(1, "rig_set_verify_micgain"); selrig->set_mic_gain(progStatus.mic_gain); progStatus.mic_gain = selrig->get_mic_gain(); Fl::awake(setMicGainControl, static_cast(0)); } std::string help() { return std::string("sets & verifies micgain value"); } } rig_set_verify_micgain(&rig_server); //------------------------------------------------------------------------------ // Get volume value //------------------------------------------------------------------------------ int rig_xml_volume_val = 0; class rig_get_volume : public XmlRpcServerMethod { public: rig_get_volume(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_volume", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } if (progStatus.volume) result = (int)(progStatus.volume); else result = (int)0; xml_trace(1, "rig_get_volume"); } std::string help() { return std::string("returns volume value"); } } rig_get_volume(&rig_server); //------------------------------------------------------------------------------ // Set volume value //------------------------------------------------------------------------------ class rig_set_volume : public XmlRpcServerMethod { public: rig_set_volume(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_volume", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } static int volume; volume = (int)(params[0]); progStatus.volume = volume; guard_lock serial_lock(&mutex_serial, "xml rig_set_volume"); selrig->set_volume_control(progStatus.volume); xml_trace(1, "rig_set_volume"); Fl::awake(setVolumeControl, static_cast(0)); } std::string help() { return std::string("sets volume value"); } } rig_set_volume(&rig_server); class rig_set_verify_volume : public XmlRpcServerMethod { public: rig_set_verify_volume(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_volume", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } static int volume; volume = (int)(params[0]); progStatus.volume = volume; guard_lock serial_lock(&mutex_serial, "xml rig_set_verify_volume"); selrig->set_volume_control(progStatus.volume); progStatus.volume = selrig->get_volume_control(); xml_trace(1, "rig_set_verify_volume"); Fl::awake(setVolumeControl, static_cast(0)); } std::string help() { return std::string("sets & verifies volume value"); } } rig_set_verify_volume(&rig_server); class rig_mod_vol : public XmlRpcServerMethod { public: rig_mod_vol(XmlRpcServer* s) : XmlRpcServerMethod("rig.mod_vol", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int min, max, step; selrig->get_vol_min_max_step(min, max, step); int change = (int)(params[0]); progStatus.volume += change; if (progStatus.volume > max) progStatus.volume = max; if (progStatus.volume < min) progStatus.volume = min; guard_lock serial_lock(&mutex_serial, "xml rig_mod_volume"); selrig->set_volume_control(progStatus.volume); xml_trace(1, "rig_mod_volume"); Fl::awake(setVolumeControl, static_cast(0)); } std::string help() { return std::string("modify volume +/- NNN"); } } rig_mod_vol(&rig_server); //------------------------------------------------------------------------------ // Request list of modes //------------------------------------------------------------------------------ class rig_get_modes : public XmlRpcServerMethod { public : rig_get_modes(XmlRpcServer *s) : XmlRpcServerMethod("rig.get_modes", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); XmlRpcValue modes; if (!xcvr_online) { modes[0] = "CW"; modes[1] = "LSB"; modes[2] = "USB"; return; } wait(); guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_modes"); guard_lock serial_lock(&mutex_serial, "xml rig_get_modes"); xml_trace(1, "rig_get_modes"); try { int n = 0; for (size_t i = 0; i < selrig->modes_.size(); i++) if (!selrig->modes_.at(i).empty()) modes[n++] = selrig->modes_.at(i); result = modes; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); modes[0] = "CW"; modes[1] = "LSB"; modes[2] = "USB"; return; } } std::string help() { return std::string("returns list of modes"); } } rig_get_modes(&rig_server); //------------------------------------------------------------------------------ // Request for active vfo sideband //------------------------------------------------------------------------------ class rig_get_sideband : public XmlRpcServerMethod { public: rig_get_sideband(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_sideband", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = "U"; return; } int mode; wait(); guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_sideband"); guard_lock serial_lock(&mutex_serial, "xml rig_get_sideband"); mode = vfo->imode; std::string result_string = ""; result_string += selrig->get_modetype(mode); xml_trace(2, "rig_get_sideband ", result_string.c_str()); result = result_string; } std::string help() { return std::string("returns current xcvr sideband (U/L)"); } } rig_get_sideband(&rig_server); //------------------------------------------------------------------------------ // Request for active vfo mode //------------------------------------------------------------------------------ class rig_get_mode : public XmlRpcServerMethod { public: rig_get_mode(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_mode", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online) { result = "USB"; return; } int mode; wait(); try { guard_lock serial_lock(&mutex_serial, "xml rig_get_mode"); mode = vfo->imode; std::string result_string = "none"; result_string = selrig->modes_.at(mode); xml_trace(2, "mode on ", ((selrig->inuse == onB) ? "B " : "A "), result_string.c_str()); result = result_string; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); result = "USB"; } } std::string help() { return std::string("returns current xcvr mode"); } } rig_get_mode(&rig_server); //------------------------------------------------------------------------------ // Request for vfo A mode //------------------------------------------------------------------------------ class rig_get_modeA : public XmlRpcServerMethod { public: rig_get_modeA(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_modeA", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online) { result = "USB"; return; } int mode; wait(); try { guard_lock serial_lock(&mutex_serial, "xml rig_get_mode"); mode = vfoA.imode; std::string result_string = "none"; result_string = selrig->modes_.at(mode); xml_trace(2, "mode A ", result_string.c_str()); result = result_string; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); result = "USB"; } } std::string help() { return std::string("returns vfo A mode"); } } rig_get_modeA(&rig_server); //------------------------------------------------------------------------------ // Request for vfo B mode //------------------------------------------------------------------------------ class rig_get_modeB : public XmlRpcServerMethod { public: rig_get_modeB(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_modeB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online) { result = "USB"; return; } int mode; wait(); try { guard_lock serial_lock(&mutex_serial, "xml rig_get_mode"); mode = vfoB.imode; std::string result_string = "none"; result_string = selrig->modes_.at(mode); xml_trace(2, "mode B ", result_string.c_str()); result = result_string; } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); result = "USB"; } } std::string help() { return std::string("returns vfo A mode"); } } rig_get_modeB(&rig_server); //------------------------------------------------------------------------------ // Request array of bandwidths //------------------------------------------------------------------------------ class rig_get_bws : public XmlRpcServerMethod { public : rig_get_bws(XmlRpcServer *s) : XmlRpcServerMethod("rig.get_bws", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online) { XmlRpcValue bws; bws[0][0] = "Bandwidth"; bws[0][1] = "NONE"; result = bws; return; } XmlRpcValue bws; wait(); try { guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_bws"); guard_lock serial_lock(&mutex_serial, "xml rig_get_bws"); int mode = (selrig->inuse == onB) ? vfoB.imode : vfoA.imode; std::vector& bwt = selrig->bwtable(mode); std::vector& dsplo = selrig->lotable(mode); std::vector& dsphi = selrig->hitable(mode); // double table either lo/hi or center/width if (selrig->has_dsp_controls && btnDSP->visible()) { int n = 1; std::string control_label = selrig->SL_label; control_label.append("|").append(selrig->SL_tooltip); bws[0][0] = control_label.c_str(); for (size_t i = 0; i < dsplo.size(); i++) { if (!dsplo.at(i).empty()) bws[0][n++] = dsplo[i]; } control_label.assign(selrig->SH_label); control_label.append("|").append(selrig->SH_tooltip); bws[1][0] = control_label.c_str(); n = 1; for (size_t i = 0; i < dsphi.size(); i++) { if (!dsphi.at(i).empty()) bws[1][n++] = dsphi[i]; } } else { // single bandwidth table bws[0][0] = "Bandwidth"; int n = 1; for (size_t i = 0; i < bwt.size(); i++) { if (!bwt.at(i).empty()) bws[0][n++] = bwt.at(i); } } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } result = bws; } std::string help() { return std::string("returns array of bandwidths"); } } rig_get_bws(&rig_server); //------------------------------------------------------------------------------ // Request for active vfo bandwidth //------------------------------------------------------------------------------ class rig_get_bw : public XmlRpcServerMethod { public: rig_get_bw(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_bw", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result[0] = "NONE"; result[1] = ""; if (!xcvr_online || disable_xmlrpc->value()) return; wait(); int BW = (selrig->inuse == onB) ? vfoB.iBW : vfoA.iBW; int mode = (selrig->inuse == onB) ? vfoB.imode : vfoA.imode; try { guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_bw"); guard_lock serial_lock(&mutex_serial, "xml rig_get_bw"); if (!selrig->has_bandwidth_control) return; result[0] = result[1] = ""; if (BW < 256) { std::vector& bwt = selrig->bwtable(mode); result[0] = bwt[BW & 0x7F]; } else { std::vector& dsplo = selrig->lotable(mode); std::vector& dsphi = selrig->hitable(mode); result[0] = dsplo.at(BW & 0x7F); result[1] = dsphi.at((BW >> 8) & 0x7F); } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); result[0] = result[1] = ""; } std::string s1 = result[0], s2 = result[1]; xml_trace( 5, "bandwidth on ", ((selrig->inuse == onB) ? "B " : "A "), s1.c_str(), " | ", s2.c_str()); } std::string help() { return std::string("returns current bw L/U value"); } } rig_get_bw(&rig_server); //------------------------------------------------------------------------------ // Request for vfoA bandwidth //------------------------------------------------------------------------------ class rig_get_bwA : public XmlRpcServerMethod { public: rig_get_bwA(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_bwA", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result[0] = "NONE"; result[1] = ""; if (!xcvr_online || disable_xmlrpc->value()) return; wait(); int BW = vfoA.iBW; int mode = vfoA.imode; try { guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_bwA"); guard_lock serial_lock(&mutex_serial, "xml rig_get_bwA"); if (!selrig->has_bandwidth_control) return; result[0] = result[1] = ""; if (BW < 256) { std::vector& bwt = selrig->bwtable(mode); result[0] = bwt.at(BW & 0x7F); } else { std::vector& dsplo = selrig->lotable(mode); std::vector& dsphi = selrig->hitable(mode); result[0] = dsplo.at(BW & 0x7F); result[1] = dsphi.at((BW >> 8) & 0x7F); } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); result[0] = result[1] = ""; } std::string s1 = result[0], s2 = result[1]; xml_trace( 4, "bandwidth on A", s1.c_str(), " | ", s2.c_str()); } std::string help() { return std::string("returns current bw L/U value"); } } rig_get_bwA(&rig_server); //------------------------------------------------------------------------------ // Request for vfoB bandwidth //------------------------------------------------------------------------------ class rig_get_bwB : public XmlRpcServerMethod { public: rig_get_bwB(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_bwB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result[0] = "NONE"; result[1] = ""; if (!xcvr_online || disable_xmlrpc->value()) return; wait(); int BW = vfoB.iBW; int mode = vfoB.imode; result[0] = result[1] = ""; try { guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_bwB"); guard_lock serial_lock(&mutex_serial, "xml rig_get_bwB"); if (!selrig->has_bandwidth_control) return; if (BW < 256) { std::vector& bwt = selrig->bwtable(mode); result[0] = bwt.at(BW & 0x7F); } else { std::vector& dsplo = selrig->lotable(mode); std::vector& dsphi = selrig->hitable(mode); result[0] = dsplo.at(BW & 0x7F); result[1] = dsphi.at((BW >> 8) & 0x7F); } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); result[0] = result[1] = ""; } std::string s1 = result[0], s2 = result[1]; xml_trace( 4, "bandwidth on B", s1.c_str(), " | ", s2.c_str()); } std::string help() { return std::string("returns current bw L/U value"); } } rig_get_bwB(&rig_server); class rig_get_smeter : public XmlRpcServerMethod { public: rig_get_smeter(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_smeter", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_smeter) result = "0"; else { guard_lock serial_lock(&mutex_serial, "xml 04"); int val = selrig->get_smeter(); char szMeter[20]; snprintf(szMeter, sizeof(szMeter), "%d", val); std::string result_string = szMeter; result = result_string; } } std::string help() { return std::string("returns S-meter reading"); } } rig_get_smeter(&rig_server); class rig_get_DBM : public XmlRpcServerMethod { public: rig_get_DBM(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_DBM", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_smeter) result = "0"; else { guard_lock serial_lock(&mutex_serial, "xml 05"); int val = selrig->get_smeter(); if (val > 50) val = round(-73.0 + (val - 50.0) * 6.0 / 5.0); else val = round(-127.0 + val * 54.0 / 50.0); char szMeter[20]; snprintf(szMeter, sizeof(szMeter), "%d", val); std::string result_string = szMeter; result = result_string; } } std::string help() { return std::string("returns S-meter in dBm"); } } rig_get_DBM(&rig_server); class rig_get_Sunits : public XmlRpcServerMethod { public: rig_get_Sunits(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_Sunits", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_smeter) result = "0"; else { guard_lock serial_lock(&mutex_serial, "xml 06"); int val = selrig->get_smeter(); char szMeter[20]; if (val > 50) { val = round((val - 50.0) * 6.0 / 5.0); snprintf(szMeter, sizeof(szMeter), "S9 + %ddB", val); } else { val = round(val * 9.0 / 50.0); snprintf(szMeter, sizeof(szMeter), "S %d", val); } std::string result_string = szMeter; result = result_string; } } std::string help() { return std::string("returns S-meter in S units 0...9...+60"); } } rig_get_Sunits(&rig_server); class rig_get_pwrmeter_scale : public XmlRpcServerMethod { public: rig_get_pwrmeter_scale(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_pwrmeter_scale", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_power_out) result = (int)(0); else { guard_lock serial_lock(&mutex_serial, "xml 07"); result = (int)(selrig->power_scale()); } } std::string help() { return std::string("returns power scale X factor"); } } rig_get_pwrmeter_scale(&rig_server); class rig_get_maxpwr : public XmlRpcServerMethod { public: rig_get_maxpwr(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_maxpwr", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result = (int)(selrig->power_max()); } } rig_get_maxpwr(&rig_server); class rig_get_pwrmeter : public XmlRpcServerMethod { public: rig_get_pwrmeter(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_pwrmeter", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_power_out) result = "0"; else { guard_lock serial_lock(&mutex_serial, "xml 08"); int val = selrig->get_power_out(); char szmeter[20]; snprintf(szmeter, sizeof(szmeter), "%d", val); std::string result_string = szmeter; result = result_string; } } std::string help() { return std::string("returns power meter reading"); } } rig_get_pwrmeter(&rig_server); class rig_get_swrmeter : public XmlRpcServerMethod { public: rig_get_swrmeter(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_swrmeter", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_swr_control) result = "0"; else { guard_lock serial_lock(&mutex_serial, "xml 09"); int val = selrig->get_swr(); char szmeter[20]; snprintf(szmeter, sizeof(szmeter), "%d", val); std::string result_string = szmeter; result = result_string; } } std::string help() { return std::string("returns SWR meter reading"); } } rig_get_swrmeter(&rig_server); //============================================================================== // set interface //============================================================================== #include #include "rigbase.h" extern std::queue srvc_reqs; extern std::queue quePTT; extern XCVR_STATE vfoA; extern XCVR_STATE vfoB; std::string print(unsigned long long f, int m, int b) { static std::ostringstream p; p.seekp(std::ios::beg); if (b > 65536) b /= 65536; p << "freq: " << f << ", imode: " << m << ", bw " << b; return p.str(); } //------------------------------------------------------------------------------ // Set Power in watts //------------------------------------------------------------------------------ class rig_set_power : public XmlRpcServerMethod { public: rig_set_power(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_power", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int power_level = (int)(params[0]); guard_lock lock(&mutex_serial, "xml 10"); selrig->set_power_control(power_level); progStatus.power_level = power_level; Fl::awake(update_power_control, (void*)0); } std::string help() { return std::string("sets power level in watts"); } } rig_set_power(&rig_server); class rig_set_verify_power : public XmlRpcServerMethod { public: rig_set_verify_power(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_power", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int power_level = (int)(params[0]); guard_lock lock(&mutex_serial, "xml 11"); selrig->set_power_control(power_level); progStatus.power_level = selrig->get_power_control(); Fl::awake(update_power_control, (void*)0); } std::string help() { return std::string("sets & verifies power level in watts"); } } rig_set_verify_power(&rig_server); class rig_get_power : public XmlRpcServerMethod { public: rig_get_power(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_power", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result = (int)(progStatus.power_level); } std::string help() { return std::string("returns power level setting in watts"); } } rig_get_power(&rig_server); class rig_mod_power : public XmlRpcServerMethod { public: rig_mod_power(XmlRpcServer* s) : XmlRpcServerMethod("rig.mod_pwr", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } double min, max, step; selrig->get_pc_min_max_step(min, max, step); int power_change = (int)(params[0]); guard_lock lock(&mutex_serial, "xml 12"); progStatus.power_level += power_change; if (progStatus.power_level > max) progStatus.power_level = max; if (progStatus.power_level < min) progStatus.power_level = min; selrig->set_power_control(progStatus.power_level); Fl::awake(update_power_control, (void*)0); } std::string help() { return std::string("mods power level in watts"); } } rig_mod_power(&rig_server); //------------------------------------------------------------------------------ // Enable tune //------------------------------------------------------------------------------ class rig_tune : public XmlRpcServerMethod { public: rig_tune(XmlRpcServer* s) : XmlRpcServerMethod("rig.tune", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock que_lock(&mutex_srvc_reqs, "xml rig_tune"); guard_lock serial_lock(&mutex_serial, "xml 13"); selrig->tune_rig(2); } std::string help() { return std::string("enable transceiver tune function"); } } rig_tune(&rig_server); //------------------------------------------------------------------------------ // Set PTT on (1) or off (0) //------------------------------------------------------------------------------ extern bool PTT; class rig_set_verify_ptt : public XmlRpcServerMethod { public: rig_set_verify_ptt(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_ptt", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock ser_lock (&mutex_serial, "xml 14"); PTT = int(params[0]); xml_trace(1, (PTT ? "rig_set_verify_ptt ON" : "rig_set_verify_ptt OFF")); rigPTT(PTT); { bool get = ptt_state(); int cnt = 0; while ((get != PTT) && (cnt++ < 100)) { MilliSleep(10); get = ptt_state(); } PTT = get; std::stringstream s; s << "ptt returned " << get << " in " << cnt * 10 << " msec"; xml_trace(1, s.str().c_str()); Fl::awake(update_UI_PTT); } } std::string help() { return std::string("sets & verifies PTT on (1) or off (0)"); } } rig_set_verify_ptt(&rig_server); bool ptt_pending = false; class rig_set_ptt : public XmlRpcServerMethod { public: rig_set_ptt(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_ptt", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock ser_lock (&mutex_serial, "xml 15"); PTT = int(params[0]); xml_trace(1, (PTT ? "rig_ptt ON" : "rig_ptt OFF")); rigPTT(PTT); { bool get = ptt_state(); int cnt = 0; while ((get != PTT) && (cnt++ < 100)) { MilliSleep(10); get = ptt_state(); } PTT = get; std::stringstream s; s << "ptt returned " << get << " in " << cnt * 10 << " msec"; xml_trace(1, s.str().c_str()); Fl::awake(update_UI_PTT); } } std::string help() { return std::string("sets PTT on (1) or off (0)"); } } rig_set_ptt(&rig_server); class rig_set_ptt_fast : public XmlRpcServerMethod { public: rig_set_ptt_fast(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_ptt_fast", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock ser_lock (&mutex_serial, "xml 16"); PTT = int(params[0]); xml_trace(1, (PTT ? "rig_ptt ON" : "rig_ptt OFF")); rigPTT(PTT); Fl::awake(update_UI_PTT); } std::string help() { return std::string("deprecated; use rig.set_ptt"); } } rig_set_ptt_fast(&rig_server); //------------------------------------------------------------------------------ // Execute vfo Swap //------------------------------------------------------------------------------ //void do_swap(void *) //{ // cbAswapB(); //} class rig_swap : public XmlRpcServerMethod { public: rig_swap(XmlRpcServer* s) : XmlRpcServerMethod("rig.swap", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock lock(&mutex_srvc_reqs, "xml rig_swap"); guard_lock serial_lock(&mutex_serial, "xml rig_swap"); VFOQUEUE xcvr; xcvr.change = SWAP; xml_trace(1, "xmlrpc SWAP"); srvc_reqs.push(xcvr); } std::string help() { return std::string("executes vfo swap"); } } rig_swap(&rig_server); // deprecated method - retain for backward compatibility class rig_set_swap : public XmlRpcServerMethod { public: rig_set_swap(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_swap", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock lock(&mutex_srvc_reqs, "xml rig_set_swap"); guard_lock serial_lock(&mutex_serial, "xml rig_set_swap"); VFOQUEUE xcvr; xcvr.change = SWAP; xml_trace(1, "xmlrpc SWAP"); srvc_reqs.push(xcvr); } std::string help() { return std::string("executes vfo swap"); } } rig_set_swap(&rig_server); class rig_set_verify_swap : public XmlRpcServerMethod { public: rig_set_verify_swap(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_swap", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock lock(&mutex_srvc_reqs, "xml rig_set_verify_swap"); guard_lock serial_lock(&mutex_serial, "xml rig_set_verify_swap"); VFOQUEUE xcvr; xcvr.change = SWAP; xml_trace(1, "xmlrpc SWAP"); srvc_reqs.push(xcvr); } std::string help() { return std::string("executes vfo swap"); } } rig_set_verify_swap(&rig_server); //------------------------------------------------------------------------------ // Execute vfo split operation //------------------------------------------------------------------------------ class rig_set_split : public XmlRpcServerMethod { public: rig_set_split(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_split", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int state = int(params[0]); { guard_lock lock(&mutex_srvc_reqs, "xml rig_set_verify_split"); guard_lock serial_lock(&mutex_serial, "xml rig_set_verify_split"); VFOQUEUE xcvr_split; if (state) xcvr_split.change = sON; else xcvr_split.change = sOFF; xml_trace(1, (state ? "rig_set_verify_split ON" : "rig_set_verify_split OFF")); srvc_reqs.push(xcvr_split); } for (int i = 0; i < 50; i++) { if (progStatus.split == state) return; MilliSleep(10); } } std::string help() { return std::string("executes vfo split"); } } rig_set_split(&rig_server); class rig_set_verify_split : public XmlRpcServerMethod { public: rig_set_verify_split(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_split", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int state = int(params[0]); { guard_lock lock(&mutex_srvc_reqs, "xml rig_set_verify_split"); guard_lock serial_lock(&mutex_serial, "xml rig_set_verify_split"); VFOQUEUE xcvr_split; if (state) xcvr_split.change = sON; else xcvr_split.change = sOFF; xml_trace(1, (state ? "rig_set_verify_split ON" : "rig_set_verify_split OFF")); srvc_reqs.push(xcvr_split); } for (int i = 0; i < 50; i++) { if (progStatus.split == state) return; MilliSleep(10); } } std::string help() { return std::string("sets & verifies vfo split"); } } rig_set_verify_split(&rig_server); //------------------------------------------------------------------------------ // Set vfo in use A or B //------------------------------------------------------------------------------ inline bool ptt_off() { int n = 0; if (!PTT) return true; while (1) { if (n++ == 1000) break; MilliSleep(10); if (!PTT) return true; } return false; } class rig_set_AB : public XmlRpcServerMethod { public: rig_set_AB(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_AB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } std::string ans = std::string(params[0]); if (!(ans == "A" || ans == "B")) { return; } if (!ptt_off()) { trace(1, "!ptt_off()"); return; } guard_lock service_lock(&mutex_srvc_reqs, "xml rig_set_AB"); guard_lock serial_lock(&mutex_serial, "xml rig_set_AB"); XCVR_STATE vfo = vfoA; vfo.src = SRVR; xml_trace(4, "set_AB ", ans.c_str(), " ", printXCVR_STATE(vfo).c_str()); srvc_reqs.push (VFOQUEUE((ans == "A" ? sA : sB), vfo)); } std::string help() { return std::string("sets & verifies vfo in use A or B"); } } rig_set_AB(&rig_server); class rig_set_verify_AB : public XmlRpcServerMethod { public: rig_set_verify_AB(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_AB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } std::string ans = std::string(params[0]); if (!(ans == "A" || ans == "B")) { return; } if (!ptt_off()) { trace(1, "!ptt_off()"); return; } guard_lock service_lock(&mutex_srvc_reqs, "xml rig_set_verify_AB"); guard_lock serial_lock(&mutex_serial, "xml rig_set_verify_AB"); XCVR_STATE vfo = vfoA; vfo.src = SRVR; xml_trace(4, "set verify AB ", ans.c_str(), " ", printXCVR_STATE(vfo).c_str()); srvc_reqs.push (VFOQUEUE((ans == "A" ? sA : sB), vfo)); } std::string help() { return std::string("sets & verifies vfo in use A or B"); } } rig_set_verify_AB(&rig_server); //------------------------------------------------------------------------------ // Set vfoA frequency //------------------------------------------------------------------------------ class rig_set_vfoA : public XmlRpcServerMethod { public: rig_set_vfoA(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_vfoA", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast((double)params[0]); guard_lock serial(&mutex_serial, "xml 17"); if (!selrig->can_change_alt_vfo && (selrig->inuse == onB)) { selrig->selectA(); vfoA.freq = freq; selrig->set_vfoA(vfoA.freq); selrig->selectB(); } else { vfoA.freq = freq; selrig->set_vfoA(vfoA.freq); } Fl::awake(setFreqDispA); } std::string help() { return std::string("rig.set_vfo NNNNNNNN (Hz)"); } } rig_set_vfoA(&rig_server); class rig_set_verify_vfoA : public XmlRpcServerMethod { public: rig_set_verify_vfoA(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_vfoA", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 18"); if (!selrig->can_change_alt_vfo && (selrig->inuse == onB)) { selrig->selectA(); selrig->set_vfoA(freq); vfoA.freq = selrig->get_vfoA(); selrig->selectB(); } else { selrig->set_vfoA(freq); vfoA.freq = selrig->get_vfoA(); } Fl::awake(setFreqDispA); } std::string help() { return std::string("rig.set_verify_vfo NNNNNNNN (Hz)"); } } rig_set_verify_vfoA(&rig_server); class rig_set_vfoA_fast : public XmlRpcServerMethod { public: rig_set_vfoA_fast(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_vfoA_fast", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 19"); if (!selrig->can_change_alt_vfo && (selrig->inuse == onB)) { selrig->selectA(); vfoA.freq = freq; selrig->set_vfoA(vfoA.freq); selrig->selectB(); } else { vfoA.freq = freq; selrig->set_vfoA(vfoA.freq); } Fl::awake(setFreqDispA); } std::string help() { return std::string("deprecated; use rig.set_vfoA"); } } rig_set_vfoA_fast(&rig_server); class rig_mod_vfoA : public XmlRpcServerMethod { public: rig_mod_vfoA(XmlRpcServer* s) : XmlRpcServerMethod("rig.mod_vfoA", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } signed long int freq = static_cast((double)params[0]); guard_lock serial(&mutex_serial, "xml 20"); if (!selrig->can_change_alt_vfo && (selrig->inuse == onB)) { selrig->selectA(); vfoA.freq += freq; selrig->set_vfoA(vfoA.freq); selrig->selectB(); } else { vfoA.freq += freq; selrig->set_vfoA(vfoA.freq); } Fl::awake(setFreqDispA); } std::string help() { return std::string("rig.mod_vfo +/- NNN (Hz)"); } } rig_mod_vfoA(&rig_server); //------------------------------------------------------------------------------ // Set vfo B frequency //------------------------------------------------------------------------------ class rig_set_vfoB : public XmlRpcServerMethod { public: rig_set_vfoB(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_vfoB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 21"); if (!selrig->can_change_alt_vfo && (selrig->inuse == onA)) { selrig->selectB(); selrig->set_vfoB(freq); vfoB.freq = freq; selrig->selectA(); } else { selrig->set_vfoB(freq); vfoB.freq = freq; } Fl::awake(setFreqDispB); } std::string help() { return std::string("rig.set_vfo NNNNNNNN (Hz)"); } } rig_set_vfoB(&rig_server); class rig_set_verify_vfoB : public XmlRpcServerMethod { public: rig_set_verify_vfoB(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_vfoB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 22"); if (!selrig->can_change_alt_vfo && (selrig->inuse == onA)) { selrig->selectB(); selrig->set_vfoB(freq); vfoB.freq = selrig->get_vfoB(); selrig->selectA(); } else { selrig->set_vfoB(freq); vfoB.freq = selrig->get_vfoB(); } Fl::awake(setFreqDispB); } std::string help() { return std::string("rig.set_verify_vfo NNNNNNNN (Hz)"); } } rig_set_verify_vfoB(&rig_server); class rig_set_vfoB_fast : public XmlRpcServerMethod { public: rig_set_vfoB_fast(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_vfoB_fast", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 23"); if (!selrig->can_change_alt_vfo && (selrig->inuse == onA)) { selrig->selectB(); selrig->set_vfoB(freq); vfoB.freq = freq; selrig->selectA(); } else { selrig->set_vfoB(freq); vfoB.freq = freq; } Fl::awake(setFreqDispB); } std::string help() { return std::string("deprecated; use rig.set_vfoB"); } } rig_set_vfoB_fast(&rig_server); class rig_mod_vfoB : public XmlRpcServerMethod { public: rig_mod_vfoB(XmlRpcServer* s) : XmlRpcServerMethod("rig.mod_vfoB", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } signed long int freq = static_cast((double)params[0]); guard_lock serial(&mutex_serial, "xml 24"); if (!selrig->can_change_alt_vfo && (selrig->inuse == onA)) { selrig->selectB(); selrig->set_vfoB(vfoB.freq); vfoB.freq += freq; selrig->selectA(); } else { selrig->set_vfoB(vfoB.freq); vfoB.freq += freq; } Fl::awake(setFreqDispB); } std::string help() { return std::string("rig.mod_vfoB +/- NNN (Hz)"); } } rig_mod_vfoB(&rig_server); //------------------------------------------------------------------------------ // Set vfoB to vfoA freq/mode //------------------------------------------------------------------------------ class rig_vfoA2B : public XmlRpcServerMethod { public: rig_vfoA2B (XmlRpcServer* s) : XmlRpcServerMethod("rig.vfoA2B", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock serial(&mutex_serial, "xml 25"); vfoB.freq = vfoA.freq; vfoB.imode = vfoA.imode; selrig->set_vfoB(vfoB.freq); selrig->set_modeB(vfoB.imode); Fl::awake(setFreqDispB); } std::string help() { return std::string("sets vfoB to vfoA freq/mode"); } } rig_vfoA2B(&rig_server); //------------------------------------------------------------------------------ // Set freq B to freq A //------------------------------------------------------------------------------ class rig_freqA2B : public XmlRpcServerMethod { public: rig_freqA2B (XmlRpcServer* s) : XmlRpcServerMethod("rig.freqA2B", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock serial(&mutex_serial, "xml 26"); vfoB.freq = vfoA.freq; selrig->set_vfoB(vfoB.freq); Fl::awake(setFreqDispB); } std::string help() { return std::string("sets freqB to freqA"); } } rig_freqA2B(&rig_server); //------------------------------------------------------------------------------ // Set mode A to mode B //------------------------------------------------------------------------------ class rig_modeA2B : public XmlRpcServerMethod { public: rig_modeA2B (XmlRpcServer* s) : XmlRpcServerMethod("rig.modeA2B", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } guard_lock serial(&mutex_serial, "xml 27"); vfoB.imode = vfoA.imode; selrig->set_modeB(vfoB.imode); } std::string help() { return std::string("sets modeA to modeB"); } } rig_modeA2B(&rig_server); //------------------------------------------------------------------------------ // Set active vfo frequency //------------------------------------------------------------------------------ class rig_set_vfo : public XmlRpcServerMethod { public: rig_set_vfo(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_vfo", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 28"); if (selrig->inuse == onB) { selrig->set_vfoB(freq); vfoB.freq = freq; Fl::awake(setFreqDispB); }else { selrig->set_vfoA(freq); vfoA.freq = freq; Fl::awake(setFreqDispA); } } std::string help() { return std::string("rig.set_vfo NNNNNNNN (Hz)"); } } rig_set_vfo(&rig_server); class rig_set_verify_vfo : public XmlRpcServerMethod { public: rig_set_verify_vfo(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_vfo", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 29"); if (selrig->inuse == onB) { selrig->set_vfoB(freq); vfoB.freq = selrig->get_vfoB(); Fl::awake(setFreqDispB); }else { selrig->set_vfoA(freq); vfoA.freq = selrig->get_vfoA(); Fl::awake(setFreqDispA); } } std::string help() { return std::string("rig.set_verify_vfo NNNNNNNN (Hz)"); } } rig_set_verify_vfo(&rig_server); class main_set_frequency : public XmlRpcServerMethod { public: main_set_frequency(XmlRpcServer* s) : XmlRpcServerMethod("main.set_frequency", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 30"); if (selrig->inuse == onB) { selrig->set_vfoB(freq); vfoB.freq = freq; Fl::awake(setFreqDispB); }else { selrig->set_vfoA(freq); vfoA.freq = freq; Fl::awake(setFreqDispA); } } std::string help() { return std::string("main.set_frequency NNNNNNNN (Hz)"); } } main_set_frequency(&rig_server); class rig_set_frequency : public XmlRpcServerMethod { public: rig_set_frequency(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_frequency", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 31"); if (selrig->inuse == onB) { selrig->set_vfoB(freq); vfoB.freq = freq; Fl::awake(setFreqDispB); }else { selrig->set_vfoA(freq); vfoA.freq = freq; Fl::awake(setFreqDispA); } result = 1; } std::string help() { return std::string("rig.set_frequency NNNNNNNN (Hz)"); } } rig_set_frequency(&rig_server); class rig_set_verify_frequency : public XmlRpcServerMethod { public: rig_set_verify_frequency(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_frequency", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } unsigned long long freq = static_cast(double(params[0])); guard_lock serial(&mutex_serial, "xml 32"); if (selrig->inuse == onB) { selrig->set_vfoB(freq); vfoB.freq = selrig->get_vfoB(); Fl::awake(setFreqDispB); }else { selrig->set_vfoA(freq); vfoA.freq = selrig->get_vfoA(); Fl::awake(setFreqDispA); } result = 1; } std::string help() { return std::string("rig.set_verify_frequency NNNNNNNN (Hz)"); } } rig_set_verify_frequency(&rig_server); //------------------------------------------------------------------------------ // Set mode on current vfo //------------------------------------------------------------------------------ class rig_set_mode : public XmlRpcServerMethod { public: rig_set_mode(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_mode", s) {} void execute(XmlRpcValue& params, XmlRpcValue &result) { if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } XCVR_STATE nuvals; nuvals.freq = 0; nuvals.imode = -1; nuvals.iBW = 255; std::string numode = (std::string)params[0]; try { for (size_t i = 0; i < selrig->modes_.size(); i++) { if (numode == selrig->modes_.at(i)) { nuvals.imode = i; nuvals.iBW = selrig->def_bandwidth(i); guard_lock serial_lock(&mutex_serial, "xml 33"); if (selrig->inuse == onB) { serviceB(nuvals); } else { serviceA(nuvals); } Fl::awake(updateUI); result = 1; break; } } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } std::string help() { return std::string("set_mode MODE_NAME"); } } rig_set_mode(&rig_server); class rig_set_verify_mode : public XmlRpcServerMethod { public: rig_set_verify_mode(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_mode", s) {} void execute(XmlRpcValue& params, XmlRpcValue &result) { result = 0; if (!xcvr_online || disable_xmlrpc->value()) { return; } XCVR_STATE nuvals; nuvals.freq = 0; nuvals.imode = -1; nuvals.iBW = 255; std::string numode = (std::string)params[0]; try { for (size_t i = 0; i < selrig->modes_.size(); i++) { if (numode == selrig->modes_.at(i)) { nuvals.imode = i; nuvals.iBW = selrig->def_bandwidth(i); guard_lock serial_lock(&mutex_serial, "xml 34"); if (selrig->inuse == onB) { serviceB(nuvals); result = (i == (size_t)selrig->get_modeB()); } else { serviceA(nuvals); result = (i == (size_t)selrig->get_modeA()); } Fl::awake(updateUI); break; } } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } return; } std::string help() { return std::string("set_mode MODE_NAME"); } } rig_set_verify_mode(&rig_server); //------------------------------------------------------------------------------ // Set mode on vfo A //------------------------------------------------------------------------------ class rig_set_modeA : public XmlRpcServerMethod { public: rig_set_modeA(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_modeA", s) {} void execute(XmlRpcValue& params, XmlRpcValue &result) { if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } XCVR_STATE nuvals; nuvals.freq = 0; nuvals.imode = -1; nuvals.iBW = 255; std::string numode = (std::string)params[0]; try { for (size_t i = 0; i < selrig->modes_.size(); i++) { if (numode == selrig->modes_.at(i)) { nuvals.imode = i; nuvals.iBW = selrig->def_bandwidth(i); guard_lock serial_lock(&mutex_serial, "xml 35"); serviceA(nuvals); Fl::awake(updateUI); result = 1; break; } } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } std::string help() { return std::string("set_mode on vfo A"); } } rig_set_modeA(&rig_server); class rig_set_verify_modeA : public XmlRpcServerMethod { public: rig_set_verify_modeA(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_modeA", s) {} void execute(XmlRpcValue& params, XmlRpcValue &result) { result = 0; if (!xcvr_online || disable_xmlrpc->value()) { return; } XCVR_STATE nuvals; nuvals.freq = 0; nuvals.imode = -1; nuvals.iBW = 255; std::string numode = (std::string)params[0]; try { for (size_t i = 0; i < selrig->modes_.size(); i++) { if (numode == selrig->modes_.at(i)) { nuvals.imode = i; nuvals.iBW = selrig->def_bandwidth(i); guard_lock serial_lock(&mutex_serial, "xml 36"); serviceA(nuvals); Fl::awake(updateUI); result = (nuvals.imode == selrig->get_modeA()); break; } } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } std::string help() { return std::string("set_mode on vfo A"); } } rig_set_verify_modeA(&rig_server); //------------------------------------------------------------------------------ // Set mode on vfo B //------------------------------------------------------------------------------ class rig_set_modeB : public XmlRpcServerMethod { public: rig_set_modeB(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_modeB", s) {} void execute(XmlRpcValue& params, XmlRpcValue &result) { if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } XCVR_STATE nuvals; nuvals.freq = 0; nuvals.imode = -1; nuvals.iBW = 255; std::string numode = (std::string)params[0]; try { for (size_t i = 0; i < selrig->modes_.size(); i++) { if (numode == selrig->modes_.at(i)) { nuvals.imode = i; nuvals.iBW = selrig->def_bandwidth(i); guard_lock serial_lock(&mutex_serial, "xml 37"); serviceB(nuvals); Fl::awake(updateUI); result = 1; break; } } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } std::string help() { return std::string("set_mode on vfo B"); } } rig_set_modeB(&rig_server); class rig_set_verify_modeB : public XmlRpcServerMethod { public: rig_set_verify_modeB(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_modeB", s) {} void execute(XmlRpcValue& params, XmlRpcValue &result) { result= 0; if (!xcvr_online || disable_xmlrpc->value()) { return; } XCVR_STATE nuvals; nuvals.freq = 0; nuvals.imode = -1; nuvals.iBW = 255; std::string numode = (std::string)params[0]; try { for (size_t i = 0; i < selrig->modes_.size(); i++) { if (numode == selrig->modes_.at(i)) { nuvals.imode = i; nuvals.iBW = selrig->def_bandwidth(i); guard_lock serial_lock(&mutex_serial, "xml 38"); serviceB(nuvals); Fl::awake(updateUI); result = (nuvals.imode == selrig->get_modeB()); break; } } } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } } std::string help() { return std::string("set_mode on vfo B"); } } rig_set_verify_modeB(&rig_server); //------------------------------------------------------------------------------ // Set bandwidth //------------------------------------------------------------------------------ int int_bw; extern void cb_bw_A(Fl_ComboBox *, void *); extern void cb_bw_B(Fl_ComboBox *, void *); void exec_set_int_bw(void *) { if (selrig->inuse == onA) { opBW_A->index(int_bw); opBW_A->redraw(); cb_bw_A((Fl_ComboBox *)0, (void*)0); } else { opBW_B->index(int_bw); opBW_B->redraw(); cb_bw_B((Fl_ComboBox *)0, (void*)0); } } class rig_set_bandwidth : public XmlRpcServerMethod { public: rig_set_bandwidth(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_bandwidth", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int bw = (int)params[0]; guard_lock lock(&mutex_srvc_reqs, "xml rig_set_bandwidth"); guard_lock serial_lock(&mutex_serial, "xml rig_set_bandwidth"); XCVR_STATE nuvals; try { size_t i = 0; for (i = 0; i < selrig->bandwidths_.size(); i++) if (atol (selrig->bandwidths_.at(i).c_str()) > bw) break; if (--i < 0) i = 0; bw = atol(selrig->bandwidths_.at(i).c_str()); nuvals.iBW = i; std::ostringstream s; s << "nearest bandwidth " << selrig->bandwidths_[i]; xml_trace(2,"Set to ", s.str().c_str()); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } if (selrig->inuse == onB) { nuvals.freq = vfoB.freq; nuvals.imode = vfoB.imode; serviceB(nuvals); } else { nuvals.freq = vfoA.freq; nuvals.imode = vfoA.imode; serviceA(nuvals); } result = 1; } std::string help() { return std::string("set_bw to nearest requested"); } } rig_set_bandwidth(&rig_server); class rig_set_verify_bandwidth : public XmlRpcServerMethod { public: rig_set_verify_bandwidth(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_bandwidth", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int bw = int(params[0]); guard_lock lock(&mutex_srvc_reqs, "xml rig_set_verify_bandwidth"); guard_lock serial_lock(&mutex_serial, "xml rig_set_verify_bandwidth"); XCVR_STATE nuvals; try { size_t i = 0; for (i = 0; i < selrig->bandwidths_.size(); i++) if (atol (selrig->bandwidths_.at(i).c_str()) > bw) break; if (--i < 0) i = 0; bw = atol(selrig->bandwidths_.at(i).c_str()); nuvals.iBW = i; std::ostringstream s; s << "nearest bandwidth " << selrig->bandwidths_.at(i); xml_trace(2,"Set to ", s.str().c_str()); } catch (const std::exception& e) { LOG_ERROR("%s", e.what()); } int retbw; if (selrig->inuse == onB) { nuvals.freq = vfoB.freq; nuvals.imode = vfoB.imode; serviceB(nuvals); retbw = selrig->get_bwB(); } else { nuvals.freq = vfoA.freq; nuvals.imode = vfoA.imode; serviceA(nuvals); retbw = selrig->get_bwA(); } result = retbw; } std::string help() { return std::string("set_bw to nearest requested"); } } rig_set_verify_bandwidth(&rig_server); class rig_set_bw : public XmlRpcServerMethod { public: rig_set_bw(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_bw", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } int bw = (int)params[0]; XCVR_STATE nuvals; if (bw > 256) { int bwH = (bw / 256) - 128; int bwL = (bw % 256); if (bwL < 0 || bwL >= (int)selrig->dsp_SL.size() || bwH < 0 || bwH >= (int)selrig->dsp_SH.size()) { result = 0; return; } } else { if (bw < 0 || bw >= (int)selrig->bandwidths_.size()) { result = 0; return; } } guard_lock que_lock ( &mutex_srvc_reqs, "xml rig_set_bw" ); guard_lock serial_lock(&mutex_serial, "xml rig_get_bw"); nuvals.iBW = bw; if (selrig->inuse == onB) { nuvals.freq = vfoB.freq; nuvals.imode = vfoB.imode; serviceB(nuvals); } else { nuvals.freq = vfoA.freq; nuvals.imode = vfoA.imode; serviceA(nuvals); } result = 1; } std::string help() { return std::string("set_bw to VAL"); } } rig_set_bw(&rig_server); class rig_set_verify_bw : public XmlRpcServerMethod { public: rig_set_verify_bw(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_bw", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } std::string bwstr = params; int bw = (int)params[0]; XCVR_STATE nuvals; if (bw > 256) { int bwH = (bw / 256) - 128; int bwL = (bw % 256); if (bwL < 0 || bwL >= (int)selrig->dsp_SL.size() || bwH < 0 || bwH >= (int)selrig->dsp_SH.size()) { result = 0; return; } } else { if (bw < 0 || bw >= (int)selrig->bandwidths_.size()) { result = 0; return; } } guard_lock que_lock ( &mutex_srvc_reqs, "xml rig_set_verify_bw" ); guard_lock serial_lock(&mutex_serial, "xml rig_get_bw"); int retbw; nuvals.iBW = bw; if (selrig->inuse == onB) { nuvals.freq = vfoB.freq; nuvals.imode = vfoB.imode; serviceB(nuvals); retbw = selrig->get_bwB(); } else { nuvals.freq = vfoA.freq; nuvals.imode = vfoA.imode; serviceA(nuvals); retbw = selrig->get_bwA(); } result = (retbw == bw); } std::string help() { return std::string("set_bw to VAL"); } } rig_set_verify_bw(&rig_server); class rig_set_BW : public XmlRpcServerMethod { public: rig_set_BW(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_BW", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } std::string bwstr = params; int bw = (int)params[0]; XCVR_STATE nuvals; if (bw > 256) { int bwH = (bw / 256) - 128; int bwL = (bw % 256); if (bwL < 0 || bwL >= (int)selrig->dsp_SL.size() || bwH < 0 || bwH >= (int)selrig->dsp_SH.size()) { result = 0; return; } } else { if (bw < 0 || bw >= (int)selrig->bandwidths_.size()) { result = 0; return; } } guard_lock que_lock ( &mutex_srvc_reqs, "xml rig_set_BW" ); guard_lock serial_lock(&mutex_serial, "xml rig_get_BW"); if (selrig->inuse == onB) { nuvals.freq = vfoB.freq; nuvals.imode = vfoB.imode; nuvals.iBW = bw; serviceB(nuvals); } else { nuvals.freq = vfoA.freq; nuvals.imode = vfoA.imode; nuvals.iBW = bw; serviceA(nuvals); } result = 1; } std::string help() { return std::string("set_bw to VAL"); } } rig_set_BW(&rig_server); class rig_set_verify_BW : public XmlRpcServerMethod { public: rig_set_verify_BW(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_verify_BW", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } std::string bwstr = params; int bw = (int)params[0]; XCVR_STATE nuvals; if (bw > 256) { int bwH = (bw / 256) - 128; int bwL = (bw % 256); if (bwL < 0 || bwL >= (int)selrig->dsp_SL.size() || bwH < 0 || bwH >= (int)selrig->dsp_SH.size()) { result = 0; return; } } else { if (bw < 0 || bw >= (int)selrig->bandwidths_.size()) { result = 0; return; } } guard_lock que_lock ( &mutex_srvc_reqs, "xml rig_set_BW" ); guard_lock serial_lock(&mutex_serial, "xml rig_get_BW"); int retbw; nuvals.iBW = bw; if (selrig->inuse == onB) { nuvals.freq = vfoB.freq; nuvals.imode = vfoB.imode; serviceB(nuvals); retbw = selrig->get_bwB(); } else { nuvals.freq = vfoA.freq; nuvals.imode = vfoA.imode; retbw = selrig->get_bwA(); serviceA(nuvals); } result = (retbw == bw); } std::string help() { return std::string("set & verify BW to U/L values"); } } rig_set_verify_BW(&rig_server); class rig_mod_bw: public XmlRpcServerMethod { public: rig_mod_bw(XmlRpcServer* s) : XmlRpcServerMethod("rig.mod_bw", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } XCVR_STATE nuvals; int bwch = (int)params[0]; guard_lock lock(&mutex_srvc_reqs, "xml rig_mod_bandwidth"); guard_lock serial_lock(&mutex_serial, "xml rig_mod_bandwidth"); if (selrig->inuse == onB) { nuvals.freq = vfoB.freq; nuvals.imode = vfoB.imode; nuvals.iBW = vfoB.iBW; } else { nuvals.freq = vfoA.freq; nuvals.imode = vfoA.imode; nuvals.iBW = vfoA.iBW; } std::vector& widths = selrig->bandwidths_; int bw = atol(widths.at(0).c_str()); try { bw = atol(widths.at(nuvals.iBW).c_str()) + bwch; size_t i = 0; int bwval; for (i = 0; i < widths.size(); i++) { if ((bwval = atol(widths.at(i).c_str())) >= bw) break; } if (bwval > bw && i > 0) bw = atol(widths.at(--i).c_str()); std::ostringstream s; s << "nearest bandwidth " << widths[i]; xml_trace(2,"Set to ", s.str().c_str()); nuvals.iBW = i; } catch (const std::exception& e) { // std::cout << e.what() << '\n'; } if (selrig->inuse == onB) { serviceB(nuvals); } else { serviceA(nuvals); } } std::string help() { return std::string("modify bw to nearest requested"); } } rig_mod_bw(&rig_server); //------------------------------------------------------------------------------ // Get active vfo inner/outer setting // returns NONE if not available // returns INNER/OUTTER otherwise //------------------------------------------------------------------------------ class rig_get_pbt : public XmlRpcServerMethod { public: rig_get_pbt(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_pbt", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result[0] = "NONE"; result[1] = ""; if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_pbt_controls) return; wait(); guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_"); guard_lock serial_lock(&mutex_serial, "xml rig_get_"); char inner[10]; char outer[10]; snprintf(inner, sizeof(inner), "%d", progStatus.pbt_inner); snprintf(outer, sizeof(outer), "%d", progStatus.pbt_outer); result[0] = inner; result[1] = outer; std::string s1 = result[0], s2 = result[1]; xml_trace( 5, "pbt ", ((selrig->inuse == onB) ? "B " : "A "), s1.c_str(), " | ", s2.c_str()); } std::string help() { return std::string("returns current passband inner/outer values"); } } rig_get_pbt(&rig_server); class rig_get_pbt_inner : public XmlRpcServerMethod { public: rig_get_pbt_inner(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_pbt_inner", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result[0] = "NONE"; result[1] = ""; if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_pbt_controls) return; wait(); guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_"); guard_lock serial_lock(&mutex_serial, "xml rig_get_"); char inner[10]; snprintf(inner, sizeof(inner), "%d", progStatus.pbt_inner); result[0] = inner; std::string s1 = result[0], s2 = result[1]; xml_trace( 5, "pbt inner", ((selrig->inuse == onB) ? "B " : "A "), s1.c_str(), " | ", s2.c_str()); } std::string help() { return std::string("returns current passband inner values"); } } rig_get_pbt_inner(&rig_server); class rig_get_pbt_outer : public XmlRpcServerMethod { public: rig_get_pbt_outer(XmlRpcServer* s) : XmlRpcServerMethod("rig.get_pbt_outer", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result[0] = "NONE"; result[1] = ""; if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_pbt_controls) return; wait(); guard_lock service_lock(&mutex_srvc_reqs, "xml rig_get_"); guard_lock serial_lock(&mutex_serial, "xml rig_get_"); char outer[10]; snprintf(outer, sizeof(outer), "%d", progStatus.pbt_outer); result[0] = outer; std::string s1 = result[0], s2 = result[1]; xml_trace( 5, "pbt outer", ((selrig->inuse == onB) ? "B " : "A "), s1.c_str(), " | ", s2.c_str()); } std::string help() { return std::string("returns current passband outer values"); } } rig_get_pbt_outer(&rig_server); class rig_set_pbt : public XmlRpcServerMethod { public: rig_set_pbt(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_pbt", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_pbt_controls) { result = 0; return; } guard_lock serial_lock(&mutex_serial, "xml rig_set_pbt"); progStatus.pbt_inner = (int)(params[0]); progStatus.pbt_outer = (int)(params[1]); selrig->set_pbt_inner(progStatus.pbt_inner); selrig->set_pbt_outer(progStatus.pbt_outer); xml_trace(1, "rig_set_pbt"); } std::string help() { return std::string("sets pbt value"); } } rig_set_pbt(&rig_server); class rig_set_pbt_inner : public XmlRpcServerMethod { public: rig_set_pbt_inner(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_pbt_inner", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_pbt_controls) { result = 0; return; } guard_lock serial_lock(&mutex_serial, "xml rig_set_pbt_inner"); progStatus.pbt_inner = (int)(params[0]); selrig->set_pbt_inner(progStatus.pbt_inner); xml_trace(1, "rig_set_pbt_inner"); } std::string help() { return std::string("sets pbt inner value"); } } rig_set_pbt_inner(&rig_server); class rig_set_pbt_outer : public XmlRpcServerMethod { public: rig_set_pbt_outer(XmlRpcServer* s) : XmlRpcServerMethod("rig.set_pbt_outer", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value() || !selrig->has_pbt_controls) { result = 0; return; } guard_lock serial_lock(&mutex_serial, "xml rig_set_pbt_outer"); progStatus.pbt_outer = (int)(params[0]); selrig->set_pbt_outer(progStatus.pbt_outer); xml_trace(1, "rig_set_pbt_outer"); } std::string help() { return std::string("sets pbt outer value"); } } rig_set_pbt_outer(&rig_server); //---------------------------------------------------------------------- class rig_client_string : public XmlRpcServerMethod { public: rig_client_string(XmlRpcServer* s) : XmlRpcServerMethod("rig.client_string", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result = (std::string)(""); std::string command = std::string(params[0]); bool usehex = false; if (!progStatus.xmlrpc_rig && (!xcvr_online || disable_xmlrpc->value())) { return; } if (command.empty()) return; std::string cmd = ""; if (command.find("x") != std::string::npos) { // hex std::strings size_t p = 0; unsigned int val; usehex = true; while (( p = command.find("x", p)) != std::string::npos) { sscanf(&command[p+1], "%x", &val); cmd += (unsigned char) val; p += 3; } } else cmd = command; guard_lock serial_lock(&mutex_serial, "rig_client_string"); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); waitResponse(10); if (usehex) result = to_hex(respstr); else result = respstr; xml_trace(2, "xmlrpc command:", command.c_str()); } std::string help() { return std::string("sends xmlrpc CAT std::string to flrig_server"); } } rig_client_string(&rig_server); //---------------------------------------------------------------------- class rig_cat_string : public XmlRpcServerMethod { public: rig_cat_string(XmlRpcServer* s) : XmlRpcServerMethod("rig.cat_string", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result = 0; if (!xcvr_online || disable_xmlrpc->value()) { return; } std::string command = std::string(params[0]); bool usehex = false; if (command.empty()) return; std::string cmd = ""; if (command.find("x") != std::string::npos) { // hex std::strings size_t p = 0; unsigned int val; usehex = true; while (( p = command.find("x", p)) != std::string::npos) { sscanf(&command[p+1], "%x", &val); cmd += (unsigned char) val; p += 3; } } else cmd = command; // lock out polling loops until done { guard_lock lock1(&mutex_srvc_reqs); guard_lock lock2(&mutex_serial, "xml 39"); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); waitResponse(10);//(100); if (!respstr.empty()) { result = usehex ? str2hex(respstr.c_str(), respstr.length()) : respstr; } else result = std::string("No response: ").append(selrig->name_); } xml_trace(2, "xmlrpc command:", command.c_str()); } std::string help() { return std::string("sends xmlrpc CAT std::string to xcvr"); } } rig_cat_string(&rig_server); class rig_cat_priority : public XmlRpcServerMethod { public: rig_cat_priority(XmlRpcServer* s) : XmlRpcServerMethod("rig.cat_priority", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result = 0; if (!xcvr_online || disable_xmlrpc->value()) { return; } std::string command = std::string(params[0]); if (command.empty()) return; std::string cmd = ""; if (command.find("x") != std::string::npos) { // hex std::strings size_t p = 0; unsigned int val; while (( p = command.find("x", p)) != std::string::npos) { sscanf(&command[p+1], "%x", &val); cmd += (unsigned char) val; p += 3; } } else cmd = command; guard_lock lock1(&mutex_srvc_reqs); guard_lock lock2(&mutex_serial, "xml 40"); RigSerial->WriteBuffer(cmd.c_str(), cmd.length()); result = std::string("OK"); return; } std::string help() { return std::string("sends xmlrpc priority CAT std::string to xcvr"); } } rig_cat_priority(&rig_server); //------------------------------------------------------------------------------ // Set cwio words per minute //------------------------------------------------------------------------------ static int cwio_wpm; static void set_cwio_wpm(void *) { if (sldr_cwioWPM) { sldr_cwioWPM->value(cwio_wpm); progStatus.cwioWPM = cwio_wpm; } } class rig_cwio_set_wpm : public XmlRpcServerMethod { public: rig_cwio_set_wpm(XmlRpcServer* s) : XmlRpcServerMethod("rig.cwio_set_wpm", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); cwio_wpm = int(params[0]); Fl::awake(set_cwio_wpm); } std::string help() { return std::string("sets DTR/RTS WPM rate"); } } rig_cwio_set_wpm(&rig_server); class rig_cwio_get_wpm : public XmlRpcServerMethod { public: rig_cwio_get_wpm(XmlRpcServer* s) : XmlRpcServerMethod("rig.cwio_get_wpm", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); result = int(progStatus.cwioWPM); } std::string help() { return std::string("sets DTR/RTS WPM rate"); } } rig_cwio_get_wpm(&rig_server); class rig_cwio_mod_wpm : public XmlRpcServerMethod { public: rig_cwio_mod_wpm(XmlRpcServer* s) : XmlRpcServerMethod("rig.mod_cwio_wpm", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); int change = int(params[0]); cwio_wpm += change; Fl::awake(set_cwio_wpm); } std::string help() { return std::string("modify DTR/RTS WPM rate +/- NNN wpm"); } } rig_cwio_mod_wpm(&rig_server); //------------------------------------------------------------------------------ // Set cwio transmit std::string //------------------------------------------------------------------------------ class rig_cwio_text : public XmlRpcServerMethod { public: rig_cwio_text(XmlRpcServer* s) : XmlRpcServerMethod("rig.cwio_text", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); std::string s = (std::string)params[0]; guard_lock lck(&cwio_text_mutex); add_cwio(s); } std::string help() { return std::string("sends text using cwio DTR/RTS keying"); } } rig_cwio_text(&rig_server); //------------------------------------------------------------------------------ // Set fskio transmit std::string //------------------------------------------------------------------------------ extern void FSK_add(std::string); static std::string fskio_text; class rig_fskio_text : public XmlRpcServerMethod { public: rig_fskio_text(XmlRpcServer* s) : XmlRpcServerMethod("rig.fskio_text", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); std::string s = (std::string)params[0]; if (s.find(']') != std::string::npos) ptt_pending = true; FSK_add(s); } std::string help() { return std::string("sends text using fskio DTR/RTS keying"); } } rig_fskio_text(&rig_server); // Set cwio transmit on (1) or off (0) //------------------------------------------------------------------------------ static void set_cwio_send_button(void *val) { if (val == (void *)1) { btn_cwioSEND->value(1); } else { btn_cwioSEND->value(0); guard_lock lck(&cwio_text_mutex); // cwio_text.clear(); cwio_clear_text(); } btn_cwioSEND->redraw(); } class rig_set_verify_cwio_send : public XmlRpcServerMethod { public: rig_set_verify_cwio_send(XmlRpcServer* s) : XmlRpcServerMethod("rig.cwio_send", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); int send_state = int(params[0]); send_text(send_state); Fl::awake(set_cwio_send_button, reinterpret_cast(send_state)); } std::string help() { return std::string("sets cwio transmit on (1) or off (0)"); } } rig_set_verify_cwio_send(&rig_server); //------------------------------------------------------------------------------ static void shutdown(void *) { cbExit(); } class rig_shutdown : public XmlRpcServerMethod { public: rig_shutdown(XmlRpcServer* s) : XmlRpcServerMethod("rig.shutdown", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } Fl::awake(shutdown, static_cast(0)); } std::string help() { return std::string("turn off rig / close flrig"); } } rig_shutdown(&rig_server); //------------------------------------------------------------------------------ // Execute command button, 1..24 // Execute command button SHIFT, 25..48 //------------------------------------------------------------------------------ static int exec_btn = 0; static bool exec_shift = false; void btn_user(void *) { exec_btnUser(exec_btn, exec_shift); } class rig_cmd : public XmlRpcServerMethod { public: rig_cmd (XmlRpcServer* s) : XmlRpcServerMethod("rig.cmd", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); if (!xcvr_online || disable_xmlrpc->value()) { result = 0; return; } exec_btn = int(params[0]); exec_shift = false; if (exec_btn >= 25) { exec_btn -= 24; exec_shift = true; } if (exec_btn < 0 || exec_btn > 24) return; Fl::awake(btn_user, (void *)0); } std::string help() { return std::string("execute command button 1..24; (shift)25..48"); } } rig_cmd(&rig_server); struct MLIST { std::string name; std::string signature; std::string help; } mlist[] = { { "main.set_frequency", "d:d", "set current VFO in Hz" }, { "main.get_version", "s:n", "returns version std::string" }, { "rig.get_AB", "s:n", "returns vfo in use A or B" }, { "rig.get_bw", "A:n", "return BW of current VFO" }, { "rig.get_bws", "A:n", "return table of BW values" }, { "rig.get_bwA", "A:n", "return BW of vfo A" }, { "rig.get_bwB", "A:n", "return BW of vfo B" }, { "rig.get_pbt", "A:n", "return passband tuning"}, { "rig.get_pbt_inner","i:i", "return passband inner"}, { "rig.get_pbt_outer","i:i", "return passband outer"}, { "rig.get_info", "s:n", "return an info std::string" }, { "rig.get_mode", "s:n", "return MODE of current VFO" }, { "rig.get_modeA", "s:n", "return MODE of current VFO A" }, { "rig.get_modeB", "s:n", "return MODE of current VFO B" }, { "rig.get_modes", "A:n", "return table of MODE values" }, { "rig.get_sideband", "s:n", "return sideband (U/L)" }, { "rig.get_notch", "i:n", "return notch value" }, { "rig.get_ptt", "i:n", "return PTT state" }, { "rig.get_power", "i:n", "return power level control value" }, { "rig.get_pwrmeter", "s:n", "return PWR out" }, { "rig.get_pwrmeter_scale", "s:n", "return scale for power meter" }, { "rig.get_pwrmax", "s:n", "return maximum power available" }, { "rig.get_swrmeter", "s:n", "return SWR out" }, { "rig.get_smeter", "s:n", "return Smeter" }, { "rig.get_DBM", "s:n", "return Smeter in dBm" }, { "rig.get_Sunits", "s:n", "return Smeter in S units" }, { "rig.get_split", "i:n", "return split state" }, { "rig.get_update", "s:n", "return update to info" }, { "rig.get_vfo", "s:n", "return current VFO in Hz" }, { "rig.get_vfoA", "s:n", "return vfo A in Hz" }, { "rig.get_vfoB", "s:n", "return vfo B in Hz" }, { "rig.get_xcvr", "s:n", "returns name of transceiver" }, { "rig.get_volume", "i:n", "returns volume control value" }, { "rig.get_rfgain", "i:n", "returns rf gain control value" }, { "rig.get_micgain", "i:n", "returns mic gain control value" }, { "rig.set_AB", "n:s", "set VFO A/B" }, { "rig.set_bw", "i:i", "set BW iaw BW table" }, { "rig.set_bandwidth","i:i", "set bandwidth to nearest requested value" }, { "rig.set_BW", "i:i", "set L/U pair" }, { "rig.set_pbt", "i:A", "set pbt inner/outer" }, { "rig.set_pbt_inner","i:i", "set pbt inner"}, { "rig.set_pbt_outer","i:i", "set pbt outer"}, { "rig.set_frequency","d:d", "set current VFO in Hz" }, { "rig.set_mode", "i:s", "set MODE iaw MODE table" }, { "rig.set_modeA", "i:s", "set MODE A iaw MODE table" }, { "rig.set_modeB", "i:s", "set MODE B iaw MODE table" }, { "rig.set_notch", "n:i", "set NOTCH value in Hz" }, { "rig.set_power", "n:i", "set power control level, watts" }, { "rig.set_ptt", "n:i", "set PTT 1/0 (on/off)" }, { "rig.set_vfo", "d:d", "set current VFO in Hz" }, { "rig.set_vfoA", "d:d", "set vfo A in Hz" }, { "rig.set_vfoB", "d:d", "set vfo B in Hz" }, { "rig.set_split", "n:i", "set split 1/0 (on/off)" }, { "rig.set_volume", "n:i", "set volume control" }, { "rig.set_rfgain", "n:i", "set rf gain control" }, { "rig.set_micgain", "n:i", "set mic gain control" }, { "rig.set_ptt_fast", "n:i", "deprecated; use set_ptt" }, { "rig.set_vfoA_fast", "d:d", "deprecated; use set_vfoA" }, { "rig.set_vfoB_fast", "d:d", "deprecated; use set_vfoB" }, { "rig.set_verify_AB", "n:s", "set & verify VFO A/B" }, { "rig.set_verify_bw", "i:i", "set & verify BW iaw BW table" }, { "rig.set_verify_bandwidth","i:i", "set & verify bandwidth to nearest requested value" }, { "rig.set_verify_BW", "i:i", "set & verify L/U pair" }, { "rig.set_verify_frequency","d:d", "set & verify current VFO in Hz" }, { "rig.set_verify_mode", "i:s", "set & verify MODE iaw MODE table" }, { "rig.set_verify_modeA", "i:s", "set & verify MODE A iaw MODE table" }, { "rig.set_verify_modeB", "i:s", "set & verify MODE B iaw MODE table" }, { "rig.set_verify_notch", "n:i", "set & verify NOTCH value in Hz" }, { "rig.set_verify_power", "n:i", "set & verify power control level, watts" }, { "rig.set_verify_ptt", "n:i", "set & verify PTT 1/0 (on/off)" }, { "rig.set_verify_vfoA", "d:d", "set & verify vfo A in Hz" }, { "rig.set_verify_vfoB", "d:d", "set & verify vfo B in Hz" }, { "rig.set_verify_split", "n:i", "set & verify split 1/0 (on/off)" }, { "rig.set_verify_volume", "n:i", "set & verify volume control" }, { "rig.set_verify_rfgain", "n:i", "set & verify rf gain control" }, { "rig.set_verify_micgain", "n:i", "set & verify mic gain control" }, { "rig.swap", "n:n", "execute vfo swap" }, { "rig.tune", "n:n", "enable transceiver tune function"}, { "rig.cat_string", "s:s", "execute CAT std::string" }, { "rig.cat_priority", "s:s", "priority CAT std::string" }, { "rig.shutdown", "i:n", "shutdown xcvr & flrig" }, { "rig.cwio_set_wpm", "n:i", "set cwio WPM" }, { "rig.cwio_text", "i:s", "send text via cwio interface" }, { "rig.cwio_send", "n:i", "cwio transmit 1/0 (on/off)"}, { "rig.fskio_text", "i:s", "send text via fskio interface" }, { "rig.mod_vfoA", "d:d", "modify vfo A +/- NNN Hz" }, { "rig.mod_vfoB", "d:d", "modify vfo B +/- NNN Hz" }, { "rig.mod_vol", "n:i", "modify volume control +/- NNN %" }, { "rig.mod_pwr", "n:i", "modify power control level +/- NNN watts" }, { "rig.mod_rfg", "n:i", "modify rf gain by +/- NNN units" }, { "rig.mod_cwio_wpm", "n:i", "modify cwio WPM by +/- NNN wpm" }, { "rig.mod_bw", "i:i", "modify bandwidth +- to nearest new value" }, { "rig.vfoA2B", "n:n", "set vfo B to vfo A freq/mode" }, { "rig.freqA2B", "n:n", "set freq B to freq A" }, { "rig.modeA2B", "n:n", "set mode B to mode A" }, { "rig.cmd", "n:i", "execute command button 1..24; 25..48(shift)"} }; class rig_list_methods : public XmlRpcServerMethod { public: rig_list_methods(XmlRpcServer *s) : XmlRpcServerMethod("rig.list_methods", s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { Fl::awake(connection_ON); std::vector methods; for (size_t n = 0; n < sizeof(mlist) / sizeof(*mlist); ++n) { XmlRpcValue::ValueStruct item; item["name"] = mlist[n].name; item["signature"] = mlist[n].signature; item["help"] = mlist[n].help; methods.push_back(item); } result = methods; } std::string help() { return std::string("get flrig methods"); } } rig_list_methods(&rig_server); //------------------------------------------------------------------------------ // support thread xmlrpc clients //------------------------------------------------------------------------------ pthread_t *xml_thread = 0; static bool run_server = false; void * xml_thread_loop(void *d) { run_server = true; for(;;) { if (!run_server) break; rig_server.work(-1.0); } return NULL; } void start_server(int port) { // XmlRpc::setVerbosity(progStatus.rpc_level); // Create the server socket on the specified port rig_server.bindAndListen(port); // Enable introspection rig_server.enableIntrospection(true); xml_thread = new pthread_t; if (pthread_create(xml_thread, NULL, xml_thread_loop, NULL)) { perror("pthread_create"); exit(EXIT_FAILURE); } } void exit_server() { rig_server.exit(); run_server = false; } void set_server_port(int port) { rig_server.bindAndListen(port); } std::string print_xmlhelp() { static std::string pstr; pstr.clear(); std::string line; size_t f1_len = 0; for (size_t n = 0; n < sizeof(mlist) / sizeof(*mlist); ++n) { if (mlist[n].name.length() > f1_len) f1_len = mlist[n].name.length(); } for (size_t n = 0; n < sizeof(mlist) / sizeof(*mlist); ++n) { line.clear(); line.assign(mlist[n].name); line.append(f1_len + 2 - line.length(), ' '); line.append(mlist[n].signature); line.append(" "); line.append(mlist[n].help); line.append("\n"); pstr.append(line); } return pstr; } flrig-2.0.04/src/graphics/0000775000175000017500000000000014511461606012276 500000000000000flrig-2.0.04/src/graphics/images.cxx0000664000175000017500000000467414502041135014211 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "images.h" //#include "dbm.xbm" //#include "rev.xbm" //#include "swr.xbm" //#include "mvolts.xbm" //#include "smeter.xbm" #include "images/P5.xbm" #include "images/P10.xbm" #include "images/P15.xbm" #include "images/P20.xbm" #include "images/P25.xbm" #include "images/P50.xbm" #include "images/P100.xbm" #include "images/P200.xbm" #include "images/P200log.xbm" #include "images/volts.xbm" #include "images/volts50.xbm" #include "images/idd25.xbm" #include "images/idd50.xbm" #include "images/S60.xbm" #include "images/SWR.xbm" #include "images/alc.xbm" #include "images/alc40db.xbm" Fl_Bitmap image_p5(P5_bits, P5_width, P5_height); Fl_Bitmap image_p10(P10_bits, P10_width, P10_height); Fl_Bitmap image_p15(P15_bits, P15_width, P15_height); Fl_Bitmap image_p20(P20_bits, P20_width, P20_height); Fl_Bitmap image_p25(P25_bits, P25_width, P25_height); Fl_Bitmap image_p50(P50_bits, P50_width, P50_height); Fl_Bitmap image_p100(P100_bits, P100_width, P100_height); Fl_Bitmap image_p200(P200_bits, P200_width, P200_height); Fl_Bitmap image_p200log(P200log_bits, P200log_width, P200log_height); Fl_Bitmap image_voltmeter(volts_bits, volts_width, volts_height); Fl_Bitmap image_volts50(volts50_bits, volts50_width, volts50_height); Fl_Bitmap image_idd25(idd25_bits, idd25_width, idd25_height); Fl_Bitmap image_idd50(idd50_bits, idd50_width, idd50_height); Fl_Bitmap image_smeter(S60_bits, S60_width, S60_height); Fl_Bitmap image_swr(SWR_bits, SWR_width, SWR_height); Fl_Bitmap image_alc(alc_bits, alc_width, alc_height); Fl_Bitmap image_alc40db(alc40db_bits, alc40db_width, alc40db_height); flrig-2.0.04/src/graphics/icons.cxx0000664000175000017500000001504114502041135014045 00000000000000// ---------------------------------------------------------------------------- // icons.cxx // // Copyright (C) 2008 // Stelios Bounanos, M0GLD // // This file is part of flrig. // // This is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This software is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // ===================================================================== // ---------------------------------------------------------------------------- #include "config.h" #include "icons.h" #include "util.h" #include #include #include #include #if USE_IMAGE_LABELS # include # include # include # include # include # include #endif namespace icons { #if USE_IMAGE_LABELS typedef std::map imap_t; static imap_t* imap = 0; #endif #define FL_EMPTY_LABEL FL_FREE_LABELTYPE static void draw_empty(const Fl_Label*, int, int, int, int, Fl_Align) { } static void measure_empty(const Fl_Label*, int& w, int& h) { w = h = 0; } // The following functions create image+text menu item labels. // You've had too much FLTK if you already know how to do that. // Return a multi_label pointer, cast to a string, for `text' and // `pixmap'. This goes into the label pointer of a widget or menu // item. The text label is copied if we are using multi labels. You must // call set_icon_label on the widget or menu item before its draw() // function is called for the first time. // // A NULL pixmap means that the caller wants an empty, transparent, icon. const char* make_icon_label(const char* text, const char** pixmap) { #if USE_IMAGE_LABELS static imap_t* imap_ = 0; if (unlikely(!imap_)) { imap = imap_ = new imap_t; Fl::set_labeltype(FL_EMPTY_LABEL, draw_empty, measure_empty); } // Create a multi label and associate it with an Fl_Image* array Fl_Multi_Label* mlabel = new Fl_Multi_Label; Fl_Image** images = new Fl_Image*[2]; images[0] = new Fl_Pixmap(pixmap ? pixmap : clear_row_icon); images[1] = 0; // we create this on demand // set_icon_label_ will set mlabel->labela later mlabel->typea = _FL_IMAGE_LABEL; if (!text) text = ""; size_t len = strlen(text); char* s = new char[len + 2]; s[0] = ' '; memcpy(s + 1, text, len + 1); mlabel->labelb = s; mlabel->typeb = FL_NORMAL_LABEL; (*imap)[mlabel] = images; return (const char*)mlabel; #else return text; #endif } #if USE_IMAGE_LABELS // Find the item's label, which should be something that was returned by // make_icon_label, and set the active or inactive image. template void set_icon_label_(T* item) { imap_t::iterator j = imap->find((Fl_Multi_Label*)(item->label())); if (j == imap->end()) return; Fl_Multi_Label* mlabel = j->first; Fl_Image** images = j->second; unsigned char i = !item->active(); if (!images[i]) { // create inactive version of other image images[i] = images[!i]->copy(); images[i]->inactive(); } if (mlabel->typea == _FL_IMAGE_LABEL) mlabel->labela = (const char*)images[i]; else mlabel->labelb = (const char*)images[i]; item->image(images[i]); mlabel->label(item); item->labeltype(_FL_MULTI_LABEL); } #endif void set_icon_label(Fl_Menu_Item* item) { #if USE_IMAGE_LABELS set_icon_label_(item); #else // this isn't needed but it simplifies fldigi's UI setup code if (item->labeltype() == _FL_MULTI_LABEL) item->labeltype(FL_NORMAL_LABEL); #endif } void set_icon_label(Fl_Widget* w) { #if USE_IMAGE_LABELS set_icon_label_(w); w->image(0); #else if (w->labeltype() == _FL_MULTI_LABEL) w->labeltype(FL_NORMAL_LABEL); #endif } void toggle_icon_labels(void) { #if USE_IMAGE_LABELS for (imap_t::iterator i = imap->begin(); i != imap->end(); ++i) { // swap sublabels const char* l = i->first->labela; i->first->labela = i->first->labelb; i->first->labelb = l; if (i->first->typea == _FL_IMAGE_LABEL) { i->first->typea = FL_NORMAL_LABEL; i->first->typeb = FL_EMPTY_LABEL; i->first->labela++; } else { i->first->typea = _FL_IMAGE_LABEL; i->first->typeb = FL_NORMAL_LABEL; i->first->labelb--; } } #endif } template const char* get_icon_label_text_(T* item) { #if USE_IMAGE_LABELS if (item->labeltype() == _FL_MULTI_LABEL) { imap_t::iterator i = imap->find((Fl_Multi_Label*)(item->label())); if (i == imap->end()) return 0; if (i->first->typeb == FL_NORMAL_LABEL) return i->first->labelb + 1; else // disabled icons return i->first->labela; } else #endif return item->label(); } const char* get_icon_label_text(Fl_Menu_Item* item) { return get_icon_label_text_(item); } const char* get_icon_label_text(Fl_Widget* w) { return get_icon_label_text_(w); } template void free_icon_label_(T* item) { #if USE_IMAGE_LABELS if (item->labeltype() == FL_NORMAL_LABEL) { delete [] item->label(); item->label(0); return; } imap_t::iterator i = imap->find((Fl_Multi_Label*)item->label()); if (i == imap->end()) return; item->label(0); // delete the images delete i->second[0]; delete i->second[1]; delete [] i->second; // delete the multi label delete [] ((i->first->typeb == FL_NORMAL_LABEL) ? i->first->labelb : i->first->labela-1); delete i->first; imap->erase(i); #endif } void free_icon_label(Fl_Menu_Item* item) { free_icon_label_(item); } void free_icon_label(Fl_Widget* w) { free_icon_label_(w); } template void set_active_(T* t, bool v) { if (v) t->activate(); else t->deactivate(); if (t->labeltype() == _FL_MULTI_LABEL) set_icon_label(t); } void set_active(Fl_Menu_Item* item, bool v) { set_active_(item, v); } void set_active(Fl_Widget* w, bool v) { set_active_(w, v); } static Fl_Image* msg_icon; void set_message_icon(const char** pixmap) { if (msg_icon && msg_icon->data() == pixmap) return; delete msg_icon; Fl_Widget* msg = fl_message_icon(); msg->label(""); msg->align(FL_ALIGN_TOP_LEFT | FL_ALIGN_INSIDE); if (msg->parent() != NULL) msg->color(msg->parent()->color()); msg->box(FL_NO_BOX); msg->image(msg_icon = new Fl_Pixmap(pixmap)); } } // icons flrig-2.0.04/src/graphics/pixmaps.cxx0000664000175000017500000046356114502041135014431 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // ---------------------------------------------------------------------------- // This file contains pixmap versions of icons from the Tango base icon // theme: http://tango.freedesktop.org/Tango_Desktop_Project // // Licensed under the Creative Commons Attribution Share-Alike license: // http://creativecommons.org/licenses/by-sa/2.5/ // --------------------------------------------------------------------- // Tango icons // --------------------------------------------------------------------- #include "config.h" /* XPM */ const char *address_book_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 124 2", " c #727E0A", ". c #785977", "X c #CC0000", "o c #EF2929", "O c #698373", "+ c #67837F", "@ c #9DB029", "# c #EDD400", "$ c #A2AB7B", "% c #FCE94F", "& c #6F6384", "* c #617296", "= c #5A7AA4", "- c #6C7CA0", "; c #7A88A7", ": c #7B8AA8", "> c #7E8CA8", ", c #7E8CAB", "< c #8F9E86", "1 c #99A580", "2 c #808DA9", "3 c #808DAA", "4 c #818FAB", "5 c #828EAA", "6 c #8290AC", "7 c #8390AC", "8 c #8B96AE", "9 c #8F9FB8", "0 c #9E9DBF", "q c #AB82AA", "w c #AA83AB", "e c #AC80A8", "r c #AC80A9", "t c #AC82AA", "y c #AA84AC", "u c #AA85AC", "i c #A986AD", "p c #A887AE", "a c #A987AE", "s c #A889AF", "d c #A789B0", "f c #A78AB1", "g c #A78BB1", "h c #A58DB3", "j c #A889B0", "k c #AC8BB1", "l c #A491B6", "z c #AB92B6", "x c #A7ADBD", "c c #A9ACB8", "v c #A8AEBC", "b c #ABB0BE", "n c #ABB1BE", "m c #ACB1BE", "M c #B5B5B6", "N c #B7B7B7", "B c #B9B9B9", "V c #9E9DC0", "C c #9D9EC0", "Z c #9D9FC1", "A c #9BA2C3", "S c #9CA1C3", "D c #9CA2C3", "F c #9BA3C4", "G c #9AA4C5", "H c #9AA5C5", "J c #99A7C7", "K c #9AA6C6", "L c #9FABC3", "P c #95AFCD", "I c #96AECC", "U c #95AFCE", "Y c #95B0CE", "T c #95B1CF", "R c #9DB7D2", "E c #AAACC9", "W c #AFB5C2", "Q c #A9B3CF", "! c #AFBAC9", "~ c #B4B9C4", "^ c #A5BDD7", "/ c #A8B8D0", "( c #A9B8D0", ") c #A9B9D0", "_ c #A9B9D1", "` c #A7BFD8", "' c #A8BFD8", "] c #A9C1D9", "[ c #ACC3DA", "{ c #B1C0D6", "} c #B4C9DE", "| c #BCC8D9", " . c #B7CAE0", ".. c #B7CBE0", "X. c #B8CBE0", "o. c #B9CBE0", "O. c #BACDE2", "+. c #BFCCE0", "@. c #C1C1C3", "#. c #DDDDDD", "$. c #DEDEDE", "%. c #C3CFE0", "&. c #C3D0E2", "*. c #C0D2E4", "=. c #C6D6E7", "-. c #CBD7E5", ";. c #CBD8E7", ":. c #C7D7E8", ">. c #CEDAE8", ",. c #CEDBE8", "<. c #CEDBE9", "1. c #CFDBE9", "2. c #CCDAEA", "3. c #CFDCE9", "4. c #CFDCEA", "5. c #CFDCEC", "6. c #D0DCEA", "7. c #D1DEEB", "8. c #D2DEEB", "9. c #D3DFEC", "0. c #D7E3F0", "q. c #D7E4F0", "w. c #D8E4F1", "e. c None", /* pixels */ "e.= = = = = = = = = = = = = e.e.", "= - 8.=.O.} ^ ^ ` ` ' ' R < # e.", "= | 6.&.5.] G d r u V T [ < % # ", "= %.4.{ 2.Q y F U J p A [ 1 % # ", "= -.3./ 2.z Z 0 q w J f [ $ % # ", "= 7.1./ 2.t I y C i P r [ O @ ", "= 0.<.( 2.r P r S a D s [ O @ ", "= w.,.) 2.k G l j h y K [ + @ ", "= w.,._ 2.E p J Y T T T [ & o X ", "= q.>.+.2.] H g e i T T [ & o X ", "= 0.9.5.:.*. .....X.X.X.o.& o X ", "= ;., 5 2 > ; : 4 6 7 3 * . X e.", "= L M N N N N N N N B ! = = e.e.", "= 9 @.#.#.#.#.#.$.$.$.~ = = e.e.", "= = 8 x W b b n n m m v c = e.e.", "e.= = = = = = = = = = = = = e.e." }; /* XPM */ const char *edit_undo_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 61 1", " c #BB9F15", ". c #BEA113", "X c #BCA114", "o c #BCA015", "O c #BDA116", "+ c #BBA11B", "@ c #BFA31B", "# c #C4A000", "$ c #C4A901", "% c #C8AC02", "& c #CBAA0E", "* c #C2A211", "= c #C1A313", "- c #C2A611", "; c #C1A314", ": c #C1A319", "> c #C0A41A", ", c #C5AB1B", "< c #C0A623", "1 c #D6C004", "2 c #DAC304", "3 c #D8C207", "4 c #DFC80A", "5 c #DFC80B", "6 c #DFC90F", "7 c #F7DD05", "8 c #E3CD16", "9 c #E8D21D", "0 c #F1DB29", "q c #F4DF2C", "w c #ECD936", "e c #FAE320", "r c #FBE425", "t c #F5E02F", "y c #F6E02F", "u c #F6E131", "i c #F7E232", "p c #F8E232", "a c #D8C543", "s c #DBC443", "d c #E1CD40", "f c #E3CE41", "g c #E9DA5D", "h c #EADB66", "j c #EBDC6F", "k c #EEE16E", "l c #F2E469", "z c #F3E56A", "x c #F6E769", "c c #F5E66D", "v c #F7E86C", "b c #F7E86E", "n c #F9EA69", "m c #FAEB6F", "M c #EFE276", "N c #FAEC73", "B c #FBED76", "V c #FBED79", "C c #F2E788", "Z c #FBF3AD", "A c None", /* pixels */ "AAAAAA#AAAAAAAAA", "AAAAA##AAAAAAAAA", "AAAA#Z#AAAAAAAAA", "AAA#Zr##. +AAAAA", "AA#ZueNmbvX;AAAA", "A#Zyi0t08wxf=AAA", "#Zypiit0999wdOAA", "A#Vpq1119995z,oA", "AA#B2Bnnnn743j@A", "AAA#BB####$k6l>A", "AAAA#B#AAAA#cM:A", "AAAAA##AAAAA%C*A", "AAAAAA#AAAAA&g c #B0C6DE", ", c #B1C7DF", "< c #B2C8E0", "1 c #B3C9E1", "2 c #EBEBEB", "3 c #ECECEC", "4 c #EEEEEE", "5 c #F0F0F0", "6 c #F2F2F2", "7 c #F4F4F4", "8 c #F5F5F5", "9 c #F6F6F6", "0 c #F7F7F7", "q c #F8F8F8", "w c #F9F9F9", "e c #FAFAFA", "r c #FBFBFB", "t c #FCFCFC", "y c #FDFDFD", "u c #FEFEFE", "i c None", /* pixels */ "io............Oi", "i.yuuyyttrreewXi", "i.y$%%&&*****qXi", "i.u%@@@@=@@@=qXi", "i.y&@@@@-----qXi", "i.y&@@@@-;;;2qXi", "i.t*@@@@;@@:3qXi", "i.t==-;::>>>4qXi", "i.t=-;::>>,,5qXi", "i.r=@@@@@@@<60Xi", "i.r-;:>> < 170Xi", "i.e-;:>,< 8990Xi", "i.w-####< 0q00Xi", "i.w-;:>,< 0wq0Xi", "i.qqqqqq q qqqXi", "iO............+i" }; /* XPM */ const char *edit_clear_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 108 2", " c #7B4A00", ". c #7C4B00", "X c #AB1B0D", "o c #A12400", "O c #A03600", "+ c #B8381D", "@ c #804E01", "# c #845201", "$ c #865203", "% c #AD4213", "& c #876400", "* c #A6690A", "= c #A96B0A", "- c #AB6D0B", "; c #B2760B", ": c #B2720C", "> c #BC7A0F", ", c #B06917", "< c #BB4A28", "1 c #C17D10", "2 c #C86D33", "3 c #9A8500", "4 c #9C8800", "5 c #9C8B00", "6 c #9D8C00", "7 c #9E8D00", "8 c #9F8D00", "9 c #9E8D01", "0 c #9F8D01", "q c #9F8E00", "w c #9F8E01", "e c #9F8E04", "r c #9F8F05", "t c #A18801", "y c #A08E01", "u c #A08F01", "i c #A08F05", "p c #A19008", "a c #A29009", "s c #A59411", "d c #AB9B1A", "f c #AE9E1B", "g c #B1A01D", "h c #BBA529", "j c #BEAE32", "k c #C0B02F", "l c #C6B530", "z c #C5B432", "x c #C6B633", "c c #C5B536", "v c #DAC203", "b c #DBC304", "n c #DCC407", "m c #DCC510", "M c #DCC610", "N c #DCC615", "B c #E3CB11", "V c #E5CD14", "C c #E7D018", "Z c #DFCA26", "A c #EED723", "S c #F3DB2A", "D c #F6DE2F", "F c #FBE437", "G c #FCE53C", "H c #FDE63C", "J c #CDBD41", "K c #CCBD43", "L c #CDBE45", "P c #D7B162", "I c #CFC149", "U c #D2C34F", "Y c #D8C84F", "T c #D6C856", "R c #DCCD58", "E c #DDCF5E", "W c #EDDA46", "Q c #E4D249", "! c #E4D34C", "~ c #E5D44E", "^ c #E6D656", "/ c #E1D35B", "( c #E7D75B", ") c #E7D85F", "_ c #FBE544", "` c #FDE952", "' c #FDEA5F", "] c #E2D467", "[ c #E7D96D", "{ c #ECDC68", "} c #E8DA6C", "| c #F6D861", " . c #EADC72", ".. c #EBDD77", "X. c #EBDE77", "o. c #F3E365", "O. c #FDEB61", "+. c #FDEA63", "@. c #FDEC6B", "#. c #FDEB6C", "$. c #FDEC6D", "%. c #FDEE7D", "&. c #FBEA84", "*. c #FDEF84", "=. c #F8EA88", "-. c #FBED8B", ";. c #FDEF8A", ":. c None", /* pixels */ ":.. :.:.:.:.:.:.:.:.:.:.:.:.:.", " * - :.:.:.:.:.:.:.:.:.:.:.:.", " : 1 = :.5 :.:.:.:.:.:.:.:.:.", ":.$ > 1 # 3 5 :.:.:.:.:.:.:.:.:.", ":. @ ; t j g :.:.:.:.:.:.:.:.:.", ":.:.& 4 J X., O u :.:.:.:.:.:.:.", ":.:.9 Y { 2 X P .K a w :.:.:.:.", ":.:.7 h < + | +.#.%.=.L r q :.:.", ":.:.:.o % &.@.*.$.` _ o...I f 6 ", ":.:.:.:.k ;.' O.` H S C M Q ] 0 ", ":.:.:.:.s -.G F D A V b v ^ x q ", ":.:.:.:.y E W C B n v v ! R e :.", ":.:.:.:.:.d } m v v N ( T i :.:.", ":.:.:.:.:.q c ) Z ~ [ z 7 :.:.:.", ":.:.:.:.:.:.7 U / l p 8 :.:.:.:.", ":.:.:.:.:.:.:.6 7 7 :.:.:.:.:.:." }; /* XPM */ const char *edit_copy_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 27 1", " c #888A85", ". c #898B86", "X c #8A8C87", "o c #8C8E89", "O c #8D8F8A", "+ c #989A95", "@ c #989A96", "# c #9A9B97", "$ c #C3C4C3", "% c #C7C7C6", "& c #D4D4D4", "* c #E3E3E2", "= c #E3E4E2", "- c #EEEEEE", "; c #F0F0EF", ": c #F3F3F3", "> c #F4F4F4", ", c #F6F6F5", "< c #F7F7F6", "1 c #F8F8F7", "2 c #FAFAF9", "3 c #FAFAFA", "4 c #FBFBFB", "5 c #FCFCFB", "6 c #FEFEFD", "7 c #FFFFFF", "8 c None", /* pixels */ "8888888888888888", "8888888888888888", "8888888888888888", "8888# O", "8888X7777777777 ", "8888.7;;;;;;;;7 ", "8888X7;%%%%%%;7 ", "8888.7;;;;;;;;7 ", "8888X7;%%%%%;;7 ", "8888.7;;;;;;;3: ", "8888X7;%%%%%-<$ ", "8888X7;;;;;oooo ", "8888.6;;;;3+31= ", "8888.2;;;33+3* ", "8888.><,54&@= 88", "8888o. 888" }; /* XPM */ const char *edit_cut_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 88 1", " c #A60101", ". c #A60202", "X c #A40502", "o c #A60606", "O c #A70606", "+ c #A80303", "@ c #A80403", "# c #A80606", "$ c #A80707", "% c #A90707", "& c #AA0808", "* c #AA0909", "= c #A90A0A", "- c #A90B0B", "; c #AA0B0B", ": c #AA0C0C", "> c #AA0D0D", ", c #AB0D0D", "< c #AA0E0E", "1 c #B50B0B", "2 c #B70F0E", "3 c #B80D0D", "4 c #AB1010", "5 c #AB1111", "6 c #AB1313", "7 c #AB1414", "8 c #AB1616", "9 c #AD1717", "0 c #AE1818", "q c #9C2F2C", "w c #C01513", "e c #C01514", "r c #C71A19", "t c #C91A1A", "y c #CA1B1A", "u c #CB1F1F", "i c #CD1D1C", "p c #CD1D1D", "a c #CE1D1D", "s c #CF1D1D", "d c #CE1E1E", "f c #D01F1F", "g c #D11F1F", "h c #D12020", "j c #D22020", "k c #D32121", "l c #D42222", "z c #D52323", "x c #D62323", "c c #DB2727", "v c #A34A45", "b c #898984", "n c #8A8C87", "m c #8B8D88", "M c #8C8E89", "N c #8D8F8A", "B c #8E908B", "V c #8F918C", "C c #90918D", "Z c #91938E", "A c #92948F", "S c #939590", "D c #9A9C97", "F c #9FA09C", "G c #A8A9A5", "H c #AAACA7", "J c #AEAFAB", "K c #B3B2AF", "L c #B3B5B0", "P c #B5B6B2", "I c #B5B6B3", "U c #B6B8B3", "Y c #B8BAB5", "T c #BABBB7", "R c #C5C6C3", "E c #C6C8C3", "W c #CCCEC9", "Q c #CDCECB", "! c #D2D3D0", "~ c #D2D4D0", "^ c #DBDCD9", "/ c #E1E1DF", "( c #E7E8E6", ") c #EFF0EF", "_ c #F5F6F5", "` c #F7F7F6", "' c #F7F7F7", "] c None", /* pixels */ "]]]]mS]]]]mV]]]]", "]]]B'm]]]]C!V]]]", "]]]m~)A]]]HEN]]]", "]]]NL`m]]BWJm]]]", "]]]]m^)ZMUQm]]]]", "]]]]NP'mFIYm]]]]", "]]]]]m/_DGm]]]]]", "]]]]]NT(HBn]]]]]", "]]]]]]bRKq]]]]]]", "]]]]08ov.r90]]]]", "]]]%jd2X@thu=]]]", "]]#f+e ]]iw+pO]]", "]7z]]a=]]+y]]h7]", "],s]1k:]]*x3]g5]", "]6cfa$]]]]&lsa6]", "]]<48]]]]]]>;-]]" }; /* XPM */ const char *edit_paste_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 77 1", " c #6A4200", ". c #6B4301", "X c #6C4301", "o c #6B4403", "O c #6C4401", "+ c #6D4401", "@ c #6E4502", "# c #6E4602", "$ c #6F4602", "% c #5C5C5B", "& c #5C5C5C", "* c #5E5E5E", "= c #5F5F5E", "- c #666864", "; c #676964", ": c #6E6C64", "> c #6E6D64", ", c #6A6C68", "< c #706D63", "1 c #706D64", "2 c #716F64", "3 c #736F64", "4 c #7E7E7B", "5 c #7F7F7C", "6 c #B37B22", "7 c #B97F23", "8 c #BA7F23", "9 c #A77D3B", "0 c #A37C3D", "q c #A47E3E", "w c #A17C40", "e c #C08424", "r c #C58726", "t c #C58727", "y c #C68827", "u c #C28628", "i c #80807D", "p c #959589", "a c #97978A", "s c #B1B2B2", "d c #B2B4B4", "f c #B3B5B5", "g c #B7B7B4", "h c #B8B9B5", "j c #B9B9B6", "k c #B9BAB6", "l c #BBBBBB", "z c #C1C2BE", "x c #CCCDCA", "c c #CDCECB", "v c #D8D8D5", "b c #D9D9D6", "n c #DADAD8", "m c #DBDBD9", "M c #E0E0E0", "N c #E7E7E4", "B c #E7E7E5", "V c #E8E8E6", "C c #E9E9E7", "Z c #EAEAE8", "A c #EBEBE9", "S c #EBEBEA", "D c #ECECEA", "F c #ECECEB", "G c #EDEDEB", "H c #EDEDEC", "J c #EDEEED", "K c #EEEEED", "L c #EFEFED", "P c #EFEFEE", "I c #F0F0EF", "U c #F1F1F1", "Y c #F2F2F2", "T c #FEFEFD", "R c #FEFEFE", "E c #FFFFFF", "W c None", /* pixels */ "WWWWW=&&&&=WWWWW", "WW+Oo%paap%oOOWW", "W+eq1*5ii4*:w7XW", "W$y2UMllllMY>t W", "W$y-EIIIIIIE;u W", "W$r-EIffffPE;u W", "W$r-EIIIILGE;u W", "W#r-EIffdsZE;u W", "W#r-EIPHSZmE;u W", "W#r-EKFACnxE;u W", "W#r-EDZVckhE;u W", "W@r-ECBbjEEE;u W", "W@r-ENvzgEE;tu W", "W@r c #6395CC", ", c #6496CC", "< c #6597CC", "1 c #6598CD", "2 c #6698CC", "3 c #6898CD", "4 c #6899CD", "5 c #6999CD", "6 c #6A9ACD", "7 c #6B9ACD", "8 c #6B9BCD", "9 c #6A9ACE", "0 c #6C9BCE", "q c #6D9CCE", "w c #6E9CCE", "e c #6E9DCE", "r c #709DCF", "t c #709ECE", "y c #729FCF", "u c #76A2D0", "i c #7CA6D2", "p c #969795", "a c #969992", "s c #9A9C98", "d c #A6A6A6", "f c #A7A9A4", "g c #A9ABA9", "h c #C0C0BF", "j c #81A9D4", "k c #85ACD5", "l c #88AED6", "z c #89AED6", "x c #89AFD7", "c c #8AAFD7", "v c #8BB0D7", "b c #8CB1D8", "n c #94B6DB", "m c #9BBBDD", "M c #9ABADE", "N c #9CBBDD", "B c #A6C2E0", "V c #ADC7E3", "C c #AEC7E3", "Z c #BED2E8", "A c #C6C6C5", "S c #C9C9C9", "D c #CCCCCA", "F c #CECECE", "G c #D8D8D7", "H c #C6D8EB", "J c #F5F5F4", "K c #FFFFFF", "L c None", /* pixels */ "L$$$$$@@LLLLLLLL", "$FFFFFFA+LLLLLLL", "#hppsfffffffffaL", "@SddfKKKKKKKKKfL", "ohppfKJJJJJJJKfL", "XSddfKJDDDDDJKfL", "XhppfKJJJJJJJKfL", ".SddfKJDDDGJJKfL", " h:************=", " S*HZZZZZZZZZZH*", " h*CbbbbbbbbbzB*", " S*VvbvclkjiuyN*", " h;mtrewq08954n*", " gx8765321<,>M-O", "&*************%L", "LLLLLLLLLLLLLLLL" }; /* XPM */ const char *format_indent_more_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 68 1", " c #555753", ". c #61635F", "X c #797B78", "o c #7A7B78", "O c #7A7C78", "+ c #888A85", "@ c #8B8D88", "# c #8C8E8A", "$ c #8D8F8A", "% c #929391", "& c #929491", "* c #939491", "= c #939492", "- c #939592", "; c #ABACAA", ": c #ACADAA", "> c #ACADAB", ", c #ADAEAB", "< c #C5C5C3", "1 c #C5C6C4", "2 c #C5C7C4", "3 c #C7C7C5", "4 c #C7C7C6", "5 c #D2D2D0", "6 c #D2D3D0", "7 c #D2D2D1", "8 c #D2D3D1", "9 c #D3D4D2", "0 c #D4D5D3", "q c #D6D6D4", "w c #D6D7D5", "e c #DBDBD9", "r c #E0E1E0", "t c #E7E7E7", "y c #EDEDEC", "u c #EEEDEC", "i c #EEEEED", "p c #EFEEED", "a c #EEEEEE", "s c #EFEEEE", "d c #EFEFEE", "f c #F0F0EF", "g c #F1F1F1", "h c #F2F1F0", "j c #F2F1F1", "k c #F2F2F0", "l c #F2F2F1", "z c #F3F2F1", "x c #F3F2F2", "c c #F3F3F2", "v c #F4F3F2", "b c #F4F3F3", "n c #F4F4F3", "m c #F4F4F4", "M c #F5F4F4", "N c #F4F5F4", "B c #F5F5F4", "V c #F5F6F4", "C c #F5F6F5", "Z c #F6F6F5", "A c #F7F6F5", "S c #F7F6F6", "D c #F7F7F6", "F c #F7F8F6", "G c #F8F8F7", "H c #FEFEFE", "J c #FFFFFF", "K c None", /* pixels */ "K$++++++++++++$K", "K+JJJJJJJJJJJJ@K", "K+JGGGGGFAZCBH@K", "K+JGGGG@@@@@MH@K", "K+JGGGDeZVmnnH@K", "K+JGGDZ.wNnbxH@K", "K+JGDSC. qvzjH@K", "K+t4,-O. 0ghH@K", "K+t3,=o. 9fH@K", "K+t2>*o. 8H@K", "K+t1:&o. 5dH@K", "K+t<;%X. 7sdH@K", "K+Jcchl. 6piuH@K", "K+Jckgf.6aiuyH@K", "K+JHHHHrHHHHHJ@K", "K$@@@@@@@@@@@@#K" }; /* XPM */ const char *left_arrow_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 98 2", " c #3A7304", ". c #3A7404", "X c #3B7404", "o c #3B7504", "O c #3A7405", "+ c #3B7604", "@ c #3C7604", "# c #3D7904", "$ c #3F790A", "% c #41790E", "& c #437A10", "* c #457C13", "= c #4E9A06", "- c #519E07", "; c #4D8419", ": c #52891E", "> c #55A409", ", c #56A609", "< c #58A90A", "1 c #59AC0B", "2 c #5AAD0B", "3 c #5CAD0E", "4 c #5EB30D", "5 c #5EA31D", "6 c #60B50D", "7 c #61B60E", "8 c #61B70E", "9 c #62AF17", "0 c #65B519", "q c #578927", "w c #598B29", "e c #5A8C2C", "r c #5D8D2E", "t c #60A420", "y c #66AF20", "u c #66AC22", "i c #65A827", "p c #68A92B", "a c #6BA236", "s c #6EA23D", "d c #70AD35", "f c #71B035", "g c #75B23C", "h c #67C111", "j c #69C211", "k c #6EC915", "l c #7CC833", "z c #7BB642", "x c #7AB742", "c c #7FB947", "v c #7DB549", "b c #7DA855", "n c #7FA956", "m c #80B64D", "M c #82B74F", "N c #85B954", "B c #87BB54", "V c #87BA57", "C c #87B65B", "Z c #88BB58", "A c #89BC59", "S c #8ABC5A", "D c #8BBD5C", "F c #90BF63", "G c #97BD72", "H c #8DC459", "J c #97DA54", "K c #91C064", "L c #96CA65", "P c #94C26A", "I c #9DC477", "U c #A5DC6E", "Y c #A0C37E", "T c #A3CA7E", "R c #A6CF7F", "E c #A3D572", "W c #A5D576", "Q c #A9D77D", "! c #A5C982", "~ c #A7CD84", "^ c #AACF88", "/ c #A9D480", "( c #ACD881", ") c #AEDB82", "_ c #B0DE83", "` c #B3D296", "' c #B5D497", "] c #B8D69B", "[ c #BDD9A3", "{ c #BFDAA6", "} c #C2DCAA", "| c #C4DDAC", " . c #C5DEAE", ".. c #C6DEAE", "X. c #C7DFB1", "o. c #C8DFB1", "O. c #CAE0B5", "+. c None", /* pixels */ "+.+.+.+.+.+.+.+.+.+.o +.+.+.+.+.", "+.+.+.+.+.+.+.+.X w +.+.+.+.+.", "+.+.+.+.+.+.+.. n o. +.+.+.+.+.", "+.+.+.+.+.+.& Y [ O. +.+.+.+.+.", "+.+.+.+.X r ` ^ K X.+ . ", "+.+.+.O b ' P V D | ... .| } ", "+.+.* G ~ m v M N Z A S A Z { ", "o e ! F d g z c x f i 5 t p ] ", "o q I B u y 9 3 1 < > - = = T ", "+.+.% C L 0 6 8 7 4 2 , - = T ", "+.+.+.o s W l j h ) ( / R T T ", "+.+.+.+.+ : E J k _ # . ", "+.+.+.+.+.+.$ H U _ +.+.+.+.+.", "+.+.+.+.+.+.+.@ a Q +.+.+.+.+.", "+.+.+.+.+.+.+.+.+ ; +.+.+.+.+.", "+.+.+.+.+.+.+.+.+.+.o +.+.+.+.+." }; /* XPM */ const char *log_out_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 184 2", " c #555753", ". c #565854", "X c #575955", "o c #585A56", "O c #595B57", "+ c #595959", "@ c #5B5D59", "# c #5C5E5A", "$ c #5D5D5D", "% c #645F5E", "& c #5F615D", "* c #61635F", "= c #606060", "- c #646562", "; c #656763", ": c #646464", "> c #656565", ", c #686966", "< c #686A67", "1 c #686868", "2 c #696B68", "3 c #6D6E6B", "4 c #6C6C6C", "5 c #6E6E6E", "6 c #6F6F6F", "7 c #7E6A6A", "8 c #707070", "9 c #737571", "0 c #757575", "q c #767676", "w c #797979", "e c #7E7E7E", "r c #7F7F7F", "t c #A50000", "y c #A50101", "u c #A60303", "i c #A60404", "p c #A20E0E", "a c #AA0B0B", "s c #A90C0C", "d c #A61111", "f c #A51413", "g c #A11616", "h c #AC1111", "j c #AC1515", "k c #B51B1B", "l c #B01E1E", "z c #AC2524", "x c #B02121", "c c #B12221", "v c #BC2424", "b c #B72828", "n c #BC3030", "m c #B93C3C", "M c #BC3E3E", "N c #CE0808", "B c #CE0C0C", "V c #CF0E0E", "C c #CF1010", "Z c #D11A1A", "A c #D21B1B", "S c #C42D2D", "D c #D32525", "F c #D52D2D", "G c #C53636", "H c #D33535", "J c #D73636", "K c #D63838", "L c #D43A3A", "P c #D23C3C", "I c #D23D3D", "U c #B64543", "Y c #BB4948", "T c #8A6464", "R c #8B7373", "E c #867979", "W c #D94141", "Q c #DB4848", "! c #DB4A4A", "~ c #DB4C4C", "^ c #DB4D4D", "/ c #C45151", "( c #DC5151", ") c #DD5656", "_ c #D55E5E", "` c #C76565", "' c #CD6161", "] c #C46C6B", "[ c #D26565", "{ c #E16969", "} c #E26E6E", "| c #7F817D", " . c #808080", ".. c #828282", "X. c #858585", "o. c #858685", "O. c #868686", "+. c #878886", "@. c #888888", "#. c #898989", "$. c #898A88", "%. c #8B8B8B", "&. c #8D8F8B", "*. c #8C8C8C", "=. c #8D8D8D", "-. c #8F8F8F", ";. c #919191", ":. c #929390", ">. c #929292", ",. c #939393", "<. c #949494", "1. c #959595", "2. c #969696", "3. c #979797", "4. c #989897", "5. c #989898", "6. c #999999", "7. c #9A9B98", "8. c #9A9A9A", "9. c #9C9C9C", "0. c #9D9D9D", "q. c #9E9E9E", "w. c #A28988", "e. c #A0A0A0", "r. c #A1A1A1", "t. c #A2A3A1", "y. c #A2A2A2", "u. c #A3A3A3", "i. c #A4A4A4", "p. c #A5A5A5", "a. c #A6A6A6", "s. c #A7A7A7", "d. c #A9A9A9", "f. c #AAAAAA", "g. c #ABABAB", "h. c #ADADAD", "j. c #AFAFAF", "k. c #BABABA", "l. c #BBBBBB", "z. c #BDBDBD", "x. c #A9A9A9", "c. c #C58886", "v. c #D79292", "b. c #E78888", "n. c #E88D8D", "m. c #E88E8E", "M. c #EA9595", "N. c #EA9696", "B. c #EB9A9A", "V. c #ECA7A7", "C. c #BEC1BB", "Z. c #C3C3C3", "A. c #C3C6C1", "S. c #C5C7C1", "D. c #C6C8C3", "F. c #C6C9C3", "G. c #C6C9C4", "H. c #C7C9C5", "J. c #D0D2D0", "K. c #D4D6D2", "L. c #D6D8D4", "P. c #D7D9D5", "I. c #D8DAD6", "U. c #D9DBD7", "Y. c #EDD4D3", "T. c #E4E5E3", "R. c #E5E6E4", "E. c #ECE3E1", "W. c #EDEEEC", "Q. c #EFEFED", "!. c #EFEFEE", "~. c #F0F0EE", "^. c #F1F1EF", "/. c #F3F1EF", "(. c #F3F3F2", "). c #F4F4F2", "_. c #F4F4F3", "`. c #F6F6F5", "'. c #F8F8F7", "]. c #F9F9F9", "[. c #FAFAFA", "{. c #FBFBFA", "}. c #FBFBFB", "|. c None", /* pixels */ "@ . # - , < ; 3 |.", " a.X.w 5 > $ + Q.^._.`.`.W.| |.", " h.*.r 0 4 : = Q.(.'.{.}.].7.|.", " k.1.#.e 0 5 1 !.).].v.M [.t.|.", " l.0.<.#.r q 8 ~./.` / j Y.w.|.", " z.e.3.-.O.e q E.m ' V.n b c y ", " x.y.8.;.@. .7 x [ b.m.M.N.B.y ", " x.i.9.,.%.T d _ { Q ! ~ ^ n.u ", " x.s.q.2.=.g G ) F D Z C A } i ", " x.d.r.5.-.R p S J N B B V ( y ", " x.f.u.8.>.#.E z v K W L P I t ", " x.f.p.0.1.-...% Y k H i l f a ", " x.f.d.r.6.6 $.J.T.] h s R.+.|.", " x.g.j.o.&.H.K.P.I.U.c.U L.9 |.", " Z.4.:.C.A.D.F.G.G.G.G.G.S.* |.", "@ 2 . X o o o o O O O O O o & |." }; /* XPM */ const char *minus_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 19 1", " c #3465A4", ". c #7DA6D7", "X c #7FA8D7", "o c #83AAD8", "O c #86ADD9", "+ c #90B3DA", "@ c #92B4DA", "# c #94B6DB", "$ c #95B7DB", "% c #9FBEE0", "& c #B4CCE5", "* c #B5CCE6", "= c #B6CCE6", "- c #B6CDE6", "; c #B7CEE6", ": c #BBD1E7", "> c #BCD1E7", ", c #C0D3E8", "< c None", /* pixels */ "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<< <<", "<< ,:>;;;;-*= <<", "<< &$#@+OoX.% <<", "<< <<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<" }; /* XPM */ const char *net_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 160 2", " c #576F95", ". c #58749D", "X c #5A769F", "o c #5876A0", "O c #5977A0", "+ c #5877A2", "@ c #5978A2", "# c #5979A3", "$ c #5A79A3", "% c #5E7AA3", "& c #5A79A4", "* c #5A7AA4", "= c #5B7AA4", "- c #5D7DA6", "; c #5E7DA6", ": c #627BA3", "> c #627CA5", ", c #617FA6", "< c #617FA8", "1 c #637FA8", "2 c #4F80B6", "3 c #5685B7", "4 c #5686BA", "5 c #5988BC", "6 c #5C8ABD", "7 c #6983A6", "8 c #6380A8", "9 c #6984A9", "0 c #708AAD", "q c #6D90B7", "w c #7591B4", "e c #7591B5", "r c #7792B6", "t c #7994B6", "y c #7A95B7", "u c #7E97B9", "i c #628FC1", "p c #6B96C6", "a c #6C96C5", "s c #719BC9", "d c #759FCB", "f c #819ABA", "g c #839BBB", "h c #9DA6AE", "j c #AEB5BC", "k c #8BA7C7", "l c #84A6CA", "z c #83A7CE", "x c #93ABC7", "c c #94ACC8", "v c #9AB0CB", "b c #9CB2CB", "n c #9BB2CC", "m c #9DB3CD", "M c #9FB4CE", "N c #80A7D1", "B c #93B6DC", "V c #A4B5C9", "C c #A5B7C9", "Z c #A0B4CD", "A c #A3B6CE", "S c #BABFC4", "D c #B8BFC6", "F c #B5BEC8", "G c #A3B8D0", "H c #A9BCD1", "J c #ABBDD3", "K c #AABED3", "L c #AFBFD4", "P c #A2BDDA", "I c #9CBDE0", "U c #B7C2CD", "Y c #BCC4CC", "T c #B3C1D0", "R c #B1C0D5", "E c #B1C2D6", "W c #BEC7D0", "Q c #BCC8D4", "! c #BECAD6", "~ c #B5C5D8", "^ c #B4C7DC", "/ c #B7C8DC", "( c #BBC9DA", ") c #BECBDA", "_ c #B8C9DD", "` c #BCCDDF", "' c #ACCAE9", "] c #BECFE1", "[ c #B3CCE8", "{ c #B1CEEC", "} c #B5D1EE", "| c #BED4EB", " . c #BCD7F2", ".. c #C0C6CE", "X. c #C7CDD2", "o. c #C8CED4", "O. c #C8CFD5", "+. c #C6CFD8", "@. c #CED0D1", "#. c #CED1D3", "$. c #CAD5DF", "%. c #D1D1D1", "&. c #D3D3D3", "*. c #D7D9DB", "=. c #DCDDDF", "-. c #C3D2E3", ";. c #CCD7E2", ":. c #CFD9E2", ">. c #CCD9E7", ",. c #CEDBEA", "<. c #CCDDEF", "1. c #DBDEE0", "2. c #D4DDE9", "3. c #D5DFE9", "4. c #D6DFE9", "5. c #D5DFEB", "6. c #DFE1E3", "7. c #DCE1E5", "8. c #DEE2E7", "9. c #D9E1E9", "0. c #DCE3E9", "q. c #DBE4EF", "w. c #DCE4ED", "e. c #C9E1F9", "r. c #CCE3FA", "t. c #D4E5F6", "y. c #D2E5F9", "u. c #D5E8FC", "i. c #DAEAFA", "p. c #DEEDFB", "a. c #DAEBFC", "s. c #DEEEFF", "d. c #DFEFFF", "f. c #E0E0E0", "g. c #E2E2E2", "h. c #E0E3E4", "j. c #E3E4E5", "k. c #E2E4E6", "l. c #E0E5EB", "z. c #E4E6E8", "x. c #EDEEEF", "c. c #EFEFEF", "v. c #E6EBF0", "b. c #E6EBF4", "n. c #E0EFFF", "m. c #E2EFFE", "M. c #E1F0FF", "N. c #E2F1FF", "B. c #E3F1FF", "V. c #F1F2F3", "C. c #F4F4F5", "Z. c #F5F5F5", "A. c #F6F6F6", "S. c #F0F4F8", "D. c #F8F9F9", "F. c #F9F9F9", "G. c #FBFBFB", "H. c #FDFDFD", "J. c #FEFEFE", "K. c None", /* pixels */ "K.K.K.K.K.o = * @ + K.K.K.K.K.K.", "K.K.K.% g ( w.b.5.E u # K.K.K.K.", "K.K., R l.:.S ) | ! 9.A $ K.K.K.", "K.9 L 8.#.m.p.t.Q ..1.v.Z * K.K.", ": f S.j.$.N.B.i.+.*.C.G.3.t K.K.", "0 ~ h.<.n.M.M.a.X.W V F z.G * K.", "8 2.K r.s.d.d.,.H.J.H.k.=.` * K.", "= q.' .e.u.y.O.J.J.J.F.j -.* K.", "; >.U o.[ } { H D.V.J.c.@._ * K.", "1 J 7.J.6.P I B l k Z.g.h m * K.", "> y 4.J.J.x.z N d a f.&.C e K.K.", "K.< b 0.A.D s p i 5 %.Y c * K.K.", "K.K.- v ;.q 6 4 2 3 T x # K.K.K.", "K.K.K.7 r M / ] ^ n w O K.K.K.K.", "K.K.K.K. X $ & @ . K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K." }; /* XPM */ const char *plus_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 19 1", " c #3465A4", ". c #7DA6D7", "X c #7FA8D7", "o c #83AAD8", "O c #86ADD9", "+ c #90B3DA", "@ c #92B4DA", "# c #94B6DB", "$ c #95B7DB", "% c #9FBEE0", "& c #B4CCE5", "* c #B5CCE6", "= c #B6CCE6", "- c #B6CDE6", "; c #B7CEE6", ": c #BBD1E7", "> c #BCD1E7", ", c #C0D3E8", "< c None", /* pixels */ "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<< <<<<<<", "<<<<<< ;; <<<<<<", "<<<<<< ;; <<<<<<", "<<<<<< ;; <<<<<<", "<< ;; <<", "<< ,:>;;;;-*= <<", "<< &$#@+OoX.% <<", "<< OO <<", "<<<<<< ;O <<<<<<", "<<<<<< ;O <<<<<<", "<<<<<< ;; <<<<<<", "<<<<<< <<<<<<", "<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<" }; /* XPM */ const char *process_stop_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 133 2", " c #860000", ". c #870000", "X c #880000", "o c #890000", "O c #880202", "+ c #890202", "@ c #890303", "# c #BD0000", "$ c #BF0000", "% c #BD0202", "& c #BD0303", "* c #BE0404", "= c #BE0505", "- c #BF0505", "; c #B01818", ": c #B11A1A", "> c #B11B1B", ", c #B41D1D", "< c #B41F1F", "1 c #BC1818", "2 c #BF1919", "3 c #AF2222", "4 c #B12222", "5 c #B72121", "6 c #B22424", "7 c #B32626", "8 c #B82323", "9 c #B82424", "0 c #C10000", "q c #C10101", "w c #C30000", "e c #C50000", "r c #C70000", "t c #C70303", "y c #CB0101", "u c #CC0F0F", "i c #C51A1A", "p c #C41B1B", "a c #C71D1D", "s c #D01010", "d c #D31111", "f c #D21F1F", "g c #C92929", "h c #CE2828", "j c #CC2F2F", "k c #CE2F2F", "l c #CF2F2F", "z c #D52323", "x c #D02F2F", "c c #D22F2F", "v c #D52F2F", "b c #DF2B2B", "n c #DF2C2C", "m c #DF2D2D", "M c #D13131", "N c #D23131", "B c #D53030", "V c #D53737", "C c #D63B3B", "Z c #D93B3B", "A c #DA3B3B", "S c #DB3C3C", "D c #E63434", "F c #E73737", "G c #E83737", "H c #E83B3B", "J c #EA3F3F", "K c #DB4040", "L c #DB4141", "P c #DC4242", "I c #D75757", "U c #D65858", "Y c #D75B5B", "T c #D65F5F", "R c #D75F5F", "E c #D85A5A", "W c #D85B5B", "Q c #D85C5C", "! c #DB5F5F", "~ c #EB4343", "^ c #E94545", "/ c #ED4747", "( c #EC4A4A", ") c #EB4C4C", "_ c #ED5252", "` c #EF5A5A", "' c #D76060", "] c #DA6464", "[ c #DA6767", "{ c #EC6161", "} c #ED6565", "| c #EE6868", " . c #EF6A6A", ".. c #F26969", "X. c #F06F6F", "o. c #F17575", "O. c #D89292", "+. c #DE9292", "@. c #D89999", "#. c #F38383", "$. c #F58383", "%. c #F58585", "&. c #F68787", "*. c #F68888", "=. c #F68989", "-. c #F68A8A", ";. c #F78B8B", ":. c #E39696", ">. c #DEACAC", ",. c #E5A5A5", "<. c #E6A5A5", "1. c #E9A5A5", "2. c #E4AAAA", "3. c #E6ABAB", "4. c #E8BCBC", "5. c #DACDCD", "6. c #DAD6D6", "7. c #DBDBDB", "8. c #DFDFDF", "9. c #E6D9D9", "0. c #E2DEDE", "q. c #E5DFDF", "w. c #E6DFDF", "e. c #E6E0E0", "r. c #E8E8E8", "t. c #ECECEC", "y. c #EDEDED", "u. c #F3EDED", "i. c #F1F1F1", "p. c #FCF7F7", "a. c #F9F9F9", "s. c #FEFEFE", "d. c None", /* pixels */ "d.d.d.d.o o d.d.d.d.", "d.d.d.o 3 *.;.;.-.&.$.8 o d.d.d.", "d.d.o 4 #.P v v v v S o.< o d.d.", "d.o 6 #.P V v v v v V A X.> o d.", "o 7 #.L I 5.R v v Q 9.! Z .; o ", "O =.K v O.7.6.' E e.y.,.c C | O ", "@ *.v v B @.8.0.w.t.3.N x k } + ", "@ *.v v v B >.r.t.4.M l k j { + ", "@ *.v v v W w.t.i.u.] k j g ^ + ", "@ %.v v Y q.t.2.<.a.p.[ i % G + ", "O ..z f +.t.2.x h 1.s.:.# & D + ", "o 9 ` d y U t e w q T % * b a . ", "d.o 5 _ s r e w 0 $ # = n p X d.", "d.d.o , ) u w 0 $ # - m 2 X d.d.", "d.d.d.o : ( / ~ J H F 1 X d.d.d.", "d.d.d.d.o X d.d.d.d." }; /* XPM */ const char *right_arrow_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 100 2", " c #3A7304", ". c #3A7404", "X c #3B7404", "o c #3B7504", "O c #3A7405", "+ c #3B7604", "@ c #3C7604", "# c #3C7804", "$ c #40790A", "% c #427A0E", "& c #437A10", "* c #467C14", "= c #4E9A06", "- c #4F9C06", "; c #4D8418", ": c #538B1E", "> c #52A007", ", c #54A408", "< c #57A709", "1 c #5AAC0B", "2 c #5BAE0B", "3 c #5EB30D", "4 c #5FB20E", "5 c #61B70E", "6 c #62B90E", "7 c #64BC0F", "8 c #64BA11", "9 c #66BF10", "0 c #66B817", "q c #6CBA1F", "w c #6CBF1C", "e c #568926", "r c #598C2A", "t c #5E8F30", "y c #5F8F31", "u c #68A92B", "i c #6BAC2F", "p c #6FBA26", "a c #6AA136", "s c #6EAC33", "d c #71A63E", "f c #74AF3B", "g c #78B63D", "h c #7FCB34", "j c #80BE44", "k c #82BE49", "l c #81AB5A", "z c #82AB5A", "x c #85B954", "c c #88BB58", "v c #8BBC5B", "b c #8BBB5D", "n c #8BBD5C", "m c #8CBE5C", "M c #84C249", "N c #88C44D", "B c #89C350", "V c #8AC255", "C c #8DC655", "Z c #8BC158", "A c #8CC358", "S c #8DC25A", "D c #8DC15C", "F c #92D352", "G c #8FC161", "H c #91C164", "J c #99C46F", "K c #9BCA6D", "L c #9CD267", "P c #9DC873", "I c #9EC976", "U c #9CC37A", "Y c #A0D56C", "T c #A3CA7E", "R c #A4CC7E", "E c #A5D773", "W c #A6D37B", "Q c #A7D17F", "! c #A8DA78", "~ c #A4C684", "^ c #AACE89", "/ c #AAD581", "( c #ABD681", ") c #ABD781", "_ c #AFD48C", "` c #B1D291", "' c #B7D49C", "] c #B9D79C", "[ c #BBD99F", "{ c #BDD9A3", "} c #C0DBA7", "| c #C2DCAA", " . c #C3DCAB", ".. c #C5DDAD", "X. c #C6DEAF", "o. c #C7DEB0", "O. c #CBE0B6", "+. c #CBE1B7", "@. c #CEE3BB", "#. c None", /* pixels */ "#.#.#.#.#.o #.#.#.#.#.#.#.#.#.#.", "#.#.#.#.#. r . #.#.#.#.#.#.#.#.", "#.#.#.#.#. +.z . #.#.#.#.#.#.#.", "#.#.#.#.#. @. .~ & #.#.#.#.#.#.", ". + O.J ` ' y X #.#.#.#.", " } | ..X.o.o.H G P [ l O #.#.#.", " { x c v n m D S V A _ U * #.#.", " ] f s u i g k B N M j K ^ t o ", " T = = = > < 2 4 0 q p C I e o ", " T = = - , 1 3 6 7 w L b % #.#.", " T T T R Q / 5 9 h ! d + #.#.#.", ". # ( 8 F E : @ #.#.#.#.", "#.#.#.#.#. ) Y Z $ #.#.#.#.#.#.", "#.#.#.#.#. W a @ #.#.#.#.#.#.#.", "#.#.#.#.#. ; + #.#.#.#.#.#.#.#.", "#.#.#.#.#.o #.#.#.#.#.#.#.#.#.#." }; /* XPM */ const char *save_as_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 95 2", " c #000000", ". c #4E6A7D", "X c #58787A", "o c #6E706B", "O c #6B716E", "+ c #72756B", "@ c #667173", "# c #627075", "$ c #38678B", "% c #3D698A", "& c #3B6B8F", "* c #3D6B8E", "= c #3F6C8E", "- c #4A6D85", "; c #436E88", ": c #4A7180", "> c #41749A", ", c #44789F", "< c #547D9B", "1 c #6B7F88", "2 c #5186AF", "3 c #5892BD", "4 c #688BA0", "5 c #6E99B6", "6 c #7798B0", "7 c #719FBF", "8 c #739FC0", "9 c #79A7CA", "0 c #92A6AC", "q c #95A9AF", "w c #9AAEB4", "e c #A2A4A1", "r c #A3A4A1", "t c #AEB0AD", "y c #AFB0AD", "u c #AEB0AE", "i c #AFB0AE", "p c #B7B8B6", "a c #C5CBBF", "s c #8FB3CE", "d c #92B7D3", "f c #96BBD8", "g c #9EBFD9", "h c #98BFDC", "j c #ACBCC3", "k c #9BC2DF", "l c #ABC8DF", "z c #ABCBE2", "x c #ACCBE3", "c c #B1CEE6", "v c #CACFC4", "b c #CED4C8", "n c #C9D6DD", "m c #DCDBDB", "M c #DBDCDB", "N c #DCDCDB", "B c #DCDBDC", "V c #DBDCDC", "C c #DCDCDC", "Z c #DDE1D6", "A c #DFE2DE", "S c #E2E6DD", "D c #C1D9EB", "F c #C5DBEC", "G c #D5DFE5", "H c #D0DFEF", "J c #E3E3E3", "K c #E4E4E4", "L c #E9E9EA", "P c #EAE9EA", "I c #EBECEC", "U c #ECECEC", "Y c #EDEDED", "T c #EDEEED", "R c #EDEDEE", "E c #EDEEEE", "W c #EEEEEE", "Q c #EEEFEE", "! c #EEEEEF", "~ c #EFEEEF", "^ c #EFEFEF", "/ c #F0F0F0", "( c #F1F1F1", ") c #F2F2F2", "_ c #F3F3F3", "` c #F3F4F3", "' c #F4F4F4", "] c #F7F7F7", "[ c #F9F9F9", "{ c #FAFAFA", "} c #FCFBFC", "| c #FCFCFC", " . c #FDFDFD", ".. c #FFFFFF", "X. c None", /* pixels */ "X.X.X.$ $ $ % : X X.X.X.X.X.X.X.", "X.X.X.c H F k 4 ; X.X.X.X.X.X.X.", "1 @ # - > , g D 2 . o o o o o o ", "O S ..Z n 5 $ z d < G ......' o ", "+ .W Y A 6 $ 9 s * j R E T ` o ", "o } I $ $ $ $ 9 3 $ $ $ $ U _ o ", "o { L v $ h 7 7 7 8 f $ q P ) o ", "o [ { K a $ h 8 8 l $ 0 K ' ( o ", "o [ W { K a $ x h & 0 K { W ( o ", "o ] J W { { b = $ w { | W J / o ", "o r e r r r r r r r r r r r r o ", "o C m N C B N B C M V N V C o ", "o ^ y u i t y y y y ~ Q ! ~ o ", "o ..p p p p p p p p .. ......o ", "o .................... ......o ", "o o o o o o o o o o o o o o o o " }; /* XPM */ const char *save_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 107 2", " c #4E6A7D", ". c #58787A", "X c #6E706B", "o c #6B716E", "O c #72756B", "+ c #667173", "@ c #627075", "# c #38678B", "$ c #3D698A", "% c #3B6B8F", "& c #3D6B8E", "* c #3F6C8E", "= c #4A6D85", "- c #436E88", "; c #4A7180", ": c #41749A", "> c #44789F", ", c #547D9B", "< c #6B7F88", "1 c #5186AF", "2 c #5892BD", "3 c #688BA0", "4 c #6E99B6", "5 c #7798B0", "6 c #719FBF", "7 c #739FC0", "8 c #79A7CA", "9 c #9F9F9F", "0 c #92A6AC", "q c #95A9AF", "w c #9AAEB4", "e c #A8A7A7", "r c #A8A7A8", "t c #A9A9A9", "y c #AAAAA9", "u c #AFAFAF", "i c #B4B4B4", "p c #B7B6B6", "a c #B9B9B9", "s c #BCBCBC", "d c #C5CBBF", "f c #8FB3CE", "g c #92B7D3", "h c #96BBD8", "j c #9EBFD9", "k c #98BFDC", "l c #ACBCC3", "z c #9BC2DF", "x c #ABC8DF", "c c #ABCBE2", "v c #ACCBE3", "b c #B1CEE6", "n c #C2C2C2", "m c #C3C3C3", "M c #C4C4C4", "N c #C5C5C5", "B c #CACFC4", "V c #C8C8C8", "C c #C9C9C9", "Z c #CACACA", "A c #CBCBCB", "S c #CDCDCD", "D c #CECECE", "F c #CFCFCF", "G c #CED4C8", "H c #C9D6DD", "J c #D0D0D0", "K c #D1D1D1", "L c #D2D2D2", "P c #D5D5D5", "I c #D6D6D6", "U c #DCDCDC", "Y c #DDDDDD", "T c #DDE1D6", "R c #DFE2DE", "E c #E2E6DD", "W c #C1D9EB", "Q c #C5DBEC", "! c #D5DFE5", "~ c #D0DFEF", "^ c #E3E3E3", "/ c #E4E4E4", "( c #E9E9EA", ") c #EAE9EA", "_ c #EBEBEB", "` c #EBECEC", "' c #ECECEC", "] c #EDEDED", "[ c #EDEEED", "{ c #EDEDEE", "} c #EDEEEE", "| c #EEEEEE", " . c #F0F0F0", ".. c #F1F1F1", "X. c #F2F2F2", "o. c #F3F3F3", "O. c #F3F4F3", "+. c #F4F4F4", "@. c #F7F7F7", "#. c #F9F9F9", "$. c #FAFAFA", "%. c #FCFBFC", "&. c #FCFCFC", "*. c #FDFDFD", "=. c #FEFEFE", "-. c #FFFFFF", ";. c None", /* pixels */ ";.;.;.# # # $ ; . ;.;.;.;.;.;.;.", ";.;.;.b ~ Q z 3 - ;.;.;.;.;.;.;.", "< + @ = : > j W 1 X X X X X X ", "o E -.T H 4 # c g , ! -.-.-.+.X ", "O *.| ] R 5 # 8 f & l { } [ O.X ", "X %.` # # # # 8 2 # # # # ' o.X ", "X $.( B # k 6 6 6 7 h # q ) X.X ", "X #.$./ d # k 7 7 x # 0 / +...X ", "X #.| $./ d # v k % 0 / $.| ..X ", "X @.^ | $.$.G * # w $.&.| ^ .X ", "X =.-.-.-.-.-.-.-.+.+._ _ ^ .X ", "X D C C C C N C C N N N N N I X ", "X D N 9 u s M V J t L t L a Z X ", "X S m y i n M V A r K e K p Z X ", "X Y U U U P P F F F F F F F Z X ", "X X X X X X X X X X X X X X X X " }; /* XPM */ const char *time_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 59 1", " c #2E3436", ". c #32383A", "X c #383E40", "o c #393E40", "O c #3B4042", "+ c #404648", "@ c #414748", "# c #4A5052", "$ c #4C5153", "% c #4D5254", "& c #555753", "* c #61635F", "= c #636561", "- c #646662", "; c #686A66", ": c #6E706C", "> c #7C7E79", ", c #818485", "< c #888A85", "1 c #939591", "2 c #959798", "3 c #9B9C9A", "4 c #A0A2A3", "5 c #AAABA8", "6 c #B0B1AE", "7 c #B0B2B3", "8 c #B8B9B7", "9 c #C2C3C1", "0 c #C3C4C2", "q c #C2C4C4", "w c #C5C6C6", "e c #C8C8C8", "r c #CACAC9", "t c #C8C9CA", "y c #C9C9CA", "u c #CACBCA", "i c #CDCECD", "p c #CECFCE", "a c #D2D2D2", "s c #D6D6D6", "d c #D9D9D9", "f c #DFDFDF", "g c #E0E0E0", "h c #E1E1E1", "j c #E2E2E2", "k c #E3E3E2", "l c #E3E3E3", "z c #E4E4E4", "x c #E6E6E6", "c c #E7E7E7", "v c #E9E9E9", "b c #ECECEC", "n c #EEEEEE", "m c #F1F1F1", "M c #F3F3F3", "N c #FBFBFA", "B c #FDFDFD", "V c #FFFFFF", "C c None", /* pixels */ "CC<Vxzt,j$+7ccxV>C", ">Vnx% f2e#xxpV>C", ">Vnxf fq@4xxrV>C", ";Vxxf f.ywxi9V;C", ";Vxxf fOoXxi9V;C", "=VxllglhhhaMBN=C", "-Vxvbnmxpu8M63-C", "-VVVVVVVVVVV5:-C", "=*************-C", "C <&&&&&&&&&& CC", "C CC" }; /* XPM */ const char *trash_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 130 2", " c #535A22", ". c #545B23", "X c #575E26", "o c #5B6129", "O c #5D6329", "+ c #61682A", "@ c #666D2D", "# c #6C732F", "$ c #6F7731", "% c #737B32", "& c #767F33", "* c #494D4C", "= c #5C5E59", "- c #5E605C", "; c #61635E", ": c #62645F", "> c #636561", ", c #646663", "< c #666863", "1 c #686A65", "2 c #686A66", "3 c #6A6C68", "4 c #6B6D68", "5 c #6D6F6B", "6 c #70726D", "7 c #70726E", "8 c #727470", "9 c #737571", "0 c #757773", "q c #767B77", "w c #787A75", "e c #797B77", "r c #788134", "t c #7A8235", "y c #798237", "u c #7F865E", "i c #81893A", "p c #8B943E", "a c #879042", "s c #899245", "d c #8B9348", "f c #8C9548", "g c #909946", "h c #929C4A", "j c #959E49", "k c #969F4A", "l c #919A4C", "z c #949D4F", "x c #8A9259", "c c #8A915C", "v c #939A59", "b c #98A247", "n c #96A04F", "m c #9CA64D", "M c #98A150", "N c #9AA252", "B c #9FA956", "V c #A5AE49", "C c #A0A956", "Z c #A6AF55", "A c #A8B154", "S c #ADB757", "D c #A9B259", "F c #ADB75C", "G c #AEB75D", "H c #B2BD50", "J c #B3BE50", "K c #B3BD5A", "L c #888E69", "P c #8C9162", "I c #9FA46B", "U c #A7AF67", "Y c #A1A76E", "T c #A9B260", "R c #AAB263", "E c #AAB264", "W c #B2BB64", "Q c #A3AB72", "! c #A5AC72", "~ c #A8AD75", "^ c #ADB17E", "/ c #ACB27E", "( c #B5C051", ") c #B8C257", "_ c #B9C35D", "` c #BBC55F", "' c #BBC561", "] c #BCC661", "[ c #BCC662", "{ c #BDC763", "} c #B8C065", "| c #BDC765", " . c #BBC469", ".. c #BAC36D", "X. c #BDC675", "o. c #C7D07E", "O. c #989A94", "+. c #B2B881", "@. c #B5BB82", "#. c #B7BE81", "$. c #B8BE84", "%. c #A9AD94", "&. c #B6BBA6", "*. c #B1B4AD", "=. c #BCC286", "-. c #BFC687", ";. c #C3CA89", ":. c #C7CC8B", ">. c #C9D181", ",. c #CAD184", "<. c #C9D18D", "1. c #CCD28E", "2. c #C3CA99", "3. c #C4CB9E", "4. c #CDD590", "5. c #CBD09E", "6. c #CCD29D", "7. c #CCD19F", "8. c #D0D691", "9. c #D1D793", "0. c #C8CEA5", "q. c #CDD2A1", "w. c #D2D7B9", "e. c #D3D8BB", "r. c #D3D9BB", "t. c #D4D9BB", "y. c #D4D9BC", "u. c #D6DBC8", "i. c #DBE0D7", "p. c None", /* pixels */ "p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.", "p.p.. . . . . . . . . . . . p.p.", "p.u i.i.i.i.i.i.i.i.i.i.i.i.L p.", ". i.q = - ; > < 2 4 5 6 8 *.i.. ", ". i.* : , 1 3 5 7 9 0 w e O.i.. ", ". &.i.i.i.i.i.i.i.i.i.i.i.i.%.. ", ". . v t r & % $ # @ + O o X . ", "p.. o.( ( J V Z E b p i y x . p.", "p.. o.( ( H } u.u.5.C j f c . p.", "p.. >.( ( 6...W 7.q.B N z I . p.", "p.. ,.) ] t.u.F D T #.M l ! . p.", "p.. 8.| { r.X.G 0.R w.n d ~ . p.", "p.. 9.[ ' .q.2.y.e.U h s Q . p.", "p.. 4.` _ K S A 3.m k g a Y . p.", "p.. ^ 1.<.:.;.-.=.$.@.+./ P . p.", "p.p.. . . . . . . . . . . . p.p." }; /* XPM */ const char *image_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 86 1", " c #233659", ". c #384151", "X c #2F4262", "o c #374762", "O c #33476A", "+ c #34486A", "@ c #3B4C6B", "# c #384C6E", "$ c #3D4E6D", "% c #3D4F6D", "& c #3F516F", "* c #3D5071", "= c #515151", "- c #45546E", "; c #435470", ": c #455672", "> c #475773", ", c #405374", "< c #415474", "1 c #485773", "2 c #495973", "3 c #67758F", "4 c #5072A3", "5 c #5475A4", "6 c #5778A6", "7 c #5B7BA8", "8 c #5F7EAA", "9 c #617FAB", "0 c #7A8698", "q c #7D899D", "w c #6180AD", "e c #6381AD", "r c #6583AF", "t c #6884AA", "y c #718DA7", "u c #6986B1", "i c #6D89B3", "p c #728DB6", "a c #738EB6", "s c #7590B7", "d c #7892B9", "f c #888A85", "g c #818A9A", "h c #818DA2", "j c #8691A3", "k c #819AB8", "l c #8099BD", "z c #839ABE", "x c #869CBF", "c c #8FA6AF", "v c #9CA7B9", "b c #9EA8BA", "n c #9EA9BA", "m c #9FA9BB", "M c #A4B8A9", "N c #B6C5B2", "B c #B3C2B7", "V c #C4D1AF", "C c #C5D1B1", "Z c #D1DCB1", "A c #DCE5B9", "S c #E2EBBE", "D c #889EC1", "F c #8CA1C1", "G c #8EA3C4", "H c #93A6C6", "J c #95A8C7", "K c #9DAFC7", "L c #96A9C8", "P c #98ABC9", "I c #9AACCA", "U c #A1B3C3", "Y c #A2B3CE", "T c #A5B5D0", "R c #A6B6D1", "E c #A7B7D1", "W c #A8B7D1", "Q c #A8B8D2", "! c #EEF3CB", "~ c #F7FADF", "^ c #FCFDEE", "/ c #F6F6F6", "( c #FEFEF9", ") c #FDFDFD", "_ c #FEFEFE", "` c #FFFFFE", /* pixels */ "ffffffffffffffff", "f______________f", "f)0oooooooooo0/f", "f_&9ety876554o/f", "f);acA!Miurrwo/f", "f):lV(`Skdsspo/f", "f)>GN~^ZFDxxzo/f", "f)1IKBCUPLqJHo/f", "f)2WQQWERT=jYo/f", "f)-mmmmnbv==go/f", "f)o$%%$@X ==.o/f", "f)o<,*#+O====o/f", "f)oh333333333o/f", "f)0oooooooooo0/f", "f_////////////)f", "ffffffffffffffff" }; /* XPM */ const char *weather_clear_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 76 1", " c #FCAF3E", ". c #FBB13E", "X c #FBB13F", "o c #FCB03E", "O c #FCB13E", "+ c #FCB23E", "@ c #FCB33E", "# c #FCB23F", "$ c #FCB33F", "% c #FAB43F", "& c #FBB43F", "* c #FCB43F", "= c #FAB545", "- c #FBB94A", "; c #FCB953", ": c #FBBA57", "> c #FCBC57", ", c #FBBD5B", "< c #FBD349", "1 c #FCD549", "2 c #FCE34E", "3 c #FCE956", "4 c #FCEA57", "5 c #FCE459", "6 c #FCE55D", "7 c #FCE959", "8 c #FCEA5A", "9 c #FCC66D", "0 c #FCD964", "q c #FBDB6C", "w c #FCC470", "e c #FCC570", "r c #FCEB65", "t c #FCE768", "y c #FCEC68", "u c #FCE86E", "i c #FCED71", "p c #FCCC82", "a c #FDCD83", "s c #FCCD84", "d c #FCEF81", "f c #FCEF82", "g c #FCEF84", "h c #FCEF87", "j c #FDF089", "k c #FDF08B", "l c #FDF08C", "z c #FDEAAD", "x c #FDF3A1", "c c #FDF0A2", "v c #FDF3A2", "b c #FDF1AA", "n c #FCF4AB", "m c #FDF4AC", "M c #FCF4AD", "N c #FDF4AE", "B c #FDECB4", "V c #FDE6BF", "C c #FDF4B0", "Z c #FDF5B1", "A c #FDF6BE", "S c #FDE6C1", "D c #FEF8CE", "F c #FEF9CF", "G c #FEF8D0", "H c #FEF9D0", "J c #FEF9DF", "K c #FEFAE3", "L c #FEF8E7", "P c #FEF9E7", "I c #FEFCEF", "U c #FEFCF0", "Y c #FEFDF0", "T c #FEFCF1", "R c #FEFEFB", "E c None", /* pixels */ "EEEEEEEEEEEEEEEE", "EEEEEEEoOEEEEEEE", "EEEEEEEOOEEEEEEE", "EEE #Eapw;E+ EEE", "EEE+9VPUJz:$#EEE", "EEEESRIDCMc=EEEE", "EEEaLYYFmjh0@EEE", "EOOsTGHAxdyt.OoE", "EoOeKZNvli75XOOE", "EEE>Bnkfi84<#EEE", "EEEE,bgr342%EEEE", "EEE#*-qu61&@+EEE", "EEE +E#X.@E# EEE", "EEEEEEEOOEEEEEEE", "EEEEEEEOoEEEEEEE", "EEEEEEEEEEEEEEEE" }; /* XPM */ const char *start_here_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 52 1", " c #204A87", ". c #204A88", "X c #204B88", "o c #214B88", "O c #214B89", "+ c #214C89", "@ c #234E8B", "# c #234F8C", "$ c #244F8C", "% c #24508D", "& c #25508E", "* c #25518F", "= c #285593", "- c #295694", "; c #2A5896", ": c #2C5B99", "> c #2D5C9A", ", c #2F5F9D", "< c #2F5F9E", "1 c #30609F", "2 c #31619F", "3 c #3162A0", "4 c #3465A4", "5 c #3566A4", "6 c #3566A5", "7 c #3667A5", "8 c #3667A6", "9 c #3768A6", "0 c #3868A6", "q c #3869A7", "w c #3A6AA8", "e c #3D6EAA", "r c #4070AC", "t c #4272AD", "y c #4474AF", "u c #4575B0", "i c #4E7DB6", "p c #507FB7", "a c #5080B8", "s c #5180B8", "d c #5483BA", "f c #5B8ABF", "g c #5D8BC0", "h c #5E8CC1", "j c #6492C5", "k c #6593C6", "l c #6795C7", "z c #6895C8", "x c #6996C8", "c c #6B98CA", "v c #729FCF", "b c None", /* pixels */ "bbbbbbbbbb. obbb", "bb750bbbbb@2;Xbb", "bbexd8bbbX144#bb", "b7lvvrbbbX444- b", "b7vvva5bb%444>Ob", "btvvvhqb -4443 b", "4svvvc6bb-4441Xb", "bpvvvz7bb&444:Ob", "byvvvfqbb+444=bb", "bwvvvibbb bb", "b44444bbbbbbbbbb", "bbbbbbbbb bb", "b64444bbbo>4,obb", "b0gvj9bbbb$<*Xbb", "bbrku7bbbb Xbbb", "bb668bbbbbbbbbbb" }; /* XPM */ const char *help_browser_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 153 2", " c #204A87", ". c #214B88", "X c #224B88", "o c #224C88", "O c #234C89", "+ c #234D89", "@ c #244E8A", "# c #254F8A", "$ c #254F8B", "% c #264F8B", "& c #27508B", "* c #2A538E", "= c #2C548D", "- c #2D558D", "; c #2D558E", ": c #2E558F", "> c #2F578F", ", c #2D5690", "< c #2F5891", "1 c #315891", "2 c #365C93", "3 c #325B94", "4 c #335B94", "5 c #335C94", "6 c #345C95", "7 c #345D95", "8 c #385E94", "9 c #386097", "0 c #3B6096", "q c #386098", "w c #3A6299", "e c #3B639A", "r c #3C649A", "t c #40679D", "y c #42699F", "u c #436A9F", "i c #47699C", "p c #4B6E9F", "a c #456CA1", "s c #466DA1", "d c #496FA3", "f c #4D6FA0", "g c #4B72A5", "h c #4C72A5", "j c #4D73A6", "k c #5176A7", "l c #5878A5", "z c #5978A6", "x c #5B7AA7", "c c #5C7BA7", "v c #5278A9", "b c #547AAC", "n c #567CAD", "m c #597AA8", "M c #5D7CA8", "N c #5A7FB0", "B c #617EAA", "V c #5E83B2", "C c #6381AB", "Z c #6482AC", "A c #6582AC", "S c #6482AD", "D c #6A86AF", "F c #6284B2", "G c #6587B3", "H c #6085B4", "J c #6286B4", "K c #6387B6", "L c #6987B1", "P c #6589B7", "I c #6B88B2", "U c #6B89B3", "Y c #6C88B0", "T c #6D8BB5", "R c #6C8DB7", "E c #678BB9", "W c #6A8EBA", "Q c #6B8FBB", "! c #718DB5", "~ c #728FB7", "^ c #6F92BD", "/ c #7191BB", "( c #7093BF", ") c #7594BD", "_ c #7296C1", "` c #7396C1", "' c #7497C1", "] c #7999C1", "[ c #789BC5", "{ c #829DC1", "} c #86A1C3", "| c #89A1C2", " . c #8CA1C1", ".. c #8CA2C1", "X. c #8BA5C7", "o. c #8FA8C8", "O. c #90A5C3", "+. c #94A9C6", "@. c #94ADCC", "#. c #9BAFCB", "$. c #9BB2D1", "%. c #9FB7D5", "&. c #9DB7D6", "*. c #A0B4CF", "=. c #A0B5D0", "-. c #A7B8D0", ";. c #A6B9D3", ":. c #A0B9D7", ">. c #A9B9D0", ",. c #AABAD1", "<. c #ADBCD3", "1. c #B7C6DA", "2. c #BDC9DB", "3. c #BAC9DD", "4. c #BDCADC", "5. c #C0CCDD", "6. c #C2CEDE", "7. c #C6D2E1", "8. c #C8D4E4", "9. c #CAD6E5", "0. c #CBD6E5", "q. c #C9D7E7", "w. c #CCD7E6", "e. c #CDDAE9", "r. c #D1DBE8", "t. c #D6DEE9", "y. c #E3E8F0", "u. c #E4E9F0", "i. c #E5EAF1", "p. c #E6EAF1", "a. c #E6EBF2", "s. c #E7EBF2", "d. c #E8ECF3", "f. c #E8EDF3", "g. c #E9EDF3", "h. c #E9EEF3", "j. c #EBEFF4", "k. c #EDF0F5", "l. c #EDF1F7", "z. c #EFF2F6", "x. c #EFF3F7", "c. c #EFF3F8", "v. c #F0F3F7", "b. c #F0F3F8", "n. c #F1F4F8", "m. c #F1F5F9", "M. c #F2F5F9", "N. c #F9FBFC", "B. c #FBFCFD", "V. c #FDFDFE", "C. c #FEFEFE", "Z. c #FFFFFF", "A. c None", /* pixels */ "A.A.A.A.A. A.A.A.A.A.", "A.A.A.A.= .2.j.j.2...= A.A.A.A.", "A.A. x y.>.A 0 0 A ,.u.c A.A.", "A.A.B s.z i 6.v.p.-.f S f.M A.A.", "A.; i.l Y V.t.z.Z.4.q U a.- A.", " O.>. p f 3 m Z.B.s u 1.+. ", " 5.A & , 6 w | Z.d.g j } 7.O ", " k.2 # , 7 e T N.C.{ b n R x.. ", " k.8 * 4 w y f.Z.=.N V H ) b.X ", " 5.D < 9 t k 8.9.J K E W $.w.@ ", " O.<.5 r a v o.@.P Q ( ` q.*.. ", "A.; a.L t d F Z.Z.^ _ [ &.l.> A.", "A.A.C h.~ h G Z.Z.' [ :.m.I A.A.", "A.A. Z g.3.X./ ] %.e.c.! % A.A.", "A.A.A.A.: #.0.n.M.r.;.1 A.A.A.A.", "A.A.A.A.A. + o o $ . A.A.A.A.A." }; /* XPM */ const char *system_software_update_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 165 2", " c #364878", ". c #774861", "X c #6E5471", "o c #6F5674", "O c #705472", "+ c #9E080B", "@ c #991116", "# c #A40000", "$ c #931821", "% c #843345", "& c #405583", "* c #4E648F", "= c #516790", "- c #506A96", "; c #576F95", ": c #5A6B93", "> c #5B6D94", ", c #546E98", "< c #597199", "1 c #58749D", "2 c #5A769F", "3 c #686284", "4 c #656588", "5 c #6B7B9F", "6 c #5877A2", "7 c #5C77A1", "8 c #5978A2", "9 c #5979A3", "0 c #5A79A3", "q c #5A79A4", "w c #5A7AA4", "e c #5D7DA6", "r c #607AA3", "t c #617FA8", "y c #4F80B6", "u c #5685B7", "i c #5686BA", "p c #5988BC", "a c #5C8ABD", "s c #6983A6", "d c #768BAD", "f c #6D90B7", "g c #7591B4", "h c #7792B6", "j c #7994B6", "k c #7A95B7", "l c #7E97B9", "z c #628FC1", "x c #6B96C6", "c c #6C96C5", "v c #719BC9", "b c #759FCB", "n c #8593B1", "m c #9DA6AE", "M c #AEB5BC", "N c #8BA7C7", "B c #84A6CA", "V c #83A7CE", "C c #95A7C2", "Z c #93ABC7", "A c #9EADC5", "S c #94ACC8", "D c #9AB0CB", "F c #9CB2CB", "G c #9BB2CC", "H c #9DB3CD", "J c #9FB4CE", "K c #80A7D1", "L c #93B6DC", "P c #A4B5C9", "I c #A5B7C9", "U c #A0B4CD", "Y c #A3B6CE", "T c #AFB8CB", "R c #ADB9CE", "E c #BABFC4", "W c #B8BFC6", "Q c #B5BEC8", "! c #B4BCCD", "~ c #A3B8D0", "^ c #A9BCD1", "/ c #AABED3", "( c #A2BDDA", ") c #9CBDE0", "_ c #B7C2CD", "` c #BCC4CC", "' c #B3C1D0", "] c #B1C2D6", "[ c #BEC7D0", "{ c #BCC8D4", "} c #BECAD6", "| c #B4C7DC", " . c #B7C8DC", ".. c #BECBDA", "X. c #B8C9DD", "o. c #BCCDDF", "O. c #ACCAE9", "+. c #BECFE1", "@. c #B3CCE8", "#. c #B1CEEC", "$. c #B5D1EE", "%. c #BED4EB", "&. c #BCD7F2", "*. c #C0C6CE", "=. c #C7CDD2", "-. c #C4CAD6", ";. c #C8CED4", ":. c #C8CFD5", ">. c #C6CFD8", ",. c #CED0D1", "<. c #CED1D3", "1. c #CAD5DF", "2. c #D1D1D1", "3. c #D3D3D3", "4. c #D7D9DB", "5. c #D9DCDF", "6. c #DCDDDF", "7. c #C3D2E3", "8. c #CCD7E2", "9. c #CFD9E2", "0. c #CEDBEA", "q. c #CCDDEF", "w. c #DBDEE0", "e. c #D5DFE9", "r. c #D6DFE9", "t. c #D5DFEB", "y. c #DFE1E3", "u. c #DCE1E5", "i. c #D9E1E9", "p. c #DCE3E9", "a. c #DCE4ED", "s. c #C9E1F9", "d. c #CCE3FA", "f. c #D4E5F6", "g. c #D2E5F9", "h. c #D5E8FC", "j. c #DAEAFA", "k. c #DEEDFB", "l. c #DAEBFC", "z. c #DEEEFF", "x. c #DFEFFF", "c. c #E0E0E0", "v. c #E2E2E2", "b. c #E3E4E5", "n. c #E2E4E6", "m. c #E4E6E8", "M. c #EDEEEF", "N. c #EFEFEF", "B. c #E6EBF0", "V. c #E6EBF4", "C. c #E0EFFF", "Z. c #E2EFFE", "A. c #E1F0FF", "S. c #E2F1FF", "D. c #E3F1FF", "F. c #F1F2F3", "G. c #F4F4F5", "H. c #F5F5F5", "J. c #F6F6F6", "K. c #F8F9F9", "L. c #F9F9F9", "P. c #FBFBFB", "I. c #FDFDFD", "U. c #FEFEFE", "Y. c None", /* pixels */ "Y. 8 6 Y.Y.Y.Y.Y.Y.", "Y.Y. 5 a.V.t.] l 9 Y.Y.Y.Y.", "Y.Y., : ! 9.E ..%.} i.Y 0 Y.Y.Y.", "Y.< : -.<.Z.k.f.{ *.w.B.U w Y.Y.", "* T b.1.S.D.j.>.4.G.P.e.j Y.Y.", "= > 5.q.C.A.A.l.=.[ P Q m.~ w Y.", "& n / d.z.x.x.0.I.U.I.n.6.o.3 Y.", " R O.&.s.h.g.:.U.U.U.L.M 7.O Y.", "- A _ ;.@.$.#.^ K.F.U.N.,.X.o Y.", "7 C u.U.y.( ) L B N H.v.m H % # ", "r k r.U.U.M.V K b c c.3.I d @ # ", "Y.t F p.J.W v x z p 2.` S . # Y.", "Y.Y.e D 8.f a i y u ' Z 4 + Y.Y.", "Y.Y.Y.s h J .+.| G g X + Y.Y.Y.", "Y.Y.Y.Y.; 2 0 q 8 1 $ # # # Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.# # # # # # # Y." }; /* XPM */ const char *utilities_terminal_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 163 2", " c #000000", ". c #010201", "X c #020302", "o c #060606", "O c #060706", "+ c #070706", "@ c #070806", "# c #080807", "$ c #090908", "% c #0A0B09", "& c #0B0C0A", "* c #0D0E0C", "= c #0F100D", "- c #131412", "; c #181F11", ": c #182011", "> c #192011", ", c #273019", "< c #273119", "1 c #26311A", "2 c #27311A", "3 c #27321A", "4 c #27321B", "5 c #28321A", "6 c #28331B", "7 c #28341B", "8 c #29331D", "9 c #29341C", "0 c #29351C", "q c #232423", "w c #2F312D", "e c #343633", "r c #364323", "t c #364423", "y c #364523", "u c #374523", "i c #374525", "p c #3B4A26", "a c #3B4A27", "s c #3C4B27", "d c #3C4C27", "f c #46562B", "g c #46572C", "h c #4E5E36", "j c #4C563D", "k c #4C5A3A", "l c #4E6132", "z c #4F6232", "x c #4F6332", "c c #536537", "v c #545851", "b c #555952", "n c #5A5E57", "m c #5F625B", "M c #616E4D", "N c #657C41", "B c #616A55", "V c #62655E", "C c #647151", "Z c #657152", "A c #697850", "S c #6A7559", "D c #636660", "F c #646860", "G c #656961", "H c #6A6E66", "J c #6F736B", "K c #737D64", "L c #747772", "P c #747870", "I c #767972", "U c #777A73", "Y c #787C74", "T c #797D75", "R c #7D7F79", "E c #758954", "W c #73825F", "Q c #768560", "! c #798764", "~ c #7B8865", "^ c #7C8967", "/ c #7A846C", "( c #7E8B69", ") c #7F8C6B", "_ c #7D8079", "` c #7E807A", "' c #7E817A", "] c #808D6D", "[ c #859869", "{ c #828E70", "} c #81837D", "| c #81837E", " . c #82857E", ".. c #83867E", "X. c #849071", "o. c #849074", "O. c #8C9D72", "+. c #8E9F74", "@. c #90A076", "#. c #92A279", "$. c #94A27D", "%. c #95A47F", "&. c #848681", "*. c #868782", "=. c #878983", "-. c #878A82", ";. c #888B83", ":. c #8A8C87", ">. c #8B8C87", ",. c #8C8F87", "<. c #8D8F8A", "1. c #8D9088", "2. c #8F918C", "3. c #91928D", "4. c #92958D", "5. c #939590", "6. c #969893", "7. c #979A92", "8. c #989995", "9. c #989996", "0. c #9A9B97", "q. c #999C94", "w. c #97A681", "e. c #99A38A", "r. c #9DA098", "t. c #A2B387", "y. c #A4B58A", "u. c #A5B68D", "i. c #A8B88E", "p. c #A0A19D", "a. c #A2A59C", "s. c #A3A69D", "d. c #A3A69E", "f. c #A9B990", "g. c #AABA92", "h. c #ACBC94", "j. c #AEBD97", "k. c #AFBE98", "l. c #B1BF9B", "z. c #B0B1AE", "x. c #B2B4B1", "c. c #B4B6B1", "v. c #B7B9B4", "b. c #C0C1BE", "n. c #CCCDCB", "m. c #CDCECC", "M. c #CDD2C6", "N. c #CED1C8", "B. c #CFD3CB", "V. c #D3D6CD", "C. c #D6D7D5", "Z. c #D7D7D5", "A. c #D7D8D6", "S. c #D7D8D7", "D. c #D9DED4", "F. c #DBDBD9", "G. c #DDDDDC", "H. c #DDDEDC", "J. c #DDDEDD", "K. c #E0E3DB", "L. c #ECEDEA", "P. c #F2F3F1", "I. c None", /* pixels */ "I.r.q.4.1.;...' T P J H G V n I.", "s.c.Z.J.H.G.G.G.G.G.G.F.n.x.L b ", "s.C.e # # # # # # # # + + w 9.b ", "a.S.= l.k.j.h.g.f.i.u.y.t. 0.v ", "a.S.* o.X.{ ] ) ( ^ ~ ! Q 6.v ", "a.S.& w.%.$.#.@.+.O.[ E N 5.v ", "a.S.% S D./ Z C M h f f g 3.v ", "a.S.$ W e.K.M.A c l z z x <.v ", "a.S.@ j B B.V.i r t t y u :.v ", "a.S.+ k N.K a p p p s s d =.v ", "a.S.+ 8 2 , < P.P.P.L.5 5 &.v ", "a.S.O 1 3 4 4 6 6 7 9 9 0 } v ", "a.S.o ; ; ; ; ; ; ; : > > ` v ", "s.A.q X . . . . . . . . . - I b ", "d.v.m.b.z.p.8.5.2.>.*.| R U D b ", "I.r.7.4.,.-. ._ Y P J H F m n I." }; /* XPM */ const char *emblem_symbolic_link_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 70 1", " c #888A85", ". c #AAABA8", "X c #B6B7B4", "o c #BFC0BE", "O c #C0C1BF", "+ c #C1C2C0", "@ c #C7C8C6", "# c #E3E3E3", "$ c #E4E3E4", "% c #E4E4E4", "& c #E4E5E4", "* c #E4E4E5", "= c #E5E5E5", "- c #E5E6E5", "; c #E6E6E6", ": c #E6E7E6", "> c #E7E7E6", ", c #E8E8E8", "< c #E9E8E8", "1 c #E8E8E9", "2 c #E8E9E9", "3 c #E9E9E9", "4 c #EAE9E9", "5 c #E9E9EA", "6 c #EAEAEA", "7 c #EBEAEA", "8 c #EAEBEA", "9 c #EAEBEB", "0 c #EBEBEB", "q c #ECECEB", "w c #ECEBEC", "e c #ECECEC", "r c #EDEDED", "t c #EDEEED", "y c #EDEDEE", "u c #EEEEEE", "i c #EFEFEE", "p c #EFEEEF", "a c #EFEFEF", "s c #EFF0EF", "d c #F0F0F0", "f c #F1F1F1", "g c #F2F1F1", "h c #F1F2F1", "j c #F2F2F1", "k c #F2F1F2", "l c #F2F2F2", "z c #F3F3F3", "x c #F3F3F4", "c c #F4F4F4", "v c #F5F5F4", "b c #F4F5F5", "n c #F5F5F5", "m c #F6F5F6", "M c #F5F6F6", "N c #F6F6F6", "B c #F7F6F6", "V c #F8F8F8", "C c #F9F9F9", "Z c #F9FAF9", "A c #FAFAFA", "S c #FBFAFB", "D c #FBFBFB", "F c #FCFBFB", "G c #FCFCFC", "H c #FDFDFC", "J c #FDFDFD", "K c #FEFEFE", "L c #FFFFFF", "P c None", /* pixels */ "P P", " LLLLLLLLLLLLLL ", " L############J ", " L############J ", " L###%=;:;-*$#J ", " L#%oX..O42.;&D ", " L%@<6...+..3>D ", " L;10ri.....q5V ", " L,9rahz....uwN ", " L4eajc.....dra ", " L8yfx......gpa ", " L0ukvVDHFCmzsa ", " L9uknVDKGCMzaa ", " L7tfcBCSZVblaa ", " LGGGGGGAAANNNa ", "P P" }; /* XPM */ const char *emblems_system_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 17 1", " c #676965", ". c #71736F", "X c #777975", "o c #888A84", "O c #888A85", "+ c #898B87", "@ c #8D8F8A", "# c #8F918C", "$ c #979993", "% c #A2A3A0", "& c #B8BAB4", "* c #BDBFB9", "= c #C0C0BE", "- c #C7CAC3", "; c #D3D7CF", ": c #EEEEEC", "> c None", /* pixels */ ">>>>>>>>>>>>>>>>", ">>>>>>OOO>>>>>>>", ">>>OO>O:O>OO>>>>", ">>O:=O%;%O=:O>>>", ">>O=;;;;;;;=O>>>", ">>>O;&o$o*;O>>>>", ">OO%;o.> +;%OO>>", ">O:;;$>>>$;;:O>>", ">OO%;@#>Xo;%OO>>", ">>>O:&@$o-;O>>>>", ">>O=;;;;;;;=O>>>", ">>O:=O%;%O=:O>>>", ">>>OO>O:O>OO>>>>", ">>>>>>OOO>>>>>>>", ">>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>" }; /* XPM */ const char *dialog_information_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 116 2", " c #303030", ". c #393936", "X c #5E5E3E", "o c #3A4A77", "O c #3A4B77", "+ c #3B4B77", "@ c #3D4C76", "# c #3D4D76", "$ c #384978", "% c #384A79", "& c #394A79", "* c #394B7A", "= c #3A4B7A", "- c #3B4C78", "; c #3C4D78", ": c #3E4E79", "> c #464646", ", c #435177", "< c #40507A", "1 c #41517B", "2 c #45547E", "3 c #46557F", "4 c #4A577A", "5 c #80805C", "6 c #8A8B66", "7 c #475780", "8 c #485883", "9 c #4B5B83", "0 c #495985", "q c #4A5A86", "w c #546083", "e c #586383", "r c #5E6880", "t c #4B7EB2", "y c #5E8DBA", "u c #608EBC", "i c #7E91B1", "p c #7E90B2", "a c #779DC5", "s c #789DC4", "d c #A8AA84", "f c #A6AC98", "g c #A7AD98", "h c #ABB198", "j c #8C9BB8", "k c #8D9CB8", "l c #98A4BD", "z c #9AA5BE", "x c #DDDFAB", "c c #D3D5B0", "v c #E3E6BA", "b c #87A8CC", "n c #91AECD", "m c #9BAEC8", "M c #9DB9D6", "N c #A4ADC3", "B c #A5BED8", "V c #A6BED8", "C c #A9C0D9", "Z c #AAC1D9", "A c #B7C2D5", "S c #B9C4D6", "D c #B5C6DA", "F c #B5C7DB", "G c #B5CAE0", "H c #C1CCD7", "J c #EBEDC1", "K c #F3F6C9", "L c #F5F8CA", "P c #C2D0E0", "I c #C0D0E3", "U c #C5D2E1", "Y c #C1D2E4", "T c #C2D3E4", "R c #C3D3E4", "E c #C5D5E5", "W c #C7D6E5", "Q c #C9D6E7", "! c #C8D7E8", "~ c #CBD9E8", "^ c #CCD9E8", "/ c #CEDBE9", "( c #D0D5E0", ") c #D2DAE2", "_ c #D0DDEB", "` c #D3DFEB", "' c #D4E0EC", "] c #D4E0ED", "[ c #D6E1ED", "{ c #D8E2ED", "} c #D9E3EE", "| c #DEE7F1", " . c #DFE7F2", ".. c #DFE8F2", "X. c #E0E5ED", "o. c #E0E6EC", "O. c #E2E7EF", "+. c #E0E9F2", "@. c #E2EAF3", "#. c #E8EFF4", "$. c #E8EFF5", "%. c #EDEFF4", "&. c #EBF0F5", "*. c #EBF0F6", "=. c #ECF1F7", "-. c #EFF3F7", ";. c #EEF3F8", ":. c #F3F7FA", ">. c #F4F7FA", ",. c #F5F8FA", "<. c #F7F9FB", "1. c #FAFBFD", "2. c #FAFCFD", "3. c #FCFCFD", "4. c #FFFFFF", "5. c None", /* pixels */ "5.5.5.5.5.+ o $ % O @ 5.5.5.5.5.", "5.5.5.5.- N %.3.<.O.z : 5.5.5.5.", "5.5.5.; ( ,.#.@.} ` { S 1 5.5.5.", "5.5.# N ,.-.>.*...] T E k , 5.5.", "5.5.< %.$.:.2.=. ._ Y s U 3 5.5.", "5.5.& 1.+.;.4.4.4.4.H 5./ * 5.5.", "5.5.= >.[ | 4.&.o.) n 5.Q * 5.5.", "5.5.2 X.~ ! 4.I G M 5.u F 8 5.5.", "5.5.4 l ' V 4.B b 5.t Z i w 5.5.", "5.5.5.7 A R a 4.5.y C m 0 5.5.5.", "5.5.5.5.7 j P ^ W D p q 5.5.5.5.", "5.5.5.5.5.e 9 f g h r 5.5.5.5.5.", "5.5.5.5.5.5.X J L x X 5.5.5.5.5.", "5.5.5.5.5.5.X 5 d 6 X 5.5.5.5.5.", "5.5.5.5.5.5.X v K c X 5.5.5.5.5.", "5.5.5.5.5.5.5.. > 5.5.5.5.5.5." }; /* XPM */ const char *executable_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 67 1", " c #364878", ". c #486490", "X c #516A96", "o c #566F99", "O c #5F7A9F", "+ c #7182AA", "@ c #7382AB", "# c #7483AB", "$ c #7584AC", "% c #7786AD", "& c #7A87AF", "* c #7A88AE", "= c #7B88AF", "- c #7C89B0", "; c #7D89B1", ": c #7C8CB0", "> c #7C8EB0", ", c #7F90B1", "< c #858EB5", "1 c #858FB5", "2 c #8790B6", "3 c #8394B4", "4 c #8991B7", "5 c #8895B7", "6 c #8F9BBB", "7 c #8E9CBB", "8 c #8D9EBA", "9 c #8D9FBA", "0 c #9197BC", "q c #9099BC", "w c #949ABE", "e c #95A2BF", "r c #9D9FC3", "t c #98A2C1", "y c #99A3C2", "u c #9BABC3", "i c #9FAEC6", "p c #A1AAC6", "a c #A0AFC6", "s c #A2AEC7", "d c #A3B1C8", "f c #A5B0C8", "g c #A7B1C9", "h c #A4B2C8", "j c #A5B2C9", "k c #A7B2CA", "l c #A7B4CA", "z c #A9B3CB", "x c #A8B4CB", "c c #A9B5CB", "v c #ACB0CC", "b c #ABB5CD", "n c #AAB6CC", "m c #ABB6CC", "M c #ACB7CD", "N c #ADB8CE", "B c #AEB9CE", "V c #AFB9CF", "C c #B0BACF", "Z c #B1BBD0", "A c #B2BBD1", "S c #B3BCD1", "D c #BFC4D8", "F c #C1C5D9", "G c #C3C7DA", "H c #C8CADD", "J c None", /* pixels */ "JJJJJJJ JJJJJJJJ", "JJJJJJ G JJJJJJJ", "JJJJJ GuO JJJJJJ", "JJJJ Gia9. JJJJJ", "JJJ Gdhj8Xo JJJJ", "JJ Glxcn>3,o JJJ", "J GmMNBs:ez+o JJ", " GVCZAk7bS%@$o J", "J Ggf65#py=;o JJ", "JJ G*&-tDq1o JJJ", "JJJ G<24Fwo JJJJ", "JJJJ G0vHo JJJJJ", "JJJJJ Gro JJJJJJ", "JJJJJJ o JJJJJJJ", "JJJJJJJ JJJJJJJJ", "JJJJJJJJJJJJJJJJ" }; /* XPM */ const char *other_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 82 1", " c #CE5C00", ". c #DF8D14", "X c #DF8E17", "o c #DE901E", "O c #E18F16", "+ c #E29018", "@ c #E29119", "# c #E39119", "$ c #E4931B", "% c #E5941D", "& c #E69721", "* c #E69825", "= c #E59828", "- c #EFA231", "; c #EAA238", ": c #EAA33A", "> c #F1A332", ", c #E5A444", "< c #EBA847", "1 c #EFAA45", "2 c #EBAB4C", "3 c #E9AA4F", "4 c #EFAE4D", "5 c #F5AD43", "6 c #F2AF4F", "7 c #EFB35C", "8 c #F1B55C", "9 c #E8B365", "0 c #EAB566", "q c #EDB665", "w c #EEBA6D", "e c #EEBB6F", "r c #F1BA69", "t c #EFC17E", "y c #F6C47B", "u c #FAC579", "i c #F3C889", "p c #F2CA8E", "a c #F4CA8D", "s c #F4CB8F", "d c #F4CC8F", "f c #F8CC8B", "g c #FACD8B", "h c #EFCB96", "j c #F3CB90", "k c #F3CC91", "l c #F4CC91", "z c #F4CD92", "x c #F5CE93", "c c #F1CC97", "v c #F1CD97", "b c #F6CE94", "n c #F6CE95", "m c #F2CE9B", "M c #F1CE9C", "N c #F1CE9D", "B c #F1CF9E", "V c #F7D095", "C c #F7D096", "Z c #F8D197", "A c #F8D198", "S c #F9D299", "D c #F9D399", "F c #FBD49C", "G c #FBD59C", "H c #FDD79F", "J c #F8D1A0", "K c #F8D1A1", "L c #F7D7AF", "P c #F4D8AE", "I c #F3D9B4", "U c #F5DBB8", "Y c #F9DCB9", "T c #F8DDBD", "R c #F8DEBD", "E c #FAE0BF", "W c #F5DFC2", "Q c #F8DFC0", "! c #FAE1C1", "~ c #FBEAD3", "^ c #F9EAD5", "/ c None", /* pixels */ "////////////////", "/////// ///////", "////// WI //////", "///// U9oh /////", "//// N,0X.c ////", "/// MO3t=#+v ///", "// m@$e<&2wqP //", "/ B#%;i7rsljp^ /", "/ R*:a48bbxzkQ /", "// Ld16yZCVnQ //", "/// Y->fDSA! ///", "//// K5gGF! ////", "///// JuH~ /////", "////// TE //////", "/////// ///////", "////////////////" }; /* XPM */ const char *folder_open_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 69 1", " c #555753", ". c #595B57", "X c #5D5F5B", "o c #61635F", "O c #455D79", "+ c #636561", "@ c #676965", "# c #6A6C68", "$ c #6D6F6B", "% c #3F6086", "& c #3E6089", "* c #3465A4", "= c #436B9D", "- c #537196", "; c #58769B", ": c #4E7AB1", "> c #5C84B7", ", c #6D85A4", "< c #7C8EA4", "1 c #6395CC", "2 c #6496CC", "3 c #6597CC", "4 c #6598CD", "5 c #6698CC", "6 c #6898CD", "7 c #6899CD", "8 c #6999CD", "9 c #6A9ACD", "0 c #6B9ACD", "q c #6B9BCD", "w c #6A9ACE", "e c #6C9BCE", "r c #6D9CCE", "t c #6E9CCE", "y c #6E9DCE", "u c #7D9DC6", "i c #709DCF", "p c #709ECE", "a c #729FCF", "s c #76A2D0", "d c #7CA6D2", "f c #969795", "g c #A6A6A6", "h c #A7A7A7", "j c #A8A8A8", "k c #A9ABA9", "l c #C0C0BF", "z c #81A9D4", "x c #85ACD5", "c c #88AED6", "v c #89AED6", "b c #89AFD7", "n c #8AAFD7", "m c #8BB0D7", "M c #8CB1D8", "N c #94B6DB", "B c #9ABADE", "V c #9CBBDD", "C c #9EBDDE", "Z c #A6C2E0", "A c #A7C3E0", "S c #AEC7E3", "D c #AFC8E3", "F c #B1CAE4", "G c #B9CFE7", "H c #C6C6C5", "J c #C9C9C9", "K c #CECECE", "L c None", /* pixels */ "L$$$$$@@LLLLLLLL", "$KKKKKKH+LLLLLLL", "#lfffffff LL", "@Jggggggggghj LL", "olfffffffffff LL", "XJggggggggghj LL", "Xlf************=", ".Jg*SDDDDDDDDDG*", " lf:AMMMMMMMMMS*", " J<>AMMMMMMMMMS*", " l,uAMMMMMMMMvZ*", " J*FmMmncxzdsaV*", " l;Cpiytreqw87N*", " kbq098654321B-O", "&*************%L", "LLLLLLLLLLLLLLLL" }; /* XPM */ const char *waterfall_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 5 1", " c None", ". c #124188", "+ c #788D9B", "@ c #ABCBE2", "# c #204A87", " ", " ..+..@@@@..+.. ", " ..+..@@@@..+.. ", " ..+..@@@@..+.. ", " ..+..@##@..+.. ", " ..+..@@@@..+.. ", " ..+..@@@@..+.. ", " ..+..@@@@..+.. ", " ..+..@@@@..+.. ", " ..+..@##@..+.. ", " ..+..@@@@..+.. ", " ..+..@@@@..+.. ", " ..+..@##@..+.. ", " ..+..@@@@..+.. ", " ..+..@##@..+.. ", " "}; /* XPM */ const char *dice_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 5 1", " c None", ". c #888A85", "+ c #FDF2D2", "@ c #740404", "# c #A50101", "................", ".++++++++++++++.", ".++@@#++++@@#++.", ".++@##++++@##++.", ".++###++++###++.", ".++++++++++++++.", ".++@@#++++@@#++.", ".++@##++++@##++.", ".++###++++###++.", ".++++++++++++++.", ".++@@#++++@@#++.", ".++@##++++@##++.", ".++###++++###++.", ".++++++++++++++.", "................", " "} ; /* XPM */ const char *preferences_system_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 44 1", " c #204A87", ". c #7D8385", "X c #748AA2", "o c #788DA4", "O c #728BAE", "+ c #7D91A7", "@ c #7C93B3", "# c #7A95B4", "$ c #7A95B5", "% c #888A85", "& c #8A8C87", "* c #A0A19E", "= c #869CB8", "- c #92A5BE", "; c #A4A4A3", ": c #ABACA9", "> c #ADADAA", ", c #B8B7B5", "< c #B9B8B7", "1 c #BAB9B6", "2 c #BFBEBD", "3 c #ADBBCC", "4 c #BDC8D4", "5 c #C4C3C2", "6 c #C6C4C2", "7 c #CAC9C8", "8 c #D2D1D0", "9 c #D4D3D2", "0 c #D4D3D3", "q c #E4E3E2", "w c #E5E3E2", "e c #ECEBE9", "r c #ECECEA", "t c #EEEEEC", "y c #EEEEED", "u c #EFEFEE", "i c #F0F0EE", "p c #F0F0EF", "a c #F0F0F0", "s c #F3F3F3", "d c #F6F6F5", "f c #F7F7F7", "g c #FAFAFA", "h c None", /* pixels */ "hhhhhhhhhhhhhhhh", "hhhh%hhhhhhhh%hh", "hhh%e%hhhhhh%u%h", "hhhh%i%hhhh%a%hh", "h%hh%g%hhhh%&hhh", "%d:%fw>thh%hhhhh", "h%spyr1%h%hhhhhh", "hh%%%%8;%%hhhhhh", "hhhhhh,%<%hhhhhh", "hhh .>72%hhhhh", "hh 33@ %%02%hhhh", "h 4oo- hh%q6%%hh", " 3oX#@ hhh%95%hh", " 3+$O hhhhh%*%hh", " -== hhhhhh%%%hh", "h hhhhhhhhhhhh" }; /* XPM */ const char *preferences_desktop_font_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 78 1", " c #000000", ". c #010101", "X c #040404", "o c #050505", "O c #060606", "+ c #202020", "@ c #222222", "# c #2C2C2C", "$ c #2E2E2E", "% c #2F2F2F", "& c #343434", "* c #474747", "= c #484848", "- c #494949", "; c #4A4A4A", ": c #4B4B4B", "> c #4D4D4D", ", c #565656", "< c #5F5F5F", "1 c #626262", "2 c #666666", "3 c #747474", "4 c #767676", "5 c #797979", "6 c #7C7C7C", "7 c #828282", "8 c #888A85", "9 c #A7A7A7", "0 c #ADADAD", "q c #B1B1B1", "w c #B8B9B8", "e c #BFBFBF", "r c #CECECE", "t c #D3D3D3", "y c #DBDBDB", "u c #E2E2E2", "i c #E3E3E3", "p c #E4E3E4", "a c #E4E4E4", "s c #E4E5E4", "d c #E4E4E5", "f c #E5E6E5", "g c #E6E6E6", "h c #E6E7E6", "j c #E7E7E6", "k c #E8E7E7", "l c #E8E8E8", "z c #E8E9E9", "x c #E9E9E9", "c c #EAE9E9", "v c #E9E9EA", "b c #EBEAEA", "n c #EAEBEA", "m c #EAEBEB", "M c #EBEBEB", "N c #ECECEB", "B c #ECEBEC", "V c #ECECEC", "C c #ECEDEC", "Z c #EDEDED", "A c #EEEEEE", "S c #EFEFEF", "D c #F0F0F0", "F c #F1F1F1", "G c #F2F2F2", "H c #F3F3F3", "J c #F4F4F4", "K c #F5F5F5", "L c #F6F6F6", "P c #F7F7F7", "I c #F8F8F8", "U c #F9F9F9", "Y c #FAFAFA", "T c #FBFBFB", "R c #FCFCFC", "E c #FDFDFD", "W c #FFFFFF", "Q c None", /* pixels */ "Q88888888888888Q", "8WWWWWWWWWWWWWW8", "8Wi97%%iggggiiE8", "8Wiuyr%ilxlliiE8", "8Wiq%3%ghgfdpiE8", "8Wi%te%xxczkgsT8", "8Wa%%%w:%CBmxjT8", "8WgVZAS*#DSANvI8", "8WlZSDF=+& .1GL8", "8WcSDGH= 4G2 qS8", "8WnDGHK-oHUy 6S8", "8WMFHJL-OFTt 4S8", "8WmGJLP; 5P< 0S8", "8WbGJLI,$@X >PS8", "8WRRRRRRYYYLLLS8", "Q88888888888888Q" }; /* XPM */ const char *system_search_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 127 2", " c #646662", ". c #666864", "X c #676965", "o c #686966", "O c #696B66", "+ c #6A6B68", "@ c #6B6B6B", "# c #6A6C68", "$ c #6B6D69", "% c #6C6E69", "& c #6C6D6A", "* c #6C6E6A", "= c #6D6F6A", "- c #6C6E6B", "; c #6D6E6B", ": c #6D6F6C", "> c #6E706B", ", c #6F706C", "< c #6F716C", "1 c #70716D", "2 c #747672", "3 c #767875", "4 c #7A7C78", "5 c #7F807D", "6 c #5980AD", "7 c #5C85B3", "8 c #618AB9", "9 c #6690BF", "0 c #6893C2", "q c #6994C5", "w c #6D97C5", "e c #6E9AC9", "r c #6F9BCA", "t c #6F9CCD", "y c #729DCF", "u c #719ECE", "i c #729ECE", "p c #729FCE", "a c #739FCE", "s c #729ECF", "d c #729FCF", "f c #739FCF", "g c #76A0CD", "h c #75A1CF", "j c #78A1CD", "k c #838580", "l c #828481", "z c #848682", "x c #858784", "c c #868785", "v c #888A85", "b c #898B88", "n c #898A89", "m c #8F908F", "M c #919291", "N c #939592", "B c #A3A4A1", "V c #A7A8A6", "C c #A8A9A8", "Z c #B7B7B5", "A c #B8B8B7", "S c #8AA6C5", "D c #8EA8C5", "F c #81A3CA", "G c #85A6CA", "H c #89A9CB", "J c #96A9C1", "K c #9BADC2", "L c #9EAFC4", "P c #80A7D4", "I c #8FB1D9", "U c #96B3D2", "Y c #97B4D3", "T c #97B8DB", "R c #ADBACA", "E c #A2BEDF", "W c #B9CADC", "Q c #ACC6E2", "! c #AEC8E3", "~ c #B4CCE6", "^ c #B6CDE6", "/ c #C2C2C2", "( c #C4C4C4", ") c #C7C7C7", "_ c #C9C9C8", "` c #CACAC9", "' c #CBCBCA", "] c #CBCCCA", "[ c #C5CCD2", "{ c #D6D6D6", "} c #D1D5D9", "| c #D4D6D9", " . c #D7D8DA", ".. c #D9D9D8", "X. c #DADAD9", "o. c #D8DADB", "O. c #DADADA", "+. c #DADBDB", "@. c #DBDBDB", "#. c #DADBDC", "$. c #DEDEDE", "%. c #DFDFDF", "&. c #C0D3E9", "*. c #C7D8EB", "=. c #C7D9EC", "-. c #CBDBEC", ";. c #CEDDED", ":. c #D1D9E1", ">. c #D2D9E0", ",. c #D5DCE4", "<. c #DBE2E9", "1. c #D1E0F0", "2. c #D3E1F0", "3. c #D5E2F0", "4. c #D6E2F1", "5. c #D7E4F1", "6. c #D9E4F1", "7. c #DFE9F3", "8. c #E2E2E2", "9. c #E0E9F3", "0. c #E0E9F4", "q. c #E3EBF4", "w. c #E2EBF5", "e. c #E3EBF5", "r. c #E7EEF7", "t. c #ECF2F8", "y. c None", /* pixels */ "y.y.y.y.3 , 1 > = 4 y.y.y.y.y.y.", "y.y.y.: ] #.| } .` - y.y.y.y.y.", "y.y.< +.J w h p 0 K $.> y.y.y.y.", "y.* O.S d *.w.7.! p D @.$ y.y.y.", "y.V L p 4.r.t.e.1.T u R B y.y.y.", "O X.9 Q 6.0.q.9.;.P s F ..O y.y.", "> o.u ~ -.2.5.3.y.y.y u 8.> y.y.", "% %.g I ^ =.&.E y.y.f e @.% y.y.", "k ( G q y y.y.y.y.y.8 H _ z y.y.", "y.l :.p t y.y.i y.y.p >.X y.y.y.", "y.# C W p 7 y.r 6 a [ N c o y.y.", "y.y.% M <.U j p Y ,.+ A x 2 . y.", "y.y.y.# 5 m / %.n y.; Z b ) & ", "y.y.y.y.y.v % % v y.y.@ & ' { & ", "y.y.y.y.y.y.y.y.y.y.y.y.y.& & y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y." }; /* XPM */ const char *utilities_system_monitor_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 115 2", " c #7D7D7A", ". c #7E7E7B", "X c #829B7A", "o c #829C7C", "O c #849E7C", "+ c #BBC774", "@ c #204A87", "# c #265987", "$ c #2C5D8E", "% c #2C6090", "& c #2C6292", "* c #2C6294", "= c #2F6697", "- c #316696", "; c #316697", ": c #316A99", "> c #316A9A", ", c #346A9A", "< c #316C9B", "1 c #346E9D", "2 c #346E9E", "3 c #34709E", "4 c #3772A1", "5 c #3772A2", "6 c #3A74A3", "7 c #3D77A6", "8 c #3D77A7", "9 c #3D79A7", "0 c #3D7BA8", "q c #3D7CAA", "w c #407EAB", "e c #4280AC", "r c #4280AD", "t c #4283AE", "y c #4284AF", "u c #4584B1", "i c #4587B1", "p c #4887B3", "a c #488AB5", "s c #4A8DB7", "d c #4D8DB7", "f c #4D8EB9", "g c #4D8FBA", "h c #5294BE", "j c #5495BF", "k c #7792B5", "l c #85A180", "z c #85A280", "x c #87A481", "c c #89A483", "v c #89A584", "b c #8BA785", "n c #8BAA86", "m c #8CAA86", "M c #8EAC89", "N c #90AE8B", "B c #90AF8B", "V c #91B08C", "C c #93B28E", "Z c #94B48F", "A c #96B590", "S c #96B691", "D c #97B893", "F c #8199BA", "G c #B4B6B1", "H c #B4B7B1", "J c #B6C496", "K c #B7C699", "L c #BACA9C", "P c #BECE9F", "I c #BFCFA0", "U c #EEE788", "Y c #D3D9A5", "T c #D5DBA7", "R c #E7E8B0", "E c #EDEAB0", "W c #98C0D9", "Q c #BAD1E1", "! c #C9CCC6", "~ c #CBCEC9", "^ c #CCCFCA", "/ c #D0D2CE", "( c #D3D6D1", ") c #D5D7D3", "_ c #D7D9D5", "` c #DADCD8", "' c #DBDCD9", "] c #DCDDDB", "[ c #DEE0DD", "{ c #DFE1DD", "} c #D6E3ED", "| c #D6E4ED", " . c #D7E5EF", ".. c #D8E6EF", "X. c #E2E3E0", "o. c #E4E5E2", "O. c #E5E7E4", "+. c #E9EAE8", "@. c #EEEEED", "#. c #E9F1F6", "$. c #EFF4F8", "%. c #F4F5F3", "&. c #F6F7F6", "*. c #F0F5F8", "=. c #F0F5F9", "-. c #F1F6F9", ";. c #F5F8FA", ":. c #F6F8FB", ">. c #F8F9F8", ",. c #F9F9F8", "<. c #F9FAF9", "1. c #FAFBFA", "2. c #FEFEFE", "3. c #FFFFFF", "4. c None", /* pixels */ ". . . . . . . . . . . . . . . ", ". ,.>.3.3.3.3.3.3.3.3.2.1.1.1.. ", ". ,.k @ @ @ @ @ @ @ @ @ @ k ] . ", ". 2.@ # $ * X o < > : - & @ O.. ", ". 2.@ % ; O E z 6 6 5 3 , @ X.. ", ". 2.@ = 2 J $.K b q 0 7 4 @ [ . ", ". 2.@ 1 x Y Q | M u t w 9 @ ' . ", ". 2.@ l v } L .V + B M n @ _ . ", ". 2.@ ;.:.T V ..P U -.=.*.@ ( . ", ". 2.@ c m N C I #.W Z V M @ / . ", ". 2.@ 8 r p f S R D A d u @ ^ . ", ". 2.@ 7 e i s Z j h g a y @ ! . ", ". ,.F @ @ @ @ @ @ @ @ @ @ k G . ", ". ,.&.<.%.@.+.o.{ ` ) / ~ H H . ", ". . . . . . . . . . . . . . . ", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4." }; /* XPM */ const char *system_users_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 146 2", " c #6C3F3B", ". c #624F0D", "X c #6D4A0A", "o c #685D14", "O c #616B09", "+ c #616519", "@ c #687214", "# c #6E771D", "$ c #596921", "% c #6A692B", "& c #6A6A2B", "* c #6D712F", "= c #6F7131", "- c #767B35", "; c #797F37", ": c #55315F", "> c #5C3B59", ", c #723C51", "< c #5A3464", "1 c #5C3566", "2 c #465440", "3 c #7E6040", "4 c #614D7E", "5 c #645370", "6 c #864F06", "7 c #815107", "8 c #885106", "9 c #8E5105", "0 c #955104", "q c #9F5203", "w c #9E5807", "e c #A35403", "r c #B85410", "t c #BA5C11", "y c #BF6C10", "u c #815330", "i c #965435", "p c #90563F", "a c #AA7722", "s c #AF7D2E", "d c #BC7625", "f c #CD5C00", "g c #CC5E01", "h c #CC5E04", "j c #C16404", "k c #C4680A", "l c #D56402", "z c #D16604", "x c #C16710", "c c #C77D28", "v c #844240", "b c #895443", "n c #905841", "m c #8B6B58", "M c #AF8033", "N c #B68134", "B c #B88530", "V c #B98633", "C c #C2893C", "Z c #DF8E3A", "A c #E0992A", "S c #E09B2D", "D c #E3A23C", "F c #E1A23E", "G c #868F41", "H c #B78940", "J c #BC8E43", "K c #B99355", "L c #C38F44", "P c #D08F4A", "I c #C29142", "U c #C0934B", "Y c #D8994A", "T c #C49A52", "R c #CB9A51", "E c #CF9D51", "W c #DDA053", "Q c #DCA552", "! c #D1A55F", "~ c #DDAB5E", "^ c #E3A340", "/ c #E5A746", "( c #E6AA4D", ") c #E6A251", "_ c #E3A256", "` c #E5A255", "' c #E6AD54", "] c #E5AE5C", "[ c #EBAA5B", "{ c #E8AA5C", "} c #C99C66", "| c #D9AC64", " . c #DAAE6D", ".. c #E2B369", "X. c #ECB868", "o. c #F1BD6F", "O. c #EBBC74", "+. c #ECBD74", "@. c #F3BE71", "#. c #EFC075", "$. c #3D538B", "%. c #3E558E", "&. c #30609D", "*. c #32629E", "=. c #32629F", "-. c #3263A1", ";. c #3264A1", ":. c #3364A2", ">. c #3364A3", ",. c #3466A4", "<. c #3466A5", "1. c #3467A7", "2. c #3568A8", "3. c #3568A9", "4. c #366AAC", "5. c #366BAD", "6. c #3B6EAE", "7. c #386DB1", "8. c #485F99", "9. c #4F649A", "0. c #4071AF", "q. c #4172AF", "w. c #4576B2", "e. c #4A78B2", "r. c #547FB5", "t. c #5680B5", "y. c #5E83B2", "u. c #5981B4", "i. c #5F86B7", "p. c #5A85B9", "a. c #6B8BB4", "s. c #6087B9", "d. c #A9A3B9", "f. c #F3C680", "g. c #F9C780", "h. c #F6CB8A", "j. c #F0CE99", "k. c #829FC5", "l. c #8BA6C9", "z. c #8DA7C8", "x. c #A6ACC4", "c. c #B0B6CB", "v. c #A0B6D1", "b. c #B4C1D3", "n. c #D6DBE3", "m. c None", /* pixels */ "m.m.m.m.6 0 9 e m.m.m.m.m.m.m.m.", "m.m.m.z Y ! E L q m.m.m.m.m.m.m.", "m.m.w W T U V d x f g f m.m.m.m.", "m.m.8 R J K c k ) h.@.{ f m.m.m.", "m.m.7 I B H y [ f.O.( #.Z f m.m.", "m.m.. C M a l g.+.j.' D ] f m.m.", "m.m. u N s j o./ ..S F Q f m.m.", "m.2 * + 3 X o ` X.A ^ | P r m.m.", "2 - # G G % , n _ ~ .} p v m.m.", "2 - @ G & 1 l.5 m h t i b s.1 1 ", "2 - @ @ 1 z.4.7.c.4 d.x.2.;.s.1 ", "2 - $ O > s.1.5.v.n.p.k.<.&.6.1 ", "2 - ; = 1 i.>.1.3.b.u.,.-.-.6.1 ", "m.2 2 2 1 y.>.%.:.a.-.*.$.=.6.1 ", "m.m.m.m.1 t.r.9.e.0.0.0.8.q.w.1 ", "m.m.m.m.: 1 1 1 1 1 1 1 1 1 1 < " }; /* XPM */ const char *multimedia_player_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 78 1", " c #535551", ". c #555753", "X c #5B5B58", "o c #626460", "O c #666864", "+ c #676964", "@ c #686A65", "# c #696B66", "$ c #6A6C67", "% c #696968", "& c #6C6E69", "* c #6E6F6C", "= c #6E706B", "- c #70726D", "; c #747671", ": c #747672", "> c #767874", ", c #787A75", "< c #787A76", "1 c #7A7B77", "2 c #7A7C77", "3 c #7B7D78", "4 c #7C7D79", "5 c #7C7E79", "6 c #7C7D7A", "7 c #7D7F7A", "8 c #7E7F7B", "9 c #7E807B", "0 c #80817D", "q c #80827D", "w c #B3BC78", "e c #838581", "r c #858782", "t c #888A85", "y c #898A87", "u c #8A8C89", "i c #91928E", "p c #92948F", "a c #939592", "s c #969893", "d c #989996", "f c #9B9D9A", "g c #9FA09D", "h c #A2A49F", "j c #B2B796", "k c #A4A6A2", "l c #A4A6A3", "z c #A5A6A3", "x c #A5A7A3", "c c #A6A7A3", "v c #A8AAA5", "b c #ADAEAB", "n c #AEAEAB", "m c #B6BAA6", "M c #B4B5A8", "N c #B8BCA8", "B c #B8BCAA", "V c #B6B6B4", "C c #B8B9B6", "Z c #B9B9B6", "A c #BBC286", "S c #BDC58D", "D c #BBC291", "F c #BBC096", "G c #BEC496", "H c #BFC59B", "J c #C3C996", "K c #C3CA96", "L c #C3C79F", "P c #C5CB9A", "I c #C4CAA3", "U c #C5C9A4", "Y c #C9CEAB", "T c #CBCFAC", "R c #C9D0A3", "E c #CBD0A5", "W c #D1D6AE", "Q c #CFD4B0", /* pixels */ " ...............", ".>cccxxxxxxzlk>.", ".di1114444480td.", ".dajLUYTIHGDQud.", ".dhFKPREJSAwWsd.", ".dpMBNNNNNNmmrd.", ".d=&&$&=&$$&$$d.", ".d#+@++#@++#+@d.", ".d,nfvb:;:-XoOd.", ".dyCkVZ777<%6*d.", ".d777777777eq9d.", ".d555555555555d.", ".d3g3g33333333d.", ".d222222222222d.", ".>dddddddddddd>.", "................" }; /* XPM */ const char *chat_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 15 1", " c #888A85", ". c #9D9D9D", "X c #C6C6C4", "o c #E9E9E9", "O c #EAEAEA", "+ c #EBEBEB", "@ c #ECECEC", "# c #EDEDED", "$ c #EEEEEE", "% c #EFEFEF", "& c #F0F0F0", "* c #F1F1F1", "= c #F2F2F2", "- c #FFFFFF", "; c None", /* pixels */ ";;;; ;", ";;; ----------- ", ";;; -ooooooooo- ", "; Xo- ", " ----------- o- ", " -ooooooooo- o- ", " -ooooooo@@- o- ", " -ooooo@@@@- -- ", " -ooo@@@&&&- - ;", " -o@@@&@@&&- - ;", " -o@@&@&&&&- ;", " --&@------- ; ;", "; -@- .;;;", "; -- ;;;;;;;;;;;", "; ;;;;;;;;;;;;", "; ;;;;;;;;;;;;;;" }; /* XPM */ const char * dialog_information_48_icon[] = { "48 48 606 2", " c None", ". c #616673", "+ c #626779", "@ c #616777", "# c #626473", "$ c #626472", "% c #616776", "& c #626778", "* c #626574", "= c #6B7287", "- c #8798B9", "; c #9FB3D8", "> c #ABC0E2", ", c #B8C9EB", "' c #BBCBEB", ") c #B3C5E3", "! c #AABCDA", "~ c #90A0BC", "{ c #6D758A", "] c #626576", "^ c #626675", "/ c #727B94", "( c #9DB1DB", "_ c #ACC1EB", ": c #98B4E2", "< c #85A7DA", "[ c #7CA1D5", "} c #759CD0", "| c #749CCE", "1 c #7EA4D2", "2 c #89ABD6", "3 c #A5BFE1", "4 c #C5D5EE", "5 c #B6C5E1", "6 c #7A8399", "7 c #626777", "8 c #90A4CD", "9 c #A7BEEB", "0 c #87A8DE", "a c #7197D3", "b c #84A7D6", "c c #9AB7DB", "d c #AAC3DF", "e c #B3C9E2", "f c #B4CBE2", "g c #B1C8E2", "h c #A3BEDC", "i c #8CAED3", "j c #749DC9", "k c #94B3D8", "l c #CAD8EF", "m c #ADBCD6", "n c #656978", "o c #676D81", "p c #9BB0DC", "q c #94B0E5", "r c #7198D6", "s c #93B2DD", "t c #BACEE6", "u c #C5D6E9", "v c #C7D8EA", "w c #C7D8E9", "x c #C7D7EA", "y c #C8D8E9", "z c #C6D6E8", "A c #C5D6E8", "B c #C3D4E7", "C c #C0D2E6", "D c #91B2D5", "E c #769ECA", "F c #B3C8E4", "G c #C4D2E8", "H c #6C7283", "I c #63687A", "J c #99B0DE", "K c #88A8E2", "L c #7BA0D9", "M c #B3C9E6", "N c #C5D6EA", "O c #C6D7E9", "P c #C8D8EB", "Q c #C9D8E9", "R c #C9D9EA", "S c #C8D8EA", "T c #C7D7E9", "U c #C6D6E9", "V c #C3D4E8", "W c #C0D2E7", "X c #85A9CF", "Y c #779FCA", "Z c #A3BDDD", "` c #C6D4E9", " . c #666B7A", ".. c #62687A", "+. c #8EA4D1", "@. c #8DACE4", "#. c #7EA2DA", "$. c #BDD0EA", "%. c #CADAEA", "&. c #C8D9EB", "*. c #C6D8EA", "=. c #C3D5E8", "-. c #AEC5E0", ";. c #7CA3CC", ">. c #79A0CB", ",. c #B8C6DD", "'. c #7382A2", "). c #96B2E7", "!. c #749BD8", "~. c #BBCFE9", "{. c #C3D5E9", "]. c #C9D8EA", "^. c #CADAEB", "/. c #CBDAEB", "(. c #CCDAEB", "_. c #CCDBEB", ":. c #CBDBEA", "<. c #CBDAEA", "[. c #C9D9E9", "}. c #C4D6E9", "|. c #C2D4E7", "1. c #8AACD1", "2. c #80A4CE", "3. c #7CA1CC", "4. c #CADAEE", "5. c #8391A7", "6. c #626877", "7. c #95AFE0", "8. c #789CDC", "9. c #A1BCE2", "0. c #C2D4E9", "a. c #CCDBEC", "b. c #CDDCEB", "c. c #CEDCEB", "d. c #CDDBEB", "e. c #CDDBEC", "f. c #C8D9EA", "g. c #C4D5E7", "h. c #9AB8D8", "i. c #84A8CF", "j. c #8EAFD5", "k. c #D0DAEE", "l. c #626876", "m. c #717B94", "n. c #94B1E6", "o. c #749AD6", "p. c #BDD0E8", "q. c #C1D3E7", "r. c #CCDCEB", "s. c #CFDCEC", "t. c #D0DDED", "u. c #D0DEED", "v. c #CFDDEC", "w. c #CEDCEC", "x. c #CEDBEB", "y. c #CCDAEA", "z. c #C9D9EB", "A. c #A3BDDC", "B. c #8AACD2", "C. c #85A9D0", "D. c #80A5CE", "E. c #CFDAF0", "F. c #838D9F", "G. c #616878", "H. c #869AC3", "I. c #83A5DE", "J. c #8AABD9", "K. c #BED1E6", "L. c #C1D3E8", "M. c #C4D6E8", "N. c #CAD9EB", "O. c #D1DEEE", "P. c #D2E0EE", "Q. c #D1DFED", "R. c #D0DEEC", "S. c #A4BEDB", "T. c #8FB1D4", "U. c #ACC4E1", "V. c #B5C1D5", "W. c #626979", "X. c #98ADDA", "Y. c #92B2D8", "Z. c #BDD1E6", "`. c #CEDDEC", " + c #D4E1EE", ".+ c #D3E1EE", "++ c #D4E0EF", "@+ c #D3E0EE", "#+ c #9EBBD9", "$+ c #95B4D6", "%+ c #90B0D4", "&+ c #91B3D5", "*+ c #DBE2F2", "=+ c #626878", "-+ c #9EB6E1", ";+ c #6F98D0", ">+ c #93B2D6", ",+ c #BDD2E6", "'+ c #C1D4E7", ")+ c #C4D5E9", "!+ c #D0DEEE", "~+ c #D5E2EF", "{+ c #D7E2F0", "]+ c #D6E1EF", "^+ c #D6E1ED", "/+ c #D5E1EF", "(+ c #D3E0EF", "_+ c #D0DFEE", ":+ c #9FBBDA", "<+ c #9AB7D8", "[+ c #8FB0D4", "}+ c #8AABD1", "|+ c #E7ECFA", "1+ c #626775", "2+ c #646775", "3+ c #9EB8E4", "4+ c #6F99CC", "5+ c #8BACD2", "6+ c #BFD0E6", "7+ c #C5D7E9", "8+ c #D2DFED", "9+ c #D7E2EF", "0+ c #D8E3F0", "a+ c #DAE5F1", "b+ c #D9E4EF", "c+ c #D8E4EF", "d+ c #D1E0EE", "e+ c #AFC6DF", "f+ c #A4C0DC", "g+ c #99B8D7", "h+ c #92B3D5", "i+ c #8DAED3", "j+ c #E7EBFA", "k+ c #666976", "l+ c #A1B9E1", "m+ c #6F99C8", "n+ c #7AA1CB", "o+ c #BDD0E6", "p+ c #C7D6E9", "q+ c #DBE6F2", "r+ c #DCE5F2", "s+ c #DCE5F1", "t+ c #D8E4F0", "u+ c #C3D4E9", "v+ c #AEC7E0", "w+ c #ABC3DE", "x+ c #9EBADA", "y+ c #98B6D6", "z+ c #92B1D3", "A+ c #E8EDFB", "B+ c #656876", "C+ c #A0B7DA", "D+ c #739BC8", "E+ c #7AA1CC", "F+ c #A2BEDB", "G+ c #C4D5E8", "H+ c #CFDEED", "I+ c #DAE4F0", "J+ c #DDE8F3", "K+ c #DFE9F2", "L+ c #DFEAF4", "M+ c #E0E8F2", "N+ c #DDE7F2", "O+ c #B8CDE3", "P+ c #B4CAE1", "Q+ c #AFC6E0", "R+ c #AAC2DE", "S+ c #A2BDDB", "T+ c #9DB9D9", "U+ c #E8ECFA", "V+ c #636777", "W+ c #96ACCA", "X+ c #7EA3CD", "Y+ c #7DA3CD", "Z+ c #86AAD0", "`+ c #BACDE5", " @ c #CCDCEC", ".@ c #D4E1EF", "+@ c #D8E2EF", "@@ c #DEE7F3", "#@ c #E0EAF4", "$@ c #E1E9F2", "%@ c #E3EAF3", "&@ c #DDE8F2", "*@ c #CAD8EB", "=@ c #C1D4E6", "-@ c #B9CEE5", ";@ c #A8C1DD", ">@ c #A0BCD9", ",@ c #A5C1DE", "'@ c #DEE3F3", ")@ c #636877", "!@ c #8291A8", "~@ c #92B3D7", "{@ c #88ABD1", "]@ c #95B3D6", "^@ c #B0C7E0", "/@ c #FAFCFD", "(@ c #EEF3F7", "_@ c #DFE7F2", ":@ c #DCE6F1", "<@ c #DEEAF2", "[@ c #DFE8F1", "}@ c #DCE6F2", "|@ c #D5E0EE", "1@ c #D4D8DD", "2@ c #DFDFDF", "3@ c #BFD1E5", "4@ c #BACDE3", "5@ c #B3C8E2", "6@ c #ABC3DD", "7@ c #C5D3EB", "8@ c #B8C0D1", "9@ c #676D7D", "0@ c #A8BFDD", "a@ c #85AAD0", "b@ c #9BB8D8", "c@ c #F0F4FA", "d@ c #F5F9FC", "e@ c #FCFDFD", "f@ c #F0F4F7", "g@ c #E3E9EF", "h@ c #D9E1EA", "i@ c #D5DEE5", "j@ c #D6DDE3", "k@ c #DFE3E7", "l@ c #E9ECEC", "m@ c #F1F2F2", "n@ c #E4E6E9", "o@ c #B6CCE4", "p@ c #AEC6DF", "q@ c #E0E6F6", "r@ c #818493", "s@ c #8794A9", "t@ c #A6C0DE", "u@ c #8DAED2", "v@ c #9EBAD9", "w@ c #A6C0DC", "x@ c #D1DFEE", "y@ c #EEF2F8", "z@ c #C6D6E7", "A@ c #E2E9F0", "B@ c #EFF2F5", "C@ c #F3F4F5", "D@ c #F3F4F4", "E@ c #F2F2F3", "F@ c #EAECEE", "G@ c #DFE3E6", "H@ c #EFEFF3", "I@ c #E5EBF3", "J@ c #BACEE5", "K@ c #B4C9E2", "L@ c #CAD8ED", "M@ c #CCD4E3", "N@ c #656977", "O@ c #646978", "P@ c #A6B3C7", "Q@ c #A8C2E0", "R@ c #A9C2DD", "S@ c #B5CBE3", "T@ c #F0F3F9", "U@ c #C9DBEA", "V@ c #F9FAFC", "W@ c #C6D5E7", "X@ c #C8D9EC", "Y@ c #E7EBF8", "Z@ c #717481", "`@ c #666C7A", " # c #B1BBCF", ".# c #B2C9E3", "+# c #A2BDDA", "@# c #ACC2DE", "## c #B3C9E1", "$# c #E0E9F3", "%# c #F1F5F9", "&# c #F2F5FA", "*# c #CFDEEE", "=# c #EAEDFA", "-# c #7F8490", ";# c #686C7B", "># c #BBC5D7", ",# c #ACC4DF", "'# c #B5CBE2", ")# c #E0E7F0", "!# c #F1F3F4", "~# c #D0E0EF", "{# c #EAEEFA", "]# c #818592", "^# c #707683", "/# c #CAD7EA", "(# c #C1D1E6", "_# c #D0D6DD", ":# c #D8D9DB", "<# c #E5EAF8", "[# c #ACB0BC", "}# c #646976", "|# c #C7CFDE", "1# c #AFC7E0", "2# c #B9CCE4", "3# c #BFD4E7", "4# c #BDC5CF", "5# c #BDC4CD", "6# c #E8ECF9", "7# c #868895", "8# c #B5BCCB", "9# c #B9C4CF", "0# c #9DA3A9", "a# c #939595", "b# c #EAEDF8", "c# c #767B88", "d# c #8A8F9D", "e# c #D0DDEF", "f# c #B2C5D8", "g# c #B0C0CA", "h# c #B0BBBB", "i# c #80837C", "j# c #A5AB94", "k# c #B1B494", "l# c #ADB08A", "m# c #9C9D7A", "n# c #757567", "o# c #E3E6F3", "p# c #666977", "q# c #656A78", "r# c #C6CEDC", "s# c #B4BEC5", "t# c #A3AF9F", "u# c #A8B19D", "v# c #888B7B", "w# c #929683", "x# c #BBBEA1", "y# c #C1C2A0", "z# c #999A7D", "A# c #949477", "B# c #B3B48C", "C# c #A3A584", "D# c #A1A591", "E# c #E2E7EF", "F# c #9B9FAC", "G# c #6E717D", "H# c #CACFD7", "I# c #C0C8C8", "J# c #AEB7AD", "K# c #9CA296", "L# c #7E8174", "M# c #BFC2AC", "N# c #C5C8AC", "O# c #92937E", "P# c #B9BB9E", "Q# c #D5D8B7", "R# c #D1D5B9", "S# c #DBDEDD", "T# c #C3C6CE", "U# c #656776", "V# c #555744", "W# c #6E737A", "X# c #BFC4CC", "Y# c #D8DDE2", "Z# c #C9CFCA", "`# c #C2C7B9", " $ c #C3C7B4", ".$ c #C7CBB2", "+$ c #CED2BB", "@$ c #DADBC8", "#$ c #E4E6DE", "$$ c #EEF0F5", "%$ c #B9BDBF", "&$ c #62666E", "*$ c #666635", "=$ c #A1A262", "-$ c #6E7276", ";$ c #82868E", ">$ c #B9BDC0", ",$ c #D5D8DB", "'$ c #E1E4E7", ")$ c #E6E9ED", "!$ c #E3E5E8", "~$ c #D9DBDC", "{$ c #BABCBC", "]$ c #757780", "^$ c #686A68", "/$ c #4E4E2F", "($ c #595A30", "_$ c #A3A456", ":$ c #D3D58E", "<$ c #BEC19D", "[$ c #92968B", "}$ c #73767C", "|$ c #686B75", "1$ c #626571", "2$ c #6B6E77", "3$ c #76797A", "4$ c #8C8D7B", "5$ c #999772", "6$ c #8E8C5C", "7$ c #4D4D28", "8$ c #4C4C28", "9$ c #83834C", "0$ c #D8D9A1", "a$ c #F2F4D6", "b$ c #ECEEC0", "c$ c #EBEFBE", "d$ c #E9ECBB", "e$ c #E8EAB7", "f$ c #DCDEAB", "g$ c #CDCE99", "h$ c #BCBB87", "i$ c #9D9B6C", "j$ c #696740", "k$ c #4B4B28", "l$ c #636334", "m$ c #B3B35F", "n$ c #EFF0D4", "o$ c #FFFFFF", "p$ c #F8FADD", "q$ c #F4F7C6", "r$ c #F1F3C1", "s$ c #E9EBB8", "t$ c #DDDFAC", "u$ c #C8C997", "v$ c #A3A376", "w$ c #8F8D61", "x$ c #67663D", "y$ c #4C4C29", "z$ c #5B5C32", "A$ c #A9A959", "B$ c #DBDDA0", "C$ c #F4F6DA", "D$ c #F3F6C7", "E$ c #F4F7C5", "F$ c #EDF0BF", "G$ c #DADCAD", "H$ c #C6C89A", "I$ c #B8B989", "J$ c #B8B683", "K$ c #A6A471", "L$ c #8E8B5E", "M$ c #7E7E49", "N$ c #DADBA2", "O$ c #F2F3D7", "P$ c #EDEFC2", "Q$ c #ECF0BE", "R$ c #E9EBBA", "S$ c #E6E8B5", "T$ c #CDCD99", "U$ c #BCBB86", "V$ c #A09E6E", "W$ c #707048", "X$ c #616132", "Y$ c #B2B260", "Z$ c #CACB97", "`$ c #A8A778", " % c #9B996C", ".% c #949161", "+% c #54542F", "@% c #5D5D31", "#% c #ACAC5A", "$% c #DBDCA1", "%% c #F0F3C1", "&% c #DDDFB0", "*% c #C8C89C", "=% c #B9BA8C", "-% c #BDBE8A", ";% c #ACAA76", ">% c #898658", ",% c #52522E", "'% c #474726", ")% c #5C5C32", "!% c #969660", "~% c #C4C790", "{% c #D8D9A5", "]% c #D8DBAB", "^% c #D2D4A5", "/% c #C8C899", "(% c #B4B586", "_% c #9C9D6F", ":% c #86865A", "<% c #66653F", "[% c #4E4E29", "}% c #444424", "|% c #404022", "1% c #4C4C2F", "2% c #505031", "3% c #535331", "4% c #4F4F2C", "5% c #525232", "6% c #4F4F31", "7% c #4B4B31", "8% c #3A3A1F", "9% c #3D3D3D", "0% c #636363", "a% c #B9B9B9", "b% c #C0C0C0", "c% c #AFAFAF", "d% c #8D8D8D", "e% c #565656", "f% c #383838", "g% c #555555", "h% c #848484", "i% c #B8B8B8", "j% c #A8A8A8", "k% c #707070", "l% c #525252", "m% c #5A5A5A", "n% c #595959", "o% c #4F4F4F", " ", " ", " . + @ # $ % & * ", " % = - ; > , ' ) ! ~ { ] ", " ^ / ( _ : < [ } | 1 2 3 4 5 6 7 ", " 7 8 9 0 a b c d e f g h i j k l m n ", " o p q r s t u v w x y z A B C D E F G H ", " I J K L M N O w P Q R S S T U V W X Y Z ` . ", " ..+.@.#.$.N U x Q %.R R R R &.*.u =.-.;.>.F ,.+ ", " '.).!.~.{.A T y ].^./.(._.:.<.[.T }.|.1.2.3.4.5. ", " 6.7.8.9.0.V U w R /.a.b.c.c.d.e.(.f.O g.h.i.2.j.k.l. ", " m.n.o.p.q.=.A S /.:.r.s.t.u.v.w.x.y.z.A A.B.C.D.E.F. ", " G.H.I.J.K.L.M.O N.<.b.t.O.P.Q.Q.u.R.s._.w S.T.B.C.U.V.7 ", " W.X.o.Y.Z.|.=.x ^.d.`.Q.Q. + +.+++@+t.r.z.#+$+%+B.&+*+=+ ", " 7 -+;+>+,+'+)+R _.`.!+@+~+~+{+]+^+/+(+_+L.:+<+$+[+}+|+1+ ", " 2+3+4+5+6+|.7+N.r.v.8+++9+0+a+b+c+c+ +d+e+f+:+g+h+i+j+k+ ", " 1+l+m+n+o+B p+/.w.8+++9+a+a+q+r+s+a+t+u+v+w+f+x+y+z+A+B+ ", " & C+D+E+F+G+y %.H+@+^+c+I+J+K+L+M+N+%.O+P+Q+R+S+T+$+U+V+ ", " + W+X+Y+Z+`+v @H+.@+@q+@@#@$@%@&@*@=@Z.-@P+-.;@>@,@'@)@ ", " !@~@2.{@]@^@u /@(@_@:@<@[@}@|@ 1@2@3@4@5@6@f+7@8@ ", " 9@0@a@B.>+b@S+c@d@e@f@g@h@i@j@k@l@m@n@V o+o@p@;@q@r@ ", " s@t@u@]@v@w@x@y@z@A@B@C@D@E@F@G@H@I@ =@J@K@L@M@N@ ", " O@P@Q@y+>@R@S@T@U@ V@ W@o+X@Y@Z@ ", " `@ #.#+#@###$#:@ %#&# *#=#-# ", " ;#>#S@,#'#v.)# !# ~#{#]# ", " ^#/#v+o@(#_# :# <#[# ", " }#|#1#2#3#4#5# 6#7# ", " 8#t O+=@9#0# a# b#c# ", " d#e#f#g#h#i#j#k#l#m#n# o#p# ", " q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F# ", " G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U# ", " V#W#X#Y#Z#`# $.$+$@$#$$$%$&$ ", " *$=$-$;$>$,$'$)$!$~${$]$^$/$ ", " ($_$:$<$[$}$|$1$2$3$4$5$6$7$ ", " 8$9$0$a$b$c$d$e$f$g$h$i$j$k$ ", " l$m$n$o$p$q$r$s$t$u$v$w$x$y$ ", " z$A$B$C$D$E$F$G$H$I$J$K$L$7$ ", " 8$M$N$O$P$Q$R$S$f$T$U$V$W$8$ ", " X$Y$n$o$p$q$r$s$t$Z$`$ %.%+% ", " @%#%$%C$D$q$%%&%*%=%-%;%>%,% ", " '%)%!%~%{%]%^%/%(%_%:%<%[%}% ", " |%1%2%3%4%4%5%6%7%8% ", " 9%0%a%b%c%d%e%f% ", " g%h%i%j%k%l% ", " l%m%n%o% ", " ", " ", " " }; /* XPM */ const char * dialog_warning_48_icon[] = { "48 48 305 2", " c None", ". c #A10000", "+ c #A00000", "@ c #A20000", "# c #B72323", "$ c #DE6868", "% c #DF6969", "& c #BC2828", "* c #A70B0B", "= c #E16F6F", "- c #D22020", "; c #D11A1A", "> c #E16C6C", ", c #A90E0E", "' c #CE4C4C", ") c #D94040", "! c #CC0000", "~ c #D73939", "{ c #CF4A4A", "] c #AA1414", "^ c #E26F6F", "/ c #CD0707", "( c #CD0505", "_ c #E06666", ": c #AF1717", "< c #A30000", "[ c #D25252", "} c #D73636", "| c #D52F2F", "1 c #D44F4F", "2 c #B01A1A", "3 c #CD0404", "4 c #D03A3A", "5 c #D14040", "6 c #CC0202", "7 c #DF5E5E", "8 c #B31C1C", "9 c #D55858", "0 c #D63030", "a c #D8B6B6", "b c #DAC1C1", "c c #CC0606", "d c #D42626", "e c #D75353", "f c #B32020", "g c #E16767", "h c #D25050", "i c #DCDCDC", "j c #D36060", "k c #CC0101", "l c #DD5555", "m c #B92222", "n c #D85E5E", "o c #D42828", "p c #CC0404", "q c #DABFBF", "r c #DBC9C9", "s c #CD0A0A", "t c #D21D1D", "u c #D85555", "v c #A20202", "w c #B72828", "x c #DF6060", "y c #D35B5B", "z c #DDDDDD", "A c #D56B6B", "B c #DB4C4C", "C c #BC2727", "D c #A10101", "E c #DB6363", "F c #D32121", "G c #CD0808", "H c #DBC5C5", "I c #DEDEDE", "J c #DDD1D1", "K c #CE1010", "L c #D01616", "M c #DA5656", "N c #A20303", "O c #BC2D2D", "P c #DE5959", "Q c #D36565", "R c #DFDFDF", "S c #D67676", "T c #D94242", "U c #C02C2C", "V c #DC6767", "W c #CD0C0C", "X c #DCCCCC", "Y c #DED6D6", "Z c #CE1616", "` c #CF1010", " . c #DB5656", ".. c #A30505", "+. c #BF3333", "@. c #DC5252", "#. c #D56F6F", "$. c #E0E0E0", "%. c #D88484", "&. c #C43030", "*. c #DE6A6A", "=. c #D01515", "-. c #CD1111", ";. c #DCD1D1", ">. c #949494", ",. c #777777", "'. c #959595", "). c #E1DCDC", "!. c #CF1D1D", "~. c #CE0A0A", "{. c #DB5252", "]. c #A50909", "^. c #C53A3A", "/. c #DB4B4B", "(. c #D57878", "_. c #454545", ":. c #000000", "<. c #E1E1E1", "[. c #D98F8F", "}. c #D63131", "|. c #C83333", "1. c #A50808", "2. c #E06B6B", "3. c #CD1717", "4. c #DCD5D5", "5. c #505050", "6. c #515151", "7. c #E2E0E0", "8. c #D02727", "9. c #CD0606", "0. c #DB4E4E", "a. c #A90C0C", "b. c #C84040", "c. c #DA4444", "d. c #D68383", "e. c #5C5C5C", "f. c #5D5D5D", "g. c #E2E2E2", "h. c #DC9C9C", "i. c #D42929", "j. c #CA3636", "k. c #A70C0C", "l. c #E06A6A", "m. c #CE0B0B", "n. c #CE1E1E", "o. c #DEDADA", "p. c #696969", "q. c #6A6A6A", "r. c #E3E3E3", "s. c #E4E3E3", "t. c #D13131", "u. c #DB4949", "v. c #AB1010", "w. c #CC4646", "x. c #D83C3C", "y. c #D78D8D", "z. c #757575", "A. c #E4E4E4", "B. c #DFAAAA", "C. c #CD3838", "D. c #A81111", "E. c #E06969", "F. c #CE0808", "G. c #CF2626", "H. c #DEDCDC", "I. c #818181", "J. c #E5E5E5", "K. c #D23C3C", "L. c #B01414", "M. c #D04A4A", "N. c #D73535", "O. c #D89797", "P. c #8C8C8C", "Q. c #8E8E8E", "R. c #E6E6E6", "S. c #E0B4B4", "T. c #AC1616", "U. c #E06767", "V. c #D02F2F", "W. c #DFDEDE", "X. c #989898", "Y. c #999999", "Z. c #E7E7E7", "`. c #D44949", " + c #D83B3B", ".+ c #B31818", "++ c #DAA3A3", "@+ c #A4A4A4", "#+ c #A5A5A5", "$+ c #E3C1C1", "%+ c #D01414", "&+ c #D23B3B", "*+ c #A00101", "=+ c #B11C1C", "-+ c #E06262", ";+ c #CD0303", ">+ c #D13838", ",+ c #C7C7C7", "'+ c #E8E8E8", ")+ c #E9E9E9", "!+ c #D75555", "~+ c #D63333", "{+ c #B81B1B", "]+ c #D55656", "^+ c #DBADAD", "/+ c #B0B0B0", "(+ c #B1B1B1", "_+ c #E6CCCC", ":+ c #CF0E0E", "<+ c #D43939", "[+ c #B52222", "}+ c #DF5D5D", "|+ c #D14242", "1+ c #595959", "2+ c #636363", "3+ c #EAEAEA", "4+ c #D96262", "5+ c #D52C2C", "6+ c #BB1D1D", "7+ c #D85B5B", "8+ c #D32222", "9+ c #DDB7B7", "0+ c #0B0B0B", "a+ c #0D0D0D", "b+ c #EBEBEB", "c+ c #E8D4D4", "d+ c #CD0909", "e+ c #D53838", "f+ c #A40404", "g+ c #BB2828", "h+ c #DD5656", "i+ c #D24C4C", "j+ c #323232", "k+ c #313131", "l+ c #ECECEC", "m+ c #DB6F6F", "n+ c #D32525", "o+ c #BF1E1E", "p+ c #A10202", "q+ c #DB5F5F", "r+ c #D11B1B", "s+ c #DDBFBF", "t+ c #CCCCCC", "u+ c #626262", "v+ c #616161", "w+ c #CACACA", "x+ c #EBDDDD", "y+ c #CE0E0E", "z+ c #D53535", "A+ c #A40505", "B+ c #BD2E2E", "C+ c #DC4F4F", "D+ c #D45757", "E+ c #EDEDED", "F+ c #EEEEEE", "G+ c #DD7B7B", "H+ c #D21F1F", "I+ c #C32020", "J+ c #A20404", "K+ c #DD6262", "L+ c #DEC7C7", "M+ c #EEE5E5", "N+ c #D53131", "O+ c #A60707", "P+ c #960000", "Q+ c #C02D2D", "R+ c #D03636", "S+ c #E1DFDF", "T+ c #EFEFEF", "U+ c #D95858", "V+ c #C41E1E", "W+ c #9E0000", "X+ c #9F0000", "Y+ c #D21C1C", "Z+ c #D42E2E", "`+ c #9F0101", " @ c #9D0000", ".@ c #D85757", "+@ c #D12C2C", "@@ c #830000", "#@ c #B01B1B", "$@ c #DA5757", "%@ c #E06464", "&@ c #E06363", "*@ c #DF6161", "=@ c #DF5F5F", "-@ c #DE5C5C", ";@ c #DE5A5A", ">@ c #DD5757", ",@ c #DD5454", "'@ c #DC5050", ")@ c #DB4D4D", "!@ c #DB4A4A", "~@ c #DA4848", "{@ c #DA4747", "]@ c #DA4545", "^@ c #D94343", "/@ c #D83E3E", "(@ c #D83D3D", "_@ c #D73838", ":@ c #D02A2A", "<@ c #B00F0F", "[@ c #920000", "}@ c #860000", "|@ c #900000", " ", " ", " ", " ", " ", " . + + @ ", " @ # $ % & @ ", " * = - ; > , ", " . ' ) ! ! ~ { @ ", " ] ^ / ! ! ( _ : ", " < [ } ! ! ! ! | 1 . ", " 2 > 3 ! 4 5 ! 6 7 8 ", " @ 9 0 ! 6 a b c ! d e . ", " f g 6 ! h i i j ! k l m ", " . n o ! p q i i r s ! t u v ", " w x ! ! y i z z z A ! ! B C . ", " D E F ! G H z z z I J K ! L M N ", " O P ! ! Q z z z I I R S ! ! T U + ", " N V ; ! W X z z I I R R Y Z ! ` ... ", " . +.@.! ! #.z z I I R R R $.%.! ! ~ &.@ ", " ..*.=.! -.;.z I >.,.,.'.$.$.).!.! ~.{.]. ", " < ^./.! ! (.z I I _.:.:._.$.<.<.[.! ! }.|.. ", " 1.2.` ! 3.4.I I R 5.:.:.6.<.<.<.7.8.! 9.0.a. ", " @ b.c.! ! d.I I R R e.:.:.f.<.<.g.g.h.! ! i.j.@ ", " k.l.m.! n.o.I R R R p.:.:.q.<.g.g.r.s.t.! 3 u.v. ", " . w.x.! ! y.I R R R $.z.:.:.z.g.g.r.A.A.B.! ! F C.. ", " D.E.F.! G.H.R R R $.$.I.:.:.I.r.r.A.A.J.J.K.! 6 T L. ", " < M.N.! ! O.R R R $.$.<.P.:.:.Q.r.A.A.J.J.R.S.k ! ; 4 . ", " T.U.( ! V.W.R R $.$.<.<.X.:.:.Y.A.A.J.J.R.R.Z.`.! ! +.+ ", " . h | ! ! ++R R $.$.<.<.<.@+:.:.#+A.J.J.R.R.Z.Z.$+6 ! %+&+*+ ", " =+-+;+! >+R R $.$.<.<.g.g.,+q.q.,+J.J.R.R.Z.'+'+)+!+! ! ~+{+. ", " . ]+o ! ! ^+R $.$.<.<.g.g.r.g./+(+A.J.R.R.Z.'+'+)+)+_+9.! :+<+v ", " [+}+k ! |+$.$.$.<.<.g.g.r.r.1+:.:.2+R.R.Z.'+'+)+)+3+3+4+! ! 5+6+< ", " D 7+8+! 6 9+$.$.<.<.g.g.r.r.A.0+:.:.a+R.Z.'+'+)+)+3+3+b+c+d+! ~.e+f+ ", " g+h+! ! i+$.$.<.<.g.g.r.r.A.A.j+:.:.k+Z.'+'+)+)+3+3+b+b+l+m+! ! n+o+@ ", " p+q+r+! 3 s+$.<.<.g.g.r.r.A.A.J.t+u+v+w+'+'+)+)+3+3+b+b+l+l+x+y+! / z+A+ ", " + B+C+! ! D+$.<.<.g.g.r.r.A.A.J.J.R.R.Z.'+'+)+)+3+3+b+b+l+l+E+F+G+! ! H+I+@ ", " J+K+L ! c L+<.<.g.g.r.r.A.A.J.J.R.R.Z.'+'+)+)+3+3+b+b+l+l+E+F+F+M+L ! 3 N+O+ ", " P+Q+B ! ! R+S+<.g.g.r.r.A.A.J.J.R.R.Z.'+'+)+)+3+3+b+b+l+l+E+F+F+T+T+U+! ! ; V+W+ ", " X+U+Y+! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 3 Z+`+ ", " @.@n+( ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 6 m.+@*+ ", " @@#@$@-+_ %@&@*@=@7 -@;@P >@l ,@@.'@C+)@B !@~@{@]@^@T ) /@(@ +~ _@} N.~+| :@<@[@ ", " }@X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+|@ ", " ", " ", " ", " ", " " }; /* XPM */ const char *refresh_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 94 2", " c #3465A4", ". c #3565A4", "X c #3566A4", "o c #3566A5", "O c #3667A5", "+ c #3767A5", "@ c #3767A6", "# c #3768A5", "$ c #3768A6", "% c #3868A6", "& c #3869A6", "* c #3969A6", "= c #3969A7", "- c #3A69A7", "; c #3A6AA6", ": c #3A6AA7", "> c #3B6BA7", ", c #3C6BA8", "< c #3C6BA9", "1 c #3C6CA9", "2 c #3D6DA9", "3 c #4170AB", "4 c #4371AB", "5 c #4774AD", "6 c #4B77AF", "7 c #4C77AF", "8 c #4C78AF", "9 c #4C78B0", "0 c #4D79B0", "q c #4E7AB1", "w c #4F7CB6", "e c #537FB7", "r c #5580B5", "t c #5B84B7", "y c #5D85B7", "u c #5F87B9", "i c #6188B9", "p c #6890C0", "a c #6990C0", "s c #6D94C2", "d c #6891C7", "f c #6C95C9", "g c #7298C5", "h c #82A5CE", "j c #84A6CE", "k c #88A7CE", "l c #88ABD2", "z c #8AACD3", "x c #8FACD0", "c c #8CADD3", "v c #8FADD2", "b c #8EAED3", "n c #8FB0D3", "m c #93B1D4", "M c #95B2D4", "N c #9CB7D7", "B c #97B6D8", "V c #99B9DB", "C c #9DBDDC", "Z c #A1BBD9", "A c #A1BEDD", "S c #A0BEDE", "D c #A8C1DE", "F c #A8C2DF", "G c #B0C9E3", "H c #B4CAE3", "J c #B4CBE5", "K c #BCD1E7", "L c #BFD2E7", "P c #BFD3E9", "I c #C1D2E6", "U c #C7D7E9", "Y c #C4D7EB", "T c #C6D8EB", "R c #C8D8EA", "E c #C9D9EA", "W c #CDDBEB", "Q c #C9DAEC", "! c #CCDCED", "~ c #CCDDEE", "^ c #D5E2F0", "/ c #D8E4F1", "( c #DBE6F2", ") c #DDE8F3", "_ c #E0E9F4", "` c #E2EBF5", "' c #E3ECF5", "] c #E4ECF5", "[ c #E4EDF5", "{ c #E5EDF5", "} c #E5EDF6", "| c #E6EEF6", " . c #E7EEF6", ".. c None", /* pixels */ "........% % % % , ..............", "......% a n F F m u % ......O ..", "....% c C A J P ~ ^ L 0 # 4 ..", "..% a g 1 # % y Z / / ) k E % ..", "..% 4 1 % ......% i W ` | | % ..", "..O % d % .......... U T ' % ..", "..O ..............% x | / | , ..", "................ O 6 8 8 8 O ..", ".. O O ................", ".. | ' ` N O ..............O ..", "..O | U E ..........O f r ..", "..O | ` | I 0 % ......< w % # ..", "..% / M ` ) ! c 9 O % % 1 0 : ..", "..O y O 0 J Q K G A z h b % ....", ".. O ....% r h B V z s % ......", "..O ..........: # O : : ........" }; /* XPM */ const char *text_editor_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 52 1", " c #000000", ". c #4C4226", "X c #6B5736", "o c #705B39", "O c #636363", "+ c #717171", "@ c #757575", "# c #8F5902", "$ c #C4A000", "% c #EBB13D", "& c #A18355", "* c #A08356", "= c #A38555", "- c #A08457", "; c #A48757", ": c #C89F64", "> c #CEA668", ", c #CFAA69", "< c #D2AC6A", "1 c #CFAD71", "2 c #868686", "3 c #888A85", "4 c #8C8C8C", "5 c #8F8F8F", "6 c #9D9D9D", "7 c #AEAEAE", "8 c #B1B1B1", "9 c #B2B2B2", "0 c #B7B7B7", "q c #B8B8B8", "w c #BCBCBC", "e c #C2AB8A", "r c #C4C4C4", "t c #CACACA", "y c #CBCBCB", "u c #CCCCCC", "i c #D3D3D3", "p c #D6D6D6", "a c #DADADA", "s c #DBDBDB", "d c #EDE5C4", "f c #EDE6C5", "g c #EEEAC6", "h c #EFEBC7", "j c #F9E8C6", "k c #E9E9E9", "l c #EAEAEA", "z c #EBEBEB", "x c #ECECEC", "c c #EEEEEE", "v c #FFFFFF", "b c None", /* pixels */ "bbbbbbbbbbbbbbbb", "bbb$b$b$b$b$bbbb", "bb$j$j$j$j$j$bbb", "b3$%$%$%$%$%$##b", "b3z$w$q$q$0$#h1#", "b3vxxxxxxxi#h<&#", "b3vsuuuuu0#h<;#b", "b3vxxxxxi#h,&#bb", "b3vsuuu0#f>-#3bb", "b3vxxxz#f:=#+3bb", "b3vsut+oe=#523bb", "b3vxzz#.X#6p73bb", "b3vstr #O4ts93bb", "b3vxzzzzzzzx93bb", "b3x99999999993bb", "b3333333333333bb" }; /* XPM */ const char *text_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 21 1", " c #818181", ". c #959595", "X c #999999", "o c #C4C4C4", "O c #C5C5C5", "+ c #C6C6C6", "@ c #C7C7C7", "# c #C8C8C8", "$ c #EDEDE5", "% c #EDEDE6", "& c #EAEAEA", "* c #EBEBEB", "= c #ECECEC", "- c #EDEDED", "; c #EEEEEE", ": c #EFEFEF", "> c #F0F0F0", ", c #F1F1F1", "< c #F2F2F2", "1 c #FFFFFF", "2 c None", /* pixels */ "X 222", " 111111111111 22", " 1=&==&====>1 22", " 1&oooo#oo#>1 22", " 1&=&=====>>1 22", " 1=o#oo##o#>1 22", " 1&=====%==>1 22", " 1=oo#o>:%=>1 22", " 1====>=>:>>1 22", " 1=##o#####>1 22", " 1===>=>>>><1 22", " 1=o#####>><1 22", " 1===>>>>>>>1 22", " 111111111111 22", ". .22", "2222222222222222" }; /* XPM */ const char *shutdown_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 66 1", " c #272727", ". c #282828", "X c #2B2B2B", "o c #2D2D2D", "O c #515151", "+ c #555555", "@ c #5F5F5F", "# c #606060", "$ c #616161", "% c #656565", "& c #6C6C6C", "* c #6D6D6D", "= c #6F6F6F", "- c #7A7A7A", "; c #7D7D7D", ": c #808080", "> c #848484", ", c #858585", "< c #888A85", "1 c #8E8E8E", "2 c #8F8F8F", "3 c #A0A0A0", "4 c #A2A2A2", "5 c #A6A6A6", "6 c #A9A9A9", "7 c #ABABAB", "8 c #B3B3B3", "9 c #B9B9B9", "0 c #BBBBBB", "q c #BCBCBC", "w c #C1C1C1", "e c #C2C2C2", "r c #C3C3C3", "t c #C5C5C5", "y c #C7C7C7", "u c #C9C9C9", "i c #CCCCCC", "p c #D2D2D2", "a c #D4D4D4", "s c #D8D8D8", "d c #DEDEDE", "f c #DFDFDF", "g c #E0E0E0", "h c #E1E1E1", "j c #E2E2E2", "k c #E3E3E3", "l c #E4E4E4", "z c #E5E5E5", "x c #E6E6E6", "c c #E7E7E7", "v c #E8E8E8", "b c #E9E9E9", "n c #EAEAEA", "m c #EBEBEB", "M c #ECECEC", "N c #EDEDED", "B c #EEEEEE", "V c #EFEFEF", "C c #F0F0F0", "Z c #F1F1F1", "A c #F3F3F3", "S c #F4F4F4", "D c #F5F5F5", "F c #F6F6F6", "G c #F7F7F7", "H c None", /* pixels */ "H<<<<<<<<<<<<<>>>1AAAl<", "3rr9;addV<", " c None", /* pixels */ ">>>>>>>>>>>>>>>>", ">>>>>>OOO>>>>>>>", ">>>OO>O:O>OO>>>>", ">>O:=O%;%O=:O>>>", ">>O=;;;;;;;=O>>>", ">>>O;&o$o*;O>>>>", ">OO%;o.> +;%OO>>", ">O:;;$>>>$;;:O>>", ">OO%;@#>Xo;%OO>>", ">>>O:&@$o-;O>>>>", ">>O=;;;;;;;=O>>>", ">>O:=O%;%O=:O>>>", ">>>OO>O:O>OO>>>>", ">>>>>>OOO>>>>>>>", ">>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>" }; // --------------------------------------------------------------------- // End Tango icons // --------------------------------------------------------------------- // audio-card from gnome icon theme /* XPM */ const char *audio_card_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 102 2", " c #3A3E00", ". c #3A3F00", "X c #3B3F00", "o c #2F3536", "O c #303634", "+ c #303735", "@ c #303637", "# c #363D32", "$ c #323835", "% c #313836", "& c #333936", "* c #323937", "= c #343936", "- c #383E31", "; c #3B4000", ": c #3D4104", "> c #3E4206", ", c #657000", "< c #677300", "1 c #687400", "2 c #687502", "3 c #687505", "4 c #6B7704", "5 c #6B7901", "6 c #6C7900", "7 c #6C7801", "8 c #6D7A00", "9 c #6C7A02", "0 c #6F7D01", "q c #707E02", "w c #707E07", "e c #404630", "r c #3D5B50", "t c #38595E", "y c #38595F", "u c #395A5F", "i c #365761", "p c #405C4F", "a c #545650", "s c #545652", "d c #555753", "f c #565852", "g c #565853", "h c #565854", "j c #575955", "k c #585A56", "l c #5A5C58", "z c #5D5E5B", "x c #5E5F5C", "c c #426050", "v c #426251", "b c #646662", "n c #656663", "m c #666864", "M c #676965", "N c #696A67", "B c #696B67", "V c #6E6F6D", "C c #6E706C", "Z c #6F716D", "A c #758201", "S c #748202", "D c #798708", "F c #7F8839", "G c #A3B31A", "H c #A4B31A", "J c #A4B419", "K c #AABA1A", "L c #858E39", "P c #848D3B", "I c #878F3D", "U c #87903B", "Y c #8A9539", "T c #8C9638", "R c #919C38", "E c #949E39", "W c #959F3A", "Q c #959F3B", "! c #929D3C", "~ c #939E3C", "^ c #959F3D", "/ c #95A03C", "( c #96A03C", ") c #97A03C", "_ c #97A13C", "` c #97A23D", "' c #D8EB31", "] c #DBEF33", "[ c #DFF234", "{ c #E0F338", "} c #E4F839", "| c #E8FB38", " . c #EBFF39", ".. c #EFFF65", "X. c #B7B9B5", "o. c #C4C6C2", "O. c #C6C8C4", "+. c #C7C9C5", "@. c #C8CAC6", "#. c #D0D2CE", "$. c #D4D6D2", "%. c None", /* pixels */ "%.%.%.%.%.%.%.%.%.%.%.%.j k j %.", "%.%.%.%.%.%.%.%.%.%.%.d O.#.X.d ", "X a $.d d %.", " E W W W Q Q ( ( ( ^ f $.d %.%.", " ` e * * % % + # c v f $.d l x ", " ` + V Z Z Z C & y u f $.d o.d ", " ` + Z d d d N = 3 8 f $.d h g ", " _ + B M m n b $ p t f $.d %.%.", " ) - @ o o o o O r i f $.d k z ", " / A q 0 9 5 2 1 < , f $.d @.d ", " ~ K S J 6 H 7 G U I f $.d d h ", " ! { D ' 4 ] w [ P : a $.d %.%.", " T ..R } L | Y .F > s $.d %.%.", "; X X X X X X . . . . s +.d %.%.", "%.%.%.%.%.%.%.%.%.%.%.d d d %.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%." }; // help-about from gnome /* XPM */ const char *help_about_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 76 1", " c #C4A001", ". c #C5A101", "X c #C5A102", "o c #C6A202", "O c #C6A203", "+ c #C7A403", "@ c #C7A404", "# c #C7A405", "$ c #C7A406", "% c #C7A407", "& c #C7A507", "* c #C8A508", "= c #C9A70B", "- c #C9A80D", "; c #CAA80C", ": c #C9A810", "> c #CCAC12", ", c #CCAC14", "< c #CDAE1B", "1 c #CFB11C", "2 c #D0B11F", "3 c #CFB021", "4 c #D2B522", "5 c #D3B62C", "6 c #D2B62F", "7 c #F6E132", "8 c #F6E235", "9 c #F5E038", "0 c #F7E23A", "q c #F8E33C", "w c #F8E43E", "e c #D9C04A", "r c #E4CE4C", "t c #E4CE4F", "y c #E7D041", "u c #E7D247", "i c #EBD755", "p c #EBD756", "a c #ECD85A", "s c #F8E441", "d c #F9E644", "f c #F6E349", "g c #FBE74A", "h c #F9E74D", "j c #F7E75F", "k c #F8E75A", "l c #FBE95C", "z c #E9D668", "x c #EAD86C", "c c #F6E664", "v c #F6E667", "b c #F8E864", "n c #F8E865", "m c #F9E96B", "M c #FAEB71", "N c #F9EB73", "B c #F8EA7B", "V c #FAEC7C", "C c #F9EC7F", "Z c #EEDF83", "A c #EEDF85", "S c #F7E981", "D c #F8EC88", "F c #F9ED89", "G c #FAED8B", "H c #F8EB8F", "J c #F9EE9B", "K c #FBF097", "L c #FCF2A6", "P c #FCF3AA", "I c #FDF6BC", "U c #FCF7CF", "Y c #FDF8D1", "T c #FDF9DF", "R c #FEFCEE", "E c None", /* pixels */ "EEEEEEE.EEEEEEEE", "EEEEEE@e@EEEEEEE", "EEEEEE3TEEEEEEE", "EEEEEE&4&EEEEEEE", "EEEEEEE EEEEEEEE", "EEEEEEEEEEEEEEEE" }; // insert link icon from gnome /* XPM */ const char *insert_link_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 97 2", " c #2E3436", ". c #2F3536", "X c #363C3D", "o c #373D3E", "O c #464A48", "+ c #464B4C", "@ c #4F524F", "# c #545652", "$ c #555753", "% c #575955", "& c #585A56", "* c #595B57", "= c #5A5B57", "- c #5A5C58", "; c #5B5D58", ": c #5C5D59", "> c #62645F", ", c #656763", "< c #6B6D69", "1 c #6E6F6B", "2 c #6F716D", "3 c #71726F", "4 c #767773", "5 c #777875", "6 c #7C7E79", "7 c #7C7F79", "8 c #CF5F04", "9 c #D06106", "0 c #D86605", "q c #D86706", "w c #F47A03", "e c #F47A04", "r c #F47D0B", "t c #E97910", "y c #E97911", "u c #7E807D", "i c #EA9D4C", "p c #F4B15E", "a c #F5B364", "s c #FDC97D", "d c #838580", "f c #8A8C87", "g c #979B96", "h c #989B95", "j c #9FA19D", "k c #B3B4B0", "l c #B4B7B0", "z c #B7B7B1", "x c #B5B7B2", "c c #B5B8B2", "v c #BABDB6", "b c #BBBEB7", "n c #BBBEB8", "m c #BDBEBB", "M c #C0C0BC", "N c #C2C3BF", "B c #FBD7AA", "V c #FBD9AE", "C c #C4C6C0", "Z c #C5C7C1", "A c #CBCEC8", "S c #CCCEC9", "D c #D0D1CE", "F c #D1D3CE", "G c #D4D4D0", "H c #D6D7D6", "J c #D9DAD8", "K c #DBDCDB", "L c #DEDEDA", "P c #DFDFDD", "I c #FDE6C4", "U c #FEE9CA", "Y c #FEEACC", "T c #E0E0DC", "R c #E0E0DD", "E c #E2E3E2", "W c #E4E4E1", "Q c #E6E6E4", "! c #E7E8E6", "~ c #E9E9E6", "^ c #E8E9E8", "/ c #EDEDEB", "( c #EDEDEC", ") c #EDEEED", "_ c #EEEEEC", "` c #EFF0EE", "' c #F1F1F0", "] c #F3F3F1", "[ c #F3F3F2", "{ c #F4F5F4", "} c #F5F5F4", "| c #F6F6F5", " . c #F6F6F6", ".. c #F8F8F7", "X. c #F9F9F9", "o. c #FDFDFD", "O. c None", /* pixels */ "O.# # # # ; O.O.O.O.O.O.O.O.; # ", "O. .{ [ ` J u - O.O.O.O.- H ) o.", "O.v v v b C F < # $ $ # 5 / A n ", "O.# * $ * 7 b h 1 m m 1 x Z 6 % ", "O.O.& R Q 2 $ $ $ $ $ $ $ $ 3 K ", "O.O.: z L ] } ...X.| ' ( ^ ! E ", "O.O @ 4 M G T W ~ _ P D N k j f ", "O.S c d , = $ $ $ $ $ $ $ $ & > ", "O.v v v l g + X O.O.O.O.X + g l ", "O. . o O.O.O.O.O.O.O.O.o . ", "O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.", "O.O.O.O.O.w e r r r r r e w O.O.", "O.O.O.O.O.O.y V Y I U B t O.O.O.", "O.O.O.O.O.O.O.q a s p 0 O.O.O.O.", "O.O.O.O.O.O.O.O.9 i 9 O.O.O.O.O.", "O.O.O.O.O.O.O.O.O.8 O.O.O.O.O.O." }; // close icon from default gtk theme /* XPM */ const char *close_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 74 1", " c #5A5C58", ". c #5C5E5B", "X c #5C5F5B", "o c #5D5F5B", "O c #5E5F5B", "+ c #5E5F5C", "@ c #5D605A", "# c #5D605B", "$ c #5C615B", "% c #5F605A", "& c #5E615B", "* c #5E605C", "= c #5F605C", "- c #5E615C", "; c #5F615C", ": c #5E605D", "> c #5E615D", ", c #5F625C", "< c #5F625D", "1 c #5F615E", "2 c #5F625E", "3 c #60615B", "4 c #60625D", "5 c #60615E", "6 c #60625E", "7 c #61625E", "8 c #61645F", "9 c #7D807A", "0 c #7E817B", "q c #80827B", "w c #80837E", "e c #82847D", "r c #82857E", "t c #838680", "y c #848681", "u c #848781", "i c #868983", "p c #878983", "a c #868984", "s c #888A85", "d c #898C86", "f c #898D86", "g c #8A8C86", "h c #8A8D88", "j c #8D9089", "k c #8E908A", "l c #8E918B", "z c #8F928C", "x c #8F928D", "c c #91938E", "v c #92948F", "b c #949590", "n c #949691", "m c #959892", "M c #959992", "N c #969994", "B c #979B95", "V c #B1B4AC", "C c #B4B7AF", "Z c #B8BBB3", "A c #B9BCB4", "S c #BABDB5", "D c #BDC0B8", "F c #BDC1B9", "G c #BFC3BB", "H c #C1C4BC", "J c #C3C6BE", "K c #C3C7BF", "L c #C4C8C0", "P c #C5C9C1", "I c #CACEC6", "U c #CBCEC6", "Y c #CDD1C9", "T c None", /* pixels */ "TTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTT", "TT681TTTTTT ,5TT", "TT5Ll2TTTT=wZ:TT", "TT4fUx7TT4aDu;TT", "TTT3jYz<;dHs+TTT", "TTTT>kINmJh=TTTT", "TTTTT>BPKM*TTTTT", "TTTTT-vHGc+TTTTT", "TTTT-uFnbSr.TTTT", "TTT=eAg%#iCq$TTT", "TT:9Cp@TTXyV0;TT", "TT;Vp@TTTTOtVoTT", "TT44&TTTTTT&O4TT", "TTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTT" }; // enter key icon from KDE's crystal theme /* XPM */ const char *enter_key_icon[] = { /* columns rows colors chars-per-pixel */ "16 16 91 1", " c #5C5C5C", ". c #626262", "X c #666666", "o c #696969", "O c #6B6B6B", "+ c #6C6C6C", "@ c #6E6E6E", "# c #6F6F6F", "$ c #717171", "% c #737373", "& c #747474", "* c #838383", "= c #8D8D8D", "- c #92928F", "; c #939393", ": c #A3A3A2", "> c #A7A7A5", ", c #A7A7A6", "< c #A7A7A7", "1 c #A9A9A8", "2 c #A9A9A9", "3 c #AEAEAD", "4 c #B0B0AE", "5 c #B1B1AF", "6 c #B2B2B0", "7 c #B4B4B2", "8 c #B5B5B3", "9 c #B7B7B6", "0 c #B7B7B7", "q c #B9B9B7", "w c #BABAB9", "e c #BBBBBB", "r c #BCBCBB", "t c #BEBEBC", "y c #C2C2C1", "u c #C4C4C0", "i c #C4C4C4", "p c #C5C5C5", "a c #C6C6C4", "s c #C7C7C7", "d c #C9C9C6", "f c #CBCBC8", "g c #CACACA", "h c #CFCFCD", "j c #D0D0CE", "k c #D1D1CF", "l c #D0D0D0", "z c #D1D1D1", "x c #D2D2D0", "c c #D3D3D1", "v c #D2D2D2", "b c #D3D3D2", "n c #D3D3D3", "m c #D4D4D3", "M c #D4D4D4", "N c #D5D5D5", "B c #D7D7D6", "V c #D7D7D7", "C c #D8D8D8", "Z c #D9D9D8", "A c #D9D9D9", "S c #DADAD9", "D c #DADADA", "F c #DCDCDC", "G c #DDDDDD", "H c #DEDEDE", "J c #DFDFDF", "K c #E0E0E0", "L c #E2E2E2", "P c #E3E3E3", "I c #E4E4E4", "U c #E5E5E5", "Y c #E7E7E7", "T c #E8E8E8", "R c #E9E9E9", "E c #EBEBEB", "W c #ECECEC", "Q c #EDEDED", "! c #EFEFEF", "~ c #F0F0F0", "^ c #F3F3F3", "/ c #F4F4F4", "( c #F5F5F5", ") c #F6F6F6", "_ c #F7F7F7", "` c #F8F8F8", "' c #F9F9F9", "] c #FAFAFA", "[ c #FCFCFC", "{ c #FDFDFD", "} c None", /* pixels */ "}}}}}}}}}}}}}}}}", "}}}}}}fSFFFFFSd}", "}}}}}}c{[[[[['a}", "}}}}}}x]_`'`_`t}", "}}}}}}x)^(p`^/r}", "}}}}}}k^!!%'!!w}", "}}}}}}j~WQ#`EWq}", "}}}}}}yWTR@(TR9}", "}Z)))_/YIU+~PI8}", "}BLHKH,,,,,,,,,:-}", "}}}}}}}}}}}}}}}}" }; // question icon from default gtk theme /* XPM */ const char *dialog_question_48_icon[] = { "48 48 215 2", " c None", ". c #3768A6", "+ c #3968A7", "@ c #3A6AA7", "# c #386BA6", "$ c #3968A5", "% c #A7BEDA", "& c #F4F7FB", "* c #F4F8FB", "= c #A5BDD9", "- c #3769A6", "; c #3869A6", "> c #BBCEE4", ", c #FFFFFF", "' c #FEFEFF", ") c #BBCDE3", "! c #F9FBFD", "~ c #98B9DC", "{ c #99B9DC", "] c #729FCF", "^ c #97B8DB", "/ c #BACDE3", "( c #719ECE", "_ c #709DCD", ": c #709DCE", "< c #6F9CCD", "[ c #6F9CCC", "} c #95B6DA", "| c #B9CDE3", "1 c #6E9CCC", "2 c #6E9BCC", "3 c #6D9BCC", "4 c #6D9ACB", "5 c #94B5D9", "6 c #B9CCE3", "7 c #78A2D0", "8 c #709CCC", "9 c #6C9ACB", "0 c #6C99CA", "a c #6B99CA", "b c #93B4D8", "c c #B9CCE2", "d c #739FCE", "e c #A1BEDE", "f c #C9DAEC", "g c #EBF1F8", "h c #FAFCFD", "i c #E7EEF6", "j c #B7CDE6", "k c #759FCE", "l c #6B98CA", "m c #6A98C9", "n c #6A97C9", "o c #92B3D8", "p c #B9CBE2", "q c #80A8D3", "r c #E8EFF7", "s c #6997C9", "t c #6996C8", "u c #6896C8", "v c #91B2D7", "w c #B8CBE2", "x c #7FA7D2", "y c #FDFDFE", "z c #E9F0F7", "A c #EFF4F9", "B c #BBD0E7", "C c #6895C8", "D c #6795C7", "E c #6794C7", "F c #8FB1D6", "G c #B8CBE1", "H c #7EA6D1", "I c #F2F6FA", "J c #ADC6E1", "K c #749FCD", "L c #6A98CA", "M c #AFC7E2", "N c #E1EAF4", "O c #6694C7", "P c #6694C6", "Q c #6593C6", "R c #8EAFD5", "S c #B7CBE1", "T c #96B7DA", "U c #6C99CB", "V c #709CCB", "W c #719DCC", "X c #7FA5D0", "Y c #6693C6", "Z c #6592C6", "` c #6492C5", " . c #6391C5", ".. c #8DAFD4", "+. c #B0C7E2", "@. c #CBDBEC", "#. c #6391C4", "$. c #6290C4", "%. c #8CADD3", "&. c #B7CAE1", "*. c #3768A5", "=. c #396AA7", "-. c #A4BCD8", ";. c #96B6D8", ">. c #FDFEFE", ",. c #85A9D2", "'. c #6290C3", "). c #618FC3", "!. c #608EC3", "~. c #8BADD3", "{. c #A0B8D6", "]. c #3768A7", "^. c #FEFFFF", "/. c #99B8DA", "(. c #A4BFDD", "_. c #608EC2", ":. c #5F8DC2", "<. c #5F8DC1", "[. c #8AABD2", "}. c #3868A6", "|. c #396AA6", "1. c #87AAD2", "2. c #FBFCFE", "3. c #A1BDDC", "4. c #5F8EC2", "5. c #5E8DC1", "6. c #5E8CC1", "7. c #89AAD1", "8. c #3767A6", "9. c #3969A6", "0. c #92B4D8", "a. c #D0DEEE", "b. c #B1C8E2", "c. c #5D8CC1", "d. c #5D8BC0", "e. c #87AAD1", "f. c #F9FAFD", "g. c #79A0CC", "h. c #5C8BC0", "i. c #87A9D0", "j. c #F9FAFC", "k. c #B6C9E0", "l. c #3767A5", "m. c #90B2D6", "n. c #6B97C7", "o. c #6C97C8", "p. c #6C97C7", "q. c #6C96C7", "r. c #5C8AC0", "s. c #5B8ABF", "t. c #87A8D0", "u. c #3668A4", "v. c #8FB0D6", "w. c #5C8ABF", "x. c #5B89BF", "y. c #86A8D0", "z. c #B6CAE1", "A. c #8DAFD5", "B. c #ECF1F8", "C. c #5A89BF", "D. c #5A89BE", "E. c #85A7CF", "F. c #F8FAFC", "G. c #B6CAE0", "H. c #BACDE2", "I. c #8BADD4", "J. c #F6F8FB", "K. c #5A88BE", "L. c #5988BE", "M. c #5987BD", "N. c #84A7CE", "O. c #89ABD3", "P. c #EBF1F7", "Q. c #5887BD", "R. c #84A6CE", "S. c #88ABD1", "T. c #5886BD", "U. c #5786BC", "V. c #83A6CE", "W. c #82A5CE", "X. c #3667A4", "Y. c #85A8D0", "Z. c #5785BC", "`. c #5685BC", " + c #82A4CD", ".+ c #B6C8E0", "++ c #3767A3", "@+ c #85A8CF", "#+ c #5685BB", "$+ c #5584BB", "%+ c #3667A3", "&+ c #B8CAE1", "*+ c #5684BB", "=+ c #81A4CC", "-+ c #B5C8E0", ";+ c #3566A2", ">+ c #82A5CD", ",+ c #5483BA", "'+ c #B7C9E0", ")+ c #81A4CD", "!+ c #5382BA", "~+ c #80A3CB", "{+ c #B5C8DF", "]+ c #80A3CC", "^+ c #5382B9", "/+ c #7FA2CB", "(+ c #B4C8DF", "_+ c #9DB5D3", ":+ c #F1F5F9", "<+ c #F0F4F9", "[+ c #9CB4D3", "}+ c #3565A1", "|+ c #305D95", "1+ c #3666A3", "2+ c #305D96", " ", " ", " . + @ # ", " $ % & * = - ", " ; > , ' ' , ) ; ", " ; > , ! ~ { ! , ) ; ", " ; > , ! ~ ] ] ~ ! , ) ; ", " ; > , ! ~ ] ] ] ] ~ ! , ) ; ", " ; > , ! ~ ] ] ] ] ] ] ~ ! , ) ; ", " ; > , ! ~ ] ] ] ] ] ] ] ] ~ ! , ) - ", " ; > , ! ~ ] ] ] ] ] ] ] ] ] ] ^ ! , / - ", " ; > , ! ~ ] ] ] ] ] ] ] ] ] ( ( _ ^ ! , / - ", " ; > , ! ~ ] ] ] ] ] ] ] ( ( : _ < < [ } ! , | - ", " ; > , ! ~ ] ] ] ] ] ] ( ( _ _ < < 1 2 3 4 5 ! , 6 - ", " ; > , ! ~ ] ] ] ] ( ( : _ < 7 8 2 2 4 4 9 0 a b ! , c - ", " ; > , ! ~ ] ] ] ( ( d e f g h , ' i j k a a l m n o ! , p - ", " ; > , ! ~ ] ( ( : _ < q , , , , , , , , r k n n s t u v ! , w - ", " ; > , ! ~ ( ( _ _ < < 1 x , , y z A , , , , B t u u C D E F ! , G - ", " ; > , ! ^ : _ < < [ 2 2 4 H I J K l L M , , , N C D D O P Q Q R ! , S - ", " ; > , ! T _ < < 1 2 3 4 9 U V W l m n s X , , , i E O Y Q Z ` ` ...! , S - ", " $ > , ! } < [ 2 2 4 4 9 0 a l L n n s t u +., , , @.Q Q Z ` ` .#.$.$.%.! , &.*. ", " =.-., ! } 1 2 3 4 9 U 0 a l m n s t u u C ;.>., , >.,.` ` .#.$.$.'.).).!.~.! , {.]. ", " . & ^.} 2 4 4 9 0 a l L n n s t u C D D /.y , , ^.(.` .#.$.$.).).)._._.:.<.[.' I }. ", " |.& ^.5 9 U 0 a l m n s t u u C D E O 1.2., , ^.3.#.$.$.'.).).!._.4.:.5.6.6.7.' I 8. ", " 9.-., ! 0.l L n n s t u C D D O P Q Q a., , , b.$.$.).).)._._.:.<.6.6.c.d.e.f., {.8. ", " *./ , ! v s t u u C D E O Y Q Q ` ` r , , , g.).).!._.4.:.5.6.6.d.d.h.i.j., k.l. ", " - ) , ! m.C D D O P Q Q Z ` ` .#.n.o.p.q.'._._.:.<.6.6.c.d.h.r.s.t.j., k.u. ", " - ) , ! v.O Y Q Q ` ` .#.$.$.'.).).!._.4.:.5.6.6.d.d.h.w.s.x.y.j., z.u. ", " - / , ! A.Z ` ` .#.$.$.'.).).B.& & & 6.6.c.d.h.r.s.x.C.D.E.F., G.u. ", " - H., ! I.#.$.$.'.).).!._.4.J., , , d.d.h.w.s.x.C.D.K.E.F., k.u. ", " - c , ! ~.'.).)._._.:.<.6.J., , , r.s.x.x.D.K.L.M.N.F., k.u. ", " - c , ! O._.4.:.5.6.6.d.P.& & & x.C.D.K.L.M.Q.R.F., k.u. ", " - p , ! S.5.6.c.d.h.r.s.x.x.D.K.L.M.Q.T.U.V.F., k.u. ", " l.w , f.i.d.h.w.s.x.C.D.K.L.M.Q.T.U.U.W.F., k.X. ", " l.G , f.Y.x.x.D.K.L.M.Q.T.U.U.Z.`. +F., .+X. ", " ++G , j.@+K.L.M.Q.T.U.U.`.#+$+ +F., .+%+ ", " %+&+, F.V.T.U.U.Z.`.*+$+$+=+F., -+%+ ", " ;+&., F.>+`.#+$+$+,+,+=+F., -+;+ ", " ;+'+, F.)+$+,+,+!+~+F., {+;+ ", " ;+k., F.]+!+^+/+F., {+;+ ", " ;+k., F./+~+F., (+;+ ", " %+k., ^.^., (+%+ ", " ;+_+:+<+[+}+ ", " |+}+1+2+ ", " ", " ", " ", " " }; /* XPM */ const char *clear_sq_icon[] = { "16 16 1 1", " c None", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " }; const char *clear_row_icon[] = { "16 1 1 1", " c None", " " }; // The lightning bolt icons are based on gmfsk's rx.xpm and tx.xpm /* XPM */ const char *rx1_icon[] = { "16 16 4 1", " c None", ". c #0F1F01", "+ c #4E9A06", "@ c #888A85", " ", " ......... ", " .++++++.@ ", " .++++++.@ ", " .+++++.@ ", " .+++++.@ ", " .++++..... ", " .++++++++.@ ", " .....+++.@ ", " @@.+++.@ ", " .++.@ ", " .++.@ ", " .+.@ ", " .+.@ ", " ..@ ", " " }; /* XPM */ const char *tx1_icon[] = { "16 16 4 1", " c None", ". c #210000", "+ c #A40000", "@ c #888A85", " ", " ......... ", " .++++++.@ ", " .++++++.@ ", " .+++++.@ ", " .+++++.@ ", " .++++..... ", " .++++++++.@ ", " .....+++.@ ", " @@.+++.@ ", " .++.@ ", " .++.@ ", " .+.@ ", " .+.@ ", " ..@ ", " " }; /* XPM */ const char *rx2_icon[] = { "16 16 3 1", " c None", ". c #0F1F01", "+ c #4E9A06", " ", " ......... ", " .++++++. ", " .++++++. ", " .+++++. ", " .+++++. ", " .++++..... ", " .++++++++. ", " .....+++. ", " .+++. ", " .++. ", " .++. ", " .+. ", " .+. ", " .. ", " " }; /* XPM */ const char *tx2_icon[] = { "16 16 3 1", " c None", ". c #210000", "+ c #A40000", " ", " ......... ", " .++++++. ", " .++++++. ", " .+++++. ", " .+++++. ", " .++++..... ", " .++++++++. ", " .....+++. ", " .+++. ", " .++. ", " .++. ", " .+. ", " .+. ", " .. ", " " }; /* XPM */ const char *rx_icon[] = { "16 16 38 1", " c None", ". c #0F1F01", "+ c #64B517", "@ c #62B315", "# c #61B014", "$ c #5EAE12", "% c #5CAC11", "& c #5AA90F", "* c #68BA1B", "= c #66B719", "- c #65B517", "; c #63B315", "> c #60B014", ", c #5EAD13", "' c #6ABD1C", ") c #69BA1A", "! c #66B718", "~ c #64B418", "{ c #6FC11F", "] c #6CBF1E", "^ c #6ABC1C", "/ c #70C421", "( c #6CBE1E", "_ c #6BBC1C", ": c #75C824", "< c #72C622", "[ c #6EC11F", "} c #6CBE1D", "| c #67B819", "1 c #6DBF1E", "2 c #73C622", "3 c #70C321", "4 c #74C924", "5 c #72C522", "6 c #79CD27", "7 c #76CA26", "8 c #7ACF28", "9 c #7FD42B", " ", " ......... ", " .+@#$%&. ", " .*=-;>,. ", " .')!~@. ", " .{]^)=. ", " ./{(_..... ", " .: c #B90C0B", ", c #C81313", "' c #C10F10", ") c #CC1617", "! c #CA1515", "~ c #C71313", "{ c #CF1818", "] c #CC1616", "^ c #D41A1A", "/ c #D11819", "( c #CF1718", "_ c #C71414", ": c #CA1514", "< c #C81413", "[ c #D21919", "} c #CF1817", "| c #CD1616", "1 c #D11818", "2 c #D81D1D", "3 c #D61B1B", "4 c #DB1E1E", "5 c #E02121", " ", " ......... ", " .+@#$%&. ", " .*=-@;>. ", " .,*='@. ", " .)!~*=. ", " .{]!,..... ", " .^/(]!_*=. ", " .....]:<. ", " .[}|. ", " .^1. ", " .23. ", " .4. ", " .5. ", " .. ", " "}; // pskreporter.info "favicon" /* XPM */ const char *pskr_icon[] = { "16 16 3 1", " c None", ". c #FF0000", "+ c #FFFF00", " .. ", " ... ", " ..... ", " .....+.. ", ". ...++++... ", ".. ..+++++. .. ", "....++++++..+. ", "..+++++++++++.. ", "..+++++++.++++. ", "....+++++..++.. ", ".. ..+++++.... ", ". ..+++++.. ", " ...+... ", " .... ", " .. ", " . "}; /* XPM */ const char *fldigi_icon[] = { "48 48 215 2", " c None", ". c #000000", "+ c #BFBFBF", "@ c #050505", "# c #1A1A1A", "$ c #1F1F1F", "% c #C5C5C5", "& c #FEC1C1", "* c #FDC5C5", "= c #FEC2C2", "- c #FFBFBF", "; c #D5C4C4", "> c #0C0C0C", ", c #FE0303", "' c #FB0C0C", ") c #FD0606", "! c #FE0000", "~ c #4F0909", "{ c #D1BFBF", "] c #2F2F2F", "^ c #303030", "/ c #3C3C3C", "( c #838383", "_ c #C7C7C7", ": c #D9D9D9", "< c #D7D7D7", "[ c #C2C2C2", "} c #C4C4C4", "| c #C9C9C9", "1 c #9F9F9F", "2 c #DDDDDD", "3 c #DBDBDB", "4 c #CDCDCD", "5 c #8F8F8F", "6 c #414141", "7 c #343434", "8 c #313131", "9 c #010101", "0 c #292929", "a c #8A8A8A", "b c #A8A8A8", "c c #B6B6B6", "d c #CFCFCF", "e c #DEDEDE", "f c #DFDFDF", "g c #E5E5E5", "h c #E2E2E2", "i c #A0A0A0", "j c #7D7D7D", "k c #1D1D1D", "l c #767676", "m c #888888", "n c #9B9B9B", "o c #D3D3D3", "p c #C6C6C6", "q c #EBEBEB", "r c #DADADA", "s c #AAAAAA", "t c #858585", "u c #747474", "v c #232323", "w c #171717", "x c #818181", "y c #979797", "z c #AEAEAE", "A c #E4E4E4", "B c #D4D4D4", "C c #B5B5B5", "D c #E1E1E1", "E c #BABABA", "F c #9A9A9A", "G c #989898", "H c #030303", "I c #070707", "J c #242424", "K c #C1C1C1", "L c #E0E0E0", "M c #B2B2B2", "N c #363636", "O c #060606", "P c #020202", "Q c #929292", "R c #959595", "S c #C8C8C8", "T c #CECECE", "U c #B0B0B0", "V c #999999", "W c #040404", "X c #151515", "Y c #606060", "Z c #A2A2A2", "` c #CBCBCB", " . c #919191", ".. c #A4A4A4", "+. c #AFAFAF", "@. c #737373", "#. c #181818", "$. c #131313", "%. c #393939", "&. c #C3C3C3", "*. c #454545", "=. c #3A3A3A", "-. c #222222", ";. c #333333", ">. c #484848", ",. c #A1A1A1", "'. c #616161", "). c #0F0F0F", "!. c #C0C0C0", "~. c #808080", "{. c #404040", "]. c #121212", "^. c #191919", "/. c #BDBDBD", "(. c #7E7E7E", "_. c #3F3F3F", ":. c #161616", "<. c #090909", "[. c #212121", "}. c #777777", "|. c #BBBBBB", "1. c #3B3B3B", "2. c #5D5D5D", "3. c #A5A5A5", "4. c #727272", "5. c #272727", "6. c #101010", "7. c #9C9C9C", "8. c #B7B7B7", "9. c #B3B3B3", "0. c #080808", "a. c #262626", "b. c #ADADAD", "c. c #CCCCCC", "d. c #E9E9E9", "e. c #E8E8E8", "f. c #ACACAC", "g. c #2A2A2A", "h. c #323232", "i. c #DCDCDC", "j. c #D1D1D1", "k. c #E7E7E7", "l. c #D2D2D2", "m. c #0E0E0E", "n. c #0D0D0D", "o. c #4A4A4A", "p. c #8C8C8C", "q. c #B9B9B9", "r. c #7A7A7A", "s. c #525252", "t. c #373737", "u. c #7B7B7B", "v. c #E6E6E6", "w. c #A9A9A9", "x. c #6B6B6B", "y. c #141414", "z. c #757575", "A. c #D6D6D6", "B. c #E3E3E3", "C. c #6E6E6E", "D. c #0B0B0B", "E. c #1E1E1E", "F. c #EAEAEA", "G. c #B4B4B4", "H. c #D8D8D8", "I. c #9E9E9E", "J. c #444444", "K. c #ABABAB", "L. c #A6A6A6", "M. c #505050", "N. c #B1B1B1", "O. c #3E3E3E", "P. c #0A0A0A", "Q. c #878787", "R. c #EFEFEF", "S. c #8B8B8B", "T. c #4B4B4B", "U. c #4F4F4F", "V. c #CACACA", "W. c #EEEEEE", "X. c #434343", "Y. c #D5D5D5", "Z. c #7F7F7F", "`. c #5B5B5B", " + c #515151", ".+ c #868686", "++ c #8E8E8E", "@+ c #575757", "#+ c #707070", "$+ c #636363", "%+ c #B8B8B8", "&+ c #909090", "*+ c #252525", "=+ c #8D8D8D", "-+ c #969696", ";+ c #282828", ">+ c #A3A3A3", ",+ c #BCBCBC", "'+ c #A7A7A7", ")+ c #3D3D3D", "!+ c #2E2E2E", "~+ c #353535", "{+ c #D0D0D0", "]+ c #595959", "^+ c #BEBEBE", "/+ c #111111", "(+ c #5E5E5E", "_+ c #383838", ":+ c #939393", "<+ c #464646", "[+ c #2C2C2C", "}+ c #717171", "|+ c #898989", "1+ c #494949", "2+ c #555555", ". . . . . . . . + @ . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . ", ". . . . . . . . + # . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . ", ". . . . . . . . + $ . . . . . . . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . ", "% % % % % % % % % % % % % % % % % % % % % & * * * = - - - ; % % % % % % % % % % % % % % % % % % ", "> > > > > > > > > > > > > > > > > > > > > , ' ' ' ) ! ! ! ~ > > > > > > > > > > > > > > > > > > ", "+ + + + + + + + + + + + + + + + + + + + + - - - - - - - - { + + + + + + + + + + + + + + + + + + ", "] ] ] ] ] ] ] ] ] ] ] ] ] ] ^ ] ] ] / ( _ : < [ } | 1 2 3 4 5 6 ^ ] ] ] 7 8 ] ] ] ] ] ] ] ] ] ] ", ". . . . . . . . . . . . . . 9 . . . 0 a b c d e f g 2 h } i j 0 9 . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . k l m n o p 3 q h r s t u v . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . 9 w x y z : _ A B C D E F G 0 . . H 9 . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . I 9 . J t z % D K L d d r | M ( N 9 . O H . . . . . . . . . . . . ", ". . . . . . . . . . . . . . P > 9 . ] Q R S f D L T 4 e } U V 7 9 . H 9 . . . . . . . . . . . . ", ". . . . . P P . . . . . . 9 P W . . X Y Z e ` + .( ..d 3 +.@.#.. . . . O H . . . . . . . . . . ", ". . . . . @ @ . . . . . . W P . . . P $.%.&.*.=.-.k ;.>.,.'.X @ . . . . ).O . . . . . . . . . . ", ". . . . . @ @ . . . . . . P 9 . . . . 9 . !.P . . . . . ~.{.. . . . . . ].I . . . . . . . . . . ", ". . . . . O O . . . . . . . . . . . P O ^./.$.H H H H W (._.P . . . . . :.<.. . . . . . . . . . ", ". . . . . H H . . . . . . . . . . . O [.}.|.Y 1.6 6 1.2.3.4.5.P . . . . 6.I . . . . . . . . . . ", ". . . . . . . . . . . . . . 9 9 . . ).u } A 4 7.8.9.7.: D d ~.W . . . 9 H 9 . . . . . . . . . . ", ". . . . . . . . . . . . . . H 0.. . a.b.&.c.d.o D L L e._ + f.g.9 . 0.@ . . . . . . . . . . . . ", ". . . . . . . . . . . . . . 9 0.9 . h.F c ` i.j.A e.k.2 l.C Q / 9 9 m.@ . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . n.P . o.p.f.% q.A g e.q e e Z r.s.@ @ m.P . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . 9 . . t.u.+ v.B i.Z w.: L d.|.x.7 O 9 P . I 9 . . . . . . . . . . ", ". . . . . . . . . . . . . H O @ . . y.z.c.v.A.+ b b ,.B.e.[ C.D.9 . . 9 <.9 . . . . . . . . . . ", ". . . . . . . . . . . . . H D.n.. . E.,.o B.e.A.!.z ..F.L 3 Z [.9 . W H . . . . . . . . . . . . ", ". . . . . . . . . . . . . . P n.9 . 1.c G.H.g F.k.g e.A ` 9.I.J.W . O W . . . . . . . . . . . . ", ". . . . . . . . . . . . . . W m.. W t.K.1 L.i.2 h i.v.D ..1 +.^ O 9 0.D.. . . . . . . . . . . . ", ". . . . . . . . . . . . . . H O P > M.5 t p.< g g D d.i.1 Q N.O.O @ ).D.. . . . . . . . . . . . ", ". . . . . . . . . . . . . . 9 P.H W o.Q.C p l.v.q R.i.i.d 1 S.T.I 9 P . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . O H . U.t +.l.V.V.e.W.k.r } S }.X.<.P W . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . 9 . 1.x U g 2 Y.g g g D 3 l.Z.v H . 9 . D.H . . . . . . . . . . ", ". . . . . 9 9 . . . . . . 9 9 . . . O -.> 4 @.C.`. +C.}.!..+W 0.. . . . w <.. . . . . . . . . . ", ". . . . . W W . . . . . . P 9 . . . . P 9 % y.<.<.0.I m.++@+@ . . . . . :.<.. . . . . . . . . . ", ". . . . . 9 9 . . . . . . H 9 . . . O t.S.f ,.#+j u.$+n c.z +I 9 . . . > @ . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . X ( | H.v.%+D 4 &+v.` d n *+W . 9 9 9 . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . y.=+G.G.h [ F.d.j.A b +.-+;+P . 9 . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . H . . ] >+C U L B.k.e.h k.s b i *.O . 9 W . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . D.P . %.M -+,+o d.i.A q 2 /.3.s +0.W n.0.. . . . . . . . . . . . ", ". . . . . . . . . . . . . . H @ 9 . ] '+c V.L e.A 2 D B.S C i )+O 9 H 9 . . . . . . . . . . . . ", ". . . . . . . . . . . . . . O O . . !+f._ l.e.d.g 2 D e.S &.K.s.P.. . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . P . 9 ~+f.E {+h d.e.g g L % !.R ]+D.9 P . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . O 9 O h.7.9.l.v.k.L B T 2 T ^+3.J.0.. 9 9 . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . /+I D.X.Q L.e g q v.B.v.D B &.i (+P.W P.9 . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . D.I O _+b /.A.2 d.v.F.d.A : %+L.T.0.O /+H . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . m.P . ;.Q + 3 f A h F.q d : } :+<+W H m.W . . . . . . . . . . . . ", ". . . . . . . . . . . . . H 9 I 9 . [+a p v.g k.o % e i.B.j.p.J.O . H 9 W P . . . . . . . . . . ", ". . . . . . . . . . . . . I H . . . O 5.}+o |+t 1+X.C..+,+p.8 ).9 . . . y.0.. . . . . . . . . . ", ". . . . . 9 9 . . . . . . P 9 . . . . . . p X D.9 P O <.~.2+. . . . . . :.<.. . . . . . . . . . ", ". . . . . @ @ . . . . . . . . . . . . . . &.I . . . . . ~.T.. . . . . . #.P.. . . . . . . . . . "}; /* XPM */ const char *flarq_icon[] = { /* columns rows colors chars-per-pixel */ "48 35 924 2", " c None", ". c #5B1E0E", "+ c #7F381B", "@ c #A7624B", "# c #A8624E", "$ c #652012", "% c #90555F", "& c #AA7A86", "* c #D4B5BE", "= c #5E231C", "- c #540900", "; c #AC5D55", "> c #B4644F", ", c #CF7F58", "' c #FCAD85", ") c #FBB18F", "! c #BA7057", "~ c #965140", "{ c #4F1509", "] c #3B1314", "^ c #45151B", "/ c #895156", "( c #AB8687", "_ c #D7C6C1", ": c #FFFFFD", "< c #FFFFFE", "[ c #A58088", "} c #945D68", "| c #642D34", "1 c #AC6352", "2 c #A45C49", "3 c #A35B46", "4 c #CC8C74", "5 c #F4B8A0", "6 c #FAC5A8", "7 c #FFD4B3", "8 c #FFD8B8", "9 c #FFDCBD", "0 c #FFCFAC", "a c #E7A380", "b c #A2563C", "c c #984D37", "d c #A2787A", "e c #997474", "f c #AA8B91", "g c #D1C0C6", "h c #CAB3BD", "i c #FBE6F1", "j c #F9FFFF", "k c #F8FAFA", "l c #FEFFFF", "m c #F3F2EF", "n c #E9D7D9", "o c #AC9092", "p c #AC8C8D", "q c #926A6E", "r c #9A737B", "s c #9B747C", "t c #9E573C", "u c #98543D", "v c #9A5F47", "w c #BF8469", "x c #E9AE90", "y c #FFCAA8", "z c #FFD9B6", "A c #FFDFBA", "B c #FDE1BA", "C c #FDDEB8", "D c #FEDBBB", "E c #FBDBC3", "F c #F8DBC5", "G c #FFDCC3", "H c #FFD1AF", "I c #FBB891", "J c #E79B74", "K c #9A4E30", "L c #9B5644", "M c #7D4F54", "N c #D0BCBE", "O c #F5EDE7", "P c #FCF4EE", "Q c #FFFAFC", "R c #FFFFFF", "S c #C7BDC6", "T c #C4B0BD", "U c #F4F3F8", "V c #FDFCFF", "W c #FFFDFF", "X c #F7FFFF", "Y c #DEDCDC", "Z c #E6E1E1", "` c #FFFAF9", " . c #FFF3F5", ".. c #FFF4F7", "+. c #E2D9DA", "@. c #C1AEB5", "#. c #C5A3AF", "$. c #7B5057", "%. c #7D2F24", "&. c #C87559", "*. c #EA9464", "=. c #FFA873", "-. c #FFB886", ";. c #FFC193", ">. c #FBBD92", ",. c #FBBE92", "'. c #F9B98A", "). c #FAB784", "!. c #F8AE77", "~. c #F9AC76", "{. c #F3A97B", "]. c #F3BB97", "^. c #FDD7BD", "/. c #FEDCC3", "(. c #FFDBB4", "_. c #FED2A6", ":. c #FEBF94", "<. c #E89574", "[. c #D07355", "}. c #C06F4F", "|. c #C09581", "1. c #F0F1E9", "2. c #E8FBF4", "3. c #EEF9F3", "4. c #FDFDFE", "5. c #FDF8FE", "6. c #EFE7ED", "7. c #A6969F", "8. c #F2E9EF", "9. c #F7F9F9", "0. c #FEFDFF", "a. c #B2A3AC", "b. c #CBBFC7", "c. c #FCFBFE", "d. c #F9F6F8", "e. c #F5F8F7", "f. c #F6FFFF", "g. c #69302D", "h. c #5D0100", "i. c #A0402C", "j. c #CC7D59", "k. c #BF6F4E", "l. c #C16645", "m. c #F6996A", "n. c #FCA264", "o. c #F8995F", "p. c #F3925E", "q. c #F29968", "r. c #F29F71", "s. c #E79469", "t. c #C26640", "u. c #CF6A43", "v. c #FD9366", "w. c #FF9B68", "x. c #F99B63", "y. c #F19F6E", "z. c #EEAB80", "A. c #F8C59B", "B. c #FBD3AB", "C. c #FCD2AA", "D. c #FCD9B1", "E. c #F8D1AA", "F. c #F9C596", "G. c #FFB371", "H. c #FEAC6B", "I. c #D69B78", "J. c #EAD5D1", "K. c #ECF6FA", "L. c #F1FAFB", "M. c #FFFBFF", "N. c #FDF4FB", "O. c #FDFAFB", "P. c #D3CACE", "Q. c #D8C7CE", "R. c #F6FAF8", "S. c #FEFCFF", "T. c #C4B4C0", "U. c #D3C8D3", "V. c #FAFBFF", "W. c #FBFBFF", "X. c #FBFDFF", "Y. c #F7FEFF", "Z. c #F8DEDA", "`. c #B76C57", " + c #D76E4E", ".+ c #F89463", "++ c #F9A36A", "@+ c #FFB783", "#+ c #F5A27A", "$+ c #D0744E", "%+ c #EB9060", "&+ c #E68655", "*+ c #EA8855", "=+ c #F1935B", "-+ c #F0975D", ";+ c #D27B43", ">+ c #E18450", ",+ c #E98B5A", "'+ c #DD7C50", ")+ c #D07242", "!+ c #F9A06A", "~+ c #FFA771", "{+ c #F6A26B", "]+ c #EE9D67", "^+ c #EEA26D", "/+ c #F2AA77", "(+ c #ECA776", "_+ c #EDAC7B", ":+ c #EEB17D", "<+ c #F1A55D", "[+ c #FFA45C", "}+ c #DC855E", "|+ c #D9A3A2", "1+ c #F5F0FC", "2+ c #E9F7FA", "3+ c #F6FDFE", "4+ c #FDFBFE", "5+ c #F8F9F9", "6+ c #D1CFD0", "7+ c #CCB9C0", "8+ c #F9FAF9", "9+ c #FBFAFC", "0+ c #F7F0F5", "a+ c #D7C6D1", "b+ c #E7E0EB", "c+ c #EAF4FB", "d+ c #F1F9FD", "e+ c #F9FEFF", "f+ c #F2FCFB", "g+ c #F6F5F5", "h+ c #CA9E8E", "i+ c #F4A27A", "j+ c #FAA77A", "k+ c #F6B280", "l+ c #F5C896", "m+ c #FED8AD", "n+ c #FFCFAB", "o+ c #FFCCA8", "p+ c #F8C39B", "q+ c #F5BC9C", "r+ c #F2B48F", "s+ c #ECA878", "t+ c #F3A86C", "u+ c #FCAA68", "v+ c #FAA664", "w+ c #F9A76A", "x+ c #EC9B65", "y+ c #D38048", "z+ c #E69056", "A+ c #E0874E", "B+ c #FAA26B", "C+ c #FAA470", "D+ c #F5A06F", "E+ c #F59E6A", "F+ c #FA9C62", "G+ c #F99A5D", "H+ c #F49E6C", "I+ c #F89E63", "J+ c #FF9D5E", "K+ c #ED8F64", "L+ c #B67466", "M+ c #F5EBF0", "N+ c #E4F6F9", "O+ c #EAFCFA", "P+ c #FDFFFF", "Q+ c #F5F8F8", "R+ c #E6E6E7", "S+ c #BEAAB2", "T+ c #E9E2E6", "U+ c #FCF9FB", "V+ c #DFCFD2", "W+ c #C4AEB7", "X+ c #FAF0F9", "Y+ c #EAF0F6", "Z+ c #F3F8FC", "`+ c #FBFEFF", " @ c #F8F9F8", ".@ c #EADFDD", "+@ c #B47A60", "@@ c #E99560", "#@ c #F3BB8E", "$@ c #FDD8B6", "%@ c #FFDDC1", "&@ c #FDCFB2", "*@ c #FECEAD", "=@ c #FBD0A7", "-@ c #F7D3A7", ";@ c #FAD1AA", ">@ c #F9CAA1", ",@ c #F8C392", "'@ c #FAB179", ")@ c #F9A468", "!@ c #F9A166", "~@ c #F69F67", "{@ c #F9A470", "]@ c #FDA56E", "^@ c #F69A5A", "/@ c #D37536", "(@ c #D1753D", "_@ c #EF9868", ":@ c #F8A67A", "<@ c #F39F71", "[@ c #FB9E68", "}@ c #FF9D60", "|@ c #FA9C65", "1@ c #FAA06B", "2@ c #FA9C63", "3@ c #FDA26C", "4@ c #D5926E", "5@ c #F2DFDA", "6@ c #F0F3FD", "7@ c #EDF3F8", "8@ c #FEFCFC", "9@ c #F9FAFA", "0@ c #F3F4F6", "a@ c #A2929B", "b@ c #C0B1BA", "c@ c #C4B0B0", "d@ c #AC9398", "e@ c #FEF1F8", "f@ c #EEF2F7", "g@ c #F2F3F8", "h@ c #FEF9FB", "i@ c #FBF2F0", "j@ c #EFD9D8", "k@ c #E09D81", "l@ c #F0A268", "m@ c #F9CCA1", "n@ c #FDD3B7", "o@ c #F2B094", "p@ c #F3A377", "q@ c #F5A66E", "r@ c #F4A873", "s@ c #F3A476", "t@ c #F4A66D", "u@ c #F6A367", "v@ c #F9A269", "w@ c #FBA169", "x@ c #FD9F69", "y@ c #FC9F69", "z@ c #FC9F68", "A@ c #F99F65", "B@ c #F4A471", "C@ c #F9B385", "D@ c #F6A36E", "E@ c #F19359", "F@ c #D1743D", "G@ c #E3905E", "H@ c #F5A370", "I@ c #F59F69", "J@ c #FAA062", "K@ c #FBA05E", "L@ c #F8A26B", "M@ c #F9A46F", "N@ c #FAA160", "O@ c #EA9C62", "P@ c #C3998A", "Q@ c #F7EBFA", "R@ c #EEEAF8", "S@ c #F6F4F6", "T@ c #FCFEFF", "U@ c #F4F4F7", "V@ c #E4DCE3", "W@ c #D4C1CD", "X@ c #F2F5FA", "Y@ c #AEA19F", "Z@ c #C2B0B5", "`@ c #F9F8FC", " # c #E5F2F8", ".# c #EAF5FB", "+# c #F0F5F5", "@# c #F9F7F7", "## c #D3B3A9", "$# c #DF916B", "%# c #FAA76E", "&# c #F3B787", "*# c #F0AE84", "=# c #EE9D6B", "-# c #F6A15D", ";# c #F7A559", "># c #F9A160", ",# c #FE9B68", "'# c #FD9D67", ")# c #FC9F67", "!# c #FA9F69", "~# c #F9A06C", "{# c #F69F6A", "]# c #F5A067", "^# c #F9A464", "/# c #F5A35C", "(# c #E9A779", "_# c #F8D5C1", ":# c #FFCEAA", "<# c #FAB079", "[# c #E1884B", "}# c #CD713A", "|# c #F39961", "1# c #FAA56C", "2# c #F8A668", "3# c #FFA864", "4# c #EF9965", "5# c #E59462", "6# c #FBA360", "7# c #F49958", "8# c #BE8469", "9# c #E7DAE0", "0# c #EFF2FB", "a# c #EBF0F3", "b# c #FBFEFE", "c# c #F6F6FA", "d# c #FAF3FA", "e# c #B7A0AF", "f# c #C4C0C8", "g# c #D4CECD", "h# c #DED5DD", "i# c #EEF5FC", "j# c #E4F0FD", "k# c #E6F2FC", "l# c #EBF5FB", "m# c #EAE0E9", "n# c #B67A69", "o# c #ED8F5B", "p# c #FCA368", "q# c #F59E66", "r# c #F9A067", "s# c #F9A165", "t# c #F99F66", "u# c #FAA069", "v# c #FAA169", "w# c #FAA166", "x# c #F8A264", "y# c #F7A262", "z# c #F9A162", "A# c #F59E5E", "B# c #FCA464", "C# c #F0A172", "D# c #F8C7AA", "E# c #FFDFBE", "F# c #F7D7AF", "G# c #F7C497", "H# c #F19C6B", "I# c #DC7947", "J# c #E48552", "K# c #DD8553", "L# c #BF6033", "M# c #E28B60", "N# c #E99B6D", "O# c #F2A367", "P# c #FA9F60", "Q# c #E89874", "R# c #E2CBBF", "S# c #E9F6F7", "T# c #EAF1FA", "U# c #F6F6FB", "V# c #FAF9FC", "W# c #F9F1FA", "X# c #BBABB5", "Y# c #BDAEB7", "Z# c #DDCBCC", "`# c #FBF1F9", " $ c #EFEAF7", ".$ c #E9EFFC", "+$ c #EAF0FC", "@$ c #F1F6FE", "#$ c #E2CDCB", "$$ c #D28869", "%$ c #FFA26B", "&$ c #F99F64", "*$ c #FAA065", "=$ c #FAA167", "-$ c #FAA168", ";$ c #F9A066", ">$ c #F7A168", ",$ c #F7A167", "'$ c #F7A165", ")$ c #F9A163", "!$ c #FB9F63", "~$ c #FA9E65", "{$ c #F89D64", "]$ c #FEA667", "^$ c #F4B072", "/$ c #FBD2AB", "($ c #FBDFCB", "_$ c #F9DECA", ":$ c #FBCBAA", "<$ c #EFA579", "[$ c #D3764B", "}$ c #AE4621", "|$ c #EA865A", "1$ c #F8A674", "2$ c #F8A16F", "3$ c #FAA66A", "4$ c #E38A65", "5$ c #D5AFA0", "6$ c #F1FDFF", "7$ c #E9EFFF", "8$ c #EEEDFC", "9$ c #F5F4FD", "0$ c #F0EDF6", "a$ c #F5E9EF", "b$ c #C6AFB4", "c$ c #A28385", "d$ c #FFF7FE", "e$ c #F1E8F9", "f$ c #EBEFF9", "g$ c #EBEFFA", "h$ c #F0EFF8", "i$ c #D5B09E", "j$ c #ED9B6E", "k$ c #FDA168", "l$ c #F89F66", "m$ c #F89F65", "n$ c #F6A066", "o$ c #F5A166", "p$ c #F6A065", "q$ c #F8A065", "r$ c #F9A167", "s$ c #FCA06A", "t$ c #F99B68", "u$ c #DA7F51", "v$ c #E88B52", "w$ c #F9A15D", "x$ c #F1AF7D", "y$ c #F8D0B1", "z$ c #FBDCC7", "A$ c #FDDEC9", "B$ c #FED4B9", "C$ c #FBBC9A", "D$ c #E58C65", "E$ c #DB794C", "F$ c #F69F61", "G$ c #FF9F61", "H$ c #FD9D60", "I$ c #FAA163", "J$ c #F79C6E", "K$ c #DCA289", "L$ c #EAE3E3", "M$ c #ECF2FF", "N$ c #E7F0FB", "O$ c #E7F3FA", "P$ c #E7EFF2", "Q$ c #FEF7F9", "R$ c #B49DA0", "S$ c #C0A5A8", "T$ c #F7F6FB", "U$ c #E9EAFB", "V$ c #E9F0F8", "W$ c #E9F0FA", "X$ c #F5F1FA", "Y$ c #DBAD8E", "Z$ c #EF975E", "`$ c #FBA16A", " % c #F7A065", ".% c #F6A165", "+% c #F6A067", "@% c #F6A570", "#% c #F4A673", "$% c #EC9A6C", "%% c #D1794A", "&% c #E68752", "*% c #FDA26F", "=% c #F2A374", "-% c #F9C29B", ";% c #FFE0C1", ">% c #FDDDBC", ",% c #F4C29D", "'% c #E09266", ")% c #D67F46", "!% c #FB9E5C", "~% c #FF9D63", "{% c #FBA972", "]% c #CE805C", "^% c #C8A39D", "/% c #F2F5FD", "(% c #EAF1F4", "_% c #E6F2F3", ":% c #E6F5F4", "<% c #E7F1F1", "[% c #EAEDED", "}% c #E6E0E3", "|% c #E7F3F7", "1% c #DEF1FD", "2% c #E7F2FB", "3% c #EBF3FB", "4% c #E7D7DC", "5% c #D5916A", "6% c #FCA265", "7% c #F89E68", "8% c #F8A066", "9% c #F29F67", "0% c #EFA56E", "a% c #FBC490", "b% c #F6BC8A", "c% c #E9A26E", "d% c #D8834F", "e% c #E58456", "f% c #FF9B6E", "g% c #FAA16D", "h% c #EDB075", "i% c #F3C790", "j% c #FCD7AD", "k% c #FED4B6", "l% c #F6BB94", "m% c #CE8350", "n% c #D6854A", "o% c #FBA16F", "p% c #F39F6D", "q% c #F1A86D", "r% c #E89568", "s% c #D79F8D", "t% c #F4EDEE", "u% c #F0EEF8", "v% c #ECEEF6", "w% c #ECEFF9", "x% c #ECEDF7", "y% c #F1F0FC", "z% c #F0F4FA", "A% c #E6F2F5", "B% c #DCF5FD", "C% c #E3EBF7", "D% c #F9FBFF", "E% c #C19A96", "F% c #D57E55", "G% c #FDA366", "H% c #F99F67", "I% c #F99F63", "J% c #FA9F63", "K% c #F99E64", "L% c #F8A86F", "M% c #F1A66F", "N% c #F8B985", "O% c #FDD4A2", "P% c #F2BD89", "Q% c #F5A971", "R% c #E28955", "S% c #D97847", "T% c #F69962", "U% c #F4A66A", "V% c #E9A46A", "W% c #F2AA79", "X% c #F9AE84", "Y% c #F6AB7C", "Z% c #EA9B63", "`% c #E49159", " & c #FFA572", ".& c #FBA36B", "+& c #F8A363", "@& c #FFA66F", "#& c #CE7F5A", "$& c #E9CAC3", "%& c #F2F3FF", "&& c #EBEDFD", "*& c #F1EFFF", "=& c #F8F1FF", "-& c #FAEFFE", ";& c #FDF8FF", ">& c #FCF4F9", ",& c #F4F9FA", "'& c #F9F7FF", ")& c #FDE9EB", "!& c #D99781", "~& c #F59668", "{& c #F8A165", "]& c #F8A164", "^& c #F7A063", "/& c #F9A164", "(& c #FBA069", "_& c #D98350", ":& c #DA8954", "<& c #E79A68", "[& c #FAB887", "}& c #F6B181", "|& c #F5A46D", "1& c #F4A15F", "2& c #E6914E", "3& c #D37D41", "4& c #EA9569", "5& c #F8A078", "6& c #FC9E6C", "7& c #FE9D5C", "8& c #FF9F5B", "9& c #FFA46B", "0& c #E58B5F", "a& c #F09769", "b& c #F39562", "c& c #F09762", "d& c #EF9A6A", "e& c #D67F58", "f& c #BB8678", "g& c #F6F6FF", "h& c #F7F4FF", "i& c #EADFE9", "j& c #D8C4CE", "k& c #DABEC8", "l& c #E3C8DB", "m& c #E9CAD1", "n& c #ECD7D4", "o& c #EEDFE4", "p& c #B98787", "q& c #D9805B", "r& c #F9A266", "s& c #F6A360", "t& c #F79E64", "u& c #F6A466", "v& c #F6A465", "w& c #F9A065", "x& c #FD9E67", "y& c #DC7E4D", "z& c #C7693C", "A& c #ED9167", "B& c #F4976B", "C& c #FBA160", "D& c #FFAC67", "E& c #F49B60", "F& c #D6784A", "G& c #E5895F", "H& c #F09662", "I& c #FFA866", "J& c #FFAD6E", "K& c #E07F5D", "L& c #7B2B1B", "M& c #853D24", "N& c #963E27", "O& c #8D472B", "P& c #824730", "Q& c #843A2A", "R& c #712A23", "S& c #BA9092", "T& c #DABABA", "U& c #8B6E6B", "V& c #4D3232", "W& c #5D2D3D", "X& c #68353A", "Y& c #734744", "Z& c #6A4A4C", "`& c #663235", " * c #934833", ".* c #DF8766", "+* c #F99766", "@* c #FB9E61", "#* c #FFA66E", "$* c #FCA16D", "%* c #F99E69", "&* c #F7A169", "** c #F3A266", "=* c #F4A365", "-* c #FB9F68", ";* c #F6A16A", ">* c #F6A16B", ",* c #FCA06C", "'* c #FC9D69", ")* c #FF9D6B", "!* c #FF9E6C", "~* c #F69563", "{* c #D67949", "]* c #D47348", "^* c #F79567", "/* c #FA9F68", "(* c #F9A265", "_* c #FFA166", ":* c #FC9B65", "<* c #E98D5B", "[* c #C4683A", "}* c #BE6339", "|* c #B06D4E", "1* c #732F25", "2* c #64201E", "3* c #8B463B", "4* c #B6573A", "5* c #D06B39", "6* c #D37A42", "7* c #F4986B", "8* c #FC9C73", "9* c #F99F6C", "0* c #F4A766", "a* c #F1A561", "b* c #F49E63", "c* c #FB9E6B", "d* c #F7A069", "e* c #F9A16A", "f* c #FCA16C", "g* c #FE9F6C", "h* c #FFA06C", "i* c #FBA468", "j* c #F49D5F", "k* c #ED925B", "l* c #C86A3A", "m* c #DF8653", "n* c #FBA26F", "o* c #F9A369", "p* c #FFA673", "q* c #F6936D", "r* c #7C1705", "s* c #7C3625", "t* c #C76E51", "u* c #DE7B53", "v* c #CA693D", "w* c #BF633B", "x* c #E88C57", "y* c #E98E54", "z* c #F9A267", "A* c #FEA86F", "B* c #F4A167", "C* c #F6A362", "D* c #F19C5B", "E* c #DD8848", "F* c #E89255", "G* c #E68F53", "H* c #F49D63", "I* c #FEA76D", "J* c #FCA36A", "K* c #FAA466", "L* c #F29B5B", "M* c #EC8E5C", "N* c #DB8154", "O* c #D6874F", "P* c #E79659", "Q* c #FFA778", "R* c #D07B64", "S* c #6E1913", "T* c #6C1F18", "U* c #963729", "V* c #EC9366", "W* c #FFB374", "X* c #E98F56", "Y* c #B24C23", "Z* c #ED8661", "`* c #E78B58", " = c #FAA561", ".= c #F8A262", "+= c #F6A164", "@= c #F7A466", "#= c #E49459", "$= c #C16E36", "%= c #E08C58", "&= c #E1895C", "*= c #EF9265", "== c #FFA372", "-= c #FEA36A", ";= c #F5A268", ">= c #F6AA6A", ",= c #DC8545", "'= c #D47440", ")= c #C87153", "!= c #69241A", "~= c #AB5E46", "{= c #E88666", "]= c #E37B53", "^= c #D26E43", "/= c #F4996C", "(= c #CC6C39", "_= c #E5834A", ":= c #F39462", "<= c #FA9F6F", "[= c #F6A16D", "}= c #F49F6B", "|= c #F69E6D", "1= c #DD7F55", "2= c #C7653C", "3= c #E7825E", "4= c #E4895D", "5= c #F1A364", "6= c #FFAC66", "7= c #FEA067", "8= c #CD7151", "9= c #6E2215", "0= c #7F2427", "a= c #902F20", "b= c #E5895A", "c= c #FFB175", "d= c #F2915D", "e= c #B7522B", "f= c #C05D34", "g= c #D67649", "h= c #F69E68", "i= c #FDA46B", "j= c #FCA069", "k= c #FFA46E", "l= c #F49460", "m= c #EB8E5D", "n= c #D06F41", "o= c #C9683C", "p= c #D67D55", "q= c #A55135", "r= c #682616", "s= c #8F4C2E", "t= c #DE8C68", "u= c #CA6E51", "v= c #C4654C", "w= c #FFA579", "x= c #F09360", "y= c #CC7345", "z= c #DA844C", "A= c #EE9556", "B= c #F59D5E", "C= c #FFB174", "D= c #FFB075", "E= c #FFB073", "F= c #FFA472", "G= c #B85D49", "H= c #6C1515", "I= c #8B5446", "J= c #73251B", "K= c #95402C", "L= c #E48F68", "M= c #FFAA79", "N= c #F59D70", "O= c #EB9061", "P= c #E48A59", "Q= c #C57046", "R= c #B26340", "S= c #B16947", "T= c #B36943", "U= c #A65D40", "V= c #7B3629", "W= c #6A230D", "X= c #BA6848", "Y= c #D57C5E", "Z= c #D1745E", "`= c #CE7260", " - c #923C2D", ".- c #84382F", "+- c #813F39", "@- c #7B423B", " ", " ", " ", " ", " . + @ # $ % & * ", " = - ; > , ' ) ! ~ { ] ^ / ( _ : < ", "[ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l ", "m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W ", "X Y Z ` ...+.@.#.$. %.&.*.=.-.;.>.,.'.).!.~.{.].^./.9 (._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.", "R a.b.c.d.e.f.R W g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.", "R T.U.V.W.X.Y.V Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+9+", "0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+", "V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@6@7@8@9@0@a@b@R ", "c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@", "Y@Z@`@ #.#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#[#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#", "g#h#i#j#k#l#m#n#o#p#~@q#r#s#s#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#", "Z#`# $.$+$@$#$$$%$&$&$*$=$-$r#r#;$>$,$'$)$)$!$~${$]$^$/$($_$:$<$[$}$|$1$2$~@3$4$5$6$7$8$9$0$a$b$", "c$d$e$f$g$h$i$j$k$A@;$=$;$;$l$m$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$", "S$T$U$V$W$X$Y$Z$`$;$=$;$=$=$;$;$;$ % %.% %+%@%#%$%%%&%*%=%-%D ;%>%,%'%)%!%~%t#{%]%^%/%(%_%:%<%[%", "}%|%1%2%3%4%5%6%7%r#=$m$;$;$=$;$8%&$&$q$+%9%0%a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%", "z%A%B%C%D%E%F%G%H%=$=$;$;$;$=$;$m$I%J%K%v@L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&=&-&", ";&>&,&'&)&!&~&{&]&;$;$;$;$;$;$;$;$^&/&K%(&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&i&j&k&", "l&m&n&o&p&q&=.r&s&t&t&r$;$;$m$;$r$u&v&w&x&t$y&z&A&B&x@C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V& ", "W&X&Y&Z&`& *.*+*@*#*$*%*&***=*A@-*;*>*,*'*)*!*~*{*]*^*/*(*_*:*<*[*}*|*1* 2* ", " 3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*z@i*j*k*l*m*n*8%o*p*q*r* ", " s*t*u*v*w*x*y*z*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S* ", " T*U*V*W*X*Y*Z*`* =.=+=@=#=$=%=&=*===-=;=>=,='=)=!= ", " ~={=]=^=/=(=_=:=<=n*[=}=|=1=2=3=4=5=6=7=8=9= ", " 0=a=b=c=d=e=f=g=o%h=i=j=k=l=m=n=o=p=q=r= ", " s=t=u=v=w=x=y=z=A=B=C=D=E=F=G=H= ", " I=J=K=L=M=N=O=P=Q=R=S=T=U=V= ", " W=X=Y=Z=`= -.-+-@- ", " ", " ", " "}; flrig-2.0.04/src/xmlrpcpp/0000775000175000017500000000000014511461606012343 500000000000000flrig-2.0.04/src/xmlrpcpp/XmlRpcMutex.cpp0000664000175000017500000000270714502041135015214 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #define XMLRPC_THREADS #if defined(XMLRPC_THREADS) #include "config.h" #include "XmlRpcMutex.h" using namespace XmlRpc; //! Destructor. XmlRpcMutex::~XmlRpcMutex() { if (_pMutex) { this->release(); ::pthread_mutex_destroy((pthread_mutex_t*)_pMutex); delete _pMutex; _pMutex = 0; } } //! Wait for the mutex to be available and then acquire the lock. bool XmlRpcMutex::acquire() { if ( ! _pMutex) { _pMutex = new pthread_mutex_t; ::pthread_mutex_init((pthread_mutex_t*)_pMutex, 0); } ::pthread_mutex_lock((pthread_mutex_t*)_pMutex); return true; } //! Release the mutex. void XmlRpcMutex::release() { if (_pMutex) ::pthread_mutex_unlock((pthread_mutex_t*)_pMutex); } #endif // XMLRPC_THREADS flrig-2.0.04/src/xmlrpcpp/XmlRpcBase64.h0000664000175000017500000002106214475136651014617 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #if !defined(__BASE64_H_INCLUDED__) #define __BASE64_H_INCLUDED__ 1 #include // Corrects forward declarations issue c++11 #include // Corrects forward declarations issue c++11 #include static int _xmlrpc_base64Chars[]= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', '0','1','2','3','4','5','6','7','8','9', '+','/' }; #define _0000_0011 0x03 #define _1111_1100 0xFC #define _1111_0000 0xF0 #define _0011_0000 0x30 #define _0011_1100 0x3C #define _0000_1111 0x0F #define _1100_0000 0xC0 #define _0011_1111 0x3F #define _EQUAL_CHAR (-1) #define _UNKNOWN_CHAR (-2) #define _IOS_FAILBIT std::ios_base::failbit #define _IOS_EOFBIT std::ios_base::eofbit #define _IOS_BADBIT std::ios_base::badbit #define _IOS_GOODBIT std::ios_base::goodbit // TEMPLATE CLASS xmlrpc_base64_put template > class xmlrpc_base64 { public: typedef unsigned char byte_t; typedef _E char_type; typedef _Tr traits_type; // xmlrpc_base64 requires max line length <= 72 characters // you can fill end of line // it may be crlf, crlfsp, noline or other class like it struct crlf { template _OI operator()(_OI _To) const{ *_To = _Tr::to_char_type('\r'); ++_To; *_To = _Tr::to_char_type('\n'); ++_To; return (_To); } }; struct crlfsp { template _OI operator()(_OI _To) const{ *_To = _Tr::to_char_type('\r'); ++_To; *_To = _Tr::to_char_type('\n'); ++_To; *_To = _Tr::to_char_type(' '); ++_To; return (_To); } }; struct noline { template _OI operator()(_OI _To) const{ return (_To); } }; struct three2four { void zero() { _data[0] = 0; _data[1] = 0; _data[2] = 0; } byte_t get_0() const { return _data[0]; } byte_t get_1() const { return _data[1]; } byte_t get_2() const { return _data[2]; } void set_0(byte_t _ch) { _data[0] = _ch; } void set_1(byte_t _ch) { _data[1] = _ch; } void set_2(byte_t _ch) { _data[2] = _ch; } // 0000 0000 1111 1111 2222 2222 // xxxx xxxx xxxx xxxx xxxx xxxx // 0000 0011 1111 2222 2233 3333 int b64_0() const {return (_data[0] & _1111_1100) >> 2;} int b64_1() const {return ((_data[0] & _0000_0011) << 4) + ((_data[1] & _1111_0000)>>4);} int b64_2() const {return ((_data[1] & _0000_1111) << 2) + ((_data[2] & _1100_0000)>>6);} int b64_3() const {return (_data[2] & _0011_1111);} void b64_0(int _ch) {_data[0] = ((_ch & _0011_1111) << 2) | (_0000_0011 & _data[0]);} void b64_1(int _ch) { _data[0] = ((_ch & _0011_0000) >> 4) | (_1111_1100 & _data[0]); _data[1] = ((_ch & _0000_1111) << 4) | (_0000_1111 & _data[1]); } void b64_2(int _ch) { _data[1] = ((_ch & _0011_1100) >> 2) | (_1111_0000 & _data[1]); _data[2] = ((_ch & _0000_0011) << 6) | (_0011_1111 & _data[2]); } void b64_3(int _ch){ _data[2] = (_ch & _0011_1111) | (_1100_0000 & _data[2]);} private: byte_t _data[3]; }; template _II put(_II _First, _II _Last, _OI _To, _State& _St, _Endline _Endl) const { three2four _3to4; int line_octets = 0; while(_First != _Last) { _3to4.zero(); // 3 _3to4.set_0(*_First); _First++; if(_First == _Last) { *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_0()]); ++_To; *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_1()]); ++_To; *_To = _Tr::to_char_type('='); ++_To; *_To = _Tr::to_char_type('='); ++_To; goto __end; } _3to4.set_1(*_First); _First++; if(_First == _Last) { *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_0()]); ++_To; *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_1()]); ++_To; *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_2()]); ++_To; *_To = _Tr::to_char_type('='); ++_To; goto __end; } _3to4.set_2(*_First); _First++; *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_0()]); ++_To; *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_1()]); ++_To; *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_2()]); ++_To; *_To = _Tr::to_char_type(_xmlrpc_base64Chars[_3to4.b64_3()]); ++_To; if(line_octets == 17) // xmlrpc_base64 72 { //_To = _Endl(_To); *_To = '\n'; ++_To; line_octets = 0; } else ++line_octets; } __end: ; return (_First); } template _II get(_II _First, _II _Last, _OI _To, _State& _St) const { three2four _3to4; int _Char; while(_First != _Last) { // Take octet _3to4.zero(); // -- 0 -- // Search next valid char... while((_Char = _getCharType(*_First)) < 0 && _Char == _UNKNOWN_CHAR) { if(++_First == _Last) { _St |= _IOS_FAILBIT|_IOS_EOFBIT; return _First; // unexpected EOF } } if(_Char == _EQUAL_CHAR){ // Error! First character in octet can't be '=' _St |= _IOS_FAILBIT; return _First; } else _3to4.b64_0(_Char); // -- 1 -- // Search next valid char... while(++_First != _Last) if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR) break; if(_First == _Last) { _St |= _IOS_FAILBIT|_IOS_EOFBIT; // unexpected EOF return _First; } if(_Char == _EQUAL_CHAR){ // Error! Second character in octet can't be '=' _St |= _IOS_FAILBIT; return _First; } else _3to4.b64_1(_Char); // -- 2 -- // Search next valid char... while(++_First != _Last) if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR) break; if(_First == _Last) { // Error! Unexpected EOF. Must be '=' or xmlrpc_base64 character _St |= _IOS_FAILBIT|_IOS_EOFBIT; return _First; } if(_Char == _EQUAL_CHAR){ // OK! _3to4.b64_2(0); _3to4.b64_3(0); // chek for EOF if(++_First == _Last) { // Error! Unexpected EOF. Must be '='. Ignore it. //_St |= _IOS_BADBIT|_IOS_EOFBIT; _St |= _IOS_EOFBIT; } else if(_getCharType(*_First) != _EQUAL_CHAR) { // Error! Must be '='. Ignore it. //_St |= _IOS_BADBIT; } else ++_First; // Skip '=' // write 1 byte to output *_To = (byte_t) _3to4.get_0(); return _First; } else _3to4.b64_2(_Char); // -- 3 -- // Search next valid char... while(++_First != _Last) if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR) break; if(_First == _Last) { // Unexpected EOF. It's error. But ignore it. //_St |= _IOS_FAILBIT|_IOS_EOFBIT; _St |= _IOS_EOFBIT; return _First; } if(_Char == _EQUAL_CHAR) { // OK! _3to4.b64_3(0); // write to output 2 bytes *_To = (byte_t) _3to4.get_0(); *_To = (byte_t) _3to4.get_1(); ++_First; // set position to next character return _First; } else _3to4.b64_3(_Char); // write to output 3 bytes *_To = (byte_t) _3to4.get_0(); *_To = (byte_t) _3to4.get_1(); *_To = (byte_t) _3to4.get_2(); ++_First; } // while(_First != _Last) return (_First); } protected: int _getCharType(int _Ch) const { if(_xmlrpc_base64Chars[62] == _Ch) return 62; if(_xmlrpc_base64Chars[63] == _Ch) return 63; if((_xmlrpc_base64Chars[0] <= _Ch) && (_xmlrpc_base64Chars[25] >= _Ch)) return _Ch - _xmlrpc_base64Chars[0]; if((_xmlrpc_base64Chars[26] <= _Ch) && (_xmlrpc_base64Chars[51] >= _Ch)) return _Ch - _xmlrpc_base64Chars[26] + 26; if((_xmlrpc_base64Chars[52] <= _Ch) && (_xmlrpc_base64Chars[61] >= _Ch)) return _Ch - _xmlrpc_base64Chars[52] + 52; if(_Ch == _Tr::to_int_type('=')) return _EQUAL_CHAR; return _UNKNOWN_CHAR; } }; #endif flrig-2.0.04/src/xmlrpcpp/XmlRpcSocket.h0000664000175000017500000000537214475136651015031 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCSOCKET_H_ #define _XMLRPCSOCKET_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include namespace XmlRpc { //! A platform-independent socket API. class XmlRpcSocket { public: // On windows, a socket is an unsigned int large enough to hold a ptr // This should match the definition of SOCKET in winsock2.h #if defined(_WINDOWS) # if defined(_WIN64) typedef unsigned __int64 Socket; # else typedef unsigned int Socket; # endif #else typedef int Socket; #endif //! An invalid socket constant. static const Socket Invalid = (Socket) -1; //! Creates a stream (TCP) socket. Returns XmlRpcSocket::Invalid on failure. static Socket socket(); //! Closes a socket. static void close(Socket socket); //! Sets a stream (TCP) socket to perform non-blocking IO. Returns false on failure. static bool setNonBlocking(Socket socket); // The next four methods are appropriate for servers. //! Allow the port the specified socket is bound to to be re-bound immediately so //! server re-starts are not delayed. Returns false on failure. static bool setReuseAddr(Socket socket); //! Bind to a specified port static bool bind(Socket socket, int port); //! Set socket in listen mode static bool listen(Socket socket, int backlog); //! Accept a client connection request static Socket accept(Socket socket); //! Connect a socket to a server (from a client) static bool connect(Socket socket, std::string& host, int port); //! Get the port of a bound socket static int getPort(Socket socket); //! Returns true if the last error was not a fatal one (eg, EWOULDBLOCK) static bool nonFatalError(); //! Returns last errno static int getError(); //! Returns message corresponding to last error static std::string getErrorMsg(); //! Returns message corresponding to error static std::string getErrorMsg(int error); }; } // namespace XmlRpc #endif flrig-2.0.04/src/xmlrpcpp/XmlRpcServerConnection.h0000664000175000017500000000541114475136651017061 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCSERVERCONNECTION_H_ #define _XMLRPCSERVERCONNECTION_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include #include "XmlRpcValue.h" #include "XmlRpcSource.h" namespace XmlRpc { // The server waits for client connections and provides support for executing methods class XmlRpcServer; class XmlRpcServerMethod; //! A class to handle XML RPC requests from a particular client class XmlRpcServerConnection : public XmlRpcSource { public: //! Constructor XmlRpcServerConnection(XmlRpcSocket::Socket fd, XmlRpcServer* server, bool deleteOnClose = false); //! Destructor virtual ~XmlRpcServerConnection(); // XmlRpcSource interface implementation //! Handle IO on the client connection socket. //! @param eventType Type of IO event that occurred. @see XmlRpcDispatch::EventType. virtual unsigned handleEvent(unsigned eventType); protected: //! Reads the http header bool readHeader(); //! Reads the request (based on the content-length header value) bool readRequest(); //! Executes the request and writes the resulting response bool writeResponse(); //! Helper method to execute the client request virtual void executeRequest(); //! The XmlRpc server that accepted this connection XmlRpcServer* _server; //! Possible IO states for the connection enum ServerConnectionState { READ_HEADER, READ_REQUEST, WRITE_RESPONSE }; //! Current IO state for the connection ServerConnectionState _connectionState; //! Request headers std::string _header; //! Number of bytes expected in the request body (parsed from header) int _contentLength; //! Request body std::string _request; //! Response std::string _response; //! Number of bytes of the response written so far int _bytesWritten; //! Whether to keep the current client connection open for further requests bool _keepAlive; }; } // namespace XmlRpc #endif // _XMLRPCSERVERCONNECTION_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcValue.cpp0000664000175000017500000005041014502041135015160 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "XmlRpcValue.h" #include "XmlRpcException.h" #include "XmlRpcUtil.h" #include "XmlRpcBase64.h" #include #include #include #include #include namespace XmlRpc { static const char VALUE_TAG[] = "value"; static const char NIL_TAG[] = "nil"; static const char BOOLEAN_TAG[] = "boolean"; static const char DOUBLE_TAG[] = "double"; static const char INT_TAG[] = "int"; static const char I4_TAG[] = "i4"; static const char STRING_TAG[] = "string"; static const char DATETIME_TAG[] = "dateTime.iso8601"; static const char BASE64_TAG[] = "base64"; static const char ARRAY_TAG[] = "array"; static const char DATA_TAG[] = "data"; static const char STRUCT_TAG[] = "struct"; static const char MEMBER_TAG[] = "member"; static const char NAME_TAG[] = "name"; // Format strings std::string XmlRpcValue::_doubleFormat("%f"); // Clean up void XmlRpcValue::invalidate() { switch (_type) { case TypeString: delete _value.asString; break; case TypeDateTime: delete _value.asTime; break; case TypeBase64: delete _value.asBinary; break; case TypeArray: delete _value.asArray; break; case TypeStruct: delete _value.asStruct; break; default: break; } _type = TypeInvalid; _value.asBinary = 0; } // Type checking void XmlRpcValue::assertType(Type t) const { if (_type != t) { throw XmlRpcException("type error"); } } void XmlRpcValue::assertType(Type t) { if (_type == TypeInvalid) { _type = t; switch (_type) { // Ensure there is a valid value for the type case TypeString: _value.asString = new std::string(); break; case TypeDateTime: _value.asTime = new struct tm(); break; case TypeBase64: _value.asBinary = new BinaryData(); break; case TypeArray: _value.asArray = new ValueArray(); break; case TypeStruct: _value.asStruct = new ValueStruct(); break; default: _value.asBinary = 0; break; } } else if (_type != t) { throw XmlRpcException("type error"); } } void XmlRpcValue::assertArray(int size) const { if (_type != TypeArray) throw XmlRpcException("type error: expected an array"); else if (int(_value.asArray->size()) < size) throw XmlRpcException("range error: array index too large"); } void XmlRpcValue::assertArray(int size) { if (_type == TypeInvalid) { _type = TypeArray; _value.asArray = new ValueArray(size); } else if (_type == TypeArray) { if (int(_value.asArray->size()) < size) _value.asArray->resize(size); } else throw XmlRpcException("type error: expected an array"); } void XmlRpcValue::assertStruct() { if (_type == TypeInvalid) { _type = TypeStruct; _value.asStruct = new ValueStruct(); } else if (_type != TypeStruct) throw XmlRpcException("type error: expected a struct"); } // Operators XmlRpcValue& XmlRpcValue::operator=(XmlRpcValue const& rhs) { if (this != &rhs) { invalidate(); _type = rhs._type; switch (_type) { case TypeBoolean: _value.asBool = rhs._value.asBool; break; case TypeInt: _value.asInt = rhs._value.asInt; break; case TypeDouble: _value.asDouble = rhs._value.asDouble; break; case TypeDateTime: _value.asTime = new struct tm(*rhs._value.asTime); break; case TypeString: _value.asString = new std::string(*rhs._value.asString); break; case TypeBase64: _value.asBinary = new BinaryData(*rhs._value.asBinary); break; case TypeArray: _value.asArray = new ValueArray(*rhs._value.asArray); break; case TypeStruct: _value.asStruct = new ValueStruct(*rhs._value.asStruct); break; default: _value.asBinary = 0; break; } } return *this; } // Predicate for tm equality static bool tmEq(struct tm const& t1, struct tm const& t2) { return t1.tm_sec == t2.tm_sec && t1.tm_min == t2.tm_min && t1.tm_hour == t2.tm_hour && t1.tm_mday == t2.tm_mday && t1.tm_mon == t2.tm_mon && t1.tm_year == t2.tm_year; } bool XmlRpcValue::operator==(XmlRpcValue const& other) const { if (_type != other._type) return false; switch (_type) { case TypeBoolean: return ( !_value.asBool && !other._value.asBool) || ( _value.asBool && other._value.asBool); case TypeInt: return _value.asInt == other._value.asInt; case TypeDouble: return _value.asDouble == other._value.asDouble; case TypeDateTime: return tmEq(*_value.asTime, *other._value.asTime); case TypeString: return *_value.asString == *other._value.asString; case TypeBase64: return *_value.asBinary == *other._value.asBinary; case TypeArray: return *_value.asArray == *other._value.asArray; // The map<>::operator== requires the definition of value< for kcc case TypeStruct: //return *_value.asStruct == *other._value.asStruct; { if (_value.asStruct->size() != other._value.asStruct->size()) return false; ValueStruct::const_iterator it1=_value.asStruct->begin(); ValueStruct::const_iterator it2=other._value.asStruct->begin(); while (it1 != _value.asStruct->end()) { const XmlRpcValue& v1 = it1->second; const XmlRpcValue& v2 = it2->second; if ( ! (v1 == v2)) return false; it1++; it2++; } return true; } default: break; } return true; // Both invalid values ... } bool XmlRpcValue::operator!=(XmlRpcValue const& other) const { return !(*this == other); } // Works for strings, binary data, arrays, and structs. int XmlRpcValue::size() const { switch (_type) { case TypeString: return int(_value.asString->size()); case TypeBase64: return int(_value.asBinary->size()); case TypeArray: return int(_value.asArray->size()); case TypeStruct: return int(_value.asStruct->size()); default: break; } throw XmlRpcException("type error"); } // Checks for existence of struct member bool XmlRpcValue::hasMember(const std::string& name) const { return _type == TypeStruct && _value.asStruct->find(name) != _value.asStruct->end(); } // Set the value from xml. The chars at *offset into valueXml // should be the start of a tag. Destroys any existing value. bool XmlRpcValue::fromXml(std::string const& valueXml, int* offset) { int savedOffset = *offset; invalidate(); bool emptyTag; if ( ! XmlRpcUtil::nextTagIs(VALUE_TAG, valueXml, offset, &emptyTag)) return false; // Not a value, offset not updated // No value? Pretend its an empty string... if (emptyTag) { *this = ""; return true; } // No type tag? Assume string // bool result = true; bool result = false; int valueOffset = *offset; if (XmlRpcUtil::nextTagIsEnd(VALUE_TAG, valueXml, offset)) { result = true; return stringFromXml(valueXml, &valueOffset); } else if (XmlRpcUtil::nextTagIs(NIL_TAG, valueXml, offset, &emptyTag)) { _type = TypeNil; result = true; } else if (XmlRpcUtil::nextTagIs(BOOLEAN_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) { *this = false; result = true; } else result = boolFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(BOOLEAN_TAG, valueXml, offset); } else if (XmlRpcUtil::nextTagIs(I4_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) { *this = 0; result = true; } else result = intFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(I4_TAG, valueXml, offset); } else if (XmlRpcUtil::nextTagIs(INT_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) { *this = 0; result = true; } else result = intFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(INT_TAG, valueXml, offset); } else if (XmlRpcUtil::nextTagIs(DOUBLE_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) { *this = 0.0; result = true; } else result = doubleFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(DOUBLE_TAG, valueXml, offset); } else if (XmlRpcUtil::nextTagIs(STRING_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) { *this = ""; result = true; } else result = stringFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(STRING_TAG, valueXml, offset); } else if (XmlRpcUtil::nextTagIs(DATETIME_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) result = false; else result = timeFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(DATETIME_TAG, valueXml, offset); } else if (XmlRpcUtil::nextTagIs(BASE64_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) result = binaryFromXml("", 0); else result = binaryFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(BASE64_TAG, valueXml, offset); } else if (XmlRpcUtil::nextTagIs(ARRAY_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) result = false; else result = arrayFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(ARRAY_TAG, valueXml, offset); } else if (XmlRpcUtil::nextTagIs(STRUCT_TAG, valueXml, offset, &emptyTag)) { if (emptyTag) result = false; else result = structFromXml(valueXml, offset) && XmlRpcUtil::nextTagIsEnd(STRUCT_TAG, valueXml, offset); } // Unrecognized tag after or no if ( ! result || ! XmlRpcUtil::nextTagIsEnd(VALUE_TAG, valueXml, offset)) { *offset = savedOffset; return false; } return true; } // Encode the Value in xml std::string XmlRpcValue::toXml() const { switch (_type) { case TypeNil: return nilToXml(); case TypeBoolean: return boolToXml(); case TypeInt: return intToXml(); case TypeDouble: return doubleToXml(); case TypeString: return stringToXml(); case TypeDateTime: return timeToXml(); case TypeBase64: return binaryToXml(); case TypeArray: return arrayToXml(); case TypeStruct: return structToXml(); default: break; } return std::string(); // Invalid value } // Boolean bool XmlRpcValue::boolFromXml(std::string const& valueXml, int* offset) { const char* valueStart = valueXml.c_str() + *offset; char* valueEnd; long ivalue = strtol(valueStart, &valueEnd, 10); if (valueEnd == valueStart || (ivalue != 0 && ivalue != 1)) return false; _type = TypeBoolean; _value.asBool = (ivalue == 1); *offset += int(valueEnd - valueStart); return true; } std::string XmlRpcValue::nilToXml() const { return ""; } std::string XmlRpcValue::boolToXml() const { static std::string booleanTrueXml("1"); static std::string booleanFalseXml("0"); return _value.asBool ? booleanTrueXml : booleanFalseXml; } // Int bool XmlRpcValue::intFromXml(std::string const& valueXml, int* offset) { const char* valueStart = valueXml.c_str() + *offset; char* valueEnd; long ivalue = strtol(valueStart, &valueEnd, 10); if (valueEnd == valueStart) return false; _type = TypeInt; _value.asInt = int(ivalue); *offset += int(valueEnd - valueStart); return true; } std::string XmlRpcValue::intToXml() const { char buf[256]; snprintf(buf, sizeof(buf)-1, "%d", _value.asInt); buf[sizeof(buf)-1] = 0; return std::string(buf); } // Double bool XmlRpcValue::doubleFromXml(std::string const& valueXml, int* offset) { const char* valueStart = valueXml.c_str() + *offset; char* valueEnd; double dvalue = strtod(valueStart, &valueEnd); if (valueEnd == valueStart) return false; _type = TypeDouble; _value.asDouble = dvalue; *offset += int(valueEnd - valueStart); return true; } std::string XmlRpcValue::doubleToXml() const { char fmtbuf[256], buf[256]; snprintf(fmtbuf, sizeof(fmtbuf)-1, "%s", getDoubleFormat().c_str()); fmtbuf[sizeof(fmtbuf)-1] = 0; snprintf(buf, sizeof(buf)-1, fmtbuf, _value.asDouble); buf[sizeof(buf)-1] = 0; return std::string(buf); } // String bool XmlRpcValue::stringFromXml(std::string const& valueXml, int* offset) { size_t valueEnd = valueXml.find('<', *offset); if (valueEnd == std::string::npos) return false; // No end tag; _type = TypeString; _value.asString = new std::string(XmlRpcUtil::xmlDecode(valueXml.substr(*offset, valueEnd-*offset))); *offset += int(_value.asString->length()); return true; } std::string XmlRpcValue::stringToXml() const { return std::string("") + XmlRpcUtil::xmlEncode(*_value.asString) + std::string(""); } // DateTime (stored as a struct tm) bool XmlRpcValue::timeFromXml(std::string const& valueXml, int* offset) { size_t valueEnd = valueXml.find('<', *offset); if (valueEnd == std::string::npos) return false; // No end tag; std::string stime = valueXml.substr(*offset, valueEnd-*offset); struct tm t; if (sscanf(stime.c_str(),"%4d%2d%2dT%2d:%2d:%2d",&t.tm_year,&t.tm_mon,&t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec) != 6) return false; t.tm_isdst = -1; _type = TypeDateTime; _value.asTime = new struct tm(t); *offset += int(stime.length()); return true; } std::string XmlRpcValue::timeToXml() const { struct tm* t = _value.asTime; char buf[50]; memset(buf, 0, 50); snprintf(buf, sizeof(buf)-1, "%04d%02d%02dT%02d:%02d:%02d", 1900+t->tm_year,1+t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); return std::string("") + buf + std::string(""); } // Base64 bool XmlRpcValue::binaryFromXml(std::string const& valueXml, int* offset) { size_t valueEnd = valueXml.find('<', *offset); if (valueEnd == std::string::npos) return false; // No end tag; _type = TypeBase64; std::string asString = valueXml.substr(*offset, valueEnd-*offset); _value.asBinary = new BinaryData(); // check whether base64 encodings can contain chars xml encodes... // convert from base64 to binary int iostatus = 0; xmlrpc_base64 decoder; std::back_insert_iterator ins = std::back_inserter(*(_value.asBinary)); decoder.get(asString.begin(), asString.end(), ins, iostatus); *offset += int(asString.length()); return true; } std::string XmlRpcValue::binaryToXml() const { // convert to base64 std::vector base64data; int iostatus = 0; xmlrpc_base64 encoder; std::back_insert_iterator > ins = std::back_inserter(base64data); encoder.put(_value.asBinary->begin(), _value.asBinary->end(), ins, iostatus, xmlrpc_base64<>::crlf()); // Wrap with xml std::string xml = ""; xml.append(base64data.begin(), base64data.end()); xml += ""; return xml; } // Array bool XmlRpcValue::arrayFromXml(std::string const& valueXml, int* offset) { bool emptyTag; if ( ! XmlRpcUtil::nextTagIs(DATA_TAG, valueXml, offset, &emptyTag)) return false; _type = TypeArray; _value.asArray = new ValueArray; if ( ! emptyTag) { XmlRpcValue v; while (v.fromXml(valueXml, offset)) _value.asArray->push_back(v); // copy... // Skip the trailing (void) XmlRpcUtil::nextTagIsEnd(DATA_TAG, valueXml, offset); } return true; } // In general, its preferable to generate the xml of each element of the // array as it is needed rather than glomming up one big string. std::string XmlRpcValue::arrayToXml() const { std::string xml = ""; int s = int(_value.asArray->size()); for (int i=0; iat(i).toXml(); xml += ""; return xml; } // Struct bool XmlRpcValue::structFromXml(std::string const& valueXml, int* offset) { _type = TypeStruct; _value.asStruct = new ValueStruct; std::string name; bool emptyTag; while (XmlRpcUtil::nextTagIs(MEMBER_TAG, valueXml, offset, &emptyTag)) { if ( ! emptyTag) { if (XmlRpcUtil::parseTag(NAME_TAG, valueXml, offset, name)) { // value XmlRpcValue val(valueXml, offset); if ( ! val.valid()) { invalidate(); return false; } const std::pair p(name, val); _value.asStruct->insert(p); (void) XmlRpcUtil::nextTagIsEnd(MEMBER_TAG, valueXml, offset); } } } return true; } // In general, its preferable to generate the xml of each element // as it is needed rather than glomming up one big string. std::string XmlRpcValue::structToXml() const { std::string xml = ""; ValueStruct::const_iterator it; for (it=_value.asStruct->begin(); it!=_value.asStruct->end(); ++it) { xml += ""; xml += XmlRpcUtil::xmlEncode(it->first); xml += ""; xml += it->second.toXml(); xml += ""; } xml += ""; return xml; } // Write the value without xml encoding it std::ostream& XmlRpcValue::write(std::ostream& os) const { switch (_type) { default: break; case TypeBoolean: os << _value.asBool; break; case TypeInt: os << _value.asInt; break; case TypeDouble: os << _value.asDouble; break; case TypeString: os << *_value.asString; break; case TypeDateTime: { struct tm* t = _value.asTime; char buf[20]; snprintf(buf, sizeof(buf)-1, "%4d%02d%02dT%02d:%02d:%02d", t->tm_year,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); buf[sizeof(buf)-1] = 0; os << buf; break; } case TypeBase64: { int iostatus = 0; std::ostreambuf_iterator out(os); xmlrpc_base64 encoder; encoder.put(_value.asBinary->begin(), _value.asBinary->end(), out, iostatus, xmlrpc_base64<>::crlf()); break; } case TypeArray: { int s = int(_value.asArray->size()); os << '{'; for (int i=0; i 0) os << ','; _value.asArray->at(i).write(os); } os << '}'; break; } case TypeStruct: { os << '['; ValueStruct::const_iterator it; for (it=_value.asStruct->begin(); it!=_value.asStruct->end(); ++it) { if (it!=_value.asStruct->begin()) os << ','; os << it->first << ':'; it->second.write(os); } os << ']'; break; } } return os; } } // namespace XmlRpc // ostream std::ostream& operator<<(std::ostream& os, XmlRpc::XmlRpcValue& v) { // If you want to output in xml format: //return os << v.toXml(); return v.write(os); } flrig-2.0.04/src/xmlrpcpp/XmlRpcServerMethod.cpp0000664000175000017500000000216214502041135016514 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "XmlRpcServerMethod.h" #include "XmlRpcServer.h" namespace XmlRpc { XmlRpcServerMethod::XmlRpcServerMethod(std::string const& name, XmlRpcServer* server) { _name = name; _server = server; if (_server) _server->addMethod(this); } XmlRpcServerMethod::~XmlRpcServerMethod() { if (_server) _server->removeMethod(this); } } // namespace XmlRpc flrig-2.0.04/src/xmlrpcpp/XmlRpcSocket.cpp0000664000175000017500000001226314502041135015340 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "XmlRpcSocket.h" #include "XmlRpcUtil.h" #if defined(_WINDOWS) #undef _WINSOCKAPI_ # include # include //# pragma lib(WS2_32.lib) // Updates to MXE require conditional test before assignment to // prevent duplicate defines. #undef EINPROGRESS #define EINPROGRESS WSAEINPROGRESS #undef EWOULDBLOCK #define EWOULDBLOCK WSAEWOULDBLOCK #undef ETIMEDOUT #define ETIMEDOUT WSAETIMEDOUT typedef int socklen_t; #include "compat.h" #else extern "C" { # include # include # include # include # include # include # include # include # include # include } #endif // _WINDOWS using namespace XmlRpc; // One-time initializations static bool initialized = false; static void initialize() { initialized = true; #if defined(_WINDOWS) { WORD wVersionRequested = MAKEWORD( 2, 0 ); WSADATA wsaData; WSAStartup(wVersionRequested, &wsaData); atexit((void(*)(void)) WSACleanup); } #else { // Ignore SIGPIPE (void) signal(SIGPIPE, SIG_IGN); } #endif // _WINDOWS } // These errors are not considered fatal for an IO operation; the operation will be re-tried. bool XmlRpcSocket::nonFatalError() { int err = XmlRpcSocket::getError(); return (err == EINPROGRESS || #if defined(EAGAIN) err == EAGAIN || #endif #if defined(EINTR) err == EINTR || #endif err == EWOULDBLOCK); } XmlRpcSocket::Socket XmlRpcSocket::socket() { if ( ! initialized) initialize(); return ::socket(AF_INET, SOCK_STREAM, 0); } void XmlRpcSocket::close(XmlRpcSocket::Socket fd) { XmlRpcUtil::log(4, "XmlRpcSocket::close: fd %d.", fd); #if defined(_WINDOWS) closesocket(fd); #else ::close(fd); #endif // _WINDOWS } bool XmlRpcSocket::setNonBlocking(XmlRpcSocket::Socket fd) { #if defined(_WINDOWS) unsigned long flag = 1; return (ioctlsocket(fd, FIONBIO, &flag) == 0); #else return (fcntl(fd, F_SETFL, O_NONBLOCK) == 0); #endif // _WINDOWS } bool XmlRpcSocket::setReuseAddr(XmlRpcSocket::Socket fd) { // Allow this port to be re-bound immediately so server re-starts are not delayed int sflag = 1; return (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&sflag, sizeof(sflag)) == 0); } // Bind to a specified port bool XmlRpcSocket::bind(XmlRpcSocket::Socket fd, int port) { struct sockaddr_in saddr; memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = htonl(INADDR_ANY); saddr.sin_port = htons((u_short) port); return (::bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) == 0); } // Set socket in listen mode bool XmlRpcSocket::listen(XmlRpcSocket::Socket fd, int backlog) { return (::listen(fd, backlog) == 0); } XmlRpcSocket::Socket XmlRpcSocket::accept(XmlRpcSocket::Socket fd) { struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); return ::accept(fd, (struct sockaddr*)&addr, &addrlen); } // Connect a socket to a server (from a client) bool XmlRpcSocket::connect(XmlRpcSocket::Socket fd, std::string& host, int port) { struct sockaddr_in saddr; memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; struct hostent *hp = gethostbyname(host.c_str()); if (hp == 0) return false; saddr.sin_family = hp->h_addrtype; memcpy(&saddr.sin_addr, hp->h_addr, hp->h_length); saddr.sin_port = htons((u_short) port); // For asynch operation, this will return EWOULDBLOCK (windows) or // EINPROGRESS (linux) and we just need to wait for the socket to be writable... int result = ::connect(fd, (struct sockaddr *)&saddr, sizeof(saddr)); return result == 0 || nonFatalError(); } // Get the port of a bound socket int XmlRpcSocket::getPort(XmlRpcSocket::Socket socket) { struct sockaddr_in saddr; socklen_t saddr_len = sizeof(saddr); int port; int result = ::getsockname(socket, (sockaddr*) &saddr, &saddr_len); if (result != 0) { port = -1; } else { port = ntohs(saddr.sin_port); } return port; } // Returns last errno int XmlRpcSocket::getError() { #if defined(_WINDOWS) return WSAGetLastError(); #else return errno; #endif } // Returns message corresponding to last errno std::string XmlRpcSocket::getErrorMsg() { return getErrorMsg(getError()); } // Returns message corresponding to errno... well, it should anyway std::string XmlRpcSocket::getErrorMsg(int error) { char err[60]; snprintf(err,sizeof(err),"error %d", error); return std::string(err); } flrig-2.0.04/src/xmlrpcpp/XmlRpcClient.cpp0000664000175000017500000003700014502041135015322 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include #include #include "XmlRpcClient.h" #include "XmlRpcSocket.h" #include "XmlRpc.h" #include "XmlRpcBase64.h" // For HTTP authentication encoding #include #include #include #include #include using namespace XmlRpc; // Static data const char REQUEST_BEGIN[] = "\r\n"; const char REQUEST_BEGIN_METHODNAME[] = ""; const char REQUEST_END_METHODNAME[] = "\r\n"; const char PARAMS_TAG[] = ""; const char PARAMS_ETAG[] = ""; const char PARAM_TAG[] = ""; const char PARAM_ETAG[] = ""; const char REQUEST_END[] = "\r\n"; XmlRpcClient::XmlRpcClient(const char* host, int port, const char* uri/*=0*/) { XmlRpcUtil::log(1, "XmlRpcClient new client: host %s, port %d.", host, port); _host = host; _port = port; if (uri && *uri) _uri = uri; else _uri = "/RPC2"; _connectionState = NO_CONNECTION; _executing = false; _eof = false; // Default to keeping the connection open until an explicit close is done setKeepOpen(); } XmlRpcClient::XmlRpcClient(const char* host, int port, const char* login, const char* password, const char* uri/*=0*/) { XmlRpcUtil::log(1, "XmlRpcClient new client: host %s, port %d, login %s.", host, port, login); _host = host; _port = port; _login = login ? login : ""; _password = password ? password : ""; _uri = uri ? uri : "/RPC2"; _connectionState = NO_CONNECTION; _executing = false; _eof = false; // Default to keeping the connection open until an explicit close is done setKeepOpen(); } XmlRpcClient::~XmlRpcClient() { XmlRpcUtil::log(1, "XmlRpcClient dtor client: host %s, port %d.", _host.c_str(), _port); if (_connectionState != NO_CONNECTION) close(); } // Close the owned fd void XmlRpcClient::close() { XmlRpcUtil::log(4, "XmlRpcClient::close: fd %d.", getfd()); _connectionState = NO_CONNECTION; _disp.exit(); _disp.removeSource(this); XmlRpcSource::close(); } // Clear the referenced flag even if exceptions or errors occur. struct ClearFlagOnExit { ClearFlagOnExit(bool& flag) : _flag(flag) {} ~ClearFlagOnExit() { _flag = false; } bool& _flag; }; // Execute the named procedure on the remote server. // Params should be an array of the arguments for the method. // Returns true if the request was sent and a result received (although the result // might be a fault). bool XmlRpcClient::execute(const char* method, XmlRpcValue const& params, XmlRpcValue& result, double timeoutSeconds) { XmlRpcUtil::log(1, "XmlRpcClient::execute: method %s (_connectionState %d).", method, _connectionState); // This is not a thread-safe operation, if you want to do multithreading, use separate // clients for each thread. If you want to protect yourself from multiple threads // accessing the same client, replace this code with a real mutex. if (_executing) return false; _executing = true; ClearFlagOnExit cf(_executing); _sendAttempts = 0; _isFault = false; if ( ! setupConnection()) return false; if ( ! generateRequest(method, params)) return false; result.clear(); // Process until either a response is received or the timeout period passes _disp.work(timeoutSeconds); if (_connectionState != IDLE || ! parseResponse(result)) return false; XmlRpcUtil::log(1, "XmlRpcClient::execute: method %s completed.", method); _response.clear(); return true; } // XmlRpcSource interface implementation // Handle server responses. Called by the event dispatcher during execute. unsigned XmlRpcClient::handleEvent(unsigned eventType) { if (eventType == XmlRpcDispatch::Exception) { //if (XmlRpcSocket::nonFatalError()) // return (_connectionState == WRITE_REQUEST) // ? XmlRpcDispatch::WritableEvent : XmlRpcDispatch::ReadableEvent; if (_connectionState == WRITE_REQUEST && _bytesWritten == 0) XmlRpcUtil::error("Error in XmlRpcClient::handleEvent: could not connect to server (%s).", XmlRpcSocket::getErrorMsg().c_str()); else XmlRpcUtil::error("Error in XmlRpcClient::handleEvent (state %d): %s.", _connectionState, XmlRpcSocket::getErrorMsg().c_str()); return 0; } if (_connectionState == WRITE_REQUEST) if ( ! writeRequest()) return 0; if (_connectionState == READ_HEADER) if ( ! readHeader()) return 0; if (_connectionState == READ_RESPONSE) if ( ! readResponse()) return 0; // This should probably always ask for Exception events too return (_connectionState == WRITE_REQUEST) ? XmlRpcDispatch::WritableEvent : XmlRpcDispatch::ReadableEvent; } // Create the socket connection to the server if necessary bool XmlRpcClient::setupConnection() { // If an error occurred last time through, or if the server closed the connection, close our end if ((_connectionState != NO_CONNECTION && _connectionState != IDLE) || _eof) close(); _eof = false; if (_connectionState == NO_CONNECTION) if (! doConnect()) return false; // Prepare to write the request _connectionState = WRITE_REQUEST; _bytesWritten = 0; // Notify the dispatcher to listen on this source (calls handleEvent when the socket is writable) _disp.removeSource(this); // Make sure nothing is left over _disp.addSource(this, XmlRpcDispatch::WritableEvent | XmlRpcDispatch::Exception); return true; } // Connect to the xmlrpc server bool XmlRpcClient::doConnect() { XmlRpcSocket::Socket fd = XmlRpcSocket::socket(); if (fd == XmlRpcSocket::Invalid) { XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not create socket (%s).", XmlRpcSocket::getErrorMsg().c_str()); return false; } XmlRpcUtil::log(3, "XmlRpcClient::doConnect: fd %d.", fd); this->setfd(fd); // Don't block on connect/reads/writes if ( ! XmlRpcSocket::setNonBlocking(fd)) { this->close(); XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not set socket to non-blocking IO mode (%s).", XmlRpcSocket::getErrorMsg().c_str()); return false; } if ( ! XmlRpcSocket::connect(fd, _host, _port)) { this->close(); XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not connect to server (%s).", XmlRpcSocket::getErrorMsg().c_str()); return false; } return XmlRpcSource::doConnect(); } // Encode the request to call the specified method with the specified parameters into xml std::string XmlRpc::pname = "N/A"; void XmlRpc::set_pname(std::string pn) { XmlRpc::pname = pn; }; bool XmlRpcClient::generateRequest(const char* methodName, XmlRpcValue const& params) { std::string body = REQUEST_BEGIN; if (XmlRpc::pname != "N/A") { char pid[100]; snprintf(pid, sizeof(pid), "%s %d", XmlRpc::pname.c_str(), getpid()); body.append("\r\n"); } body.append(REQUEST_BEGIN_METHODNAME); body.append(methodName); body.append(REQUEST_END_METHODNAME); // If params is an array, each element is a separate parameter if (params.valid()) { body += PARAMS_TAG; if (params.getType() == XmlRpcValue::TypeArray) { for (int i=0; i base64data; int iostatus = 0; xmlrpc_base64 encoder; std::back_insert_iterator > ins = std::back_inserter(base64data); std::string authBuf = _login + ":" + _password; encoder.put(authBuf.begin(), authBuf.end(), ins, iostatus, xmlrpc_base64<>::crlf()); header += "Authorization: Basic "; std::string authEnc(base64data.begin(), base64data.end()); // handle pesky linefeed characters std::string::size_type lf; while ( (lf = authEnc.find("\r")) != std::string::npos ) { authEnc.erase(lf, 1); } while ( (lf = authEnc.find("\n")) != std::string::npos ) { authEnc.erase(lf, 1); } header += authEnc; header += "\r\n"; } header += "Content-Type: text/xml\r\nContent-length: "; sprintf(buff,"%d\r\n\r\n", static_cast(body.size())); return header + buff; } bool XmlRpcClient::writeRequest() { if (_bytesWritten == 0) XmlRpcUtil::log(5, "XmlRpcClient::writeRequest (attempt %d):\n%s\n", _sendAttempts+1, _request.c_str()); // Try to write the request if ( ! nbWrite(_request, &_bytesWritten)) { XmlRpcUtil::error("Error in XmlRpcClient::writeRequest: write error (%s).",XmlRpcSocket::getErrorMsg().c_str()); return false; } XmlRpcUtil::log(3, "XmlRpcClient::writeRequest: wrote %d of %d bytes.", _bytesWritten, _request.length()); // Wait for the result if (_bytesWritten == int(_request.length())) { _header = ""; _response = ""; _connectionState = READ_HEADER; } return true; } // Read the header from the response bool XmlRpcClient::readHeader() { // Read available data if ( ! nbRead(_header, &_eof) || (_eof && _header.length() == 0)) { // If we haven't read any data yet and this is a keep-alive connection, the server may // have timed out, so we try one more time. if (getKeepOpen() && _header.length() == 0 && _sendAttempts++ == 0) { XmlRpcUtil::log(4, "XmlRpcClient::readHeader: re-trying connection"); XmlRpcSource::close(); _connectionState = NO_CONNECTION; _eof = false; return setupConnection(); } XmlRpcUtil::error("Error in XmlRpcClient::readHeader: error while reading header (%s) on fd %d.", XmlRpcSocket::getErrorMsg().c_str(), getfd()); return false; } XmlRpcUtil::log(4, "XmlRpcClient::readHeader: client has read %d bytes", _header.length()); return parseHeader(); } bool XmlRpcClient::parseHeader() { char const *hp = _header.c_str(); // Start of header char const *ep = hp + _header.length(); // End of string char const *bp = 0; // Start of body char const *lp = 0; // Start of content-length value std::string const CONTINUE100("100 Continue"); int nc100 = int(CONTINUE100.length()); for (char const *cp = hp; (bp == 0) && (cp < ep); ++cp) { if ((ep - cp > 16) && (strncasecmp(cp, "Content-length: ", 16) == 0)) { lp = cp + 16; } else if ((ep - cp > 4) && (strncmp(cp, "\r\n\r\n", 4) == 0)) { if (cp - hp > nc100 && strncmp(cp-CONTINUE100.length(), CONTINUE100.c_str(), CONTINUE100.length()) == 0) cp += 3; else bp = cp + 4; } else if ((ep - cp > 2) && (strncmp(cp, "\n\n", 2) == 0)) { if (cp - hp > nc100 && strncmp(cp-CONTINUE100.length(), CONTINUE100.c_str(), CONTINUE100.length()) == 0) ++ cp; else bp = cp + 2; } } // If we haven't gotten the entire header yet, return (keep reading) if (bp == 0) { if (_eof) // EOF in the middle of a response is an error { XmlRpcUtil::error("Error in XmlRpcClient::readHeader: EOF while reading header"); return false; // Close the connection } return true; // Keep reading } // Decode content length if (lp == 0) { XmlRpcUtil::error("Error XmlRpcClient::readHeader: No Content-length specified"); return false; // We could try to figure it out by parsing as we read, but for now... } _contentLength = atoi(lp); if (_contentLength <= 0) { XmlRpcUtil::error("Error in XmlRpcClient::readHeader: Invalid Content-length specified (%d).", _contentLength); return false; } XmlRpcUtil::log(4, "client read content length: %d", _contentLength); // Otherwise copy non-header data to response buffer and set state to read response. _response = bp; _header = ""; // should parse out any interesting bits from the header (connection, etc)... _connectionState = READ_RESPONSE; return true; // Continue monitoring this source } bool XmlRpcClient::readResponse() { // If we dont have the entire response yet, read available data if (int(_response.length()) < _contentLength) { if ( ! nbRead(_response, &_eof)) { XmlRpcUtil::error("Error in XmlRpcClient::readResponse: read error (%s).",XmlRpcSocket::getErrorMsg().c_str()); return false; } // If we haven't gotten the entire _response yet, return (keep reading) if (int(_response.length()) < _contentLength) { if (_eof) { XmlRpcUtil::error("Error in XmlRpcClient::readResponse: EOF while reading response"); return false; } return true; } } // Otherwise, parse and return the result XmlRpcUtil::log(3, "XmlRpcClient::readResponse (read %d bytes)", _response.length()); XmlRpcUtil::log(5, "response:\n%s", _response.c_str()); _connectionState = IDLE; return false; // Stop monitoring this source (causes return from work) } // Convert the response xml into a result value bool XmlRpcClient::parseResponse(XmlRpcValue& result) { std::string r; _response.swap(r); // Parse response xml into result bool emptyParam; int offset = 0; if ( ! XmlRpcUtil::findTag("methodResponse",r,&offset,&emptyParam) || emptyParam) { XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response - no methodResponse. Response:\n%s", r.c_str()); return false; } // Expect either ... or ... if (XmlRpcUtil::nextTagIs("params",r,&offset,&emptyParam) && XmlRpcUtil::nextTagIs("param",r,&offset,&emptyParam)) { if (emptyParam) { result = 0; // No result? } else if ( ! result.fromXml(r, &offset)) { XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response value. Response:\n%s", r.c_str()); return false; } } else if (XmlRpcUtil::nextTagIs("fault",r,&offset,&emptyParam)) { _isFault = true; if (emptyParam || ! result.fromXml(r, &offset)) { result = 0; // No result? return false; } } else { XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response - no param or fault tag. Response:\n%s", r.c_str()); return false; } return result.valid(); } flrig-2.0.04/src/xmlrpcpp/XmlRpcMutex.h0000664000175000017500000000344614475136651014703 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCMUTEX_H_ #define _XMLRPCMUTEX_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include "threads.h" namespace XmlRpc { //! A simple platform-independent mutex API implemented for posix and windows. class XmlRpcMutex { public: //! Construct a Mutex object. XmlRpcMutex() : _pMutex(0) {} //! Destroy a Mutex object. ~XmlRpcMutex(); //! Wait for the mutex to be available and then acquire the lock. //! True return if acquired bool acquire(); //! Release the mutex. void release(); //! Utility class to acquire a mutex at construction and release it when destroyed. struct AutoLock { //! Acquire the mutex at construction AutoLock(XmlRpcMutex& m) : _m(m) { _m.acquire(); } //! Release at destruction ~AutoLock() { _m.release(); } //! The mutex being held XmlRpcMutex& _m; }; private: //! Native Mutex object pthread_mutex_t* _pMutex; }; // class XmlRpcMutex } // namespace XmlRpc #endif // _XMLRPCMUTEX_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcUtil.cpp0000664000175000017500000002000414502041135015015 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "XmlRpcUtil.h" #include #include #include #include #include #include "XmlRpc.h" #include "support.h" #include "status.h" #include "trace.h" using namespace XmlRpc; //#define USE_WINDOWS_DEBUG // To make the error and log messages go to VC++ debug output #ifdef USE_WINDOWS_DEBUG #define WIN32_LEAN_AND_MEAN #include #endif // Version id const char XmlRpc::XMLRPC_VERSION[] = "XMLRPC++ 0.8"; // Default log verbosity: 0 for no messages through 5 (writes everything) int XmlRpcLogHandler::_verbosity = 0; // Default log handler static class DefaultLogHandler : public XmlRpcLogHandler { public: void log(int level, const char* msg) { if (level <= _verbosity && progStatus.rpctrace) rpc_trace(1, msg); } } defaultLogHandler; // Message log singleton XmlRpcLogHandler* XmlRpcLogHandler::_logHandler = &defaultLogHandler; // Default error handler static class DefaultErrorHandler : public XmlRpcErrorHandler { public: void error(const char* msg) { #ifdef USE_WINDOWS_DEBUG // OutputDebugString(msg); OutputDebugString("\n"); #else rpc_trace(1, msg); // std::cerr << msg << std::endl; #endif } } defaultErrorHandler; // Error handler singleton XmlRpcErrorHandler* XmlRpcErrorHandler::_errorHandler = &defaultErrorHandler; // Easy API for log verbosity int XmlRpc::getVerbosity() { return XmlRpcLogHandler::getVerbosity(); } void XmlRpc::setVerbosity(int level) { XmlRpcLogHandler::setVerbosity(level); } void XmlRpcUtil::log(int level, const char* fmt, ...) { if (level <= XmlRpcLogHandler::getVerbosity()) { va_list va; char buf[1024]; va_start( va, fmt); vsnprintf(buf,sizeof(buf)-1,fmt,va); buf[sizeof(buf)-1] = 0; XmlRpcLogHandler::getLogHandler()->log(level, buf); va_end(va); } } void XmlRpcUtil::error(const char* fmt, ...) { va_list va; va_start(va, fmt); char buf[1024]; vsnprintf(buf,sizeof(buf)-1,fmt,va); buf[sizeof(buf)-1] = 0; XmlRpcErrorHandler::getErrorHandler()->error(buf); va_end(va); } // Returns true if the tag is parsed. No attributes are parsed. // Sets val to the contents between and , or an empty string if is found. // Updates offset to char after bool XmlRpcUtil::parseTag(const char* tag, std::string const& xml, int* offset, std::string &val) { size_t nxml = xml.length(); if (*offset >= int(nxml)) return false; // Find or /> bool lastSlash = false; while (istart < nxml && xml[istart] != '>') { lastSlash = (xml[istart] == '/'); ++ istart; } if (istart == nxml) return false; val.clear(); if (lastSlash) // { *offset = int(istart+1); // 1 after > } else // Find { std::string etag = ""; size_t iend = xml.find(etag, istart); if (iend == std::string::npos) return false; *offset = int(iend + etag.length()); ++ istart; val = xml.substr(istart, iend-istart); } return true; } // Returns true if the tag is found and updates offset to the char after the tag bool XmlRpcUtil::findTag(const char* tag, std::string const& xml, int* offset, bool* emptyTag) { size_t nxml = xml.length(); if (*offset >= int(nxml)) return false; std::string stag = "<"; stag += tag; size_t istart = xml.find(stag, *offset); if (istart == std::string::npos) return false; istart += stag.length(); // Advance istart past > or />, skips attribs bool lastSlash = false; while (istart < nxml && xml[istart] != '>') { lastSlash = (xml[istart] == '/'); ++ istart; } if (istart == nxml) return false; *emptyTag = lastSlash; *offset = int(istart+1); // char after > return true; } // Returns true if the or is found at the specified offset (modulo any whitespace) // and updates offset to the char after the tag. *emptyTag is set to true if is found, false otherwise bool XmlRpcUtil::nextTagIs(const char* tag, std::string const& xml, int* offset, bool *emptyTag) { if (*offset >= int(xml.length())) return false; const char* cp = xml.c_str() + *offset; int nc = 0; while (*cp && isspace(*cp)) { ++cp; ++nc; } int len = int(strlen(tag)); if (*cp == '<' && (strncmp(cp+1, tag, len) == 0)) { cp += len + 1; if (*cp == '>') // { *offset += nc + len + 2; *emptyTag = false; return true; } while (*cp && isspace(*cp)) { ++cp; ++nc; } if (*cp == '/' && *(cp + 1) == '>') // { *offset += nc + len + 3; *emptyTag = true; return true; } } return false; } // Returns true if the next tag found at the specified offset is // and updates offset to the char after the tag. bool XmlRpcUtil::nextTagIsEnd(const char* tag, std::string const& xml, int* offset) { if (*offset >= int(xml.length())) return false; const char* cp = xml.c_str() + *offset; int nc = 0; while (*cp && *cp != '<') { ++cp; ++nc; } int len = int(strlen(tag)); if (*cp == '<' && *(cp+1) == '/' && (strncmp(cp+2, tag, len) == 0) && *(cp + len + 2) == '>') { *offset += nc + len + 3; return true; } return false; } // xml encodings (xml-encoded entities are preceded with '&') static const char AMP = '&'; static const char rawEntity[] = { '<', '>', '&', '\'', '\"', 0 }; static const char* xmlEntity[] = { "lt;", "gt;", "amp;", "apos;", "quot;", 0 }; static const int xmlEntLen[] = { 3, 3, 4, 5, 5 }; // Replace xml-encoded entities with the raw text equivalents. std::string XmlRpcUtil::xmlDecode(const std::string& encoded) { std::string::size_type iAmp = encoded.find(AMP); if (iAmp == std::string::npos) return encoded; std::string decoded(encoded, 0, iAmp); std::string::size_type iSize = encoded.size(); decoded.reserve(iSize); const char* ens = encoded.c_str(); while (iAmp != iSize) { if (encoded[iAmp] == AMP && iAmp+1 < iSize) { int iEntity; for (iEntity=0; xmlEntity[iEntity] != 0; ++iEntity) //if (encoded.compare(iAmp+1, xmlEntLen[iEntity], xmlEntity[iEntity]) == 0) if (strncmp(ens+iAmp+1, xmlEntity[iEntity], xmlEntLen[iEntity]) == 0) { decoded += rawEntity[iEntity]; iAmp += xmlEntLen[iEntity]+1; break; } if (xmlEntity[iEntity] == 0) // unrecognized sequence decoded += encoded[iAmp++]; } else { decoded += encoded[iAmp++]; } } return decoded; } // Replace raw text with xml-encoded entities. std::string XmlRpcUtil::xmlEncode(const std::string& raw) { std::string::size_type iRep = raw.find_first_of(rawEntity); if (iRep == std::string::npos) return raw; std::string encoded(raw, 0, iRep); std::string::size_type iSize = raw.size(); while (iRep != iSize) { int iEntity; for (iEntity=0; rawEntity[iEntity] != 0; ++iEntity) if (raw[iRep] == rawEntity[iEntity]) { encoded += AMP; encoded += xmlEntity[iEntity]; break; } if (rawEntity[iEntity] == 0) encoded += raw[iRep]; ++iRep; } return encoded; } flrig-2.0.04/src/xmlrpcpp/XmlRpcValue.h0000664000175000017500000002721214475136651014652 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCVALUE_H_ #define _XMLRPCVALUE_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include #include #include #include namespace XmlRpc { enum xmlrpc_nil_t { nil }; //! A class to represent RPC arguments and results. //! Each XmlRpcValue object contains a typed value, //! where the type is determined by the initial value //! assigned to the object. // should probably refcount them... class XmlRpcValue { public: //! XmlRpcValue types enum Type { TypeInvalid, TypeNil, TypeBoolean, TypeInt, TypeUnsigned, TypeLongLong, TypeDouble, TypeString, TypeDateTime, TypeBase64, TypeArray, TypeStruct }; // Non-primitive types typedef std::vector BinaryData; typedef std::vector ValueArray; typedef std::map ValueStruct; // Constructors //! Construct an empty XmlRpcValue XmlRpcValue() : _type(TypeInvalid) { _value.asBinary = 0; } //! Construct an XmlRpcValue with a nil value XmlRpcValue(xmlrpc_nil_t value) : _type(TypeNil) { } //! Construct an XmlRpcValue with a bool value XmlRpcValue(bool value) : _type(TypeBoolean) { _value.asBool = value; } //! Construct an XmlRpcValue with an int value XmlRpcValue(int value) : _type(TypeInt) { _value.asInt = value; } XmlRpcValue(unsigned int value) : _type(TypeUnsigned) { _value.asUnsigned = value; } XmlRpcValue(long long value) : _type(TypeLongLong) { _value.asLongLong = value; } //! Construct an XmlRpcValue with a double value XmlRpcValue(double value) : _type(TypeDouble) { _value.asDouble = value; } //! Construct an XmlRpcValue with a string value XmlRpcValue(std::string const& value) : _type(TypeString) { _value.asString = new std::string(value); } //! Construct an XmlRpcValue with a string value. //! @param value A null-terminated (C) string. XmlRpcValue(const char* value) : _type(TypeString) { _value.asString = new std::string(value); } XmlRpcValue(BinaryData const& value) : _type(TypeBase64) { _value.asBinary = new BinaryData(value); } XmlRpcValue(ValueStruct const& value) : _type(TypeStruct) { _value.asStruct = new ValueStruct(value); } XmlRpcValue(ValueArray const& value) : _type(TypeArray) { _value.asArray = new ValueArray(value); } //! Construct an XmlRpcValue with a date/time value. //! @param value A pointer to a struct tm (see localtime) XmlRpcValue(struct tm* value) : _type(TypeDateTime) { _value.asTime = new struct tm(*value); } //! Construct an XmlRpcValue with a binary data value //! @param value A pointer to data //! @param nBytes The length of the data pointed to, in bytes XmlRpcValue(void* value, int nBytes) : _type(TypeBase64) { _value.asBinary = new BinaryData((char*)value, ((char*)value)+nBytes); } //! Construct from xml, beginning at *offset chars into the string, updates offset XmlRpcValue(std::string const& xml, int* offset) : _type(TypeInvalid) { if ( ! fromXml(xml,offset)) _type = TypeInvalid; } //! Copy constructor XmlRpcValue(XmlRpcValue const& rhs) : _type(TypeInvalid) { *this = rhs; } //! Destructor (make virtual if you want to subclass) /*virtual*/ ~XmlRpcValue() { invalidate(); } //! Erase the current value void clear() { invalidate(); } // Operators //! Assignment from one XmlRpcValue to this one. //! @param rhs The value in rhs is copied to this value. XmlRpcValue& operator=(XmlRpcValue const& rhs); //! Assign nil to this XmlRpcValue. XmlRpcValue& operator=(xmlrpc_nil_t const& rhs) { return operator=(XmlRpcValue(rhs)); } //! Assign a bool to this XmlRpcValue. XmlRpcValue& operator=(bool const& rhs) { return operator=(XmlRpcValue(rhs)); } //! Assign an int to this XmlRpcValue. XmlRpcValue& operator=(int const& rhs) { return operator=(XmlRpcValue(rhs)); } //! Assign a double to this XmlRpcValue. XmlRpcValue& operator=(double const& rhs) { return operator=(XmlRpcValue(rhs)); } //! Assign a string to this XmlRpcValue. XmlRpcValue& operator=(const char* rhs) { return operator=(XmlRpcValue(std::string(rhs))); } //! Tests two XmlRpcValues for equality bool operator==(XmlRpcValue const& other) const; //! Tests two XmlRpcValues for inequality bool operator!=(XmlRpcValue const& other) const; //! Treat an XmlRpcValue as a bool. //! Throws XmlRpcException if the value is initialized to //! a type that is not TypeBoolean. operator bool&() { assertType(TypeBoolean); return _value.asBool; } operator bool() const { assertType(TypeBoolean); return _value.asBool; } //! Treat an XmlRpcValue as an int. //! Throws XmlRpcException if the value is initialized to //! a type that is not TypeInt. operator int&() { assertType(TypeInt); return _value.asInt; } operator int() const { assertType(TypeInt); return _value.asInt; } operator unsigned int&() { assertType(TypeUnsigned); return _value.asUnsigned; } operator unsigned int() const { assertType(TypeUnsigned); return _value.asUnsigned; } operator long long&() { assertType(TypeLongLong); return _value.asLongLong; } operator long long() const { assertType(TypeLongLong); return _value.asLongLong; } //! Treat an XmlRpcValue as a double. //! Throws XmlRpcException if the value is initialized to //! a type that is not TypeDouble. operator double&() { assertType(TypeDouble); return _value.asDouble; } operator double() const { assertType(TypeDouble); return _value.asDouble; } //! Treat an XmlRpcValue as a string. //! Throws XmlRpcException if the value is initialized to //! a type that is not TypeString. operator std::string&() { assertType(TypeString); return *_value.asString; } operator std::string const&() const { assertType(TypeString); return *_value.asString; } //! Access the BinaryData value. //! Throws XmlRpcException if the value is initialized to //! a type that is not TypeBase64. operator BinaryData&() { assertType(TypeBase64); return *_value.asBinary; } operator BinaryData const&() const { assertType(TypeBase64); return *_value.asBinary; } //! Access the DateTime value. //! Throws XmlRpcException if the value is initialized to //! a type that is not TypeDateTime. operator struct tm&() { assertType(TypeDateTime); return *_value.asTime; } operator struct tm const&() const { assertType(TypeDateTime); return *_value.asTime; } //! Const array value accessor. //! Access the ith value of the array. //! Throws XmlRpcException if the value is not an array or if the index i is //! not a valid index for the array. XmlRpcValue const& operator[](int i) const { assertArray(i+1); return _value.asArray->at(i); } //! Array value accessor. //! Access the ith value of the array, growing the array if necessary. //! Throws XmlRpcException if the value is not an array. XmlRpcValue& operator[](int i) { assertArray(i+1); return _value.asArray->at(i); } //! Struct entry accessor. //! Returns the value associated with the given entry, creating one if necessary. XmlRpcValue& operator[](std::string const& k) { assertStruct(); return (*_value.asStruct)[k]; } //! Struct entry accessor. //! Returns the value associated with the given entry, creating one if necessary. XmlRpcValue& operator[](const char* k) { assertStruct(); std::string s(k); return (*_value.asStruct)[s]; } //! Access the struct value map. //! Can be used to iterate over the entries in the map to find all defined entries. operator ValueStruct const&() { assertStruct(); return *_value.asStruct; } operator ValueArray const&() const { assertType(TypeArray); return *_value.asArray; } // Accessors //! Return true if the value has been set to something. bool valid() const { return _type != TypeInvalid; } //! Return the type of the value stored. \see Type. Type const &getType() const { return _type; } //! Return the size for string, base64, array, and struct values. int size() const; //! Specify the size for array values. Array values will grow beyond this size if needed. void setSize(int size) { assertArray(size); } //! Check for the existence of a struct member by name. bool hasMember(const std::string& name) const; //! Decode xml. Destroys any existing value. bool fromXml(std::string const& valueXml, int* offset); //! Encode the Value in xml std::string toXml() const; //! Write the value (no xml encoding) std::ostream& write(std::ostream& os) const; // Formatting //! Return the format used to write double values. static std::string const& getDoubleFormat() { return _doubleFormat; } //! Specify the format used to write double values. static void setDoubleFormat(const char* f) { _doubleFormat = f; } protected: // Clean up void invalidate(); // Type checking. Non-const versions coerce to the desired type if currently un-typed. void assertType(Type t) const; void assertType(Type t); void assertArray(int size) const; void assertArray(int size); void assertStruct(); // XML decoding bool boolFromXml(std::string const& valueXml, int* offset); bool intFromXml(std::string const& valueXml, int* offset); bool doubleFromXml(std::string const& valueXml, int* offset); bool stringFromXml(std::string const& valueXml, int* offset); bool timeFromXml(std::string const& valueXml, int* offset); bool binaryFromXml(std::string const& valueXml, int* offset); bool arrayFromXml(std::string const& valueXml, int* offset); bool structFromXml(std::string const& valueXml, int* offset); // XML encoding std::string nilToXml() const; std::string boolToXml() const; std::string intToXml() const; std::string doubleToXml() const; std::string stringToXml() const; std::string timeToXml() const; std::string binaryToXml() const; std::string arrayToXml() const; std::string structToXml() const; // Format strings static std::string _doubleFormat; // Type tag and values Type _type; // At some point I will split off Arrays and Structs into // separate ref-counted objects for more efficient copying. union { bool asBool; int asInt; unsigned int asUnsigned; long long asLongLong; double asDouble; struct tm* asTime; std::string* asString; BinaryData* asBinary; ValueArray* asArray; ValueStruct* asStruct; } _value; }; } // namespace XmlRpc std::ostream& operator<<(std::ostream& os, XmlRpc::XmlRpcValue& v); #endif // _XMLRPCVALUE_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcDispatch.cpp0000664000175000017500000001532014502041135015644 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "XmlRpcDispatch.h" #include "XmlRpcSource.h" #include "XmlRpcUtil.h" #include #include #if defined(__FreeBSD__) || defined(__OpenBSD__) # ifdef USE_FTIME # include # endif #else # include #endif // __FreeBSD__ #if defined(_WINDOWS) #undef _WINSOCKAPI_ # include # define USE_FTIME # if defined(_MSC_VER) # define timeb _timeb # define ftime _ftime # endif #else # include #endif // _WINDOWS using namespace XmlRpc; XmlRpcDispatch::XmlRpcDispatch() { _endTime = -1.0; _doClear = false; _inWork = false; } XmlRpcDispatch::~XmlRpcDispatch() { } // Monitor this source for the specified events and call its event handler // when the event occurs void XmlRpcDispatch::addSource(XmlRpcSource* source, unsigned mask) { _sources.push_back(MonitoredSource(source, mask)); } // Stop monitoring this source. Does not close the source. void XmlRpcDispatch::removeSource(XmlRpcSource* source) { for (SourceList::iterator it=_sources.begin(); it!=_sources.end(); ++it) if (it->getSource() == source) { _sources.erase(it); break; } } // Modify the types of events to watch for on this source void XmlRpcDispatch::setSourceEvents(XmlRpcSource* source, unsigned eventMask) { for (SourceList::iterator it=_sources.begin(); it!=_sources.end(); ++it) if (it->getSource() == source) { it->getMask() = eventMask; break; } } // Watch current set of sources and process events void XmlRpcDispatch::work(double timeoutSeconds) { // Compute end time double timeNow = getTime(); _endTime = (timeoutSeconds < 0.0) ? -1.0 : (timeNow + timeoutSeconds); _doClear = false; _inWork = true; // Only work while there is something to monitor while (_sources.size() > 0) { // Wait for and dispatch events if ( ! waitForAndProcessEvents(timeoutSeconds)) { _inWork = false; return; } // Check whether to clear all sources if (_doClear) { SourceList sourcesToClose; _sources.swap(sourcesToClose); for (SourceList::iterator it=sourcesToClose.begin(); it!=sourcesToClose.end(); ++it) { XmlRpcSource *src = it->getSource(); src->close(); } _doClear = false; } // Check whether end time has passed or exit has been called if (_endTime == 0.0) // Exit { break; } else if (_endTime > 0.0) // Check for timeout { double t = getTime(); if (t > _endTime) break; // Decrement timeout by elapsed time timeoutSeconds -= (t - timeNow); if (timeoutSeconds < 0.0) timeoutSeconds = 0.0; // Shouldn't happen but its fp math... timeNow = t; } } _inWork = false; } // Exit from work routine. Presumably this will be called from // one of the source event handlers. void XmlRpcDispatch::exit() { _endTime = 0.0; // Return from work asap } // Clear all sources from the monitored sources list void XmlRpcDispatch::clear() { if (_inWork) { _doClear = true; // Finish reporting current events before clearing } else { SourceList sourcesToClose; _sources.swap(sourcesToClose); for (SourceList::iterator it=sourcesToClose.begin(); it!=sourcesToClose.end(); ++it) it->getSource()->close(); } } // Time utility- return time in seconds double XmlRpcDispatch::getTime() { #ifdef USE_FTIME struct timeb tbuff; ftime(&tbuff); return ((double) tbuff.time + ((double)tbuff.millitm / 1000.0) + ((double) tbuff.timezone * 60)); #else struct timeval tv; struct timezone tz; gettimeofday(&tv, &tz); return (tv.tv_sec + tv.tv_usec / 1000000.0); #endif /* USE_FTIME */ } // Wait for I/O on any source, timeout, or interrupt signal. bool XmlRpcDispatch::waitForAndProcessEvents(double timeoutSeconds) { // Construct the sets of descriptors we are interested in fd_set inFd, outFd, excFd; FD_ZERO(&inFd); FD_ZERO(&outFd); FD_ZERO(&excFd); XmlRpcSocket::Socket maxFd = 0; for (SourceList::iterator it=_sources.begin(); it!=_sources.end(); ++it) { XmlRpcSocket::Socket fd = it->getSource()->getfd(); if (it->getMask() & ReadableEvent) FD_SET(fd, &inFd); if (it->getMask() & WritableEvent) FD_SET(fd, &outFd); if (it->getMask() & Exception) FD_SET(fd, &excFd); if (it->getMask() && fd > maxFd) maxFd = fd; } // Check for events int nEvents; if (_endTime < 0.0) { nEvents = select(int(maxFd+1), &inFd, &outFd, &excFd, NULL); } else { struct timeval tv; tv.tv_sec = (int)floor(timeoutSeconds); tv.tv_usec = ((int)floor(1000000.0 * (timeoutSeconds-floor(timeoutSeconds)))) % 1000000; nEvents = select(int(maxFd+1), &inFd, &outFd, &excFd, &tv); } if (nEvents < 0 && errno != EINTR) { XmlRpcUtil::error("Error in XmlRpcDispatch::work: error in select (%d).", nEvents); return false; } // Process events. Copy source list to avoid invalidating iterator by removing sources. SourceList s(_sources); for (SourceList::iterator it=s.begin(); it != s.end(); ++it) { XmlRpcSource* src = it->getSource(); XmlRpcSocket::Socket fd = src->getfd(); if (fd <= maxFd) { // handleEvent is called once per event type signalled unsigned newMask = 0; int nset = 0; if (FD_ISSET(fd, &inFd)) { newMask |= src->handleEvent(ReadableEvent); ++nset; } if (FD_ISSET(fd, &outFd)) { newMask |= src->handleEvent(WritableEvent); ++nset; } if (FD_ISSET(fd, &excFd)) { newMask |= src->handleEvent(Exception); ++nset; } // Some event occurred if (nset) { // This bit is not terribly efficient if many connections are active... if (newMask) { setSourceEvents(src, newMask); } else // Stop monitoring this one { removeSource(src); if ( ! src->getKeepOpen()) src->close(); } } } } return true; } flrig-2.0.04/src/xmlrpcpp/XmlRpcServer.cpp0000664000175000017500000003451114502041135015356 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "XmlRpcServer.h" #include "XmlRpcServerConnection.h" #include "XmlRpcServerMethod.h" #include "XmlRpcSocket.h" #include "XmlRpcUtil.h" #include "XmlRpcException.h" #include "XmlRpc.h" #include using namespace XmlRpc; std::string XmlRpc::request_str = ""; std::string XmlRpc::client_id = ""; // Static data const char XmlRpcServer::METHODNAME_TAG[] = "methodName"; const char XmlRpcServer::PARAMS_TAG[] = "params"; const char XmlRpcServer::PARAM_TAG[] = "param"; const std::string XmlRpcServer::METHODNAME = "methodName"; const std::string XmlRpcServer::PARAMS = "params"; const std::string XmlRpcServer::FAULTCODE = "faultCode"; const std::string XmlRpcServer::FAULTSTRING = "faultString"; XmlRpcServer::XmlRpcServer() { _introspectionEnabled = false; _listMethods = 0; _methodHelp = 0; } XmlRpcServer::~XmlRpcServer() { this->shutdown(); _methods.clear(); delete _listMethods; delete _methodHelp; } // Add a command to the RPC server void XmlRpcServer::addMethod(XmlRpcServerMethod* method) { _methods[method->name()] = method; } // Remove a command from the RPC server void XmlRpcServer::removeMethod(XmlRpcServerMethod* method) { MethodMap::iterator i = _methods.find(method->name()); if (i != _methods.end()) _methods.erase(i); } // Remove a command from the RPC server by name void XmlRpcServer::removeMethod(const std::string& methodName) { MethodMap::iterator i = _methods.find(methodName); if (i != _methods.end()) _methods.erase(i); } // Look up a method by name XmlRpcServerMethod* XmlRpcServer::findMethod(const std::string& name) const { MethodMap::const_iterator i = _methods.find(name); if (i == _methods.end()) return 0; return i->second; } // Create a socket, bind to the specified port, and // set it in listen mode to make it available for clients. bool XmlRpcServer::bindAndListen(int port, int backlog /*= 5*/) { XmlRpcSocket::Socket fd = XmlRpcSocket::socket(); if (XmlRpcSocket::Invalid == fd) { XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not create socket (%s).", XmlRpcSocket::getErrorMsg().c_str()); return false; } this->setfd(fd); // Don't block on reads/writes if ( ! XmlRpcSocket::setNonBlocking(fd)) { this->close(); XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not set socket to non-blocking input mode (%s).", XmlRpcSocket::getErrorMsg().c_str()); return false; } // Allow this port to be re-bound immediately so server re-starts are not delayed if ( ! XmlRpcSocket::setReuseAddr(fd)) { this->close(); XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not set SO_REUSEADDR socket option (%s).", XmlRpcSocket::getErrorMsg().c_str()); return false; } // Bind to the specified port on the default interface if ( ! XmlRpcSocket::bind(fd, port)) { this->close(); XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not bind to specified port (%s).", XmlRpcSocket::getErrorMsg().c_str()); return false; } // Set in listening mode if ( ! XmlRpcSocket::listen(fd, backlog)) { this->close(); XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not set socket in listening mode (%s).", XmlRpcSocket::getErrorMsg().c_str()); return false; } XmlRpcUtil::log(2, "XmlRpcServer::bindAndListen: server listening on port %d fd %d", port, fd); // Notify the dispatcher to listen on this source when we are in work() _disp.addSource(this, XmlRpcDispatch::ReadableEvent); return true; } // Get port number that this server is listening on int XmlRpcServer::getPort(void) const { return XmlRpcSocket::getPort(getfd()); } // Process client requests for the specified time (in seconds) void XmlRpcServer::work(double timeSeconds) { XmlRpcUtil::log(2, "XmlRpcServer::work: waiting for a connection"); _disp.work(timeSeconds); } // Handle input on the server socket by accepting the connection // and reading the rpc request. unsigned XmlRpcServer::handleEvent(unsigned mask) { acceptConnection(); return XmlRpcDispatch::ReadableEvent; // Continue to monitor this fd } // Accept a client connection request and create a connection to // handle method calls from the client. void XmlRpcServer::acceptConnection() { XmlRpcSocket::Socket s = XmlRpcSocket::accept(this->getfd()); XmlRpcUtil::log(2, "XmlRpcServer::acceptConnection: socket %d", s); if (XmlRpcSocket::Invalid == s) { //this->close(); XmlRpcUtil::error("XmlRpcServer::acceptConnection: Could not accept connection (%s).", XmlRpcSocket::getErrorMsg().c_str()); } else if ( ! XmlRpcSocket::setNonBlocking(s)) { XmlRpcSocket::close(s); XmlRpcUtil::error("XmlRpcServer::acceptConnection: Could not set socket to non-blocking input mode (%s).", XmlRpcSocket::getErrorMsg().c_str()); } else // Notify the dispatcher to listen for input on this source when we are in work() { XmlRpcUtil::log(2, "XmlRpcServer::acceptConnection: creating a connection"); XmlRpcServerConnection* c = this->createConnection(s); if (c) this->dispatchConnection(c); } } // Create a new connection object for processing requests from a specific client. XmlRpcServerConnection* XmlRpcServer::createConnection(XmlRpcSocket::Socket s) { // Specify that the connection object be deleted when it is closed return new XmlRpcServerConnection(s, this, true); } // Hand off a new connection to a dispatcher void XmlRpcServer::dispatchConnection(XmlRpcServerConnection* sc) { _disp.addSource(sc, XmlRpcDispatch::ReadableEvent); } // Remove a connection. Called by the connection when it closes down. void XmlRpcServer::removeConnection(XmlRpcServerConnection* sc) { _disp.removeSource(sc); } // Stop processing client requests void XmlRpcServer::exit() { _disp.exit(); } // Close the server socket file descriptor and stop monitoring connections void XmlRpcServer::shutdown() { // This closes and destroys all connections as well as closing this socket _disp.clear(); } // Introspection support static const std::string LIST_METHODS("system.listMethods"); static const std::string METHOD_HELP("system.methodHelp"); static const std::string MULTICALL("system.multicall"); // List all methods available on a server class ListMethods : public XmlRpcServerMethod { public: ListMethods(XmlRpcServer* s) : XmlRpcServerMethod(LIST_METHODS, s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { _server->listMethods(result); } std::string help() { return std::string("List all methods available on a server as an array of strings"); } }; // Retrieve the help string for a named method class MethodHelp : public XmlRpcServerMethod { public: MethodHelp(XmlRpcServer* s) : XmlRpcServerMethod(METHOD_HELP, s) {} void execute(XmlRpcValue& params, XmlRpcValue& result) { if (params[0].getType() != XmlRpcValue::TypeString) throw XmlRpcException(METHOD_HELP + ": Invalid argument type"); XmlRpcServerMethod* m = _server->findMethod(params[0]); if ( ! m) throw XmlRpcException(METHOD_HELP + ": Unknown method name"); result = m->help(); } std::string help() { return std::string("Retrieve the help string for a named method"); } }; // Specify whether introspection is enabled or not. Default is enabled. void XmlRpcServer::enableIntrospection(bool enabled) { if (_introspectionEnabled == enabled) return; _introspectionEnabled = enabled; if (enabled) { if ( ! _listMethods) { _listMethods = new ListMethods(this); _methodHelp = new MethodHelp(this); } else { addMethod(_listMethods); addMethod(_methodHelp); } } else { removeMethod(LIST_METHODS); removeMethod(METHOD_HELP); } } void XmlRpcServer::listMethods(XmlRpcValue& result) { int i = 0; result.setSize(int(_methods.size())+1); for (MethodMap::iterator it=_methods.begin(); it != _methods.end(); ++it) result[i++] = it->first; // Multicall support is built into XmlRpcServer::executeRequest result[i] = MULTICALL; } // Parse the request, run the method, generate a response string. std::string XmlRpcServer::executeRequest(std::string const& request) { XmlRpcValue params, resultValue; std::string methodName = parseRequest(request, params); XmlRpcUtil::log(2, "XmlRpcServer::executeRequest: server calling method '%s'", methodName.c_str()); std::string response; try { if ( ! executeMethod(methodName, params, resultValue) && ! executeMulticall(methodName, params, resultValue)) response = generateFaultResponse(methodName + ": unknown method name"); else response = generateResponse(resultValue.toXml()); } catch (const XmlRpcException& fault) { XmlRpcUtil::log(2, "XmlRpcServer::executeRequest: fault %s.", fault.getMessage().c_str()); response = generateFaultResponse(fault.getMessage(), fault.getCode()); } return response; } // Parse the method name and the argument values from the request. static std::string id_str = "execute(params, result); // Ensure a valid result value if ( ! result.valid()) result = std::string(); return true; } // Execute multiple calls and return the results in an array. bool XmlRpcServer::executeMulticall(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result) { if (methodName != MULTICALL) return false; // There ought to be 1 parameter, an array of structs if (params.size() != 1 || params[0].getType() != XmlRpcValue::TypeArray) throw XmlRpcException(MULTICALL + ": Invalid argument (expected an array)"); int nc = params[0].size(); result.setSize(nc); for (int i=0; i\r\n" "\r\n\t"; const char RESPONSE_2[] = "\r\n\r\n"; std::string body = RESPONSE_1 + resultXml + RESPONSE_2; std::string header = generateHeader(body); std::string response = header + body; XmlRpcUtil::log(5, "XmlRpcServer::generateResponse:\n%s\n", response.c_str()); return response; } // Prepend http headers std::string XmlRpcServer::generateHeader(std::string const& body) { std::string header = "HTTP/1.1 200 OK\r\n" "Server: "; header += XMLRPC_VERSION; header += "\r\n" "Content-Type: text/xml\r\n" "Content-length: "; char buffLen[40]; sprintf(buffLen,"%d\r\n\r\n", static_cast(body.size())); return header + buffLen; } std::string XmlRpcServer::generateFaultResponse(std::string const& errorMsg, int errorCode) { const char RESPONSE_1[] = "\r\n" "\r\n\t"; const char RESPONSE_2[] = "\r\n\r\n"; XmlRpcValue faultStruct; faultStruct[FAULTCODE] = errorCode; faultStruct[FAULTSTRING] = errorMsg; std::string body = RESPONSE_1 + faultStruct.toXml() + RESPONSE_2; std::string header = generateHeader(body); return header + body; } flrig-2.0.04/src/xmlrpcpp/XmlRpcServerMethod.h0000664000175000017500000000353514475136651016207 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCSERVERMETHOD_H_ #define _XMLRPCSERVERMETHOD_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include namespace XmlRpc { // Representation of a parameter or result value class XmlRpcValue; // The XmlRpcServer processes client requests to call RPCs class XmlRpcServer; //! Abstract class representing a single RPC method class XmlRpcServerMethod { public: //! Constructor XmlRpcServerMethod(std::string const& name, XmlRpcServer* server = 0); //! Destructor virtual ~XmlRpcServerMethod(); //! Returns the name of the method std::string& name() { return _name; } //! Execute the method. Subclasses must provide a definition for this method. virtual void execute(XmlRpcValue& params, XmlRpcValue& result) = 0; //! Returns a help string for the method. //! Subclasses should define this method if introspection is being used. virtual std::string help() { return std::string(); } protected: std::string _name; XmlRpcServer* _server; }; } // namespace XmlRpc #endif // _XMLRPCSERVERMETHOD_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcDispatch.h0000664000175000017500000000646214475136651015341 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCDISPATCH_H_ #define _XMLRPCDISPATCH_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include namespace XmlRpc { // An RPC source represents a file descriptor to monitor class XmlRpcSource; //! An object which monitors file descriptors for events and performs //! callbacks when interesting events happen. class XmlRpcDispatch { public: //! Constructor XmlRpcDispatch(); ~XmlRpcDispatch(); //! Values indicating the type of events a source is interested in enum EventType { ReadableEvent = 1, //!< data available to read WritableEvent = 2, //!< connected/data can be written without blocking Exception = 4 //!< uh oh }; //! Monitor this source for the event types specified by the event mask //! and call its event handler when any of the events occur. //! @param source The source to monitor //! @param eventMask Which event types to watch for. \see EventType void addSource(XmlRpcSource* source, unsigned eventMask); //! Stop monitoring this source. //! @param source The source to stop monitoring //! The source socket is not closed. void removeSource(XmlRpcSource* source); //! Modify the types of events to watch for on this source void setSourceEvents(XmlRpcSource* source, unsigned eventMask); //! Watch current set of sources and process events for the specified //! duration (in seconds, -1 implies wait forever, or until exit is called) void work(double timeSeconds); //! Exit from work routine void exit(); //! Clear all sources from the monitored sources list. Sources are closed. void clear(); protected: //! Wait for I/O on any source, timeout, or interrupt signal. bool waitForAndProcessEvents(double timeoutSeconds); //! Returns current time in seconds since something double getTime(); // A source to monitor and what to monitor it for struct MonitoredSource { MonitoredSource(XmlRpcSource* src, unsigned mask) : _src(src), _mask(mask) {} XmlRpcSource* getSource() const { return _src; } unsigned& getMask() { return _mask; } XmlRpcSource* _src; unsigned _mask; }; // A list of sources to monitor typedef std::vector< MonitoredSource > SourceList; // Sources being monitored SourceList _sources; // When work should stop (-1 implies wait forever, or until exit is called) double _endTime; bool _doClear; bool _inWork; }; } // namespace XmlRpc #endif // _XMLRPCDISPATCH_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpc.h0000664000175000017500000000603114475136651013651 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPC_H_ #define _XMLRPC_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include #include "XmlRpcClient.h" #include "XmlRpcException.h" #include "XmlRpcServer.h" #include "XmlRpcServerMethod.h" #include "XmlRpcValue.h" #include "XmlRpcUtil.h" #define HAS_XMLRPC_CLIENT_ID 1 namespace XmlRpc { //! An interface allowing custom handling of error message reporting. class XmlRpcErrorHandler { public: XmlRpcErrorHandler() {} virtual ~XmlRpcErrorHandler() {} //! Returns a pointer to the currently installed error handling object. static XmlRpcErrorHandler* getErrorHandler() { return _errorHandler; } //! Specifies the error handler. static void setErrorHandler(XmlRpcErrorHandler* eh) { _errorHandler = eh; } //! Report an error. Custom error handlers should define this method. virtual void error(const char* msg) = 0; protected: static XmlRpcErrorHandler* _errorHandler; }; //! An interface allowing custom handling of informational message reporting. class XmlRpcLogHandler { public: XmlRpcLogHandler() {} virtual ~XmlRpcLogHandler() {} //! Returns a pointer to the currently installed message reporting object. static XmlRpcLogHandler* getLogHandler() { return _logHandler; } //! Specifies the message handler. static void setLogHandler(XmlRpcLogHandler* lh) { _logHandler = lh; } //! Returns the level of verbosity of informational messages. 0 is no output, 5 is very verbose. static int getVerbosity() { return _verbosity; } //! Specify the level of verbosity of informational messages. 0 is no output, 5 is very verbose. static void setVerbosity(int v) { _verbosity = v; } //! Output a message. Custom error handlers should define this method. virtual void log(int level, const char* msg) = 0; protected: static XmlRpcLogHandler* _logHandler; static int _verbosity; }; //! Returns log message verbosity. This is short for XmlRpcLogHandler::getVerbosity() int getVerbosity(); //! Sets log message verbosity. This is short for XmlRpcLogHandler::setVerbosity(level) void setVerbosity(int level); //! Version identifier extern const char XMLRPC_VERSION[]; } // namespace XmlRpc #endif // _XMLRPC_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcServer.h0000664000175000017500000001276514475136651015053 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCSERVER_H_ #define _XMLRPCSERVER_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include #include #include "XmlRpcDispatch.h" #include "XmlRpcSource.h" namespace XmlRpc { extern std::string request_str; extern std::string client_id; // An abstract class supporting XML RPC methods class XmlRpcServerMethod; // Class representing connections to specific clients class XmlRpcServerConnection; // Class representing argument and result values class XmlRpcValue; //! A class to handle XML RPC requests class XmlRpcServer : public XmlRpcSource { public: //! Create a server object. XmlRpcServer(); //! Destructor. virtual ~XmlRpcServer(); //! Specify whether introspection is enabled or not. Default is not enabled. void enableIntrospection(bool enabled=true); //! Add a command to the RPC server void addMethod(XmlRpcServerMethod* method); //! Remove a command from the RPC server void removeMethod(XmlRpcServerMethod* method); //! Remove a command from the RPC server by name void removeMethod(const std::string& methodName); //! Look up a method by name XmlRpcServerMethod* findMethod(const std::string& name) const; //! Create a socket, bind to the specified port, and //! set it in listen mode to make it available for clients. //! @param port The port to bind and listen on (zero to choose an arbitrary port) bool bindAndListen(int port, int backlog = 5); //! Get the port number this server is listening on. int getPort(void) const; //! Process client requests for the specified time (in seconds) void work(double timeSeconds); //! Temporarily stop processing client requests and exit the work() method. void exit(); //! Close all connections with clients and the socket file descriptor void shutdown(); //! Introspection support void listMethods(XmlRpcValue& result); //! Parses the request xml, runs the method, generates the response (header+xml). //! Returns a fault response if an error occurs during method execution. virtual std::string executeRequest(std::string const& request); // XmlRpcSource interface implementation //! Handle client connection requests virtual unsigned handleEvent(unsigned eventType); //! Remove a connection from the dispatcher virtual void removeConnection(XmlRpcServerConnection*); protected: // Static data static const char METHODNAME_TAG[]; static const char PARAMS_TAG[]; static const char PARAM_TAG[]; static const std::string SYSTEM_MULTICALL; static const std::string METHODNAME; static const std::string PARAMS; static const std::string FAULTCODE; static const std::string FAULTSTRING; //! Accept a client connection request virtual void acceptConnection(); //! Create a new connection object for processing requests from a specific client. //! If the client is not authorized to connect, close the socket and return 0. virtual XmlRpcServerConnection* createConnection(XmlRpcSocket::Socket socket); //! Hand off a new connection object to a dispatcher. virtual void dispatchConnection(XmlRpcServerConnection* sc); //! Parse the methodName and parameters from the request. //! @returns the methodName std::string parseRequest(std::string const& request, XmlRpcValue& params); //! Execute a named method with the specified params. bool executeMethod(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result); //! Execute multiple calls and return the results in an array. //! System.multicall implementation bool executeMulticall(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result); //! Construct a response from the result XML. std::string generateResponse(std::string const& resultXml); //! Construct a fault response. std::string generateFaultResponse(std::string const& msg, int errorCode = -1); //! Return the appropriate headers for the response. std::string generateHeader(std::string const& body); //! Whether the introspection API is supported by this server bool _introspectionEnabled; //! Event dispatcher XmlRpcDispatch _disp; //! Collection of methods. This could be a set keyed on method name if we wanted... typedef std::map< std::string, XmlRpcServerMethod* > MethodMap; //! Registered RPC methods. MethodMap _methods; //! List all registered RPC methods (only available if introspection is enabled) XmlRpcServerMethod* _listMethods; //! Return help string for a specified method (only available if introspection is enabled) XmlRpcServerMethod* _methodHelp; }; } // namespace XmlRpc #endif //_XMLRPCSERVER_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcUtil.h0000664000175000017500000000565314475136651014520 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCUTIL_H_ #define _XMLRPCUTIL_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include #if defined(_MSC_VER) # define snprintf _snprintf # define vsnprintf _vsnprintf # define strcasecmp _stricmp # define strncasecmp _strnicmp #elif defined(__BORLANDC__) # define strcasecmp stricmp # define strncasecmp strnicmp #endif namespace XmlRpc { //! Utilities for XML parsing, encoding, and decoding and message handlers. class XmlRpcUtil { public: //! Parses the specified tag. No attributes are parsed, no validation is done. //! Sets val to the contents between and , or an empty string if is found. //! Returns true if the tag is parsed. Updates offset to char after static bool parseTag(const char* tag, std::string const& xml, int* offset, std::string &val); //! Returns true if the tag is found and updates offset to the char after the tag. //! If the tag is of the form , emptyTag is set to true. static bool findTag(const char* tag, std::string const& xml, int* offset, bool* emptyTag); //! Returns true if the tag is found at the specified offset (modulo any whitespace) //! and updates offset to the char after the tag. If an empty tag is found (eg, //! ), true is returned, offset is updated to be after the close of the tag, and //! emptyTag is set to true. static bool nextTagIs(const char* tag, std::string const& xml, int* offset, bool* emptyTag); //! Passes over the next tag found at the specified offset is , //! offset is updated to be after the close of the tag. //! Will skip over all characters until < is seen. static bool nextTagIsEnd(const char* tag, std::string const& xml, int* offset); //! Convert raw text to encoded xml. static std::string xmlEncode(const std::string& raw); //! Convert encoded xml to raw text static std::string xmlDecode(const std::string& encoded); //! Dump messages somewhere static void log(int level, const char* fmt, ...); //! Dump error messages somewhere static void error(const char* fmt, ...); }; } // namespace XmlRpc #endif // _XMLRPCUTIL_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcServerConnection.cpp0000664000175000017500000001657614502041135017411 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" // Must precede all FL includes #include "XmlRpcServerConnection.h" #include "XmlRpcDispatch.h" #include "XmlRpcServer.h" #include "XmlRpcSocket.h" #include "XmlRpcUtil.h" #include #include #include #include #include "support.h" #include "trace.h" using namespace XmlRpc; // The server delegates handling client requests to a serverConnection object. XmlRpcServerConnection::XmlRpcServerConnection(XmlRpcSocket::Socket fd, XmlRpcServer* server, bool deleteOnClose /*= false*/) : XmlRpcSource(fd, deleteOnClose) { XmlRpcUtil::log(2,"XmlRpcServerConnection: new socket %d.", fd); _server = server; _connectionState = READ_HEADER; _keepAlive = true; } XmlRpcServerConnection::~XmlRpcServerConnection() { XmlRpcUtil::log(4,"XmlRpcServerConnection dtor."); _server->removeConnection(this); } // Handle input on the server socket by accepting the connection // and reading the rpc request. Return true to continue to monitor // the socket for events, false to remove it from the dispatcher. unsigned XmlRpcServerConnection::handleEvent(unsigned /*eventType*/) { if (_connectionState == READ_HEADER) if ( ! readHeader()) return 0; if (_connectionState == READ_REQUEST) if ( ! readRequest()) return 0; if (_connectionState == WRITE_RESPONSE) if ( ! writeResponse()) return 0; return (_connectionState == WRITE_RESPONSE) ? XmlRpcDispatch::WritableEvent : XmlRpcDispatch::ReadableEvent; } bool XmlRpcServerConnection::readHeader() { // Read available data bool eof; if ( ! nbRead(_header, &eof)) { // Its only an error if we already have read some data if (_header.length() > 0) XmlRpcUtil::error("XmlRpcServerConnection::readHeader: error while reading header (%s).",XmlRpcSocket::getErrorMsg().c_str()); return false; } XmlRpcUtil::log(4, "XmlRpcServerConnection::readHeader: read %d bytes.", _header.length()); char *hp = (char*)_header.c_str(); // Start of header char *ep = hp + _header.length(); // End of string char *bp = 0; // Start of body char *lp = 0; // Start of content-length value char *kp = 0; // Start of connection value for (char *cp = hp; (bp == 0) && (cp < ep); ++cp) { if ((ep - cp > 16) && (strncasecmp(cp, "Content-length: ", 16) == 0)) lp = cp + 16; else if ((ep - cp > 12) && (strncasecmp(cp, "Connection: ", 12) == 0)) kp = cp + 12; else if ((ep - cp > 4) && (strncmp(cp, "\r\n\r\n", 4) == 0)) bp = cp + 4; else if ((ep - cp > 2) && (strncmp(cp, "\n\n", 2) == 0)) bp = cp + 2; } // If we haven't gotten the entire header yet, return (keep reading) if (bp == 0) { // EOF in the middle of a request is an error, otherwise its ok if (eof) { XmlRpcUtil::log(4, "readHeader: EOF"); if (_header.length() > 0) XmlRpcUtil::error("XmlRpcServerConnection::readHeader: EOF while reading header"); return false; // Either way we close the connection } return true; // Keep reading } // Decode content length if (lp == 0) { XmlRpcUtil::error("XmlRpcServerConnection::readHeader: No Content-length specified"); return false; // We could try to figure it out by parsing as we read, but for now... } _contentLength = atoi(lp); if (_contentLength <= 0) { XmlRpcUtil::error("XmlRpcServerConnection::readHeader: Invalid Content-length specified (%d).", _contentLength); return false; } XmlRpcUtil::log(3, "readHeader: specified content length is %d.", _contentLength); // Otherwise copy non-header data to request buffer and set state to read request. _request = bp; // Parse out any interesting bits from the header (HTTP version, connection) _keepAlive = true; if (_header.find("HTTP/1.0") != std::string::npos) { if (kp == 0 || strncasecmp(kp, "keep-alive", 10) != 0) _keepAlive = false; // Default for HTTP 1.0 is to close the connection } else { if (kp != 0 && strncasecmp(kp, "close", 5) == 0) _keepAlive = false; } XmlRpcUtil::log(3, "KeepAlive: %d", _keepAlive); _header = ""; _connectionState = READ_REQUEST; return true; // Continue monitoring this source } bool XmlRpcServerConnection::readRequest() { // If we dont have the entire request yet, read available data if (int(_request.length()) < _contentLength) { bool eof; if ( ! nbRead(_request, &eof)) { XmlRpcUtil::error("XmlRpcServerConnection::readRequest: read error (%s).",XmlRpcSocket::getErrorMsg().c_str()); if (progStatus.rpctrace) rpc_trace(2, "readRequest: read error ", XmlRpcSocket::getErrorMsg().c_str()); return false; } // If we haven't gotten the entire request yet, return (keep reading) if (int(_request.length()) < _contentLength) { if (eof) { XmlRpcUtil::error("XmlRpcServerConnection::readRequest: EOF while reading request"); return false; // Either way we close the connection } return true; } } // Otherwise, parse and dispatch the request if (progStatus.rpctrace) rpc_trace(2, "readRequest:\n", _request.c_str()); else XmlRpcUtil::log(3, "readRequest:\n%s\n", _request.c_str()); _connectionState = WRITE_RESPONSE; return true; // Continue monitoring this source } bool XmlRpcServerConnection::writeResponse() { if (_response.length() == 0) { executeRequest(); _bytesWritten = 0; if (_response.length() == 0) { XmlRpcUtil::error("XmlRpcServerConnection::writeResponse: empty response."); if (progStatus.rpctrace) rpc_trace(1, "writeResponse: empty response\n"); return false; } } // Try to write the response if ( ! nbWrite(_response, &_bytesWritten)) { XmlRpcUtil::error("XmlRpcServerConnection::writeResponse: write error (%s).",XmlRpcSocket::getErrorMsg().c_str()); if (progStatus.rpctrace) rpc_trace(2, "writeResponse: write error: ", XmlRpcSocket::getErrorMsg().c_str()); return false; } XmlRpcUtil::log(3, "XmlRpcServerConnection::writeResponse:\n%s\n", _response.c_str()); if (progStatus.rpctrace) rpc_trace(2, "writeResponse:\n", _response.c_str()); // Prepare to read the next request if (_bytesWritten == int(_response.length())) { _header = ""; _request = ""; _response = ""; _connectionState = READ_HEADER; } return _keepAlive; // Continue monitoring this source if true } //! Helper method to execute the client request void XmlRpcServerConnection::executeRequest() { _response = _server->executeRequest(_request); } flrig-2.0.04/src/xmlrpcpp/XmlRpcSource.h0000664000175000017500000000642214475136651015036 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCSOURCE_H_ #define _XMLRPCSOURCE_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include "XmlRpcSocket.h" namespace XmlRpc { //! Proxy for Ssl data to avoid including headers here. struct SslProxy; //! An RPC source represents a file descriptor to monitor class XmlRpcSource { public: //! Constructor //! @param fd The socket file descriptor to monitor. //! @param deleteOnClose If true, the object deletes itself when close is called. XmlRpcSource(XmlRpcSocket::Socket fd = XmlRpcSocket::Invalid, bool deleteOnClose = false); //! Destructor virtual ~XmlRpcSource(); //! Return the file descriptor being monitored. XmlRpcSocket::Socket getfd() const { return _fd; } //! Specify the file descriptor to monitor. void setfd(XmlRpcSocket::Socket fd) { _fd = fd; } //! Return whether the file descriptor should be kept open if it is no longer monitored. bool getKeepOpen() const { return _keepOpen; } //! Specify whether the file descriptor should be kept open if it is no longer monitored. void setKeepOpen(bool b=true) { _keepOpen = b; } //! Return whether ssl is enabled. bool getSslEnabled() const { return _sslEnabled; } //! Specify whether to enable ssl. Use getSslEnabled() to verify that Ssl is available. void setSslEnabled(bool b=true); //! Close the owned fd. If deleteOnClose was specified at construction, the object is deleted. virtual void close(); //! Return true to continue monitoring this source virtual unsigned handleEvent(unsigned eventType) = 0; protected: // Execution processing helpers virtual bool doConnect(); //! Read text from the source. Returns false on error. bool nbRead(std::string& s, bool *eof); //! Write text to the source. Returns false on error. bool nbWrite(std::string const& s, int *bytesSoFar); private: // Socket. This is an int for linux/unix, and unsigned on win32, and unsigned __int64 on win64. // Casting to int/long/unsigned on win64 is a bad idea. XmlRpcSocket::Socket _fd; // In the server, a new source (XmlRpcServerConnection) is created // for each connected client. When each connection is closed, the // corresponding source object is deleted. bool _deleteOnClose; // In the client, keep connections open if you intend to make multiple calls. bool _keepOpen; // Enable use of SSL bool _sslEnabled; // SSL data SslProxy *_ssl; }; } // namespace XmlRpc #endif //_XMLRPCSOURCE_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcException.h0000664000175000017500000000313114475136651015526 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCEXCEPTION_H_ #define _XMLRPCEXCEPTION_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #ifndef MAKEDEPEND # include #endif namespace XmlRpc { //! A class representing an error. //! If server methods throw this exception, a fault response is returned //! to the client. class XmlRpcException { public: //! Constructor //! @param message A descriptive error message //! @param code An integer error code XmlRpcException(const std::string& message, int code=-1) : _message(message), _code(code) {} //! Return the error message. const std::string& getMessage() const { return _message; } //! Return the error code. int getCode() const { return _code; } private: std::string _message; int _code; }; } #endif // _XMLRPCEXCEPTION_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcClient.h0000664000175000017500000001301114475136651015004 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #ifndef _XMLRPCCLIENT_H_ #define _XMLRPCCLIENT_H_ #if defined(_MSC_VER) # pragma warning(disable:4786) // identifier was truncated in debug info #endif #include #include "XmlRpcDispatch.h" #include "XmlRpcSource.h" namespace XmlRpc { extern std::string pname; extern void set_pname(std::string pn); // Arguments and results are represented by XmlRpcValues class XmlRpcValue; //! A class to send XML RPC requests to a server and return the results. class XmlRpcClient : public XmlRpcSource { public: //! Construct a client to connect to the server at the specified host:port address //! @param host The name of the remote machine hosting the server, eg "myserver.mycompany.com" //! @param port The port on the remote machine where the server is listening //! @param uri An optional string to be sent as the URI in the HTTP GET header //! Note that the host is not a URL, do not prepend "http://" or other protocol specifiers. XmlRpcClient(const char* host, int port, const char* uri=0); //! Construct a client to connect to the server at the specified host:port address including HTTP authentication //! @param host The name of the remote machine hosting the server //! @param port The port on the remote machine where the server is listening //! @param login The username passed to the server //! @param pass The password passed to the server //! @param uri An optional string to be sent as the URI in the HTTP GET header XmlRpcClient(const char* host, int port, const char* login, const char* password, const char* uri=0); //! Destructor virtual ~XmlRpcClient(); //! Execute the named procedure on the remote server. //! @param method The name of the remote procedure to execute //! @param params An array of the arguments for the method //! @param result The result value to be returned to the client //! @param timeoutSeconds Seconds to wait for a response (defaults to forever) //! @return true if the request was sent and a result received //! (although the result might be a fault). //! //! Currently this is a synchronous (blocking) implementation (execute //! does not return until it receives a response or an error). Use isFault() //! to determine whether the result is a fault response. bool execute(const char* method, XmlRpcValue const& params, XmlRpcValue& result, double timeoutSeconds = -1); //! Returns true if the result of the last execute() was a fault response. bool isFault() const { return _isFault; } //! Return the host name of the server const char* const host() const { return _host.c_str(); } //! Return the port int port() const { return _port; } //! Return the URI const char* const uri() const { return _uri.c_str(); } // XmlRpcSource interface implementation //! Close the connection virtual void close(); //! Handle server responses. Called by the event dispatcher during execute. //! @param eventType The type of event that occurred. //! @see XmlRpcDispatch::EventType virtual unsigned handleEvent(unsigned eventType); protected: // Execution processing helpers virtual bool doConnect(); virtual bool setupConnection(); virtual bool generateRequest(const char* method, XmlRpcValue const& params); virtual std::string generateHeader(std::string const& body); virtual bool writeRequest(); virtual bool readHeader(); virtual bool parseHeader(); virtual bool readResponse(); virtual bool parseResponse(XmlRpcValue& result); // Possible IO states for the connection enum ClientConnectionState { NO_CONNECTION, CONNECTING, WRITE_REQUEST, READ_HEADER, READ_RESPONSE, IDLE }; ClientConnectionState _connectionState; // Server location std::string _host; std::string _uri; int _port; // Login information for HTTP authentication std::string _login; std::string _password; // The xml-encoded request, http header of response, and response xml std::string _request; std::string _header; std::string _response; // Number of times the client has attempted to send the request int _sendAttempts; // Number of bytes of the request that have been written to the socket so far int _bytesWritten; // True if we are currently executing a request. If you want to multithread, // each thread should have its own client. bool _executing; // True if the server closed the connection bool _eof; // True if a fault response was returned by the server bool _isFault; // Number of bytes expected in the response body (parsed from response header) int _contentLength; // Event dispatcher XmlRpcDispatch _disp; }; // class XmlRpcClient } // namespace XmlRpc #endif // _XMLRPCCLIENT_H_ flrig-2.0.04/src/xmlrpcpp/XmlRpcSource.cpp0000664000175000017500000001114514502041135015346 00000000000000// ---------------------------------------------------------------------------- // // flxmlrpc Copyright (c) 2015 by W1HKJ, Dave Freese // // XmlRpc++ Copyright (c) 2002-2008 by Chris Morley // // This file is part of fldigi // // flxmlrpc is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "XmlRpcSource.h" #include "XmlRpcUtil.h" #if defined(_WINDOWS) #undef _WINSOCKAPI_ # include # include #else extern "C" { # include # include } #endif #if USE_OPENSSL # include # include # include # include # include #endif namespace XmlRpc { struct SslProxy { #if USE_OPENSSL SSL_CTX* _ssl_ctx; SSL_METHOD* _ssl_meth; SSL* _ssl_ssl; #endif }; XmlRpcSource::XmlRpcSource(XmlRpcSocket::Socket fd /*= -1*/, bool deleteOnClose /*= false*/) : _fd(fd) , _deleteOnClose(deleteOnClose) , _keepOpen(false) , _sslEnabled(false) , _ssl(0) { } XmlRpcSource::~XmlRpcSource() { delete _ssl; } void XmlRpcSource::setSslEnabled(bool b /*=true*/) { #if USE_OPENSSL _sslEnabled = b; #endif } bool XmlRpcSource::doConnect() { #if USE_OPENSSL // Perform SSL if needed if (_sslEnabled) { _ssl = new SslProxy; SSLeay_add_ssl_algorithms(); _ssl->_ssl_meth = SSLv23_client_method(); SSL_load_error_strings(); _ssl->_ssl_ctx = SSL_CTX_new(_ssl->_ssl_meth); _ssl->_ssl_ssl = SSL_new(_ssl->_ssl_ctx); SSL_set_fd(_ssl->_ssl_ssl, _fd); return SSL_connect(_ssl->_ssl_ssl) == 1; } #endif return true; } // Read available text from the specified socket. Returns false on error. bool XmlRpcSource::nbRead(std::string& s, bool *eof) { const int READ_SIZE = 4096; // Number of bytes to attempt to read at a time char readBuf[READ_SIZE]; bool wouldBlock = false; *eof = false; while ( ! wouldBlock && ! *eof) { int n; #if USE_OPENSSL // Perform SSL if needed if (_ssl && _ssl->_ssl_ssl) { n = SSL_read(_ssl->_ssl_ssl, readBuf, READ_SIZE-1); } else #endif #if defined(_WINDOWS) n = recv(_fd, readBuf, READ_SIZE-1, 0); #else n = read(_fd, readBuf, READ_SIZE-1); #endif XmlRpcUtil::log(5, "XmlRpcSocket::nbRead: read/recv returned %d.", n); if (n > 0) { readBuf[n] = 0; s.append(readBuf, n); } else if (n == 0) { *eof = true; } else if (XmlRpcSocket::nonFatalError()) { wouldBlock = true; } else { return false; // Error } } return true; } // Write text to the socket. Returns false on error. bool XmlRpcSource::nbWrite(std::string const& s, int *bytesSoFar) { int nToWrite = int(s.length()) - *bytesSoFar; const char *sp = s.c_str() + *bytesSoFar; bool wouldBlock = false; while ( nToWrite > 0 && ! wouldBlock ) { int n; #if USE_OPENSSL // Perform SSL if needed if (_ssl && _ssl->_ssl_ssl) { n = SSL_write(_ssl->_ssl_ssl, sp, nToWrite); } else #endif #if defined(_WINDOWS) n = send(_fd, sp, nToWrite, 0); #else n = write(_fd, sp, nToWrite); #endif XmlRpcUtil::log(5, "XmlRpcSocket::nbWrite: send/write returned %d.", n); if (n > 0) { sp += n; *bytesSoFar += n; nToWrite -= n; } else if (XmlRpcSocket::nonFatalError()) { wouldBlock = true; } else { return false; // Error } } return true; } void XmlRpcSource::close() { #if USE_OPENSSL if (_ssl && _ssl->_ssl_ssl) { SSL_shutdown(_ssl->_ssl_ssl); // Should close be called here ? ... SSL_free(_ssl->_ssl_ssl); SSL_CTX_free(_ssl->_ssl_ctx); delete _ssl; _ssl = 0; } #endif if ( (int)_fd != -1) { XmlRpcUtil::log(2,"XmlRpcSource::close: closing socket %d.", _fd); XmlRpcSocket::close(_fd); _fd = -1; } if (_deleteOnClose) { XmlRpcUtil::log(2,"XmlRpcSource::close: deleting this"); _deleteOnClose = false; delete this; } } } // namespace XmlRpc flrig-2.0.04/src/cwio/0000775000175000017500000000000014511461606011437 500000000000000flrig-2.0.04/src/cwio/morse.cxx0000664000175000017500000001175414502041135013227 00000000000000// --------------------------------------------------------------------- // morse.cxx -- morse code modem // // Copyright (C) 2020 // Dave Freese, W1HKJ // // This file is part of flrig // // flrig is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // --------------------------------------------------------------------- #include "config.h" #include #include #include "morse.h" #include "status.h" /* * Morse code characters table. This table allows lookup of the Morse * shape of a given alphanumeric character. Shapes are held as a string, * with "-' representing dash, and ".' representing dot. The table ends * with a NULL entry. * * This is the main table from which the other tables are computed. * * The Prosigns are also defined in the configuration.h file * The user can specify the character which substitutes for the prosign */ CWstruct Cmorse::cw_table[] = { // Prosigns { "=", "-...-" }, // { "~", ".-.-" }, // { "<", ".-..." }, // { ">", ".-.-." }, // { "%", "...-.-" }, // { "+", "-.--." }, // { "&", "..-.-" }, // { "{", "....--" }, // { "}", "...-." }, // // upper case letters { "A", ".-" }, { "B", "-..." }, { "C", "-.-." }, { "D", "-.." }, { "E", "." }, { "F", "..-." }, { "G", "--." }, { "H", "...." }, { "I", ".." }, { "J", ".---" }, { "K", "-.-" }, { "L", ".-.." }, { "M", "--" }, { "N", "-." }, { "O", "---" }, { "P", ".--." }, { "Q", "--.-" }, { "R", ".-." }, { "S", "..." }, { "T", "-" }, { "U", "..-" }, { "V", "...-" }, { "W", ".--" }, { "X", "-..-" }, { "Y", "-.--" }, { "Z", "--.." }, // lower case 7 bit letters { "a", ".-" }, { "b", "-..." }, { "c", "-.-." }, { "d", "-.." }, { "e", "." }, { "f", "..-." }, { "g", "--." }, { "h", "...." }, { "i", ".." }, { "j", ".---" }, { "k", "-.-" }, { "l", ".-.." }, { "m", "--" }, { "n", "-." }, { "o", "---" }, { "p", ".--." }, { "q", "--.-" }, { "r", ".-." }, { "s", "..." }, { "t", "-" }, { "u", "..-" }, { "v", "...-" }, { "w", ".--" }, { "x", "-..-" }, { "y", "-.--" }, { "z", "--.." }, // numerals { "0", "-----" }, { "1", ".----" }, { "2", "..---" }, { "3", "...--" }, { "4", "....-" }, { "5", "....." }, { "6", "-...." }, { "7", "--..." }, { "8", "---.." }, { "9", "----." }, // punctuation { "\"", ".-..-." }, { "\'", ".----." }, { "$", "...-..-" }, { "(", "-.--." }, { ")", "-.--.-" }, { ",", "--..--" }, { "-", "-....-" }, { ".", ".-.-.-" }, { "/", "-..-." }, { ":", "---..." }, { ";", "-.-.-." }, { "?", "..--.." }, { "_", "..--.-" }, { "@", ".--.-." }, { "!", "-.-.--" }, // accented characters { "Ä", ".-.-" }, // A umlaut { "ä", ".-.-" }, // A umlaut { "Æ", ".-.-" }, // A aelig { "æ", ".-.-" }, // A aelig { "Å", ".--.-" }, // A ring { "å", ".--.-" }, // A ring { "Ç", "-.-.." }, // C cedilla { "ç", "-.-.." }, // C cedilla { "È", ".-..-" }, // E grave { "è", ".-..-" }, // E grave { "É", "..-.." }, // E acute { "é", "..-.." }, // E acute { "Ó", "---." }, // O acute { "ó", "---." }, // O acute { "Ö", "---." }, // O umlaut { "ö", "---." }, // O umlaut { "Ø", "---." }, // O slash { "ø", "---." }, // O slash { "Ñ", "--.--" }, // N tilde { "ñ", "--.--" }, // N tilde { "Ü", "..--" }, // U umlaut { "ü", "..--" }, // U umlaut { "Û", "..--" }, // U circ { "û", "..--" }, // U circ // array termination { "", ""} }; //---------------------------------------------------------------------- std::string Cmorse::tx_lookup(int c) { c &= 0xFF; utf8 += c; if (((utf8[0] & 0xFF) > 0x7F) && (utf8.length() == 1)) { return ""; } for (int i = 0; cw_table[i].rpr.length(); i++) { if (utf8 == cw_table[i].chr) { utf8.clear(); return cw_table[i].rpr; } } utf8.clear(); return ""; } int Cmorse::tx_length(int c) { if (c == ' ') return 4; std::string ms = tx_lookup(c); if (ms.empty()) return 0; int len = 0; for (size_t i = 0; i < ms.length(); i++) if (ms[i] == '.') len += 2; else len += 4; len += 2; return len; } void Cmorse::init() { cw_table[0].chr[0] = progStatus.BT[0]; cw_table[1].chr[0] = progStatus.AA[0]; cw_table[2].chr[0] = progStatus.AS[0]; cw_table[3].chr[0] = progStatus.AR[0]; cw_table[4].chr[0] = progStatus.SK[0]; cw_table[5].chr[0] = progStatus.KN[0]; cw_table[6].chr[0] = progStatus.INT[0]; cw_table[7].chr[0] = progStatus.HM[0]; cw_table[8].chr[0] = progStatus.VE[0]; } //---------------------------------------------------------------------- flrig-2.0.04/src/cwio/cwio.cxx0000664000175000017500000004340214502041135013036 00000000000000 // --------------------------------------------------------------------- // cwio.cxx -- morse code modem // // Copyright (C) 2020 // Dave Freese, W1HKJ // // This file is part of flrig // // flrig is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // --------------------------------------------------------------------- #include "config.h" #include #include #include #include #include #include #include #include #include #include #include "status.h" #include "util.h" #include "threads.h" #include "debug.h" #include "tod_clock.h" #include "cwio.h" #include "cwioUI.h" #include "support.h" #include "status.h" #define CWIO_DEBUG Cserial *cwio_serial = 0; Cmorse *morse = 0; static pthread_t cwio_pthread; static pthread_cond_t cwio_cond; static pthread_mutex_t cwio_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t cwio_text_mutex = PTHREAD_MUTEX_INITIALIZER; int cwio_process = NONE; bool cwio_thread_running = false; static std::string new_text; std::string cwio_text; //====================================================================== // sub millisecond accurate sleep function // sleep_time in seconds extern double monotonic_seconds(); #ifdef CWIO_DEBUG FILE *fcwio = (FILE *)0; FILE *fcwio2 = (FILE *)0; #endif static double lasterr = 0; int cw_sleep (double sleep_time) { struct timespec tv1, tv2; double start_at = monotonic_seconds(); double end_at = start_at + sleep_time; double delay = sleep_time - 0.010; tv1.tv_sec = (time_t) delay; tv1.tv_nsec = (long) ((delay - tv1.tv_sec) * 1e+9); tv2.tv_sec = 0; tv2.tv_nsec = 10; #ifdef __WIN32__ timeBeginPeriod(1); nanosleep (&tv1, NULL); while ((lasterr = end_at - monotonic_seconds()) > 0) nanosleep(&tv2, NULL); timeEndPeriod(1); #else nanosleep (&tv1, NULL); while (((lasterr = end_at - monotonic_seconds()) > 0)) nanosleep(&tv2, NULL); #endif #ifdef CWIO_DEBUG if (fcwio) fprintf(fcwio, "%f, %f\n", sleep_time, (end_at - lasterr - start_at)); #endif return 0; } void cwio_key(bool state) { Cserial *port = cwio_serial; switch (progStatus.cwioSHARED) { case 1: port = RigSerial; break; case 2: port = AuxSerial; break; case 3: port = SepSerial; break; default: port = cwio_serial; } if (!port) return; if (!port->IsOpen()) return; if (progStatus.cwioPTT) doPTT(state); if (progStatus.cwioKEYLINE == 2) { port->setDTR(progStatus.cwioINVERTED ? !state : state); } else if (progStatus.cwioKEYLINE == 1) { port->setRTS(progStatus.cwioINVERTED ? !state : state); } return; } double start_at2; void send_cwkey(char c) { start_at2 = monotonic_seconds(); std::string code = ""; double tc = 0; double tch = 0; double twd = 0; double xcvr_corr = 0; double comp = progStatus.cwio_comp * 1e-3; double requested = 0; Cserial *port = cwio_serial; switch (progStatus.cwioSHARED) { case 1: port = RigSerial; break; case 2: port = AuxSerial; break; case 3: port = SepSerial; break; default: port = cwio_serial; } if (!port) goto exit_send_cwkey; if (!port->IsOpen()) goto exit_send_cwkey; tc = 1.2 / progStatus.cwioWPM; if (comp < tc) tc -= comp; tch = 3 * tc; twd = 4 * tc; xcvr_corr = progStatus.cwio_keycorr * 1e-3; if (xcvr_corr < -tc / 2) xcvr_corr = - tc / 2; else if (xcvr_corr > tc / 2) xcvr_corr = tc / 2; if (c == ' ' || c == 0x0a) { requested += twd; cw_sleep(twd); goto exit_send_cwkey; } code = morse->tx_lookup(c); for (size_t n = 0; n < code.length(); n++) { if (cwio_process == END) { goto exit_send_cwkey; } if (progStatus.cwioKEYLINE == 2) { cwio_key(progStatus.cwioINVERTED ? 0 : 1); } else if (progStatus.cwioKEYLINE == 1) { cwio_key(progStatus.cwioINVERTED ? 0 : 1); } if (code[n] == '.') { requested += (tc + xcvr_corr); cw_sleep((tc + xcvr_corr)); } else { requested += tch; cw_sleep(tch); } if (progStatus.cwioKEYLINE == 2) { cwio_key(progStatus.cwioINVERTED ? 1 : 0); } else if (progStatus.cwioKEYLINE == 1) { cwio_key(progStatus.cwioINVERTED ? 1 : 0); } if (n == code.length() -1) { requested += tch; cw_sleep(tch); } else { requested += (tc - xcvr_corr); cw_sleep((tc - xcvr_corr)); } } exit_send_cwkey: #ifdef CWIO_DEBUG if (fcwio2) { double duration = monotonic_seconds() - start_at2; fprintf(fcwio2, "%f, %f, %f\n", duration, requested, duration - requested); } #endif return; } void reset_cwioport() { Cserial *port = cwio_serial; switch (progStatus.cwioSHARED) { case 1: port = RigSerial; break; case 2: port = AuxSerial; break; case 3: port = SepSerial; break; default: port = cwio_serial; } if (progStatus.cwioKEYLINE == 2) { port->setDTR(progStatus.cwioINVERTED ? 1 : 0); } else if (progStatus.cwioKEYLINE == 1) { port->setRTS(progStatus.cwioINVERTED ? 1 : 0); } } int open_cwkey() { if (progStatus.cwioSHARED) { reset_cwioport(); return 1; } if (!cwio_serial) cwio_serial = new Cserial; cwio_serial->Device(progStatus.cwioPORT); if (cwio_serial->OpenPort() == false) { LOG_ERROR("Cannot open serial port %s", cwio_serial->Device().c_str()); cwio_serial = 0; return 0; } LOG_INFO("Opened %s for CW keyline control", cwio_serial->Device().c_str()); reset_cwioport(); return 1; } void close_cwkey() { if (cwio_serial) { cwio_serial->ClosePort(); } } static std::string snd; void update_txt_to_send(void *) { txt_to_send->value(snd.c_str()); txt_to_send->redraw(); } void terminate_sending(void *) { btn_cwioSEND->value(0); } void sending_text() { char c = 0; if (progStatus.cwioPTT) { doPTT(1); MilliSleep(50); } while (cwio_process == SEND) { c = 0; { guard_lock lck(&cwio_text_mutex); if (!cwio_text.empty()) { c = cwio_text[0]; cwio_text.erase(0,1); } } if (!c) { snd = txt_to_send->value(); if (!snd.empty()) { c = snd[0]; snd.erase(0,1); Fl::awake(update_txt_to_send); } } if (c == ']') { cwio_process = END; Fl::awake(terminate_sending); return; } if (c) send_cwkey(c); else MilliSleep(50); } if (progStatus.cwioPTT) { doPTT(0); MilliSleep(50); } } void update_comp_value(void *) { cnt_cwio_comp->value(progStatus.cwio_comp); cnt_cwio_comp->redraw(); btn_cw_dtr_calibrate->value(0); btn_cw_dtr_calibrate->redraw(); } void do_calibration() { std::string paris = "PARIS "; std::string teststr; double start_time = 0; double end_time = 0; progStatus.cwio_comp = 0; for (int i = 0; i < progStatus.cwioWPM; i++) teststr.append(paris); txt_to_send->value(); start_time = monotonic_seconds(); for (size_t n = 0; n < teststr.length(); n++) { send_cwkey(teststr[n]); } end_time = monotonic_seconds(); double corr = 1000.0 * (end_time - start_time - 60.0) / (50.0 * progStatus.cwioWPM); progStatus.cwio_comp = corr; Fl::awake(update_comp_value); } //---------------------------------------------------------------------- // cwio thread //---------------------------------------------------------------------- extern bool PRIORITY; void *cwio_loop(void *) { cwio_thread_running = true; cwio_process = NONE; #if 1 if (PRIORITY) { char estr[200]; std::string erfname = RigHomeDir; erfname.append("priority.txt"); FILE *erfile = fopen(erfname.c_str(),"w"); #if 0 //#ifndef __WIN32__ int erc = nice(-10); if (erc == -1) snprintf(estr, sizeof(estr), "%d: errno: %d, %s", __LINE__, errno, strerror(errno)); else snprintf(estr, sizeof(estr), "%d: set thread priority to %d", __LINE__, erc); fprintf(erfile, "%s\n", estr); #else // bump up the cwio thread priority pthread_attr_t tattr; if (pthread_attr_init(&tattr)) { LOG_ERROR("cwio thread fail (pthread_attr_init)"); snprintf(estr, sizeof(estr), "%d: errno: %d, %s", __LINE__, errno, strerror(errno)); fprintf(erfile, "%s\n", estr); } sched_param param; int sched; if (pthread_attr_getinheritsched(&tattr, &sched)) { LOG_ERROR("cwio thread fail (pthread_attr_getinheritsched)"); snprintf(estr, sizeof(estr), "%d: errno: %d, %s", __LINE__, errno, strerror(errno)); fprintf(erfile, "%s\n", estr); } sched = PTHREAD_EXPLICIT_SCHED; if (pthread_attr_setinheritsched(&tattr, sched)) { LOG_ERROR("cwio thread fail (pthread_attr_setinheritsched)"); snprintf(estr, sizeof(estr), "%d: errno: %d, %s", __LINE__, errno, strerror(errno)); fprintf(erfile, "%s\n", estr); } if (pthread_attr_getschedparam(&tattr, ¶m)) { LOG_ERROR("cwio thread fail (pthread_attr_getscheduparam)"); snprintf(estr, sizeof(estr), "%d: errno: %d, %s", __LINE__, errno, strerror(errno)); fprintf(erfile, "%s\n", estr); } snprintf(estr, sizeof(estr), "%d: priority old = %d", __LINE__, param.sched_priority); fprintf(erfile, "%s\n", estr); param.sched_priority = sched_get_priority_max(SCHED_FIFO); snprintf(estr, sizeof(estr), "%d: priority new = %d", __LINE__, param.sched_priority); fprintf(erfile, "%s\n", estr); if (pthread_attr_setschedparam(&tattr, ¶m)) { LOG_ERROR("cwio thread fail (pthread_attr_setscheduparam)"); snprintf(estr, sizeof(estr), "%d: errno: %d, %s", __LINE__, errno, strerror(errno)); fprintf(erfile, "%s\n", estr); } if (pthread_attr_getschedparam(&tattr, ¶m)) { LOG_ERROR("cwio thread fail (pthread_attr_getscheduparam)"); snprintf(estr, sizeof(estr), "%d: errno: %d, %s", __LINE__, errno, strerror(errno)); fprintf(erfile, "%s\n", estr); } snprintf(estr, sizeof(estr), "%d: priority set to %d", __LINE__, param.sched_priority); fprintf(erfile, "%s\n", estr); #endif fclose(erfile); } // PRIORITY #endif while (1) { pthread_mutex_lock(&cwio_mutex); pthread_cond_wait(&cwio_cond, &cwio_mutex); pthread_mutex_unlock(&cwio_mutex); if (cwio_process == TERMINATE) return NULL; if (cwio_process == SEND) sending_text(); if (cwio_process == CALIBRATE) do_calibration(); } return NULL; } int start_cwio_thread() { if(cwio_thread_running) return 0; if (!morse) morse = new Cmorse; memset((void *) &cwio_pthread, 0, sizeof(cwio_pthread)); memset((void *) &cwio_mutex, 0, sizeof(cwio_mutex)); memset((void *) &cwio_cond, 0, sizeof(cwio_cond)); #ifdef CWIO_DEBUG if (!fcwio) { std::string debug_fname; debug_fname.assign(RigHomeDir).append("cwio_timing.txt"); fcwio = fopen(debug_fname.c_str(), "a"); } if (!fcwio2) { std::string debug_fname2; debug_fname2.assign(RigHomeDir).append("cwio_bits.txt"); fcwio2 = fopen(debug_fname2.c_str(), "a"); } #endif if(pthread_cond_init(&cwio_cond, NULL)) { LOG_ERROR("cwio thread create fail (pthread_cond_init)"); return 1; } if(pthread_mutex_init(&cwio_mutex, NULL)) { LOG_ERROR("cwio thread create fail (pthread_mutex_init)"); return 1; } #if 0 // bump up the cwio thread priority pthread_attr_t tattr; if (pthread_attr_init(&tattr)) { LOG_ERROR("cwio thread fail (pthread_attr_init)"); std::cout << __LINE__ << " : " << errno << ", " << strerror(errno) << std::endl; } sched_param param; int sched; if (pthread_attr_getinheritsched(&tattr, &sched)) { LOG_ERROR("cwio thread fail (pthread_attr_getinheritsched)"); std::cout << __LINE__ << " : errno " << errno << ", " << strerror(errno) << std::endl; } sched = PTHREAD_EXPLICIT_SCHED; if (pthread_attr_setinheritsched(&tattr, sched)) { LOG_ERROR("cwio thread fail (pthread_attr_setinheritsched)"); std::cout << __LINE__ << " : errno " << errno << ", " << strerror(errno) << std::endl; } if (pthread_attr_getschedparam(&tattr, ¶m)) { LOG_ERROR("cwio thread fail (pthread_attr_getscheduparam)"); std::cout << __LINE__ << " : errno " << errno << ", " << strerror(errno) << std::endl; } std::cout << __LINE__ << " : priority old = " << param.sched_priority << std::endl; param.sched_priority = sched_get_priority_max(SCHED_FIFO); std::cout << __LINE__ << " : priority new = " << param.sched_priority << std::endl; if (pthread_attr_setschedparam(&tattr, ¶m)) { LOG_ERROR("cwio thread fail (pthread_attr_setscheduparam)"); std::cout << __LINE__ << " : errno " << errno << ", " << strerror(errno) << std::endl; } if (pthread_attr_getschedparam(&tattr, ¶m)) { LOG_ERROR("cwio thread fail (pthread_attr_getscheduparam)"); std::cout << __LINE__ << " : errno " << errno << ", " << strerror(errno) << std::endl; } std::cout << __LINE__ << " : priority got = " << param.sched_priority << std::endl; #endif if (pthread_create(&cwio_pthread, NULL, cwio_loop, NULL) < 0) { pthread_mutex_destroy(&cwio_mutex); LOG_ERROR("cwio thread create fail (pthread_create)"); std::cout << __LINE__ << " : errno " << errno << ", " << strerror(errno) << std::endl; return 1; } LOG_INFO("started cwio thread"); MilliSleep(50); // Give the CPU time to set 'cwio_thread_running' return 0; } void stop_cwio_thread() { if(!cwio_thread_running) return; cwio_process = END; btn_cwioSEND->value(0); cw_sleep( 4.8 / progStatus.cwioWPM); cwio_process = TERMINATE; pthread_cond_signal(&cwio_cond); cw_sleep(0.050); pthread_join(cwio_pthread, NULL); LOG_INFO("%s", "cwio thread - stopped"); pthread_mutex_destroy(&cwio_mutex); pthread_cond_destroy(&cwio_cond); memset((void *) &cwio_pthread, 0, sizeof(cwio_pthread)); memset((void *) &cwio_mutex, 0, sizeof(cwio_mutex)); cwio_thread_running = false; cwio_process = NONE; close_cwkey(); #ifdef CWIO_DEBUG if (fcwio) { fclose(fcwio); fcwio = 0; } if (fcwio2) { fclose(fcwio2); fcwio2 = 0; } #endif if (cwio_serial) { delete cwio_serial; cwio_serial = 0; } if (morse) { delete morse; morse = 0; } } void add_cwio(std::string txt) { if (!cwio_thread_running) return; // expand special character pairs size_t p; if (cw_op_call) { while (((p = txt.find("~C")) != std::string::npos) || ((p = txt.find("~c")) != std::string::npos)) txt.replace(p, 2, cw_op_call->value()); } if (cw_op_name) { while (((p = txt.find("~N")) != std::string::npos) || ((p = txt.find("~n")) != std::string::npos)) txt.replace(p, 2, cw_op_name->value()); } if (cw_rst_out){ while (((p = txt.find("~R")) != std::string::npos) || ((p = txt.find("~r")) != std::string::npos)) txt.replace(p, 2, cw_rst_out->value()); } if (cw_log_nbr) { while ((p = txt.find("~#")) != std::string::npos) { char sznum[10]; if (progStatus.cw_log_leading_zeros) snprintf(sznum, sizeof(sznum), "%04d", progStatus.cw_log_nbr); else snprintf(sznum, sizeof(sznum), "%d", progStatus.cw_log_nbr); if (progStatus.cw_log_cut_numbers) { for (size_t i = 1; i < strlen(sznum); i++) { if (sznum[i] == '0') sznum[i] = 'T'; if (sznum[i] == '9') sznum[i] = 'N'; } } txt.replace(p, 2, sznum); } while ((p = txt.find("~+")) != std::string::npos) { txt.replace(p, 2, ""); progStatus.cw_log_nbr++; if (cw_log_nbr) cw_log_nbr->value(progStatus.cw_log_nbr); } while ((p = txt.find("~-")) != std::string::npos) { txt.replace(p, 2, ""); progStatus.cw_log_nbr--; if (progStatus.cw_log_nbr < 0) progStatus.cw_log_nbr = 0; if (cw_log_nbr) cw_log_nbr->value(progStatus.cw_log_nbr); } } new_text = txt_to_send->value(); new_text.append(txt); txt_to_send->value(new_text.c_str()); txt_to_send->redraw(); if (txt[0] == '[') { send_text(true); btn_cwioSEND->value(1); } } void send_text(bool state) { if (!cwio_thread_running) return; if (state && cwio_process != SEND) { cwio_process = SEND; pthread_cond_signal(&cwio_cond); } else { cwio_process = NONE; } } void cwio_new_text(std::string txt) { cwio_text.append(txt); send_text(true); } void cwio_clear_text() { txt_to_send->value(""); } void msg_cb(int n) { } void label_cb(int n) { } void exec_msg(int n) { if ((Fl::event_state() & FL_CTRL) == FL_CTRL) { for (int n = 0; n < 12; n++) { edit_label[n]->value(progStatus.cwio_labels[n].c_str()); edit_msg[n]->value(progStatus.cwio_msgs[n].c_str()); } cwio_editor->show(); return; } add_cwio(progStatus.cwio_msgs[n]); } void cancel_edit() { cwio_editor->hide(); } void apply_edit() { for (int n = 0; n < 12; n++) { progStatus.cwio_labels[n] = edit_label[n]->value(); progStatus.cwio_msgs[n] = edit_msg[n]->value(); btn_msg[n]->label(progStatus.cwio_labels[n].c_str()); btn_msg[n]->redraw_label(); } } void done_edit() { cwio_editor->hide(); } // Alt-P pause transmit // Alt-S start sending text // F1 - F12 same as function-button mouse press void control_function_keys() { int key = Fl::event_key(); int state = Fl::event_state(); if (state & FL_ALT) { if (key == 'p') { btn_cwioSEND->value(0); btn_cwioSEND->redraw(); send_text(false); return; } if (key == 's') { btn_cwioSEND->value(1); btn_cwioSEND->redraw(); send_text(true); return; } if (key == 'c') { txt_to_send->value(""); return; } } if ((key >= FL_F) && (key <= FL_F_Last)) { exec_msg( key - FL_F - 1); } } void calibrate_cwio() { txt_to_send->value(""); btn_cwioSEND->value(0); cwio_process = END; cw_sleep(0.050); cwio_process = CALIBRATE; pthread_cond_signal(&cwio_cond); } void open_cwio_config() { if (progStatus.cwioSHARED == 1) { btn_cwioCAT->value(1); btn_cwioCAT->activate(); btn_cwioAUX->value(0); btn_cwioAUX->deactivate(); btn_cwioSEP->value(0); btn_cwioSEP->deactivate(); select_cwioPORT->value("NONE"); select_cwioPORT->deactivate(); btn_cwioCONNECT->value(0); btn_cwioCONNECT->deactivate(); } else { btn_cwioCAT->activate(); btn_cwioAUX->activate(); btn_cwioSEP->activate(); select_cwioPORT->activate(); btn_cwioCONNECT->activate(); } cwio_configure->show(); } flrig-2.0.04/src/cwio/cwioUI.fl0000664000175000017500000006160414502041135013077 00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0308 i18n_type 1 i18n_include "gettext.h" i18n_function _ header_name {.h} code_name {.cxx} decl {\#include "config.h"} {private local } decl {\#include "compat.h"} {private local } decl {\#include "dialogs.h"} {private local } decl {\#include } {public global } decl {Fl_Double_Window *cwlog_viewer;} {public local } decl {\#include "cwio.h"} {private local } decl {const char ps[] = "~%&+={}<>@";} {private local } decl {const char szProsigns[] = "~|%|&|+|=|{|}|<|>|@";} {private local } Function {new_cwio_dialog()} {open } { Fl_Window {} { label {CW keying} open xywh {530 25 670 125} type Double resizable code0 {\#include "status.h"} code1 {\#include "cwio.h"} code2 {\#include "ValueSlider.h"} visible } { Fl_Input txt_to_send { callback {control_function_keys();} xywh {2 2 666 68} type Multiline align 16 when 1 resizable code0 {\#include "flinput2.h"} class Fl_Input2 } Fl_Group {} {open xywh {0 72 670 88} } { Fl_Value_Slider sldr_cwioWPM { label WPM callback {progStatus.cwioWPM = (int)o->value();} tooltip {My transmit CW WPM} xywh {4 74 240 20} type {Horz Knob} align 8 minimum 5 maximum 100 step 1 value 20 textsize 14 code0 {\#include "flslider2.h"} code1 {o->value(progStatus.cwioWPM);} class Fl_Value_Slider2 } Fl_Button btn_cwio_config { label Config callback {open_cwio_config();} tooltip {Clear transmit text} xywh {374 73 60 22} } Fl_Button btn_cwio_clear { label Clear callback {cwio_clear_text();} tooltip {Clear transmit text} xywh {439 73 60 22} } Fl_Light_Button btn_cwioKEY { label KEY callback {cwio_key (o->value()); if (o->value()) cwio_process = KEYDOWN; else cwio_process = NONE;} selected tooltip {Key Down / Up} xywh {503 73 50 22} } Fl_Light_Button btn_cwioSEND { label {Send/Pause} callback {send_text(o->value());} tooltip {Send / Pause sending characters} xywh {557 73 105 22} } Fl_Group {} { xywh {2 98 220 30} box ENGRAVED_BOX } { Fl_Button {btn_msg[0]} { label {F 1} callback {exec_msg(0);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {5 102 50 22} } Fl_Button {btn_msg[1]} { label {F 2} callback {exec_msg(1);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {59 102 50 22} } Fl_Button {btn_msg[2]} { label {F 3} callback {exec_msg(2);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {113 102 50 22} } Fl_Button {btn_msg[3]} { label {F 4} callback {exec_msg(3);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {168 102 50 22} } } Fl_Group {} { xywh {225 98 220 30} box ENGRAVED_BOX } { Fl_Button {btn_msg[4]} { label {F 5} callback {exec_msg(4);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {229 102 50 22} } Fl_Button {btn_msg[5]} { label {F 6} callback {exec_msg(5);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {283 102 50 22} } Fl_Button {btn_msg[6]} { label {F 7} callback {exec_msg(6);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {337 102 50 22} } Fl_Button {btn_msg[7]} { label {F 8} callback {exec_msg(7);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {391 102 50 22} } } Fl_Group {} { xywh {448 98 220 30} box ENGRAVED_BOX } { Fl_Button {btn_msg[8]} { label {F 9} callback {exec_msg(8);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {451 102 50 22} } Fl_Button {btn_msg[9]} { label {F 10} callback {exec_msg(9);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {505 102 50 22} } Fl_Button {btn_msg[10]} { label {F 11} callback {exec_msg(10);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {559 102 50 22} } Fl_Button {btn_msg[11]} { label {F 12} callback {exec_msg(11);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {614 102 50 22} } } Fl_Button btn_view_cwlog { label {View Log} callback {cwlog_view();} tooltip {View cwlogbook} xywh {294 73 75 22} } } } } Function {new_message_editor()} {} { Fl_Window {} { label {Message Editor} open xywh {516 585 670 382} type Double hide resizable } { Fl_Tabs {} {open xywh {0 0 565 345} align 17 } { Fl_Group {} { label {F1-F4} open xywh {0 25 565 320} } { Fl_Box {} { label Label xywh {22 30 84 20} } Fl_Box {} { label {Message Text} xywh {211 30 223 20} } Fl_Input {edit_label[0]} { label F1 callback {label_cb(1);} xywh {5 74 80 22} align 5 code0 {\#include "flinput2.h"} class Fl_Input2 } Fl_Input {edit_msg[0]} { callback {msg_cb(1);} xywh {90 55 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[1]} { label F2 callback {label_cb(2);} xywh {5 144 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[1]} { callback {msg_cb(2);} xywh {90 125 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[2]} { label F3 callback {label_cb(3);} xywh {5 214 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[2]} { callback {msg_cb(3);} xywh {90 195 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[3]} { label F4 callback {label_cb(4);} xywh {5 284 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[3]} { callback {msg_cb(4);} xywh {90 265 470 65} type Multiline class Fl_Input2 } } Fl_Group {} { label {F5-f8} open xywh {0 25 565 320} hide } { Fl_Box {} { label Label xywh {22 30 84 20} } Fl_Box {} { label {Message Text} xywh {211 30 223 20} } Fl_Input {edit_label[4]} { label F5 callback {label_cb(5);} xywh {5 74 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[4]} { callback {msg_cb(5);} xywh {90 55 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[5]} { label F6 callback {label_cb(6);} xywh {5 144 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[5]} { callback {msg_cb(6);} xywh {90 125 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[6]} { label F7 callback {label_cb(7);} xywh {5 214 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[6]} { callback {msg_cb(7);} xywh {90 195 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[7]} { label F8 callback {label_cb(8);} xywh {5 284 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[7]} { callback {msg_cb(8);} xywh {90 265 470 65} type Multiline class Fl_Input2 } } Fl_Group {} { label {F9-F12} open xywh {0 25 565 320} hide } { Fl_Box {} { label Label xywh {22 30 84 20} } Fl_Box {} { label {Message Text} xywh {211 30 223 20} } Fl_Input {edit_label[8]} { label F9 callback {label_cb(9);} xywh {5 73 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[8]} { callback {msg_cb(9);} xywh {90 55 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[9]} { label F10 callback {label_cb(10);} xywh {5 143 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[9]} { callback {msg_cb(10);} xywh {90 125 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[10]} { label F11 callback {label_cb(11);} xywh {5 213 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[10]} { callback {msg_cb(11);} xywh {90 195 470 65} type Multiline class Fl_Input2 } Fl_Input {edit_label[11]} { label F12 callback {label_cb(12);} xywh {5 283 80 22} align 5 class Fl_Input2 } Fl_Input {edit_msg[11]} { callback {msg_cb(12);} xywh {90 265 470 65} type Multiline class Fl_Input2 } } } Fl_Group {} {open xywh {567 0 101 224} box ENGRAVED_FRAME } { Fl_Group listbox_BT { label BT callback {int c = o->index(); progStatus.BT[0] = ps[c]; morse->init();} open xywh {600 6 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.BT.c_str()); o->labelsize(FL_NORMAL_SIZE);} code2 {\#include "combo.h"} class Fl_ListBox } {} Fl_Group listbox_AA { label AA callback {int c = o->index(); progStatus.AA[0] = ps[c]; morse->init();} open xywh {600 30 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.AA.c_str()); o->labelsize(FL_NORMAL_SIZE);} class Fl_ListBox } {} Fl_Group listbox_AS { label AS callback {int c = o->index(); progStatus.AS[0] = ps[c]; morse->init();} open xywh {600 54 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.AS.c_str()); o->labelsize(FL_NORMAL_SIZE);} class Fl_ListBox } {} Fl_Group listbox_AR { label AR callback {int c = o->index(); progStatus.AR[0] = ps[c]; morse->init();} open xywh {600 78 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.AR.c_str()); o->labelsize(FL_NORMAL_SIZE);} class Fl_ListBox } {} Fl_Group listbox_SK { label SK callback {int c = o->index(); progStatus.SK[0] = ps[c]; morse->init();} open xywh {600 102 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.SK.c_str()); o->labelsize(FL_NORMAL_SIZE);} class Fl_ListBox } {} Fl_Group listbox_KN { label KN callback {int c = o->index(); progStatus.KN[0] = ps[c]; morse->init();} open xywh {600 126 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.KN.c_str()); o->labelsize(FL_NORMAL_SIZE);} class Fl_ListBox } {} Fl_Group listbox_INT { label INT callback {int c = o->index(); progStatus.INT[0] = ps[c]; morse->init();} open xywh {600 150 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.INT.c_str()); o->labelsize(FL_NORMAL_SIZE);} class Fl_ListBox } {} Fl_Group listbox_HM { label HM callback {int c = o->index(); progStatus.HM[0] = ps[c]; morse->init();} open xywh {600 174 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.HM.c_str()); o->labelsize(FL_NORMAL_SIZE);} class Fl_ListBox } {} Fl_Group listbox_VE { label VE callback {int c = o->index(); progStatus.VE[0] = ps[c]; morse->init();} open xywh {600 199 60 22} box DOWN_BOX color 7 align 4 code0 {o->add(szProsigns);} code1 {o->value(progStatus.VE.c_str()); o->labelsize(FL_NORMAL_SIZE);} class Fl_ListBox } {} } Fl_Group {} {open xywh {567 222 113 157} box ENGRAVED_FRAME } { Fl_Button btn_start_xmt { label {[ TX} xywh {575 227 85 20} } Fl_Button btn_end_xmt { label {] RX} xywh {575 258 85 20} } Fl_Button btn_append_call { label {~C CALL} xywh {575 290 85 20} } Fl_Button btn_append_name { label {~N NAME} xywh {575 322 85 20} } Fl_Button btn_append_rst { label {~R RSTout} xywh {575 354 85 20} } } Fl_Button btn_cancel_edit { label Cancel callback {cancel_edit();} tooltip {Exit editor, discard changes} xywh {10 352 65 22} } Fl_Button btn_apply_edit { label Apply callback {apply_edit();} tooltip {Apply current changes to function keys} xywh {84 352 65 22} } Fl_Button btn_done_edit { label Close callback {done_edit();} tooltip {Apply changes and close editor} xywh {158 352 65 22} } Fl_Group {} {open xywh {24 24 15 15} } {} Fl_Group {} {open xywh {279 350 282 29} box ENGRAVED_BOX } { Fl_Button btn_append_contest_nbr { label {~\# Cntst \#} xywh {286 354 85 20} } Fl_Button btn_append_decr { label {~- Decr'} xywh {376 354 85 20} } Fl_Button btn_append_incr { label {~+ Incr'} xywh {466 354 85 20} } } } } Function {new_cwio_config_dialog()} {open } { Fl_Window {} { label {CW Configuration} open xywh {530 184 670 100} type Double visible } { Fl_Group {} {open xywh {1 0 668 98} box ENGRAVED_FRAME } { Fl_Group select_cwioPORT { label {Ser. Port} callback {progStatus.cwioPORT = o->value();} open tooltip {CWIO serial port} xywh {73 69 496 23} box DOWN_BOX color 53 align 4 code0 {\#include "combo.h"} code1 {o->value(progStatus.cwioPORT.c_str());} class Fl_ComboBox } {} Fl_Light_Button btn_cwioCONNECT { label Connect callback {if (o->value() == 0) { close_cwkey(); btn_cwioCAT->activate(); btn_cwioAUX->activate(); btn_cwioSEP->activate(); progStatus.cwioCONNECTED = 0; } else if (!open_cwkey()) { o->value(0); btn_cwioCAT->activate(); btn_cwioAUX->activate(); btn_cwioSEP->activate(); progStatus.cwioCONNECTED = 0; } else { btn_cwioCAT->value(0); btn_cwioCAT->deactivate(); btn_cwioAUX->value(0); btn_cwioAUX->deactivate(); btn_cwioSEP->value(0); btn_cwioSEP->deactivate(); progStatus.cwioCONNECTED = 1; } progStatus.cwioSHARED = 0;} xywh {578 69 80 23} code0 {o->value(progStatus.cwioCONNECTED);} } Fl_Check_Button btn_cwioCAT { label {Use CAT} callback {if (o->value()) { progStatus.cwioSHARED = 1; btn_cwioAUX->value(0); btn_cwioAUX->deactivate(); btn_cwioSEP->value(0); btn_cwioSEP->deactivate(); btn_cwioCONNECT->value(0); btn_cwioCONNECT->deactivate(); select_cwioPORT->value("NONE"); select_cwioPORT->deactivate(); }else { progStatus.cwioSHARED = 0; btn_cwioCONNECT->activate(); btn_cwioAUX->activate(); btn_cwioSEP->activate(); select_cwioPORT->activate(); }} tooltip {Use DTR/RTS on CAT serial port} xywh {70 15 18 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.cwioSHARED == 1);} } Fl_Check_Button btn_cwioAUX { label {Use AUX} callback {if (o->value()) { progStatus.cwioSHARED = 2; btn_cwioCAT->value(0); btn_cwioCAT->deactivate(); btn_cwioSEP->value(0); btn_cwioSEP->deactivate(); btn_cwioCONNECT->value(0); btn_cwioCONNECT->deactivate(); select_cwioPORT->value("NONE"); select_cwioPORT->deactivate(); }else { progStatus.cwioSHARED = 0; btn_cwioCONNECT->activate(); btn_cwioCAT->activate(); btn_cwioSEP->activate(); select_cwioPORT->activate(); }} tooltip {Use DTR/RTS on Auxiliary serial port} xywh {71 46 18 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.cwioSHARED == 2);} } Fl_Check_Button btn_cwioSEP { label {Use SEP} callback {if (o->value()) { progStatus.cwioSHARED = 3; btn_cwioAUX->value(0); btn_cwioAUX->deactivate(); btn_cwioCAT->value(0); btn_cwioCAT->deactivate(); btn_cwioCONNECT->value(0); btn_cwioCONNECT->deactivate(); select_cwioPORT->value("NONE"); select_cwioPORT->deactivate(); }else { progStatus.cwioSHARED = 0; btn_cwioCONNECT->activate(); btn_cwioAUX->activate(); btn_cwioCAT->activate(); select_cwioPORT->activate(); }} tooltip {Use DTR/RTS Separate serial port} xywh {160 15 18 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.cwioSHARED == 3);} } Fl_Group listbox_cwioKEYLINE { label Keyline callback {progStatus.cwioKEYLINE = o->index();} tooltip {Select either DTR or RTS for keyline} xywh {593 41 65 24} box DOWN_BOX color 7 align 4 code0 {\#include "combo.h"} code1 {o->add("None|RTS|DTR");} code2 {o->index(progStatus.cwioKEYLINE);} class Fl_ListBox } {} Fl_Spinner cntr_cwioPTT { label {PTT delay} callback {progStatus.cwioPTT = o->value();} tooltip {PTT delay before keydown 0 = Break-in} xywh {608 10 50 25} minimum 0 value 0 code0 {o->value(progStatus.cwioPTT);} } Fl_Light_Button btn_cw_dtr_calibrate { label {Calib'} callback {calibrate_cwio();} tooltip {Calibrate WPM timing} xywh {235 8 56 24} selection_color 6 } Fl_Counter cnt_cwio_comp { label {WPM Comp} callback {progStatus.cwio_comp = o->value();} tooltip {Timing compensation msec} xywh {400 8 130 24} align 4 minimum -5 maximum 5 step 0.001 code0 {o->value(progStatus.cwio_comp);} code1 {o->lstep(0.1);} } Fl_Check_Button btn_cwioINVERTED { label Inverted callback {progStatus.cwioINVERTED = o->value(); reset_cwioport();} tooltip {DTR/RTS signaling is inverted (-) keying} xywh {160 46 18 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.cwioINVERTED);} } Fl_Counter cnt_cwio_keycorr { label {Xcvr Comp} callback {progStatus.cwio_keycorr = o->value();} tooltip {Compensate for xcv delays (msec)} xywh {400 41 130 24} align 4 minimum -10 maximum 10 step 0.01 code0 {o->value(progStatus.cwio_keycorr);} code1 {o->lstep(0.10);} } } } } Function {new_cwlogbook_dialog()} {open } { Fl_Window {} { label {Flrig CW Log} open xywh {529 314 670 280} type Double visible } { Fl_Menu_Bar CWlog_menubar {open xywh {0 0 670 20} } { Submenu CWlog_files { label Files open xywh {0 0 70 21} } { MenuItem cwlog_menu_open { label Open callback {cwlog_open();} xywh {0 0 36 21} } MenuItem cwlog_menu_new { label New callback {cwlog_new();} xywh {0 0 36 21} } MenuItem cwlog_menu_save { label Save callback {cwlog_save();} xywh {0 0 36 21} } MenuItem cwlog_menu_save_as { label {Save As} callback {cwlog_save_as();} xywh {0 0 36 21} divider } MenuItem cwlog_menu_export_adif { label {Export ADIF} callback {cwlog_export_adif();} xywh {0 0 36 21} } MenuItem cwlog_menu_import_adif { label {Import ADIF} callback {cwlog_import_adif();} xywh {0 0 36 21} } } Submenu {} { label Config open xywh {0 0 70 21} } { MenuItem cwlog_menu_dupcheck { label {Dup check} callback {//cwlog.dupcheck = o->value();} xywh {0 0 36 21} type Toggle } MenuItem cwlog_menu_leading_zeros { label {Leading zeros} callback {//cwlog.dupcheck = o->value();} xywh {0 0 36 21} type Toggle } MenuItem cwlog_menu_cut_numbers { label {Cut numbers} callback {//cwlog.cut_nbrs = o->value();} xywh {0 0 36 21} type Toggle } } } Fl_Group {} {open xywh {2 22 668 29} box ENGRAVED_FRAME } { Fl_Output txt_cwlog_file { label {Log File:} callback {//progStatus.cwlogfile_name = o->value();} xywh {75 26 590 22} code0 {//->value(progStatus.cwlogfile_name);} } } Fl_Group cw_grp_qso_data {open xywh {2 52 560 30} box ENGRAVED_BOX } { Fl_Input cw_freq { label Freq tooltip Frequency xywh {43 56 120 22} class Fl_Input2 } Fl_Button btn_cwlog_clear_qso { label Clear callback {cwlog_clear_qso();} tooltip {Clear cwlog entries} xywh {380 56 60 22} } Fl_Button btn_cwlog_save_qso { label Save callback {cwlog_save_qso();} tooltip {Save QSO data to cwlog file} xywh {440 56 60 22} } Fl_Button btn_cwlog_edit_entry { label Edit callback {cwlog_edit_entry();} tooltip {Delete Entry} xywh {501 56 60 22} } Fl_Button btn_cwlog_delete_entry { label Delete callback {cwlog_delete_entry();} tooltip {Delete Entry} xywh {492 56 60 22} hide } Fl_Input cw_qso_date { label Dt tooltip {QSO call Query flcwlog if connected} xywh {193 56 85 22} class Fl_Input2 } Fl_Input cw_qso_time { label {Tm:} xywh {313 56 55 22} class Fl_Input2 } } Fl_Group {} {open xywh {565 52 103 62} box ENGRAVED_BOX } { Fl_Input cw_rst_out { label RSTout tooltip {Send RST} xywh {622 56 40 22} class Fl_Input2 } Fl_Input cw_rst_in { label {RST in} tooltip {Send RST} xywh {624 87 40 22} class Fl_Input2 } } Fl_Group {} {open xywh {2 84 560 30} box ENGRAVED_FRAME } { Fl_Input cw_xchg_in { label Xch tooltip {Input exchange} xywh {313 87 150 22} class Fl_Input2 } Fl_Counter cw_log_nbr { label {\#:} callback {progStatus.cw_log_nbr = o->value();} tooltip {QSO number (out)} xywh {491 87 70 22} type Simple align 4 step 1 code0 {o->value(progStatus.cw_log_nbr);} } Fl_Input cw_op_name { label Nm xywh {193 88 85 22} class Fl_Input2 } Fl_Input cw_op_call { label Call tooltip {QSO call Query flcwlog if connected} xywh {43 88 120 22} class Fl_Input2 } } Fl_Group {} {open xywh {2 113 674 170} } { Fl_Group {} {open xywh {2 116 668 22} } { Fl_Button btn_cw_datetime { label Date callback {cwlog_sort_by_datetime();} xywh {2 116 80 22} box BORDER_BOX color 51 } Fl_Button btn_cw_time { label Time callback {cwlog_sort_by_datetime();} xywh {81 116 45 22} box BORDER_BOX color 51 } Fl_Button btn_cw_freq { label Freq callback {cwlog_sort_by_freq();} xywh {126 116 70 22} box BORDER_BOX color 51 } Fl_Button btn_cw_call { label Call callback {cwlog_sort_by_call();} xywh {196 116 75 22} box BORDER_BOX color 51 } Fl_Button btn_cw_name { label Name xywh {271 116 75 22} box BORDER_BOX color 51 } Fl_Button btn_cw_in { label In xywh {346 116 40 22} box BORDER_BOX color 51 } Fl_Button btn_cw_out { label Out xywh {386 116 40 22} box BORDER_BOX color 51 } Fl_Button btn_cw_sent_nbr { label Nbr callback {cwlog_sort_by_nbr();} xywh {426 116 55 22} box BORDER_BOX color 51 } Fl_Button btn_cw_xchg { label Exchange xywh {481 116 185 22} box BORDER_BOX color 51 resizable } } Fl_Browser brwsr_cwlog_entries { callback {if (!cwlog_editing) cwlog_edit_entry();} xywh {2 140 666 141} type Hold selection_color 230 resizable code0 {static int widths[]={80,45,70,75,75,40,40,55,0};} code1 {o->column_widths(widths);} code2 {o->column_char('\\t');} code3 {o->has_scrollbar(Fl_Browser_::VERTICAL_ALWAYS);} } } } } flrig-2.0.04/src/cwio/cwioUI.cxx0000664000175000017500000016522414502041135013303 00000000000000// generated by Fast Light User Interface Designer (fluid) version 1.0308 #include "gettext.h" #include "cwioUI.h" #include "config.h" #include "compat.h" #include "dialogs.h" Fl_Double_Window *cwlog_viewer; #include "cwio.h" static const char ps[] = "~%&+={}<>@"; static const char szProsigns[] = "~|%|&|+|=|{|}|<|>|@"; Fl_Input2 *txt_to_send=(Fl_Input2 *)0; static void cb_txt_to_send(Fl_Input2*, void*) { control_function_keys(); } Fl_Value_Slider2 *sldr_cwioWPM=(Fl_Value_Slider2 *)0; static void cb_sldr_cwioWPM(Fl_Value_Slider2* o, void*) { progStatus.cwioWPM = (int)o->value(); } Fl_Button *btn_cwio_config=(Fl_Button *)0; static void cb_btn_cwio_config(Fl_Button*, void*) { open_cwio_config(); } Fl_Button *btn_cwio_clear=(Fl_Button *)0; static void cb_btn_cwio_clear(Fl_Button*, void*) { cwio_clear_text(); } Fl_Light_Button *btn_cwioKEY=(Fl_Light_Button *)0; static void cb_btn_cwioKEY(Fl_Light_Button* o, void*) { cwio_key (o->value()); if (o->value()) cwio_process = KEYDOWN; else cwio_process = NONE; } Fl_Light_Button *btn_cwioSEND=(Fl_Light_Button *)0; static void cb_btn_cwioSEND(Fl_Light_Button* o, void*) { send_text(o->value()); } static void cb_btn_msg(Fl_Button*, void*) { exec_msg(0); } static void cb_btn_msg1(Fl_Button*, void*) { exec_msg(1); } static void cb_btn_msg2(Fl_Button*, void*) { exec_msg(2); } static void cb_btn_msg3(Fl_Button*, void*) { exec_msg(3); } static void cb_btn_msg4(Fl_Button*, void*) { exec_msg(4); } static void cb_btn_msg5(Fl_Button*, void*) { exec_msg(5); } static void cb_btn_msg6(Fl_Button*, void*) { exec_msg(6); } static void cb_btn_msg7(Fl_Button*, void*) { exec_msg(7); } static void cb_btn_msg8(Fl_Button*, void*) { exec_msg(8); } static void cb_btn_msg9(Fl_Button*, void*) { exec_msg(9); } static void cb_btn_msga(Fl_Button*, void*) { exec_msg(10); } Fl_Button *btn_msg[12]={(Fl_Button *)0}; static void cb_btn_msgb(Fl_Button*, void*) { exec_msg(11); } Fl_Button *btn_view_cwlog=(Fl_Button *)0; static void cb_btn_view_cwlog(Fl_Button*, void*) { cwlog_view(); } Fl_Double_Window* new_cwio_dialog() { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(670, 125, _("CW keying")); w = o; if (w) {/* empty */} { txt_to_send = new Fl_Input2(2, 2, 666, 68); txt_to_send->type(4); txt_to_send->box(FL_DOWN_BOX); txt_to_send->color(FL_BACKGROUND2_COLOR); txt_to_send->selection_color(FL_SELECTION_COLOR); txt_to_send->labeltype(FL_NORMAL_LABEL); txt_to_send->labelfont(0); txt_to_send->labelsize(14); txt_to_send->labelcolor(FL_FOREGROUND_COLOR); txt_to_send->callback((Fl_Callback*)cb_txt_to_send); txt_to_send->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); txt_to_send->when(FL_WHEN_CHANGED); Fl_Group::current()->resizable(txt_to_send); } // Fl_Input2* txt_to_send { Fl_Group* o = new Fl_Group(0, 72, 670, 88); { Fl_Value_Slider2* o = sldr_cwioWPM = new Fl_Value_Slider2(4, 74, 240, 20, _("WPM")); sldr_cwioWPM->tooltip(_("My transmit CW WPM")); sldr_cwioWPM->type(5); sldr_cwioWPM->box(FL_DOWN_BOX); sldr_cwioWPM->color(FL_BACKGROUND_COLOR); sldr_cwioWPM->selection_color(FL_BACKGROUND_COLOR); sldr_cwioWPM->labeltype(FL_NORMAL_LABEL); sldr_cwioWPM->labelfont(0); sldr_cwioWPM->labelsize(14); sldr_cwioWPM->labelcolor(FL_FOREGROUND_COLOR); sldr_cwioWPM->minimum(5); sldr_cwioWPM->maximum(100); sldr_cwioWPM->step(1); sldr_cwioWPM->value(20); sldr_cwioWPM->textsize(14); sldr_cwioWPM->callback((Fl_Callback*)cb_sldr_cwioWPM); sldr_cwioWPM->align(Fl_Align(FL_ALIGN_RIGHT)); sldr_cwioWPM->when(FL_WHEN_CHANGED); o->value(progStatus.cwioWPM); } // Fl_Value_Slider2* sldr_cwioWPM { btn_cwio_config = new Fl_Button(374, 73, 60, 22, _("Config")); btn_cwio_config->tooltip(_("Clear transmit text")); btn_cwio_config->callback((Fl_Callback*)cb_btn_cwio_config); } // Fl_Button* btn_cwio_config { btn_cwio_clear = new Fl_Button(439, 73, 60, 22, _("Clear")); btn_cwio_clear->tooltip(_("Clear transmit text")); btn_cwio_clear->callback((Fl_Callback*)cb_btn_cwio_clear); } // Fl_Button* btn_cwio_clear { btn_cwioKEY = new Fl_Light_Button(503, 73, 50, 22, _("KEY")); btn_cwioKEY->tooltip(_("Key Down / Up")); btn_cwioKEY->callback((Fl_Callback*)cb_btn_cwioKEY); } // Fl_Light_Button* btn_cwioKEY { btn_cwioSEND = new Fl_Light_Button(557, 73, 105, 22, _("Send/Pause")); btn_cwioSEND->tooltip(_("Send / Pause sending characters")); btn_cwioSEND->callback((Fl_Callback*)cb_btn_cwioSEND); } // Fl_Light_Button* btn_cwioSEND { Fl_Group* o = new Fl_Group(2, 98, 220, 30); o->box(FL_ENGRAVED_BOX); { btn_msg[0] = new Fl_Button(5, 102, 50, 22, _("F 1")); btn_msg[0]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[0]->callback((Fl_Callback*)cb_btn_msg); } // Fl_Button* btn_msg[0] { btn_msg[1] = new Fl_Button(59, 102, 50, 22, _("F 2")); btn_msg[1]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[1]->callback((Fl_Callback*)cb_btn_msg1); } // Fl_Button* btn_msg[1] { btn_msg[2] = new Fl_Button(113, 102, 50, 22, _("F 3")); btn_msg[2]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[2]->callback((Fl_Callback*)cb_btn_msg2); } // Fl_Button* btn_msg[2] { btn_msg[3] = new Fl_Button(168, 102, 50, 22, _("F 4")); btn_msg[3]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[3]->callback((Fl_Callback*)cb_btn_msg3); } // Fl_Button* btn_msg[3] o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(225, 98, 220, 30); o->box(FL_ENGRAVED_BOX); { btn_msg[4] = new Fl_Button(229, 102, 50, 22, _("F 5")); btn_msg[4]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[4]->callback((Fl_Callback*)cb_btn_msg4); } // Fl_Button* btn_msg[4] { btn_msg[5] = new Fl_Button(283, 102, 50, 22, _("F 6")); btn_msg[5]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[5]->callback((Fl_Callback*)cb_btn_msg5); } // Fl_Button* btn_msg[5] { btn_msg[6] = new Fl_Button(337, 102, 50, 22, _("F 7")); btn_msg[6]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[6]->callback((Fl_Callback*)cb_btn_msg6); } // Fl_Button* btn_msg[6] { btn_msg[7] = new Fl_Button(391, 102, 50, 22, _("F 8")); btn_msg[7]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[7]->callback((Fl_Callback*)cb_btn_msg7); } // Fl_Button* btn_msg[7] o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(448, 98, 220, 30); o->box(FL_ENGRAVED_BOX); { btn_msg[8] = new Fl_Button(451, 102, 50, 22, _("F 9")); btn_msg[8]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[8]->callback((Fl_Callback*)cb_btn_msg8); } // Fl_Button* btn_msg[8] { btn_msg[9] = new Fl_Button(505, 102, 50, 22, _("F 10")); btn_msg[9]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[9]->callback((Fl_Callback*)cb_btn_msg9); } // Fl_Button* btn_msg[9] { btn_msg[10] = new Fl_Button(559, 102, 50, 22, _("F 11")); btn_msg[10]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[10]->callback((Fl_Callback*)cb_btn_msga); } // Fl_Button* btn_msg[10] { btn_msg[11] = new Fl_Button(614, 102, 50, 22, _("F 12")); btn_msg[11]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); btn_msg[11]->callback((Fl_Callback*)cb_btn_msgb); } // Fl_Button* btn_msg[11] o->end(); } // Fl_Group* o { btn_view_cwlog = new Fl_Button(294, 73, 75, 22, _("View Log")); btn_view_cwlog->tooltip(_("View cwlogbook")); btn_view_cwlog->callback((Fl_Callback*)cb_btn_view_cwlog); } // Fl_Button* btn_view_cwlog o->end(); } // Fl_Group* o o->end(); } // Fl_Double_Window* o return w; } static void cb_edit_label(Fl_Input2*, void*) { label_cb(1); } static void cb_edit_msg(Fl_Input2*, void*) { msg_cb(1); } static void cb_edit_label1(Fl_Input2*, void*) { label_cb(2); } static void cb_edit_msg1(Fl_Input2*, void*) { msg_cb(2); } static void cb_edit_label2(Fl_Input2*, void*) { label_cb(3); } static void cb_edit_msg2(Fl_Input2*, void*) { msg_cb(3); } static void cb_edit_label3(Fl_Input2*, void*) { label_cb(4); } static void cb_edit_msg3(Fl_Input2*, void*) { msg_cb(4); } static void cb_edit_label4(Fl_Input2*, void*) { label_cb(5); } static void cb_edit_msg4(Fl_Input2*, void*) { msg_cb(5); } static void cb_edit_label5(Fl_Input2*, void*) { label_cb(6); } static void cb_edit_msg5(Fl_Input2*, void*) { msg_cb(6); } static void cb_edit_label6(Fl_Input2*, void*) { label_cb(7); } static void cb_edit_msg6(Fl_Input2*, void*) { msg_cb(7); } static void cb_edit_label7(Fl_Input2*, void*) { label_cb(8); } static void cb_edit_msg7(Fl_Input2*, void*) { msg_cb(8); } static void cb_edit_label8(Fl_Input2*, void*) { label_cb(9); } static void cb_edit_msg8(Fl_Input2*, void*) { msg_cb(9); } static void cb_edit_label9(Fl_Input2*, void*) { label_cb(10); } static void cb_edit_msg9(Fl_Input2*, void*) { msg_cb(10); } static void cb_edit_labela(Fl_Input2*, void*) { label_cb(11); } static void cb_edit_msga(Fl_Input2*, void*) { msg_cb(11); } Fl_Input2 *edit_label[12]={(Fl_Input2 *)0}; static void cb_edit_labelb(Fl_Input2*, void*) { label_cb(12); } Fl_Input2 *edit_msg[12]={(Fl_Input2 *)0}; static void cb_edit_msgb(Fl_Input2*, void*) { msg_cb(12); } Fl_ListBox *listbox_BT=(Fl_ListBox *)0; static void cb_listbox_BT(Fl_ListBox* o, void*) { int c = o->index(); progStatus.BT[0] = ps[c]; morse->init(); } Fl_ListBox *listbox_AA=(Fl_ListBox *)0; static void cb_listbox_AA(Fl_ListBox* o, void*) { int c = o->index(); progStatus.AA[0] = ps[c]; morse->init(); } Fl_ListBox *listbox_AS=(Fl_ListBox *)0; static void cb_listbox_AS(Fl_ListBox* o, void*) { int c = o->index(); progStatus.AS[0] = ps[c]; morse->init(); } Fl_ListBox *listbox_AR=(Fl_ListBox *)0; static void cb_listbox_AR(Fl_ListBox* o, void*) { int c = o->index(); progStatus.AR[0] = ps[c]; morse->init(); } Fl_ListBox *listbox_SK=(Fl_ListBox *)0; static void cb_listbox_SK(Fl_ListBox* o, void*) { int c = o->index(); progStatus.SK[0] = ps[c]; morse->init(); } Fl_ListBox *listbox_KN=(Fl_ListBox *)0; static void cb_listbox_KN(Fl_ListBox* o, void*) { int c = o->index(); progStatus.KN[0] = ps[c]; morse->init(); } Fl_ListBox *listbox_INT=(Fl_ListBox *)0; static void cb_listbox_INT(Fl_ListBox* o, void*) { int c = o->index(); progStatus.INT[0] = ps[c]; morse->init(); } Fl_ListBox *listbox_HM=(Fl_ListBox *)0; static void cb_listbox_HM(Fl_ListBox* o, void*) { int c = o->index(); progStatus.HM[0] = ps[c]; morse->init(); } Fl_ListBox *listbox_VE=(Fl_ListBox *)0; static void cb_listbox_VE(Fl_ListBox* o, void*) { int c = o->index(); progStatus.VE[0] = ps[c]; morse->init(); } Fl_Button *btn_start_xmt=(Fl_Button *)0; Fl_Button *btn_end_xmt=(Fl_Button *)0; Fl_Button *btn_append_call=(Fl_Button *)0; Fl_Button *btn_append_name=(Fl_Button *)0; Fl_Button *btn_append_rst=(Fl_Button *)0; Fl_Button *btn_cancel_edit=(Fl_Button *)0; static void cb_btn_cancel_edit(Fl_Button*, void*) { cancel_edit(); } Fl_Button *btn_apply_edit=(Fl_Button *)0; static void cb_btn_apply_edit(Fl_Button*, void*) { apply_edit(); } Fl_Button *btn_done_edit=(Fl_Button *)0; static void cb_btn_done_edit(Fl_Button*, void*) { done_edit(); } Fl_Button *btn_append_contest_nbr=(Fl_Button *)0; Fl_Button *btn_append_decr=(Fl_Button *)0; Fl_Button *btn_append_incr=(Fl_Button *)0; Fl_Double_Window* new_message_editor() { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(670, 382, _("Message Editor")); w = o; if (w) {/* empty */} { Fl_Tabs* o = new Fl_Tabs(0, 0, 565, 345); o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE)); { Fl_Group* o = new Fl_Group(0, 25, 565, 320, _("F1-F4")); { new Fl_Box(22, 30, 84, 20, _("Label")); } // Fl_Box* o { new Fl_Box(211, 30, 223, 20, _("Message Text")); } // Fl_Box* o { edit_label[0] = new Fl_Input2(5, 74, 80, 22, _("F1")); edit_label[0]->box(FL_DOWN_BOX); edit_label[0]->color(FL_BACKGROUND2_COLOR); edit_label[0]->selection_color(FL_SELECTION_COLOR); edit_label[0]->labeltype(FL_NORMAL_LABEL); edit_label[0]->labelfont(0); edit_label[0]->labelsize(14); edit_label[0]->labelcolor(FL_FOREGROUND_COLOR); edit_label[0]->callback((Fl_Callback*)cb_edit_label); edit_label[0]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[0]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[0] { edit_msg[0] = new Fl_Input2(90, 55, 470, 65); edit_msg[0]->type(4); edit_msg[0]->box(FL_DOWN_BOX); edit_msg[0]->color(FL_BACKGROUND2_COLOR); edit_msg[0]->selection_color(FL_SELECTION_COLOR); edit_msg[0]->labeltype(FL_NORMAL_LABEL); edit_msg[0]->labelfont(0); edit_msg[0]->labelsize(14); edit_msg[0]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[0]->callback((Fl_Callback*)cb_edit_msg); edit_msg[0]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[0]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[0] { edit_label[1] = new Fl_Input2(5, 144, 80, 22, _("F2")); edit_label[1]->box(FL_DOWN_BOX); edit_label[1]->color(FL_BACKGROUND2_COLOR); edit_label[1]->selection_color(FL_SELECTION_COLOR); edit_label[1]->labeltype(FL_NORMAL_LABEL); edit_label[1]->labelfont(0); edit_label[1]->labelsize(14); edit_label[1]->labelcolor(FL_FOREGROUND_COLOR); edit_label[1]->callback((Fl_Callback*)cb_edit_label1); edit_label[1]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[1]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[1] { edit_msg[1] = new Fl_Input2(90, 125, 470, 65); edit_msg[1]->type(4); edit_msg[1]->box(FL_DOWN_BOX); edit_msg[1]->color(FL_BACKGROUND2_COLOR); edit_msg[1]->selection_color(FL_SELECTION_COLOR); edit_msg[1]->labeltype(FL_NORMAL_LABEL); edit_msg[1]->labelfont(0); edit_msg[1]->labelsize(14); edit_msg[1]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[1]->callback((Fl_Callback*)cb_edit_msg1); edit_msg[1]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[1]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[1] { edit_label[2] = new Fl_Input2(5, 214, 80, 22, _("F3")); edit_label[2]->box(FL_DOWN_BOX); edit_label[2]->color(FL_BACKGROUND2_COLOR); edit_label[2]->selection_color(FL_SELECTION_COLOR); edit_label[2]->labeltype(FL_NORMAL_LABEL); edit_label[2]->labelfont(0); edit_label[2]->labelsize(14); edit_label[2]->labelcolor(FL_FOREGROUND_COLOR); edit_label[2]->callback((Fl_Callback*)cb_edit_label2); edit_label[2]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[2]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[2] { edit_msg[2] = new Fl_Input2(90, 195, 470, 65); edit_msg[2]->type(4); edit_msg[2]->box(FL_DOWN_BOX); edit_msg[2]->color(FL_BACKGROUND2_COLOR); edit_msg[2]->selection_color(FL_SELECTION_COLOR); edit_msg[2]->labeltype(FL_NORMAL_LABEL); edit_msg[2]->labelfont(0); edit_msg[2]->labelsize(14); edit_msg[2]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[2]->callback((Fl_Callback*)cb_edit_msg2); edit_msg[2]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[2]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[2] { edit_label[3] = new Fl_Input2(5, 284, 80, 22, _("F4")); edit_label[3]->box(FL_DOWN_BOX); edit_label[3]->color(FL_BACKGROUND2_COLOR); edit_label[3]->selection_color(FL_SELECTION_COLOR); edit_label[3]->labeltype(FL_NORMAL_LABEL); edit_label[3]->labelfont(0); edit_label[3]->labelsize(14); edit_label[3]->labelcolor(FL_FOREGROUND_COLOR); edit_label[3]->callback((Fl_Callback*)cb_edit_label3); edit_label[3]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[3]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[3] { edit_msg[3] = new Fl_Input2(90, 265, 470, 65); edit_msg[3]->type(4); edit_msg[3]->box(FL_DOWN_BOX); edit_msg[3]->color(FL_BACKGROUND2_COLOR); edit_msg[3]->selection_color(FL_SELECTION_COLOR); edit_msg[3]->labeltype(FL_NORMAL_LABEL); edit_msg[3]->labelfont(0); edit_msg[3]->labelsize(14); edit_msg[3]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[3]->callback((Fl_Callback*)cb_edit_msg3); edit_msg[3]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[3]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[3] o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(0, 25, 565, 320, _("F5-f8")); o->hide(); { new Fl_Box(22, 30, 84, 20, _("Label")); } // Fl_Box* o { new Fl_Box(211, 30, 223, 20, _("Message Text")); } // Fl_Box* o { edit_label[4] = new Fl_Input2(5, 74, 80, 22, _("F5")); edit_label[4]->box(FL_DOWN_BOX); edit_label[4]->color(FL_BACKGROUND2_COLOR); edit_label[4]->selection_color(FL_SELECTION_COLOR); edit_label[4]->labeltype(FL_NORMAL_LABEL); edit_label[4]->labelfont(0); edit_label[4]->labelsize(14); edit_label[4]->labelcolor(FL_FOREGROUND_COLOR); edit_label[4]->callback((Fl_Callback*)cb_edit_label4); edit_label[4]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[4]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[4] { edit_msg[4] = new Fl_Input2(90, 55, 470, 65); edit_msg[4]->type(4); edit_msg[4]->box(FL_DOWN_BOX); edit_msg[4]->color(FL_BACKGROUND2_COLOR); edit_msg[4]->selection_color(FL_SELECTION_COLOR); edit_msg[4]->labeltype(FL_NORMAL_LABEL); edit_msg[4]->labelfont(0); edit_msg[4]->labelsize(14); edit_msg[4]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[4]->callback((Fl_Callback*)cb_edit_msg4); edit_msg[4]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[4]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[4] { edit_label[5] = new Fl_Input2(5, 144, 80, 22, _("F6")); edit_label[5]->box(FL_DOWN_BOX); edit_label[5]->color(FL_BACKGROUND2_COLOR); edit_label[5]->selection_color(FL_SELECTION_COLOR); edit_label[5]->labeltype(FL_NORMAL_LABEL); edit_label[5]->labelfont(0); edit_label[5]->labelsize(14); edit_label[5]->labelcolor(FL_FOREGROUND_COLOR); edit_label[5]->callback((Fl_Callback*)cb_edit_label5); edit_label[5]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[5]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[5] { edit_msg[5] = new Fl_Input2(90, 125, 470, 65); edit_msg[5]->type(4); edit_msg[5]->box(FL_DOWN_BOX); edit_msg[5]->color(FL_BACKGROUND2_COLOR); edit_msg[5]->selection_color(FL_SELECTION_COLOR); edit_msg[5]->labeltype(FL_NORMAL_LABEL); edit_msg[5]->labelfont(0); edit_msg[5]->labelsize(14); edit_msg[5]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[5]->callback((Fl_Callback*)cb_edit_msg5); edit_msg[5]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[5]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[5] { edit_label[6] = new Fl_Input2(5, 214, 80, 22, _("F7")); edit_label[6]->box(FL_DOWN_BOX); edit_label[6]->color(FL_BACKGROUND2_COLOR); edit_label[6]->selection_color(FL_SELECTION_COLOR); edit_label[6]->labeltype(FL_NORMAL_LABEL); edit_label[6]->labelfont(0); edit_label[6]->labelsize(14); edit_label[6]->labelcolor(FL_FOREGROUND_COLOR); edit_label[6]->callback((Fl_Callback*)cb_edit_label6); edit_label[6]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[6]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[6] { edit_msg[6] = new Fl_Input2(90, 195, 470, 65); edit_msg[6]->type(4); edit_msg[6]->box(FL_DOWN_BOX); edit_msg[6]->color(FL_BACKGROUND2_COLOR); edit_msg[6]->selection_color(FL_SELECTION_COLOR); edit_msg[6]->labeltype(FL_NORMAL_LABEL); edit_msg[6]->labelfont(0); edit_msg[6]->labelsize(14); edit_msg[6]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[6]->callback((Fl_Callback*)cb_edit_msg6); edit_msg[6]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[6]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[6] { edit_label[7] = new Fl_Input2(5, 284, 80, 22, _("F8")); edit_label[7]->box(FL_DOWN_BOX); edit_label[7]->color(FL_BACKGROUND2_COLOR); edit_label[7]->selection_color(FL_SELECTION_COLOR); edit_label[7]->labeltype(FL_NORMAL_LABEL); edit_label[7]->labelfont(0); edit_label[7]->labelsize(14); edit_label[7]->labelcolor(FL_FOREGROUND_COLOR); edit_label[7]->callback((Fl_Callback*)cb_edit_label7); edit_label[7]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[7]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[7] { edit_msg[7] = new Fl_Input2(90, 265, 470, 65); edit_msg[7]->type(4); edit_msg[7]->box(FL_DOWN_BOX); edit_msg[7]->color(FL_BACKGROUND2_COLOR); edit_msg[7]->selection_color(FL_SELECTION_COLOR); edit_msg[7]->labeltype(FL_NORMAL_LABEL); edit_msg[7]->labelfont(0); edit_msg[7]->labelsize(14); edit_msg[7]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[7]->callback((Fl_Callback*)cb_edit_msg7); edit_msg[7]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[7]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[7] o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(0, 25, 565, 320, _("F9-F12")); o->hide(); { new Fl_Box(22, 30, 84, 20, _("Label")); } // Fl_Box* o { new Fl_Box(211, 30, 223, 20, _("Message Text")); } // Fl_Box* o { edit_label[8] = new Fl_Input2(5, 73, 80, 22, _("F9")); edit_label[8]->box(FL_DOWN_BOX); edit_label[8]->color(FL_BACKGROUND2_COLOR); edit_label[8]->selection_color(FL_SELECTION_COLOR); edit_label[8]->labeltype(FL_NORMAL_LABEL); edit_label[8]->labelfont(0); edit_label[8]->labelsize(14); edit_label[8]->labelcolor(FL_FOREGROUND_COLOR); edit_label[8]->callback((Fl_Callback*)cb_edit_label8); edit_label[8]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[8]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[8] { edit_msg[8] = new Fl_Input2(90, 55, 470, 65); edit_msg[8]->type(4); edit_msg[8]->box(FL_DOWN_BOX); edit_msg[8]->color(FL_BACKGROUND2_COLOR); edit_msg[8]->selection_color(FL_SELECTION_COLOR); edit_msg[8]->labeltype(FL_NORMAL_LABEL); edit_msg[8]->labelfont(0); edit_msg[8]->labelsize(14); edit_msg[8]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[8]->callback((Fl_Callback*)cb_edit_msg8); edit_msg[8]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[8]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[8] { edit_label[9] = new Fl_Input2(5, 143, 80, 22, _("F10")); edit_label[9]->box(FL_DOWN_BOX); edit_label[9]->color(FL_BACKGROUND2_COLOR); edit_label[9]->selection_color(FL_SELECTION_COLOR); edit_label[9]->labeltype(FL_NORMAL_LABEL); edit_label[9]->labelfont(0); edit_label[9]->labelsize(14); edit_label[9]->labelcolor(FL_FOREGROUND_COLOR); edit_label[9]->callback((Fl_Callback*)cb_edit_label9); edit_label[9]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[9]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[9] { edit_msg[9] = new Fl_Input2(90, 125, 470, 65); edit_msg[9]->type(4); edit_msg[9]->box(FL_DOWN_BOX); edit_msg[9]->color(FL_BACKGROUND2_COLOR); edit_msg[9]->selection_color(FL_SELECTION_COLOR); edit_msg[9]->labeltype(FL_NORMAL_LABEL); edit_msg[9]->labelfont(0); edit_msg[9]->labelsize(14); edit_msg[9]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[9]->callback((Fl_Callback*)cb_edit_msg9); edit_msg[9]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[9]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[9] { edit_label[10] = new Fl_Input2(5, 213, 80, 22, _("F11")); edit_label[10]->box(FL_DOWN_BOX); edit_label[10]->color(FL_BACKGROUND2_COLOR); edit_label[10]->selection_color(FL_SELECTION_COLOR); edit_label[10]->labeltype(FL_NORMAL_LABEL); edit_label[10]->labelfont(0); edit_label[10]->labelsize(14); edit_label[10]->labelcolor(FL_FOREGROUND_COLOR); edit_label[10]->callback((Fl_Callback*)cb_edit_labela); edit_label[10]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[10]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[10] { edit_msg[10] = new Fl_Input2(90, 195, 470, 65); edit_msg[10]->type(4); edit_msg[10]->box(FL_DOWN_BOX); edit_msg[10]->color(FL_BACKGROUND2_COLOR); edit_msg[10]->selection_color(FL_SELECTION_COLOR); edit_msg[10]->labeltype(FL_NORMAL_LABEL); edit_msg[10]->labelfont(0); edit_msg[10]->labelsize(14); edit_msg[10]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[10]->callback((Fl_Callback*)cb_edit_msga); edit_msg[10]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[10]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[10] { edit_label[11] = new Fl_Input2(5, 283, 80, 22, _("F12")); edit_label[11]->box(FL_DOWN_BOX); edit_label[11]->color(FL_BACKGROUND2_COLOR); edit_label[11]->selection_color(FL_SELECTION_COLOR); edit_label[11]->labeltype(FL_NORMAL_LABEL); edit_label[11]->labelfont(0); edit_label[11]->labelsize(14); edit_label[11]->labelcolor(FL_FOREGROUND_COLOR); edit_label[11]->callback((Fl_Callback*)cb_edit_labelb); edit_label[11]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); edit_label[11]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_label[11] { edit_msg[11] = new Fl_Input2(90, 265, 470, 65); edit_msg[11]->type(4); edit_msg[11]->box(FL_DOWN_BOX); edit_msg[11]->color(FL_BACKGROUND2_COLOR); edit_msg[11]->selection_color(FL_SELECTION_COLOR); edit_msg[11]->labeltype(FL_NORMAL_LABEL); edit_msg[11]->labelfont(0); edit_msg[11]->labelsize(14); edit_msg[11]->labelcolor(FL_FOREGROUND_COLOR); edit_msg[11]->callback((Fl_Callback*)cb_edit_msgb); edit_msg[11]->align(Fl_Align(FL_ALIGN_LEFT)); edit_msg[11]->when(FL_WHEN_RELEASE); } // Fl_Input2* edit_msg[11] o->end(); } // Fl_Group* o o->end(); } // Fl_Tabs* o { Fl_Group* o = new Fl_Group(567, 0, 101, 224); o->box(FL_ENGRAVED_FRAME); { Fl_ListBox* o = listbox_BT = new Fl_ListBox(600, 6, 60, 22, _("BT")); listbox_BT->box(FL_DOWN_BOX); listbox_BT->color(FL_BACKGROUND2_COLOR); listbox_BT->selection_color(FL_BACKGROUND_COLOR); listbox_BT->labeltype(FL_NORMAL_LABEL); listbox_BT->labelfont(0); listbox_BT->labelsize(14); listbox_BT->labelcolor(FL_FOREGROUND_COLOR); listbox_BT->callback((Fl_Callback*)cb_listbox_BT); listbox_BT->align(Fl_Align(FL_ALIGN_LEFT)); listbox_BT->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.BT.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_BT->end(); } // Fl_ListBox* listbox_BT { Fl_ListBox* o = listbox_AA = new Fl_ListBox(600, 30, 60, 22, _("AA")); listbox_AA->box(FL_DOWN_BOX); listbox_AA->color(FL_BACKGROUND2_COLOR); listbox_AA->selection_color(FL_BACKGROUND_COLOR); listbox_AA->labeltype(FL_NORMAL_LABEL); listbox_AA->labelfont(0); listbox_AA->labelsize(14); listbox_AA->labelcolor(FL_FOREGROUND_COLOR); listbox_AA->callback((Fl_Callback*)cb_listbox_AA); listbox_AA->align(Fl_Align(FL_ALIGN_LEFT)); listbox_AA->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.AA.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_AA->end(); } // Fl_ListBox* listbox_AA { Fl_ListBox* o = listbox_AS = new Fl_ListBox(600, 54, 60, 22, _("AS")); listbox_AS->box(FL_DOWN_BOX); listbox_AS->color(FL_BACKGROUND2_COLOR); listbox_AS->selection_color(FL_BACKGROUND_COLOR); listbox_AS->labeltype(FL_NORMAL_LABEL); listbox_AS->labelfont(0); listbox_AS->labelsize(14); listbox_AS->labelcolor(FL_FOREGROUND_COLOR); listbox_AS->callback((Fl_Callback*)cb_listbox_AS); listbox_AS->align(Fl_Align(FL_ALIGN_LEFT)); listbox_AS->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.AS.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_AS->end(); } // Fl_ListBox* listbox_AS { Fl_ListBox* o = listbox_AR = new Fl_ListBox(600, 78, 60, 22, _("AR")); listbox_AR->box(FL_DOWN_BOX); listbox_AR->color(FL_BACKGROUND2_COLOR); listbox_AR->selection_color(FL_BACKGROUND_COLOR); listbox_AR->labeltype(FL_NORMAL_LABEL); listbox_AR->labelfont(0); listbox_AR->labelsize(14); listbox_AR->labelcolor(FL_FOREGROUND_COLOR); listbox_AR->callback((Fl_Callback*)cb_listbox_AR); listbox_AR->align(Fl_Align(FL_ALIGN_LEFT)); listbox_AR->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.AR.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_AR->end(); } // Fl_ListBox* listbox_AR { Fl_ListBox* o = listbox_SK = new Fl_ListBox(600, 102, 60, 22, _("SK")); listbox_SK->box(FL_DOWN_BOX); listbox_SK->color(FL_BACKGROUND2_COLOR); listbox_SK->selection_color(FL_BACKGROUND_COLOR); listbox_SK->labeltype(FL_NORMAL_LABEL); listbox_SK->labelfont(0); listbox_SK->labelsize(14); listbox_SK->labelcolor(FL_FOREGROUND_COLOR); listbox_SK->callback((Fl_Callback*)cb_listbox_SK); listbox_SK->align(Fl_Align(FL_ALIGN_LEFT)); listbox_SK->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.SK.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_SK->end(); } // Fl_ListBox* listbox_SK { Fl_ListBox* o = listbox_KN = new Fl_ListBox(600, 126, 60, 22, _("KN")); listbox_KN->box(FL_DOWN_BOX); listbox_KN->color(FL_BACKGROUND2_COLOR); listbox_KN->selection_color(FL_BACKGROUND_COLOR); listbox_KN->labeltype(FL_NORMAL_LABEL); listbox_KN->labelfont(0); listbox_KN->labelsize(14); listbox_KN->labelcolor(FL_FOREGROUND_COLOR); listbox_KN->callback((Fl_Callback*)cb_listbox_KN); listbox_KN->align(Fl_Align(FL_ALIGN_LEFT)); listbox_KN->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.KN.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_KN->end(); } // Fl_ListBox* listbox_KN { Fl_ListBox* o = listbox_INT = new Fl_ListBox(600, 150, 60, 22, _("INT")); listbox_INT->box(FL_DOWN_BOX); listbox_INT->color(FL_BACKGROUND2_COLOR); listbox_INT->selection_color(FL_BACKGROUND_COLOR); listbox_INT->labeltype(FL_NORMAL_LABEL); listbox_INT->labelfont(0); listbox_INT->labelsize(14); listbox_INT->labelcolor(FL_FOREGROUND_COLOR); listbox_INT->callback((Fl_Callback*)cb_listbox_INT); listbox_INT->align(Fl_Align(FL_ALIGN_LEFT)); listbox_INT->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.INT.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_INT->end(); } // Fl_ListBox* listbox_INT { Fl_ListBox* o = listbox_HM = new Fl_ListBox(600, 174, 60, 22, _("HM")); listbox_HM->box(FL_DOWN_BOX); listbox_HM->color(FL_BACKGROUND2_COLOR); listbox_HM->selection_color(FL_BACKGROUND_COLOR); listbox_HM->labeltype(FL_NORMAL_LABEL); listbox_HM->labelfont(0); listbox_HM->labelsize(14); listbox_HM->labelcolor(FL_FOREGROUND_COLOR); listbox_HM->callback((Fl_Callback*)cb_listbox_HM); listbox_HM->align(Fl_Align(FL_ALIGN_LEFT)); listbox_HM->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.HM.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_HM->end(); } // Fl_ListBox* listbox_HM { Fl_ListBox* o = listbox_VE = new Fl_ListBox(600, 199, 60, 22, _("VE")); listbox_VE->box(FL_DOWN_BOX); listbox_VE->color(FL_BACKGROUND2_COLOR); listbox_VE->selection_color(FL_BACKGROUND_COLOR); listbox_VE->labeltype(FL_NORMAL_LABEL); listbox_VE->labelfont(0); listbox_VE->labelsize(14); listbox_VE->labelcolor(FL_FOREGROUND_COLOR); listbox_VE->callback((Fl_Callback*)cb_listbox_VE); listbox_VE->align(Fl_Align(FL_ALIGN_LEFT)); listbox_VE->when(FL_WHEN_RELEASE); o->add(szProsigns); o->value(progStatus.VE.c_str()); o->labelsize(FL_NORMAL_SIZE); listbox_VE->end(); } // Fl_ListBox* listbox_VE o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(567, 222, 113, 157); o->box(FL_ENGRAVED_FRAME); { btn_start_xmt = new Fl_Button(575, 227, 85, 20, _("[ TX")); } // Fl_Button* btn_start_xmt { btn_end_xmt = new Fl_Button(575, 258, 85, 20, _("] RX")); } // Fl_Button* btn_end_xmt { btn_append_call = new Fl_Button(575, 290, 85, 20, _("~C CALL")); } // Fl_Button* btn_append_call { btn_append_name = new Fl_Button(575, 322, 85, 20, _("~N NAME")); } // Fl_Button* btn_append_name { btn_append_rst = new Fl_Button(575, 354, 85, 20, _("~R RSTout")); } // Fl_Button* btn_append_rst o->end(); } // Fl_Group* o { btn_cancel_edit = new Fl_Button(10, 352, 65, 22, _("Cancel")); btn_cancel_edit->tooltip(_("Exit editor, discard changes")); btn_cancel_edit->callback((Fl_Callback*)cb_btn_cancel_edit); } // Fl_Button* btn_cancel_edit { btn_apply_edit = new Fl_Button(84, 352, 65, 22, _("Apply")); btn_apply_edit->tooltip(_("Apply current changes to function keys")); btn_apply_edit->callback((Fl_Callback*)cb_btn_apply_edit); } // Fl_Button* btn_apply_edit { btn_done_edit = new Fl_Button(158, 352, 65, 22, _("Close")); btn_done_edit->tooltip(_("Apply changes and close editor")); btn_done_edit->callback((Fl_Callback*)cb_btn_done_edit); } // Fl_Button* btn_done_edit { Fl_Group* o = new Fl_Group(24, 24, 15, 15); o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(279, 350, 282, 29); o->box(FL_ENGRAVED_BOX); { btn_append_contest_nbr = new Fl_Button(286, 354, 85, 20, _("~# Cntst #")); } // Fl_Button* btn_append_contest_nbr { btn_append_decr = new Fl_Button(376, 354, 85, 20, _("~- Decr\'")); } // Fl_Button* btn_append_decr { btn_append_incr = new Fl_Button(466, 354, 85, 20, _("~+ Incr\'")); } // Fl_Button* btn_append_incr o->end(); } // Fl_Group* o o->end(); o->resizable(o); } // Fl_Double_Window* o return w; } Fl_ComboBox *select_cwioPORT=(Fl_ComboBox *)0; static void cb_select_cwioPORT(Fl_ComboBox* o, void*) { progStatus.cwioPORT = o->value(); } Fl_Light_Button *btn_cwioCONNECT=(Fl_Light_Button *)0; static void cb_btn_cwioCONNECT(Fl_Light_Button* o, void*) { if (o->value() == 0) { close_cwkey(); btn_cwioCAT->activate(); btn_cwioAUX->activate(); btn_cwioSEP->activate(); progStatus.cwioCONNECTED = 0; } else if (!open_cwkey()) { o->value(0); btn_cwioCAT->activate(); btn_cwioAUX->activate(); btn_cwioSEP->activate(); progStatus.cwioCONNECTED = 0; } else { btn_cwioCAT->value(0); btn_cwioCAT->deactivate(); btn_cwioAUX->value(0); btn_cwioAUX->deactivate(); btn_cwioSEP->value(0); btn_cwioSEP->deactivate(); progStatus.cwioCONNECTED = 1; } progStatus.cwioSHARED = 0; } Fl_Check_Button *btn_cwioCAT=(Fl_Check_Button *)0; static void cb_btn_cwioCAT(Fl_Check_Button* o, void*) { if (o->value()) { progStatus.cwioSHARED = 1; btn_cwioAUX->value(0); btn_cwioAUX->deactivate(); btn_cwioSEP->value(0); btn_cwioSEP->deactivate(); btn_cwioCONNECT->value(0); btn_cwioCONNECT->deactivate(); select_cwioPORT->value("NONE"); select_cwioPORT->deactivate(); }else { progStatus.cwioSHARED = 0; btn_cwioCONNECT->activate(); btn_cwioAUX->activate(); btn_cwioSEP->activate(); select_cwioPORT->activate(); }; } Fl_Check_Button *btn_cwioAUX=(Fl_Check_Button *)0; static void cb_btn_cwioAUX(Fl_Check_Button* o, void*) { if (o->value()) { progStatus.cwioSHARED = 2; btn_cwioCAT->value(0); btn_cwioCAT->deactivate(); btn_cwioSEP->value(0); btn_cwioSEP->deactivate(); btn_cwioCONNECT->value(0); btn_cwioCONNECT->deactivate(); select_cwioPORT->value("NONE"); select_cwioPORT->deactivate(); }else { progStatus.cwioSHARED = 0; btn_cwioCONNECT->activate(); btn_cwioCAT->activate(); btn_cwioSEP->activate(); select_cwioPORT->activate(); }; } Fl_Check_Button *btn_cwioSEP=(Fl_Check_Button *)0; static void cb_btn_cwioSEP(Fl_Check_Button* o, void*) { if (o->value()) { progStatus.cwioSHARED = 3; btn_cwioAUX->value(0); btn_cwioAUX->deactivate(); btn_cwioCAT->value(0); btn_cwioCAT->deactivate(); btn_cwioCONNECT->value(0); btn_cwioCONNECT->deactivate(); select_cwioPORT->value("NONE"); select_cwioPORT->deactivate(); }else { progStatus.cwioSHARED = 0; btn_cwioCONNECT->activate(); btn_cwioAUX->activate(); btn_cwioCAT->activate(); select_cwioPORT->activate(); }; } Fl_ListBox *listbox_cwioKEYLINE=(Fl_ListBox *)0; static void cb_listbox_cwioKEYLINE(Fl_ListBox* o, void*) { progStatus.cwioKEYLINE = o->index(); } Fl_Spinner *cntr_cwioPTT=(Fl_Spinner *)0; static void cb_cntr_cwioPTT(Fl_Spinner* o, void*) { progStatus.cwioPTT = o->value(); } Fl_Light_Button *btn_cw_dtr_calibrate=(Fl_Light_Button *)0; static void cb_btn_cw_dtr_calibrate(Fl_Light_Button*, void*) { calibrate_cwio(); } Fl_Counter *cnt_cwio_comp=(Fl_Counter *)0; static void cb_cnt_cwio_comp(Fl_Counter* o, void*) { progStatus.cwio_comp = o->value(); } Fl_Check_Button *btn_cwioINVERTED=(Fl_Check_Button *)0; static void cb_btn_cwioINVERTED(Fl_Check_Button* o, void*) { progStatus.cwioINVERTED = o->value(); reset_cwioport(); } Fl_Counter *cnt_cwio_keycorr=(Fl_Counter *)0; static void cb_cnt_cwio_keycorr(Fl_Counter* o, void*) { progStatus.cwio_keycorr = o->value(); } Fl_Double_Window* new_cwio_config_dialog() { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(670, 100, _("CW Configuration")); w = o; if (w) {/* empty */} { Fl_Group* o = new Fl_Group(1, 0, 668, 98); o->box(FL_ENGRAVED_FRAME); { Fl_ComboBox* o = select_cwioPORT = new Fl_ComboBox(73, 69, 496, 23, _("Ser. Port")); select_cwioPORT->tooltip(_("CWIO serial port")); select_cwioPORT->box(FL_DOWN_BOX); select_cwioPORT->color((Fl_Color)53); select_cwioPORT->selection_color(FL_BACKGROUND_COLOR); select_cwioPORT->labeltype(FL_NORMAL_LABEL); select_cwioPORT->labelfont(0); select_cwioPORT->labelsize(14); select_cwioPORT->labelcolor(FL_FOREGROUND_COLOR); select_cwioPORT->callback((Fl_Callback*)cb_select_cwioPORT); select_cwioPORT->align(Fl_Align(FL_ALIGN_LEFT)); select_cwioPORT->when(FL_WHEN_RELEASE); o->value(progStatus.cwioPORT.c_str()); select_cwioPORT->end(); } // Fl_ComboBox* select_cwioPORT { Fl_Light_Button* o = btn_cwioCONNECT = new Fl_Light_Button(578, 69, 80, 23, _("Connect")); btn_cwioCONNECT->callback((Fl_Callback*)cb_btn_cwioCONNECT); o->value(progStatus.cwioCONNECTED); } // Fl_Light_Button* btn_cwioCONNECT { Fl_Check_Button* o = btn_cwioCAT = new Fl_Check_Button(70, 15, 18, 15, _("Use CAT")); btn_cwioCAT->tooltip(_("Use DTR/RTS on CAT serial port")); btn_cwioCAT->down_box(FL_DOWN_BOX); btn_cwioCAT->callback((Fl_Callback*)cb_btn_cwioCAT); btn_cwioCAT->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.cwioSHARED == 1); } // Fl_Check_Button* btn_cwioCAT { Fl_Check_Button* o = btn_cwioAUX = new Fl_Check_Button(71, 46, 18, 15, _("Use AUX")); btn_cwioAUX->tooltip(_("Use DTR/RTS on Auxiliary serial port")); btn_cwioAUX->down_box(FL_DOWN_BOX); btn_cwioAUX->callback((Fl_Callback*)cb_btn_cwioAUX); btn_cwioAUX->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.cwioSHARED == 2); } // Fl_Check_Button* btn_cwioAUX { Fl_Check_Button* o = btn_cwioSEP = new Fl_Check_Button(160, 15, 18, 15, _("Use SEP")); btn_cwioSEP->tooltip(_("Use DTR/RTS Separate serial port")); btn_cwioSEP->down_box(FL_DOWN_BOX); btn_cwioSEP->callback((Fl_Callback*)cb_btn_cwioSEP); btn_cwioSEP->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.cwioSHARED == 3); } // Fl_Check_Button* btn_cwioSEP { Fl_ListBox* o = listbox_cwioKEYLINE = new Fl_ListBox(593, 41, 65, 24, _("Keyline")); listbox_cwioKEYLINE->tooltip(_("Select either DTR or RTS for keyline")); listbox_cwioKEYLINE->box(FL_DOWN_BOX); listbox_cwioKEYLINE->color(FL_BACKGROUND2_COLOR); listbox_cwioKEYLINE->selection_color(FL_BACKGROUND_COLOR); listbox_cwioKEYLINE->labeltype(FL_NORMAL_LABEL); listbox_cwioKEYLINE->labelfont(0); listbox_cwioKEYLINE->labelsize(14); listbox_cwioKEYLINE->labelcolor(FL_FOREGROUND_COLOR); listbox_cwioKEYLINE->callback((Fl_Callback*)cb_listbox_cwioKEYLINE); listbox_cwioKEYLINE->align(Fl_Align(FL_ALIGN_LEFT)); listbox_cwioKEYLINE->when(FL_WHEN_RELEASE); o->add("None|RTS|DTR"); o->index(progStatus.cwioKEYLINE); listbox_cwioKEYLINE->end(); } // Fl_ListBox* listbox_cwioKEYLINE { Fl_Spinner* o = cntr_cwioPTT = new Fl_Spinner(608, 10, 50, 25, _("PTT delay")); cntr_cwioPTT->tooltip(_("PTT delay before keydown\n0 = Break-in")); cntr_cwioPTT->minimum(0); cntr_cwioPTT->value(0); cntr_cwioPTT->callback((Fl_Callback*)cb_cntr_cwioPTT); o->value(progStatus.cwioPTT); } // Fl_Spinner* cntr_cwioPTT { btn_cw_dtr_calibrate = new Fl_Light_Button(235, 8, 56, 24, _("Calib\'")); btn_cw_dtr_calibrate->tooltip(_("Calibrate WPM timing")); btn_cw_dtr_calibrate->selection_color((Fl_Color)6); btn_cw_dtr_calibrate->callback((Fl_Callback*)cb_btn_cw_dtr_calibrate); } // Fl_Light_Button* btn_cw_dtr_calibrate { Fl_Counter* o = cnt_cwio_comp = new Fl_Counter(400, 8, 130, 24, _("WPM Comp")); cnt_cwio_comp->tooltip(_("Timing compensation msec")); cnt_cwio_comp->minimum(-5); cnt_cwio_comp->maximum(5); cnt_cwio_comp->step(0.001); cnt_cwio_comp->callback((Fl_Callback*)cb_cnt_cwio_comp); cnt_cwio_comp->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.cwio_comp); o->lstep(0.1); } // Fl_Counter* cnt_cwio_comp { Fl_Check_Button* o = btn_cwioINVERTED = new Fl_Check_Button(160, 46, 18, 15, _("Inverted")); btn_cwioINVERTED->tooltip(_("DTR/RTS signaling is inverted\n(-) keying")); btn_cwioINVERTED->down_box(FL_DOWN_BOX); btn_cwioINVERTED->callback((Fl_Callback*)cb_btn_cwioINVERTED); btn_cwioINVERTED->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.cwioINVERTED); } // Fl_Check_Button* btn_cwioINVERTED { Fl_Counter* o = cnt_cwio_keycorr = new Fl_Counter(400, 41, 130, 24, _("Xcvr Comp")); cnt_cwio_keycorr->tooltip(_("Compensate for xcv delays (msec)")); cnt_cwio_keycorr->minimum(-10); cnt_cwio_keycorr->maximum(10); cnt_cwio_keycorr->step(0.01); cnt_cwio_keycorr->callback((Fl_Callback*)cb_cnt_cwio_keycorr); cnt_cwio_keycorr->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.cwio_keycorr); o->lstep(0.10); } // Fl_Counter* cnt_cwio_keycorr o->end(); } // Fl_Group* o o->end(); } // Fl_Double_Window* o return w; } Fl_Menu_Bar *CWlog_menubar=(Fl_Menu_Bar *)0; static void cb_cwlog_menu_open(Fl_Menu_*, void*) { cwlog_open(); } static void cb_cwlog_menu_new(Fl_Menu_*, void*) { cwlog_new(); } static void cb_cwlog_menu_save(Fl_Menu_*, void*) { cwlog_save(); } static void cb_cwlog_menu_save_as(Fl_Menu_*, void*) { cwlog_save_as(); } static void cb_cwlog_menu_export_adif(Fl_Menu_*, void*) { cwlog_export_adif(); } static void cb_cwlog_menu_import_adif(Fl_Menu_*, void*) { cwlog_import_adif(); } static void cb_cwlog_menu_dupcheck(Fl_Menu_* o, void*) { //cwlog.dupcheck = o->value(); } static void cb_cwlog_menu_leading_zeros(Fl_Menu_* o, void*) { //cwlog.dupcheck = o->value(); } static void cb_cwlog_menu_cut_numbers(Fl_Menu_* o, void*) { //cwlog.cut_nbrs = o->value(); } unsigned char menu_CWlog_menubar_i18n_done = 0; Fl_Menu_Item menu_CWlog_menubar[] = { {"Files", 0, 0, 0, 64, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Open", 0, (Fl_Callback*)cb_cwlog_menu_open, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"New", 0, (Fl_Callback*)cb_cwlog_menu_new, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Save", 0, (Fl_Callback*)cb_cwlog_menu_save, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Save As", 0, (Fl_Callback*)cb_cwlog_menu_save_as, 0, 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Export ADIF", 0, (Fl_Callback*)cb_cwlog_menu_export_adif, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Import ADIF", 0, (Fl_Callback*)cb_cwlog_menu_import_adif, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {"Config", 0, 0, 0, 64, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Dup check", 0, (Fl_Callback*)cb_cwlog_menu_dupcheck, 0, 2, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Leading zeros", 0, (Fl_Callback*)cb_cwlog_menu_leading_zeros, 0, 2, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Cut numbers", 0, (Fl_Callback*)cb_cwlog_menu_cut_numbers, 0, 2, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0} }; Fl_Output *txt_cwlog_file=(Fl_Output *)0; static void cb_txt_cwlog_file(Fl_Output* o, void*) { //progStatus.cwlogfile_name = o->value(); } Fl_Group *cw_grp_qso_data=(Fl_Group *)0; Fl_Input2 *cw_freq=(Fl_Input2 *)0; Fl_Button *btn_cwlog_clear_qso=(Fl_Button *)0; static void cb_btn_cwlog_clear_qso(Fl_Button*, void*) { cwlog_clear_qso(); } Fl_Button *btn_cwlog_save_qso=(Fl_Button *)0; static void cb_btn_cwlog_save_qso(Fl_Button*, void*) { cwlog_save_qso(); } Fl_Button *btn_cwlog_edit_entry=(Fl_Button *)0; static void cb_btn_cwlog_edit_entry(Fl_Button*, void*) { cwlog_edit_entry(); } Fl_Button *btn_cwlog_delete_entry=(Fl_Button *)0; static void cb_btn_cwlog_delete_entry(Fl_Button*, void*) { cwlog_delete_entry(); } Fl_Input2 *cw_qso_date=(Fl_Input2 *)0; Fl_Input2 *cw_qso_time=(Fl_Input2 *)0; Fl_Input2 *cw_rst_out=(Fl_Input2 *)0; Fl_Input2 *cw_rst_in=(Fl_Input2 *)0; Fl_Input2 *cw_xchg_in=(Fl_Input2 *)0; Fl_Counter *cw_log_nbr=(Fl_Counter *)0; static void cb_cw_log_nbr(Fl_Counter* o, void*) { progStatus.cw_log_nbr = o->value(); } Fl_Input2 *cw_op_name=(Fl_Input2 *)0; Fl_Input2 *cw_op_call=(Fl_Input2 *)0; Fl_Button *btn_cw_datetime=(Fl_Button *)0; static void cb_btn_cw_datetime(Fl_Button*, void*) { cwlog_sort_by_datetime(); } Fl_Button *btn_cw_time=(Fl_Button *)0; static void cb_btn_cw_time(Fl_Button*, void*) { cwlog_sort_by_datetime(); } Fl_Button *btn_cw_freq=(Fl_Button *)0; static void cb_btn_cw_freq(Fl_Button*, void*) { cwlog_sort_by_freq(); } Fl_Button *btn_cw_call=(Fl_Button *)0; static void cb_btn_cw_call(Fl_Button*, void*) { cwlog_sort_by_call(); } Fl_Button *btn_cw_name=(Fl_Button *)0; Fl_Button *btn_cw_in=(Fl_Button *)0; Fl_Button *btn_cw_out=(Fl_Button *)0; Fl_Button *btn_cw_sent_nbr=(Fl_Button *)0; static void cb_btn_cw_sent_nbr(Fl_Button*, void*) { cwlog_sort_by_nbr(); } Fl_Button *btn_cw_xchg=(Fl_Button *)0; Fl_Browser *brwsr_cwlog_entries=(Fl_Browser *)0; static void cb_brwsr_cwlog_entries(Fl_Browser*, void*) { if (!cwlog_editing) cwlog_edit_entry(); } Fl_Double_Window* new_cwlogbook_dialog() { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(670, 280, _("Flrig CW Log")); w = o; if (w) {/* empty */} { CWlog_menubar = new Fl_Menu_Bar(0, 0, 670, 20); if (!menu_CWlog_menubar_i18n_done) { int i=0; for ( ; i<12; i++) if (menu_CWlog_menubar[i].label()) menu_CWlog_menubar[i].label(_(menu_CWlog_menubar[i].label())); menu_CWlog_menubar_i18n_done = 1; } CWlog_menubar->menu(menu_CWlog_menubar); } // Fl_Menu_Bar* CWlog_menubar { Fl_Group* o = new Fl_Group(2, 22, 668, 29); o->box(FL_ENGRAVED_FRAME); { txt_cwlog_file = new Fl_Output(75, 26, 590, 22, _("Log File:")); txt_cwlog_file->callback((Fl_Callback*)cb_txt_cwlog_file); //->value(progStatus.cwlogfile_name); } // Fl_Output* txt_cwlog_file o->end(); } // Fl_Group* o { cw_grp_qso_data = new Fl_Group(2, 52, 560, 30); cw_grp_qso_data->box(FL_ENGRAVED_BOX); { cw_freq = new Fl_Input2(43, 56, 120, 22, _("Freq")); cw_freq->tooltip(_("Frequency")); cw_freq->box(FL_DOWN_BOX); cw_freq->color(FL_BACKGROUND2_COLOR); cw_freq->selection_color(FL_SELECTION_COLOR); cw_freq->labeltype(FL_NORMAL_LABEL); cw_freq->labelfont(0); cw_freq->labelsize(14); cw_freq->labelcolor(FL_FOREGROUND_COLOR); cw_freq->align(Fl_Align(FL_ALIGN_LEFT)); cw_freq->when(FL_WHEN_RELEASE); } // Fl_Input2* cw_freq { btn_cwlog_clear_qso = new Fl_Button(380, 56, 60, 22, _("Clear")); btn_cwlog_clear_qso->tooltip(_("Clear cwlog entries")); btn_cwlog_clear_qso->callback((Fl_Callback*)cb_btn_cwlog_clear_qso); } // Fl_Button* btn_cwlog_clear_qso { btn_cwlog_save_qso = new Fl_Button(440, 56, 60, 22, _("Save")); btn_cwlog_save_qso->tooltip(_("Save QSO data to cwlog file")); btn_cwlog_save_qso->callback((Fl_Callback*)cb_btn_cwlog_save_qso); } // Fl_Button* btn_cwlog_save_qso { btn_cwlog_edit_entry = new Fl_Button(501, 56, 60, 22, _("Edit")); btn_cwlog_edit_entry->tooltip(_("Delete Entry")); btn_cwlog_edit_entry->callback((Fl_Callback*)cb_btn_cwlog_edit_entry); } // Fl_Button* btn_cwlog_edit_entry { btn_cwlog_delete_entry = new Fl_Button(492, 56, 60, 22, _("Delete")); btn_cwlog_delete_entry->tooltip(_("Delete Entry")); btn_cwlog_delete_entry->callback((Fl_Callback*)cb_btn_cwlog_delete_entry); btn_cwlog_delete_entry->hide(); } // Fl_Button* btn_cwlog_delete_entry { cw_qso_date = new Fl_Input2(193, 56, 85, 22, _("Dt")); cw_qso_date->tooltip(_("QSO call\nQuery flcwlog if connected")); cw_qso_date->box(FL_DOWN_BOX); cw_qso_date->color(FL_BACKGROUND2_COLOR); cw_qso_date->selection_color(FL_SELECTION_COLOR); cw_qso_date->labeltype(FL_NORMAL_LABEL); cw_qso_date->labelfont(0); cw_qso_date->labelsize(14); cw_qso_date->labelcolor(FL_FOREGROUND_COLOR); cw_qso_date->align(Fl_Align(FL_ALIGN_LEFT)); cw_qso_date->when(FL_WHEN_RELEASE); } // Fl_Input2* cw_qso_date { cw_qso_time = new Fl_Input2(313, 56, 55, 22, _("Tm:")); cw_qso_time->box(FL_DOWN_BOX); cw_qso_time->color(FL_BACKGROUND2_COLOR); cw_qso_time->selection_color(FL_SELECTION_COLOR); cw_qso_time->labeltype(FL_NORMAL_LABEL); cw_qso_time->labelfont(0); cw_qso_time->labelsize(14); cw_qso_time->labelcolor(FL_FOREGROUND_COLOR); cw_qso_time->align(Fl_Align(FL_ALIGN_LEFT)); cw_qso_time->when(FL_WHEN_RELEASE); } // Fl_Input2* cw_qso_time cw_grp_qso_data->end(); } // Fl_Group* cw_grp_qso_data { Fl_Group* o = new Fl_Group(565, 52, 103, 62); o->box(FL_ENGRAVED_BOX); { cw_rst_out = new Fl_Input2(622, 56, 40, 22, _("RSTout")); cw_rst_out->tooltip(_("Send RST")); cw_rst_out->box(FL_DOWN_BOX); cw_rst_out->color(FL_BACKGROUND2_COLOR); cw_rst_out->selection_color(FL_SELECTION_COLOR); cw_rst_out->labeltype(FL_NORMAL_LABEL); cw_rst_out->labelfont(0); cw_rst_out->labelsize(14); cw_rst_out->labelcolor(FL_FOREGROUND_COLOR); cw_rst_out->align(Fl_Align(FL_ALIGN_LEFT)); cw_rst_out->when(FL_WHEN_RELEASE); } // Fl_Input2* cw_rst_out { cw_rst_in = new Fl_Input2(624, 87, 40, 22, _("RST in")); cw_rst_in->tooltip(_("Send RST")); cw_rst_in->box(FL_DOWN_BOX); cw_rst_in->color(FL_BACKGROUND2_COLOR); cw_rst_in->selection_color(FL_SELECTION_COLOR); cw_rst_in->labeltype(FL_NORMAL_LABEL); cw_rst_in->labelfont(0); cw_rst_in->labelsize(14); cw_rst_in->labelcolor(FL_FOREGROUND_COLOR); cw_rst_in->align(Fl_Align(FL_ALIGN_LEFT)); cw_rst_in->when(FL_WHEN_RELEASE); } // Fl_Input2* cw_rst_in o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(2, 84, 560, 30); o->box(FL_ENGRAVED_FRAME); { cw_xchg_in = new Fl_Input2(313, 87, 150, 22, _("Xch")); cw_xchg_in->tooltip(_("Input exchange")); cw_xchg_in->box(FL_DOWN_BOX); cw_xchg_in->color(FL_BACKGROUND2_COLOR); cw_xchg_in->selection_color(FL_SELECTION_COLOR); cw_xchg_in->labeltype(FL_NORMAL_LABEL); cw_xchg_in->labelfont(0); cw_xchg_in->labelsize(14); cw_xchg_in->labelcolor(FL_FOREGROUND_COLOR); cw_xchg_in->align(Fl_Align(FL_ALIGN_LEFT)); cw_xchg_in->when(FL_WHEN_RELEASE); } // Fl_Input2* cw_xchg_in { Fl_Counter* o = cw_log_nbr = new Fl_Counter(491, 87, 70, 22, _("#:")); cw_log_nbr->tooltip(_("QSO number (out)")); cw_log_nbr->type(1); cw_log_nbr->step(1); cw_log_nbr->callback((Fl_Callback*)cb_cw_log_nbr); cw_log_nbr->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.cw_log_nbr); } // Fl_Counter* cw_log_nbr { cw_op_name = new Fl_Input2(193, 88, 85, 22, _("Nm")); cw_op_name->box(FL_DOWN_BOX); cw_op_name->color(FL_BACKGROUND2_COLOR); cw_op_name->selection_color(FL_SELECTION_COLOR); cw_op_name->labeltype(FL_NORMAL_LABEL); cw_op_name->labelfont(0); cw_op_name->labelsize(14); cw_op_name->labelcolor(FL_FOREGROUND_COLOR); cw_op_name->align(Fl_Align(FL_ALIGN_LEFT)); cw_op_name->when(FL_WHEN_RELEASE); } // Fl_Input2* cw_op_name { cw_op_call = new Fl_Input2(43, 88, 120, 22, _("Call")); cw_op_call->tooltip(_("QSO call\nQuery flcwlog if connected")); cw_op_call->box(FL_DOWN_BOX); cw_op_call->color(FL_BACKGROUND2_COLOR); cw_op_call->selection_color(FL_SELECTION_COLOR); cw_op_call->labeltype(FL_NORMAL_LABEL); cw_op_call->labelfont(0); cw_op_call->labelsize(14); cw_op_call->labelcolor(FL_FOREGROUND_COLOR); cw_op_call->align(Fl_Align(FL_ALIGN_LEFT)); cw_op_call->when(FL_WHEN_RELEASE); } // Fl_Input2* cw_op_call o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(2, 113, 674, 170); { Fl_Group* o = new Fl_Group(2, 116, 668, 22); { btn_cw_datetime = new Fl_Button(2, 116, 80, 22, _("Date")); btn_cw_datetime->box(FL_BORDER_BOX); btn_cw_datetime->color((Fl_Color)51); btn_cw_datetime->callback((Fl_Callback*)cb_btn_cw_datetime); } // Fl_Button* btn_cw_datetime { btn_cw_time = new Fl_Button(81, 116, 45, 22, _("Time")); btn_cw_time->box(FL_BORDER_BOX); btn_cw_time->color((Fl_Color)51); btn_cw_time->callback((Fl_Callback*)cb_btn_cw_time); } // Fl_Button* btn_cw_time { btn_cw_freq = new Fl_Button(126, 116, 70, 22, _("Freq")); btn_cw_freq->box(FL_BORDER_BOX); btn_cw_freq->color((Fl_Color)51); btn_cw_freq->callback((Fl_Callback*)cb_btn_cw_freq); } // Fl_Button* btn_cw_freq { btn_cw_call = new Fl_Button(196, 116, 75, 22, _("Call")); btn_cw_call->box(FL_BORDER_BOX); btn_cw_call->color((Fl_Color)51); btn_cw_call->callback((Fl_Callback*)cb_btn_cw_call); } // Fl_Button* btn_cw_call { btn_cw_name = new Fl_Button(271, 116, 75, 22, _("Name")); btn_cw_name->box(FL_BORDER_BOX); btn_cw_name->color((Fl_Color)51); } // Fl_Button* btn_cw_name { btn_cw_in = new Fl_Button(346, 116, 40, 22, _("In")); btn_cw_in->box(FL_BORDER_BOX); btn_cw_in->color((Fl_Color)51); } // Fl_Button* btn_cw_in { btn_cw_out = new Fl_Button(386, 116, 40, 22, _("Out")); btn_cw_out->box(FL_BORDER_BOX); btn_cw_out->color((Fl_Color)51); } // Fl_Button* btn_cw_out { btn_cw_sent_nbr = new Fl_Button(426, 116, 55, 22, _("Nbr")); btn_cw_sent_nbr->box(FL_BORDER_BOX); btn_cw_sent_nbr->color((Fl_Color)51); btn_cw_sent_nbr->callback((Fl_Callback*)cb_btn_cw_sent_nbr); } // Fl_Button* btn_cw_sent_nbr { btn_cw_xchg = new Fl_Button(481, 116, 185, 22, _("Exchange")); btn_cw_xchg->box(FL_BORDER_BOX); btn_cw_xchg->color((Fl_Color)51); Fl_Group::current()->resizable(btn_cw_xchg); } // Fl_Button* btn_cw_xchg o->end(); } // Fl_Group* o { Fl_Browser* o = brwsr_cwlog_entries = new Fl_Browser(2, 140, 666, 141); brwsr_cwlog_entries->type(2); brwsr_cwlog_entries->selection_color((Fl_Color)230); brwsr_cwlog_entries->callback((Fl_Callback*)cb_brwsr_cwlog_entries); Fl_Group::current()->resizable(brwsr_cwlog_entries); static int widths[]={80,45,70,75,75,40,40,55,0}; o->column_widths(widths); o->column_char('\t'); o->has_scrollbar(Fl_Browser_::VERTICAL_ALWAYS); } // Fl_Browser* brwsr_cwlog_entries o->end(); } // Fl_Group* o o->end(); } // Fl_Double_Window* o return w; } flrig-2.0.04/src/cwio/precise_time.cxx0000664000175000017500000001106314502041135014543 00000000000000// --------------------------------------------------------------------- // precise_time.cxx // // Copyright (C) 2023 // Dave Freese, W1HKJ // // This file is part of flrig // // flrig is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // --------------------------------------------------------------------- #include #include #include #include #if 0 // return current tick time in seconds double monotonic_seconds() { static struct timeval t1; gettimeofday(&t1, NULL); return t1.tv_sec + t1.tv_usec / 1e6; } #else //====================================================================== // // A cross platform monotonic timer. // Copyright 2013 Alex Reece. // #include #define NANOS_PER_SECF 1000000000.0 #define USECS_PER_SEC 1000000 static bool showme = false; #if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK) // If we have it, use clock_gettime and CLOCK_MONOTONIC. #include double monotonic_seconds() { if (showme) { std::cout << "clock_gettime" << std::endl; showme = false; } struct timespec time; // Note: Make sure to link with -lrt to define clock_gettime. clock_gettime(CLOCK_MONOTONIC, &time); return ((double) time.tv_sec) + ((double) time.tv_nsec / (NANOS_PER_SECF)); } #elif defined(__APPLE__) // If we don't have CLOCK_MONOTONIC, we might be on a Mac. There we instead // use mach_absolute_time(). #include static mach_timebase_info_data_t info; static void __attribute__((constructor)) init_info() { mach_timebase_info(&info); } double monotonic_seconds() { uint64_t time = mach_absolute_time(); double dtime = (double) time; dtime *= (double) info.numer; dtime /= (double) info.denom; return dtime / NANOS_PER_SECF; } #elif defined(__WIN32__) // On Windows, use QueryPerformanceCounter and QueryPerformanceFrequency. #include static double PCFreq = 0.0; // According to http://stackoverflow.com/q/1113409/447288, this will // make this function a constructor. // TODO(awreece) Actually attempt to compile on windows. // w1hkj - builds OK on mingw32 static void __cdecl init_pcfreq(); __declspec(allocate(".CRT$XCU")) void (__cdecl*init_pcfreq_)() = init_pcfreq; static void __cdecl init_pcfreq() { // Accoring to http://stackoverflow.com/a/1739265/447288, this will // properly initialize the QueryPerformanceCounter. LARGE_INTEGER li; int has_qpc = QueryPerformanceFrequency(&li); assert(has_qpc); PCFreq = ((double) li.QuadPart) / 1000.0; } double monotonic_seconds() { LARGE_INTEGER li; QueryPerformanceCounter(&li); return ((double) li.QuadPart) / PCFreq; } #else // Fall back to rdtsc. The reason we don't use clock() is this scary message // from the man page: // "On several other implementations, the value returned by clock() also // includes the times of any children whose status has been collected via // wait(2) (or another wait-type call)." // // Also, clock() only has microsecond accuracy. // // This whitepaper offered excellent advice on how to use rdtscp for // profiling: http://download.intel.com/embedded/software/IA/324264.pdf // // Unfortunately, we can't follow its advice exactly with our semantics, // so we're just going to use rdtscp with cpuid. // // Note that rdtscp will only be available on new processors. #include static inline uint64_t rdtsc() { uint32_t hi, lo; asm volatile("rdtscp\n" "movl %%edx, %0\n" "movl %%eax, %1\n" "cpuid" : "=r" (hi), "=r" (lo) : : "%rax", "%rbx", "%rcx", "%rdx"); return (((uint64_t)hi) << 32) | (uint64_t)lo; } static uint64_t rdtsc_per_sec = 0; static void __attribute__((constructor)) init_rdtsc_per_sec() { uint64_t before, after; before = rdtsc(); usleep(USECS_PER_SEC); after = rdtsc(); rdtsc_per_sec = after - before; } double monotonic_seconds() { if (showme) { std::cout << "rdtsc" << std::endl; showme = false; } return (double) rdtsc() / (double) rdtsc_per_sec; } #endif #endif flrig-2.0.04/src/main.cxx0000664000175000017500000005003214502041135012055 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "compat.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WIN32 # include "flrigrc.h" # define dirent fl_dirent_no_thanks #endif #include #ifdef __MINGW32__ # if FLRIG_FLTK_API_MAJOR == 1 && FLRIG_FLTK_API_MINOR < 3 # undef dirent # include # endif #else # include #endif #include #include #include //#include "images/flrig.xpm" #include "support.h" #include "dialogs.h" #include "rig.h" #include "status.h" #include "debug.h" #include "util.h" #include "gettext.h" #include "xml_server.h" #include "xmlrpc_rig.h" //#include "xml_io.h" #include "serial.h" #include "ui.h" #include "icons.h" #include "cwio.h" #include "cwioUI.h" #include "fsk.h" #include "fskioUI.h" #include "serial.h" #include "flrig_icon.cxx" int parse_args(int argc, char **argv, int& idx); Fl_Double_Window *mainwindow = (Fl_Double_Window *)0; Fl_Double_Window *tabs_dialog = (Fl_Double_Window *)0; Fl_Double_Window *cwio_keyer_dialog = (Fl_Double_Window *)0; Fl_Double_Window *cwio_editor = (Fl_Double_Window *)0; Fl_Double_Window *cwio_configure = (Fl_Double_Window *)0; Fl_Double_Window *FSK_keyer_dialog = (Fl_Double_Window *)0; Fl_Double_Window *FSK_editor = (Fl_Double_Window *)0; Fl_Double_Window *FSK_configure = (Fl_Double_Window *)0; Fl_Double_Window *meter_scale_dialog = (Fl_Double_Window *)0; Fl_Double_Window *meter_filters = (Fl_Double_Window *)0; Fl_Double_Window *meters_dialog = (Fl_Double_Window *)0; std::string HomeDir; std::string RigHomeDir; std::string TempDir; std::string defFileName; std::string title; pthread_t *serial_thread = 0; pthread_t *digi_thread = 0; pthread_mutex_t mutex_serial = PTHREAD_MUTEX_INITIALIZER; //pthread_mutex_t mutex_xmlrpc = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex_vfoque = PTHREAD_MUTEX_INITIALIZER; //pthread_mutex_t mutex_vfoque = PTHREAD_MUTEX_INITIALIZER; //pthread_mutex_t mutex_vfoque = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex_ptt = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex_replystr = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex_srvc_reqs = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex_trace = PTHREAD_MUTEX_INITIALIZER; int use_trace = 0; int use_rig_trace = 0; int use_get_trace = 0; int use_set_trace = 0; int use_serial_trace = 0; int use_xml_trace = 0; int use_rpc_trace = 0; int use_tci_trace = 0; bool EXPAND_CONTROLS = false; int xmlport = 12345; bool testmode = false; #if defined(__RESIZE_UI__) void set_platform_ui(void); #endif bool iconified = false; //---------------------------------------------------------------------- void about() { std::string msg = "\ %s\n\ Version %s\n\ copyright W1HKJ \n\ Developer: Dave, W1HKJ"; fl_message(msg.c_str(), PACKAGE_TARNAME, PACKAGE_VERSION); } void visit_URL(void* arg) { const char* url = reinterpret_cast(arg); #ifndef __WIN32__ const char* browsers[] = { # ifdef __APPLE__ getenv("FLDIGI_BROWSER"), // valid for any OS - set by user "open" // OS X # else "fl-xdg-open", // Puppy Linux "xdg-open", // other Unix-Linux distros getenv("FLDIGI_BROWSER"), // force use of spec'd browser getenv("BROWSER"), // most Linux distributions "sensible-browser", "firefox", "mozilla" // must be something out there! # endif }; switch (fork()) { case 0: # ifndef NDEBUG unsetenv("MALLOC_CHECK_"); unsetenv("MALLOC_PERTURB_"); # endif for (size_t i = 0; i < sizeof(browsers)/sizeof(browsers[0]); i++) if (browsers[i]) execlp(browsers[i], browsers[i], url, (char*)0); exit(EXIT_FAILURE); case -1: fl_alert(_("Could not run a web browser:\n%s\n\n" "Open this URL manually:\n%s"), strerror(errno), url); } #else // gurgle... gurgle... HOWL // "The return value is cast as an HINSTANCE for backward // compatibility with 16-bit Windows applications. It is // not a true HINSTANCE, however. The only thing that can // be done with the returned HINSTANCE is to cast it to an // int and compare it with the value 32 or one of the error // codes below." (Error codes omitted to preserve sanity). if ((size_t)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32) fl_alert(_("Could not open url:\n%s\n"), url); #endif } //---------------------------------------------------------------------- // set __RESIZE_UI__ as a configuration parameter for compile // Fl::screen_dpi(...) // Fl::screen_scale(...) // are new functionality in fltk 1.4x //---------------------------------------------------------------------- #if defined(__RESIZE_UI__) void set_platform_ui(void) { #if defined(__APPLE__) FL_NORMAL_SIZE = 12; progdefaults.WaterfallFontsize = 12; progdefaults.RxFontsize = 12; progdefaults.TxFontsize = 12; #elif defined(__WOE32__) Fl::set_font(FL_HELVETICA, "Tahoma"); FL_NORMAL_SIZE = 11; progdefaults.WaterfallFontnbr = FL_HELVETICA; progdefaults.WaterfallFontsize = 12; progdefaults.RxFontsize = 12; progdefaults.TxFontsize = 12; #else FL_NORMAL_SIZE = 12; #endif float dpx, dpy; Fl::screen_dpi ( dpx, dpy ); // std::cout << "current screen scale factor: " << Fl::screen_scale(0) << std::endl; float scrn_scale = dpx / 90.0; // std::cout << "new screen scale factor: " << scrn_scale << std::endl; Fl::screen_scale(0, scrn_scale); } #endif extern void saveFreqList(); void showEvents(void *) { debug::show(); } #if defined(__WIN32__) && defined(PTW32_STATIC_LIB) static void ptw32_cleanup(void) { (void)pthread_win32_process_detach_np(); } void ptw32_init(void) { (void)pthread_win32_process_attach_np(); atexit(ptw32_cleanup); } #endif // __WIN32__ #define KNAME "Flrig" #if !defined(__WIN32__) && !defined(__APPLE__) Pixmap Rig_icon_pixmap; void make_pixmap(Pixmap *xpm, const char **data) { Fl_Window w(0,0, KNAME); w.xclass(KNAME); w.show(); w.make_current(); Fl_Pixmap icon(data); int maxd = (icon.w() > icon.h()) ? icon.w() : icon.h(); *xpm = fl_create_offscreen(maxd, maxd); fl_begin_offscreen(*xpm); fl_color(FL_BACKGROUND_COLOR); fl_rectf(0, 0, maxd, maxd); icon.draw(maxd - icon.w(), maxd - icon.h()); fl_end_offscreen(); } #endif static void checkdirectories(void) { struct { std::string& dir; const char* suffix; void (*new_dir_func)(void); } dirs[] = { { RigHomeDir, 0, 0 } }; int r; for (size_t i = 0; i < sizeof(dirs)/sizeof(*dirs); i++) { if (dirs[i].suffix) dirs[i].dir.assign(RigHomeDir).append(dirs[i].suffix).append("/"); if ((r = mkdir(dirs[i].dir.c_str(), 0777)) == -1 && errno != EEXIST) { std::cerr << _("Could not make directory") << ' ' << dirs[i].dir << ": " << strerror(errno) << '\n'; exit(EXIT_FAILURE); } else if (r == 0 && dirs[i].new_dir_func) dirs[i].new_dir_func(); } } void exit_main(Fl_Widget *w) { if (Fl::event_key() == FL_Escape) return; cbExit(); #if SERIAL_DEBUG fclose(serlog); #endif } void expand_controls(void*) { show_controls(); } void close_controls(void*) { switch (progStatus.UIsize) { case wide_ui : if (EXPAND_CONTROLS && selrig->has_extras) return; btn_show_controls->label("@-22->"); btn_show_controls->redraw_label(); mainwindow->size(progStatus.mainW, 150); mainwindow->size_range(735, 150, 0, 150); if (tabs_dialog && tabs_dialog->visible()) tabs_dialog->hide(); break; case small_ui : if (tabs_dialog && tabs_dialog->visible()) tabs_dialog->hide(); break; case touch_ui : default : break; } } void startup(void*) { initStatusConfigDialog(); if (iconified) for (Fl_Window* w = Fl::first_window(); w; w = Fl::next_window(w)) w->iconize(); switch (progStatus.UIsize) { case touch_ui : mainwindow->size(progStatus.mainW, TOUCH_MAINH); mainwindow->size_range(TOUCH_MAINW, TOUCH_MAINH, 0, TOUCH_MAINH); mainwindow->redraw(); break; case wide_ui : { if (EXPAND_CONTROLS && selrig->has_extras) return; btn_show_controls->label("@-22->"); btn_show_controls->redraw_label(); mainwindow->redraw(); } case small_ui : default : break; } start_server(xmlport); } void rotate_log(std::string filename) { std::string f1, f2, f3, f4, f5; f1.assign(filename).append(".1"); f2.assign(filename).append(".2"); f3.assign(filename).append(".3"); f4.assign(filename).append(".4"); f5.assign(filename).append(".5"); rename(f4.c_str(), f5.c_str()); rename(f3.c_str(), f4.c_str()); rename(f2.c_str(), f3.c_str()); rename(f1.c_str(), f2.c_str()); rename(filename.c_str(), f1.c_str()); std::ofstream tfile(filename.c_str()); tfile << "flrig " << VERSION << std::endl << std::endl; tfile.close(); } void flrig_terminate() { std::cerr << "terminating" << std::endl; fl_message("Closing flrig"); cbExit(); } int main (int argc, char *argv[]) { std::set_terminate(flrig_terminate); // enable next statement if you need to trace the state of mutex locking // activate_lock_trace = true; int arg_idx; HomeDir.clear(); RigHomeDir.clear(); Fl::args(argc, argv, arg_idx, parse_args); Fl::set_fonts(0); char dirbuf[FL_PATH_MAX + 1]; std::string appdir = argv[0]; size_t p; #ifdef __WIN32__ p = appdir.rfind("flrig.exe"); if (p != std::string::npos) appdir.erase(p); p = appdir.find("FL_APPS\\"); if (p != std::string::npos) { HomeDir.assign(appdir.substr(0, p + 8)); RigHomeDir.assign(HomeDir).append("flrig.files\\"); } else if (RigHomeDir.empty()) { fl_filename_expand(dirbuf, sizeof(dirbuf) -1, "$USERPROFILE/"); HomeDir = dirbuf; RigHomeDir.assign(HomeDir).append("flrig.files\\"); } #else p = appdir.rfind("flrig"); if (p != std::string::npos) appdir.erase(p); p = appdir.find("FL_APPS/"); if (p != std::string::npos) RigHomeDir = appdir.substr(0, p + 8); if (RigHomeDir.empty()) { fl_filename_expand(dirbuf, FL_PATH_MAX, "$HOME/"); HomeDir = dirbuf; } DIR *isdir = 0; std::string test_dir; test_dir.assign(HomeDir).append("flrig.files/"); isdir = opendir(test_dir.c_str()); if (isdir) { RigHomeDir = test_dir; closedir(isdir); } else if (RigHomeDir.empty()) { RigHomeDir.assign(HomeDir).append(".flrig/"); } #endif make_trace_window(); checkdirectories(); #if SERIAL_DEBUG std::string serlogname = RigHomeDir; serlogname.append("serlog.txt"); serlog = fopen(serlogname.c_str(), "w"); #endif RigSerial = new Cserial; SepSerial = new Cserial; AuxSerial = new Cserial; cwio_serial = new Cserial(); morse = new Cmorse(); FSK_serial = new Cserial(); try { std::string fname = RigHomeDir; fname.append("debug_log.txt"); rotate_log(fname); debug::start(fname.c_str()); time_t t = time(NULL); LOG(debug::INFO_LEVEL, debug::LOG_OTHER, _("%s log started on %s"), PACKAGE_STRING, ctime(&t)); std::string trace_fname = RigHomeDir; trace_fname.append("trace.txt"); rotate_log(trace_fname); } catch (const char* error) { std::cerr << error << '\n'; debug::stop(); exit(1); } #if defined(__RESIZE_UI__) set_platform_ui(); #endif progStatus.loadLastState(); if (use_trace) progStatus.trace = true; if (use_rig_trace) progStatus.rigtrace = true; if (use_get_trace) progStatus.gettrace = true; if (use_set_trace) progStatus.settrace = true; if (use_serial_trace) progStatus.serialtrace = true; if (use_xml_trace) progStatus.xmltrace = true; if (use_rpc_trace) progStatus.rpctrace = true; if (use_tci_trace) progStatus.tcitrace = true; switch (progStatus.UIsize) { case touch_ui : mainwindow = touch_rig_window(); break; case small_ui : mainwindow = Small_rig_window(); tabs_dialog = tabs_window(); tabs_dialog->hide(); break; case wide_ui : default : mainwindow = Wide_rig_window(); tabs_dialog = tabs_window(); tabs_dialog->hide(); } mainwindow->callback(exit_main); meters_dialog = win_meters(); progStatus.UI_laststate(); meters_dialog->resize(progStatus.metersX, progStatus.metersY, 210, 190); if (progStatus.meters_dialog_visible) meters_dialog->show(); cwio_keyer_dialog = new_cwio_dialog(); cwio_editor = new_message_editor(); cwio_configure = new_cwio_config_dialog(); morse->init(); FSK_keyer_dialog = fskio_window(); FSK_editor = FSK_make_message_editor(); FSK_configure = fskio_config_dialog(); fntbrowser = new Font_Browser; dlgMemoryDialog = Memory_Dialog(); dlgDisplayConfig = DisplayDialog(); Fl::lock(); #if defined(__WIN32__) && defined(PTW32_STATIC_LIB) ptw32_init(); #endif bypass_serial_thread_loop = true; serial_thread = new pthread_t; if (pthread_create(serial_thread, NULL, serial_thread_loop, NULL)) { perror("pthread_create"); exit(EXIT_FAILURE); } // start_server(xmlport); if (start_cwio_thread() != 0) return 1; if (FSK_start_thread() != 0) return 1; if (progStatus.cwioCONNECTED) { if (!open_cwkey()) { btn_cwioCONNECT->value(0); btn_cwioCAT->activate(); btn_cwioAUX->activate(); btn_cwioSEP->activate(); progStatus.cwioCONNECTED = 0; } else { btn_cwioCONNECT->value(1); btn_cwioCAT->value(0); btn_cwioCAT->deactivate(); btn_cwioAUX->value(0); btn_cwioAUX->deactivate(); btn_cwioSEP->value(0); btn_cwioSEP->deactivate(); progStatus.cwioCONNECTED = 1; } } if (progStatus.FSK_CONNECTED) { if (!FSK_open_port()) { btn_fskioCONNECT->value(0); btn_fskioCAT->activate(); btn_fskioAUX->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); progStatus.FSK_CONNECTED = 0; } else { btn_fskioCONNECT->value(1); btn_fskioCAT->deactivate(); btn_fskioAUX->deactivate(); btn_fskioSEP->deactivate(); btn_fskioSHARED->deactivate(); progStatus.FSK_CONNECTED = 1; } } createXcvrDialog(); btnALC_IDD_SWR->image(image_swr); meter_image = SWR_IMAGE; sldrRcvSignal->clear(); sldrFwdPwr->clear(); sldrALC->clear(); sldrIDD->clear(); sldrSWR->clear(); switch (progStatus.UIsize) { case small_ui : mainwindow->resize( progStatus.mainX, progStatus.mainY, mainwindow->w(), 150);//mainwindow->h()); grpInitializing->size(mainwindow->w(), mainwindow->h() - grpInitializing->y()); grpInitializing->redraw(); progress->position(progress->x(), grpInitializing->y() + grpInitializing->h()/2); progress->redraw(); break; case wide_ui : mainwindow->resize( progStatus.mainX, progStatus.mainY, progStatus.mainW, btnVol->y() + btnVol->h() + 2); break; case touch_ui : mainwindow->resize( progStatus.mainX, progStatus.mainY, progStatus.mainW, TOUCH_MAINH); default : break; } mainwindow->xclass(KNAME); #if defined(__WIN32__) # ifndef IDI_ICON # define IDI_ICON 101 # endif mainwindow->icon((char*)LoadIcon(fl_display, MAKEINTRESOURCE(IDI_ICON))); mainwindow->show (argc, argv); #elif !defined(__APPLE__) // The fltk icon code doesn't handle XPM transparency well, work around that here... // See https://groups.google.com/g/fltkgeneral/c/hcjV-rgjHWM // load the XPM and prepare the mask make_pixmap(&Rig_icon_pixmap, flrig_icon); // so we fix that AFTER the window is shown (see below) mainwindow->icon((char *)Rig_icon_pixmap); mainwindow->show(argc, argv); { // read in the current window hints, then modify them to allow icon transparency XWMHints* hints = XGetWMHints(fl_display, fl_xid(mainwindow)); hints->flags |= IconMaskHint; // ensure transparency mask is enabled for the XPM icon hints->icon_mask |= IconPixmapHint; XSetWMHints(fl_display, fl_xid(mainwindow), hints); XFree(hints); } #else mainwindow->show(argc, argv); #endif if (progStatus.UIsize != touch_ui) { btn_show_controls->label("@-28->"); btn_show_controls->redraw_label(); } Fl::add_timeout(0.1, startup); return Fl::run(); } void cl_print(std::string cl) { Fl_Double_Window clwin(50,50,600,500, "Command line text"); Fl_Text_Display cldisplay(2,2,596,496); Fl_Text_Buffer clbuff; cldisplay.buffer(&clbuff); cldisplay.textfont(FL_COURIER); cldisplay.insert(cl.c_str()); clwin.end(); clwin.resizable(cldisplay); clwin.show(); while (clwin.visible()) { Fl::wait(); MilliSleep(50); } } void cb_xml_help(Fl_Menu_*, void*) { cl_print(print_xmlhelp()); } bool PRIORITY = false; int parse_args(int argc, char **argv, int& idx) { static std::string helpstr = "Usage: \n\ --help this help text\n\ --version {-v}\n\ --config-dir [fully qualified pathname to ]\n\ --debug-level N (0..4)\n\ --serial-debug \n\ --trace { rig / get / set / serial / xml / rpc / tci }\n\ --xml-help\n\ --xml-trace\n\ --exp (expand menu tab controls)\n\ --iconify {-i}\n\ --priority {-p}\n\ --test\n"; if (strcasecmp("--help", argv[idx]) == 0) { #ifdef __WIN32__ fl_alert2("%s", helpstr.c_str()); #else std::cout << helpstr << std::endl; #endif exit(0); } if (!strcasecmp(argv[idx], "--version") || !strcasecmp(argv[idx], "-v")) { static std::string ver = "Version: "; ver.append(VERSION); #ifdef __WIN32__ fl_alert2("%s", ver.c_str()); #else std::cout << ver << std::endl; #endif exit (0); } if (strcasecmp("--trace", argv[idx]) == 0) { std::string which = argv[idx + 1]; if (which == "rig") { use_rig_trace = 1; idx++; } else if (which == "get") { use_get_trace = 1; idx++; } else if (which == "set") { use_set_trace = 1; idx++; } else if (which == "serial") { use_serial_trace = 1; idx++; } else if (which == "xml") { use_xml_trace = 1; idx++; } else if (which == "rpc") { use_rpc_trace = 1; idx++; } else if (which == "tci") { use_tci_trace = 1; idx++; } else use_trace = true; idx++; return 1; } if (strcasecmp("--xml-help", argv[idx]) == 0) { std::string help = print_xmlhelp(); #ifdef __WIN32__ fl_alert2("%s", help.c_str()); #else std::cout << help; #endif exit(0); } if (strcasecmp("--test", argv[idx]) == 0) { testmode = true; idx++; return 1; } if (!strcasecmp(argv[idx], "-i") || !strcasecmp(argv[idx], "--iconify")) { iconified = true; idx++; return 1; } if (!strcasecmp(argv[idx], "-p") || !strcasecmp(argv[idx], "--priority")) { PRIORITY = true; idx++; return 1; } if (strcasecmp("--debug-level", argv[idx]) == 0) { std::string level = argv[idx + 1]; switch (level[0]) { case '0': debug::level = debug::QUIET_LEVEL; break; case '1': debug::level = debug::ERROR_LEVEL; break; case '2': debug::level = debug::WARN_LEVEL; break; case '3': debug::level = debug::INFO_LEVEL; break; case '4': debug::level = debug::DEBUG_LEVEL; break; default : debug::level = debug::WARN_LEVEL; } idx += 2; return 1; } if (strcasecmp("--serial-debug", argv[idx]) == 0) { SERIALDEBUG = 1; idx++; return 1; } if (strcasecmp("--config-dir", argv[idx]) == 0) { RigHomeDir = argv[idx + 1]; if (RigHomeDir[RigHomeDir.length()-1] != '/') RigHomeDir += '/'; idx += 2; return 1; } if (strcasecmp("--exp", argv[idx]) == 0) { EXPAND_CONTROLS = true; idx++; return 1; } # ifdef __APPLE__ if (strncasecmp("-psn", argv[idx], 4) == 0) { idx++; return 1; } #endif fl_alert2("Unknown command line parameter: \"%s\"\n\n%s", argv[idx], helpstr.c_str()); exit(0); return 0; } flrig-2.0.04/src/fskio/0000775000175000017500000000000014511461606011611 500000000000000flrig-2.0.04/src/fskio/fskioUI.cxx0000664000175000017500000014630314475136651013645 00000000000000// generated by Fast Light User Interface Designer (fluid) version 1.0308 #include "gettext.h" #include "fskioUI.h" #include "fsk.h" #include "fsklog.h" Fl_Double_Window *fsklog_viewer; Fl_Input2 *FSK_txt_to_send=(Fl_Input2 *)0; static void cb_FSK_txt_to_send(Fl_Input2*, void*) { FSK_control_function_keys(); } Fl_Button *btn_fskio_config=(Fl_Button *)0; static void cb_btn_fskio_config(Fl_Button*, void*) { FSK_open_config(); } Fl_Button *btn_fskio_clear=(Fl_Button *)0; static void cb_btn_fskio_clear(Fl_Button*, void*) { FSK_clear_text(); } Fl_Light_Button *btn_fskioSEND=(Fl_Light_Button *)0; static void cb_btn_fskioSEND(Fl_Light_Button* o, void*) { FSK_send_text(o->value()); } static void cb_FSK_btn_msg(Fl_Button*, void*) { FSK_exec_msg(0); } static void cb_FSK_btn_msg1(Fl_Button*, void*) { FSK_exec_msg(1); } static void cb_FSK_btn_msg2(Fl_Button*, void*) { FSK_exec_msg(2); } static void cb_FSK_btn_msg3(Fl_Button*, void*) { FSK_exec_msg(3); } static void cb_FSK_btn_msg4(Fl_Button*, void*) { FSK_exec_msg(4); } static void cb_FSK_btn_msg5(Fl_Button*, void*) { FSK_exec_msg(5); } static void cb_FSK_btn_msg6(Fl_Button*, void*) { FSK_exec_msg(6); } static void cb_FSK_btn_msg7(Fl_Button*, void*) { FSK_exec_msg(7); } static void cb_FSK_btn_msg8(Fl_Button*, void*) { FSK_exec_msg(8); } static void cb_FSK_btn_msg9(Fl_Button*, void*) { FSK_exec_msg(9); } static void cb_FSK_btn_msga(Fl_Button*, void*) { FSK_exec_msg(10); } Fl_Button *FSK_btn_msg[12]={(Fl_Button *)0}; static void cb_FSK_btn_msgb(Fl_Button*, void*) { FSK_exec_msg(11); } Fl_Double_Window* fskio_window() { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(670, 130, _("FSK keying")); w = o; if (w) {/* empty */} { FSK_txt_to_send = new Fl_Input2(2, 2, 666, 68); FSK_txt_to_send->type(4); FSK_txt_to_send->box(FL_DOWN_BOX); FSK_txt_to_send->color(FL_BACKGROUND2_COLOR); FSK_txt_to_send->selection_color(FL_SELECTION_COLOR); FSK_txt_to_send->labeltype(FL_NORMAL_LABEL); FSK_txt_to_send->labelfont(0); FSK_txt_to_send->labelsize(14); FSK_txt_to_send->labelcolor(FL_FOREGROUND_COLOR); FSK_txt_to_send->callback((Fl_Callback*)cb_FSK_txt_to_send); FSK_txt_to_send->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)); FSK_txt_to_send->when(FL_WHEN_CHANGED); Fl_Group::current()->resizable(FSK_txt_to_send); } // Fl_Input2* FSK_txt_to_send { Fl_Group* o = new Fl_Group(0, 70, 670, 60); { btn_fskio_config = new Fl_Button(390, 73, 60, 22, _("Config")); btn_fskio_config->tooltip(_("Open FSK configuration dialog")); btn_fskio_config->callback((Fl_Callback*)cb_btn_fskio_config); } // Fl_Button* btn_fskio_config { btn_fskio_clear = new Fl_Button(473, 73, 60, 22, _("Clear")); btn_fskio_clear->tooltip(_("Clear transmit text")); btn_fskio_clear->callback((Fl_Callback*)cb_btn_fskio_clear); } // Fl_Button* btn_fskio_clear { btn_fskioSEND = new Fl_Light_Button(557, 73, 105, 22, _("Xmt / Rcv")); btn_fskioSEND->tooltip(_("Send / Pause sending characters")); btn_fskioSEND->callback((Fl_Callback*)cb_btn_fskioSEND); } // Fl_Light_Button* btn_fskioSEND { Fl_Group* o = new Fl_Group(2, 98, 220, 30); o->box(FL_ENGRAVED_BOX); { FSK_btn_msg[0] = new Fl_Button(5, 102, 50, 22, _("F 1")); FSK_btn_msg[0]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[0]->callback((Fl_Callback*)cb_FSK_btn_msg); } // Fl_Button* FSK_btn_msg[0] { FSK_btn_msg[1] = new Fl_Button(59, 102, 50, 22, _("F 2")); FSK_btn_msg[1]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[1]->callback((Fl_Callback*)cb_FSK_btn_msg1); } // Fl_Button* FSK_btn_msg[1] { FSK_btn_msg[2] = new Fl_Button(113, 102, 50, 22, _("F 3")); FSK_btn_msg[2]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[2]->callback((Fl_Callback*)cb_FSK_btn_msg2); } // Fl_Button* FSK_btn_msg[2] { FSK_btn_msg[3] = new Fl_Button(168, 102, 50, 22, _("F 4")); FSK_btn_msg[3]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[3]->callback((Fl_Callback*)cb_FSK_btn_msg3); } // Fl_Button* FSK_btn_msg[3] o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(225, 98, 220, 30); o->box(FL_ENGRAVED_BOX); { FSK_btn_msg[4] = new Fl_Button(229, 102, 50, 22, _("F 5")); FSK_btn_msg[4]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[4]->callback((Fl_Callback*)cb_FSK_btn_msg4); } // Fl_Button* FSK_btn_msg[4] { FSK_btn_msg[5] = new Fl_Button(283, 102, 50, 22, _("F 6")); FSK_btn_msg[5]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[5]->callback((Fl_Callback*)cb_FSK_btn_msg5); } // Fl_Button* FSK_btn_msg[5] { FSK_btn_msg[6] = new Fl_Button(337, 102, 50, 22, _("F 7")); FSK_btn_msg[6]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[6]->callback((Fl_Callback*)cb_FSK_btn_msg6); } // Fl_Button* FSK_btn_msg[6] { FSK_btn_msg[7] = new Fl_Button(391, 102, 50, 22, _("F 8")); FSK_btn_msg[7]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[7]->callback((Fl_Callback*)cb_FSK_btn_msg7); } // Fl_Button* FSK_btn_msg[7] o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(448, 98, 220, 30); o->box(FL_ENGRAVED_BOX); { FSK_btn_msg[8] = new Fl_Button(451, 102, 50, 22, _("F 9")); FSK_btn_msg[8]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[8]->callback((Fl_Callback*)cb_FSK_btn_msg8); } // Fl_Button* FSK_btn_msg[8] { FSK_btn_msg[9] = new Fl_Button(505, 102, 50, 22, _("F 10")); FSK_btn_msg[9]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[9]->callback((Fl_Callback*)cb_FSK_btn_msg9); } // Fl_Button* FSK_btn_msg[9] { FSK_btn_msg[10] = new Fl_Button(559, 102, 50, 22, _("F 11")); FSK_btn_msg[10]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[10]->callback((Fl_Callback*)cb_FSK_btn_msga); } // Fl_Button* FSK_btn_msg[10] { FSK_btn_msg[11] = new Fl_Button(614, 102, 50, 22, _("F 12")); FSK_btn_msg[11]->tooltip(_("Action - Function Key Left click\nEdit - Control left click")); FSK_btn_msg[11]->callback((Fl_Callback*)cb_FSK_btn_msgb); } // Fl_Button* FSK_btn_msg[11] o->end(); } // Fl_Group* o o->end(); } // Fl_Group* o o->end(); } // Fl_Double_Window* o return w; } static void cb_FSK_edit_label(Fl_Input2*, void*) { FSK_label_cb(1); } static void cb_FSK_edit_msg(Fl_Input2*, void*) { FSK_msg_cb(1); } static void cb_FSK_edit_label1(Fl_Input2*, void*) { FSK_label_cb(2); } static void cb_FSK_edit_msg1(Fl_Input2*, void*) { FSK_msg_cb(2); } static void cb_FSK_edit_label2(Fl_Input2*, void*) { FSK_label_cb(3); } static void cb_FSK_edit_msg2(Fl_Input2*, void*) { FSK_msg_cb(3); } static void cb_FSK_edit_label3(Fl_Input2*, void*) { FSK_label_cb(4); } static void cb_FSK_edit_msg3(Fl_Input2*, void*) { FSK_msg_cb(4); } static void cb_FSK_edit_label4(Fl_Input2*, void*) { FSK_label_cb(5); } static void cb_FSK_edit_msg4(Fl_Input2*, void*) { FSK_msg_cb(5); } static void cb_FSK_edit_label5(Fl_Input2*, void*) { FSK_label_cb(6); } static void cb_FSK_edit_msg5(Fl_Input2*, void*) { FSK_msg_cb(6); } static void cb_FSK_edit_label6(Fl_Input2*, void*) { FSK_label_cb(7); } static void cb_FSK_edit_msg6(Fl_Input2*, void*) { FSK_msg_cb(7); } static void cb_FSK_edit_label7(Fl_Input2*, void*) { FSK_label_cb(8); } static void cb_FSK_edit_msg7(Fl_Input2*, void*) { FSK_msg_cb(8); } static void cb_FSK_edit_label8(Fl_Input2*, void*) { FSK_label_cb(9); } static void cb_FSK_edit_msg8(Fl_Input2*, void*) { FSK_msg_cb(9); } static void cb_FSK_edit_label9(Fl_Input2*, void*) { FSK_label_cb(10); } static void cb_FSK_edit_msg9(Fl_Input2*, void*) { FSK_msg_cb(10); } static void cb_FSK_edit_labela(Fl_Input2*, void*) { FSK_label_cb(11); } static void cb_FSK_edit_msga(Fl_Input2*, void*) { FSK_msg_cb(11); } Fl_Input2 *FSK_edit_label[12]={(Fl_Input2 *)0}; static void cb_FSK_edit_labelb(Fl_Input2*, void*) { FSK_label_cb(12); } Fl_Input2 *FSK_edit_msg[12]={(Fl_Input2 *)0}; static void cb_FSK_edit_msgb(Fl_Input2*, void*) { FSK_msg_cb(12); } Fl_Button *FSK_btn_cancel_edit=(Fl_Button *)0; static void cb_FSK_btn_cancel_edit(Fl_Button*, void*) { FSK_cancel_edit(); } Fl_Button *FSK_btn_apply_edit=(Fl_Button *)0; static void cb_FSK_btn_apply_edit(Fl_Button*, void*) { FSK_apply_edit(); } Fl_Button *FSK_btn_FSK_done_edit=(Fl_Button *)0; static void cb_FSK_btn_FSK_done_edit(Fl_Button*, void*) { FSK_done_edit(); } Fl_Double_Window* FSK_make_message_editor() { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(670, 344, _("FSK Message Editor")); w = o; if (w) {/* empty */} { Fl_Tabs* o = new Fl_Tabs(0, 0, 570, 345); o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE)); { Fl_Group* o = new Fl_Group(0, 25, 570, 320, _("F1-F4")); o->hide(); { new Fl_Box(22, 30, 84, 20, _("Label")); } // Fl_Box* o { new Fl_Box(211, 30, 223, 20, _("Message Text")); } // Fl_Box* o { FSK_edit_label[0] = new Fl_Input2(5, 74, 80, 22, _("F1")); FSK_edit_label[0]->box(FL_DOWN_BOX); FSK_edit_label[0]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[0]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[0]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[0]->labelfont(0); FSK_edit_label[0]->labelsize(14); FSK_edit_label[0]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[0]->callback((Fl_Callback*)cb_FSK_edit_label); FSK_edit_label[0]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[0]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[0] { FSK_edit_msg[0] = new Fl_Input2(90, 55, 475, 65); FSK_edit_msg[0]->type(4); FSK_edit_msg[0]->box(FL_DOWN_BOX); FSK_edit_msg[0]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[0]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[0]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[0]->labelfont(0); FSK_edit_msg[0]->labelsize(14); FSK_edit_msg[0]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[0]->callback((Fl_Callback*)cb_FSK_edit_msg); FSK_edit_msg[0]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[0]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[0] { FSK_edit_label[1] = new Fl_Input2(5, 144, 80, 22, _("F2")); FSK_edit_label[1]->box(FL_DOWN_BOX); FSK_edit_label[1]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[1]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[1]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[1]->labelfont(0); FSK_edit_label[1]->labelsize(14); FSK_edit_label[1]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[1]->callback((Fl_Callback*)cb_FSK_edit_label1); FSK_edit_label[1]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[1]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[1] { FSK_edit_msg[1] = new Fl_Input2(90, 125, 475, 65); FSK_edit_msg[1]->type(4); FSK_edit_msg[1]->box(FL_DOWN_BOX); FSK_edit_msg[1]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[1]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[1]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[1]->labelfont(0); FSK_edit_msg[1]->labelsize(14); FSK_edit_msg[1]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[1]->callback((Fl_Callback*)cb_FSK_edit_msg1); FSK_edit_msg[1]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[1]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[1] { FSK_edit_label[2] = new Fl_Input2(5, 214, 80, 22, _("F3")); FSK_edit_label[2]->box(FL_DOWN_BOX); FSK_edit_label[2]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[2]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[2]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[2]->labelfont(0); FSK_edit_label[2]->labelsize(14); FSK_edit_label[2]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[2]->callback((Fl_Callback*)cb_FSK_edit_label2); FSK_edit_label[2]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[2]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[2] { FSK_edit_msg[2] = new Fl_Input2(90, 195, 475, 65); FSK_edit_msg[2]->type(4); FSK_edit_msg[2]->box(FL_DOWN_BOX); FSK_edit_msg[2]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[2]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[2]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[2]->labelfont(0); FSK_edit_msg[2]->labelsize(14); FSK_edit_msg[2]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[2]->callback((Fl_Callback*)cb_FSK_edit_msg2); FSK_edit_msg[2]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[2]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[2] { FSK_edit_label[3] = new Fl_Input2(5, 284, 80, 22, _("F4")); FSK_edit_label[3]->box(FL_DOWN_BOX); FSK_edit_label[3]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[3]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[3]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[3]->labelfont(0); FSK_edit_label[3]->labelsize(14); FSK_edit_label[3]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[3]->callback((Fl_Callback*)cb_FSK_edit_label3); FSK_edit_label[3]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[3]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[3] { FSK_edit_msg[3] = new Fl_Input2(90, 265, 475, 65); FSK_edit_msg[3]->type(4); FSK_edit_msg[3]->box(FL_DOWN_BOX); FSK_edit_msg[3]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[3]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[3]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[3]->labelfont(0); FSK_edit_msg[3]->labelsize(14); FSK_edit_msg[3]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[3]->callback((Fl_Callback*)cb_FSK_edit_msg3); FSK_edit_msg[3]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[3]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[3] o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(0, 25, 570, 320, _("F5-f8")); o->hide(); { new Fl_Box(24, 30, 90, 20, _("Label")); } // Fl_Box* o { new Fl_Box(227, 30, 240, 20, _("Message Text")); } // Fl_Box* o { FSK_edit_label[4] = new Fl_Input2(5, 74, 80, 22, _("F5")); FSK_edit_label[4]->box(FL_DOWN_BOX); FSK_edit_label[4]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[4]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[4]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[4]->labelfont(0); FSK_edit_label[4]->labelsize(14); FSK_edit_label[4]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[4]->callback((Fl_Callback*)cb_FSK_edit_label4); FSK_edit_label[4]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[4]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[4] { FSK_edit_msg[4] = new Fl_Input2(90, 55, 475, 65); FSK_edit_msg[4]->type(4); FSK_edit_msg[4]->box(FL_DOWN_BOX); FSK_edit_msg[4]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[4]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[4]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[4]->labelfont(0); FSK_edit_msg[4]->labelsize(14); FSK_edit_msg[4]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[4]->callback((Fl_Callback*)cb_FSK_edit_msg4); FSK_edit_msg[4]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[4]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[4] { FSK_edit_label[5] = new Fl_Input2(5, 144, 80, 22, _("F6")); FSK_edit_label[5]->box(FL_DOWN_BOX); FSK_edit_label[5]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[5]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[5]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[5]->labelfont(0); FSK_edit_label[5]->labelsize(14); FSK_edit_label[5]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[5]->callback((Fl_Callback*)cb_FSK_edit_label5); FSK_edit_label[5]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[5]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[5] { FSK_edit_msg[5] = new Fl_Input2(90, 125, 475, 65); FSK_edit_msg[5]->type(4); FSK_edit_msg[5]->box(FL_DOWN_BOX); FSK_edit_msg[5]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[5]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[5]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[5]->labelfont(0); FSK_edit_msg[5]->labelsize(14); FSK_edit_msg[5]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[5]->callback((Fl_Callback*)cb_FSK_edit_msg5); FSK_edit_msg[5]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[5]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[5] { FSK_edit_label[6] = new Fl_Input2(5, 214, 80, 22, _("F7")); FSK_edit_label[6]->box(FL_DOWN_BOX); FSK_edit_label[6]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[6]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[6]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[6]->labelfont(0); FSK_edit_label[6]->labelsize(14); FSK_edit_label[6]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[6]->callback((Fl_Callback*)cb_FSK_edit_label6); FSK_edit_label[6]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[6]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[6] { FSK_edit_msg[6] = new Fl_Input2(90, 195, 475, 65); FSK_edit_msg[6]->type(4); FSK_edit_msg[6]->box(FL_DOWN_BOX); FSK_edit_msg[6]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[6]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[6]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[6]->labelfont(0); FSK_edit_msg[6]->labelsize(14); FSK_edit_msg[6]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[6]->callback((Fl_Callback*)cb_FSK_edit_msg6); FSK_edit_msg[6]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[6]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[6] { FSK_edit_label[7] = new Fl_Input2(5, 284, 80, 22, _("F8")); FSK_edit_label[7]->box(FL_DOWN_BOX); FSK_edit_label[7]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[7]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[7]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[7]->labelfont(0); FSK_edit_label[7]->labelsize(14); FSK_edit_label[7]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[7]->callback((Fl_Callback*)cb_FSK_edit_label7); FSK_edit_label[7]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[7]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[7] { FSK_edit_msg[7] = new Fl_Input2(90, 265, 475, 65); FSK_edit_msg[7]->type(4); FSK_edit_msg[7]->box(FL_DOWN_BOX); FSK_edit_msg[7]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[7]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[7]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[7]->labelfont(0); FSK_edit_msg[7]->labelsize(14); FSK_edit_msg[7]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[7]->callback((Fl_Callback*)cb_FSK_edit_msg7); FSK_edit_msg[7]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[7]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[7] o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(0, 25, 570, 320, _("F9-F12")); { new Fl_Box(24, 30, 90, 20, _("Label")); } // Fl_Box* o { new Fl_Box(227, 30, 240, 20, _("Message Text")); } // Fl_Box* o { FSK_edit_label[8] = new Fl_Input2(5, 73, 80, 22, _("F9")); FSK_edit_label[8]->box(FL_DOWN_BOX); FSK_edit_label[8]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[8]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[8]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[8]->labelfont(0); FSK_edit_label[8]->labelsize(14); FSK_edit_label[8]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[8]->callback((Fl_Callback*)cb_FSK_edit_label8); FSK_edit_label[8]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[8]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[8] { FSK_edit_msg[8] = new Fl_Input2(90, 55, 475, 65); FSK_edit_msg[8]->type(4); FSK_edit_msg[8]->box(FL_DOWN_BOX); FSK_edit_msg[8]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[8]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[8]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[8]->labelfont(0); FSK_edit_msg[8]->labelsize(14); FSK_edit_msg[8]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[8]->callback((Fl_Callback*)cb_FSK_edit_msg8); FSK_edit_msg[8]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[8]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[8] { FSK_edit_label[9] = new Fl_Input2(5, 143, 80, 22, _("F10")); FSK_edit_label[9]->box(FL_DOWN_BOX); FSK_edit_label[9]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[9]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[9]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[9]->labelfont(0); FSK_edit_label[9]->labelsize(14); FSK_edit_label[9]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[9]->callback((Fl_Callback*)cb_FSK_edit_label9); FSK_edit_label[9]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[9]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[9] { FSK_edit_msg[9] = new Fl_Input2(90, 125, 475, 65); FSK_edit_msg[9]->type(4); FSK_edit_msg[9]->box(FL_DOWN_BOX); FSK_edit_msg[9]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[9]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[9]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[9]->labelfont(0); FSK_edit_msg[9]->labelsize(14); FSK_edit_msg[9]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[9]->callback((Fl_Callback*)cb_FSK_edit_msg9); FSK_edit_msg[9]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[9]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[9] { FSK_edit_label[10] = new Fl_Input2(5, 213, 80, 22, _("F11")); FSK_edit_label[10]->box(FL_DOWN_BOX); FSK_edit_label[10]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[10]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[10]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[10]->labelfont(0); FSK_edit_label[10]->labelsize(14); FSK_edit_label[10]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[10]->callback((Fl_Callback*)cb_FSK_edit_labela); FSK_edit_label[10]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[10]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[10] { FSK_edit_msg[10] = new Fl_Input2(90, 195, 475, 65); FSK_edit_msg[10]->type(4); FSK_edit_msg[10]->box(FL_DOWN_BOX); FSK_edit_msg[10]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[10]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[10]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[10]->labelfont(0); FSK_edit_msg[10]->labelsize(14); FSK_edit_msg[10]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[10]->callback((Fl_Callback*)cb_FSK_edit_msga); FSK_edit_msg[10]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[10]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[10] { FSK_edit_label[11] = new Fl_Input2(5, 283, 80, 22, _("F12")); FSK_edit_label[11]->box(FL_DOWN_BOX); FSK_edit_label[11]->color(FL_BACKGROUND2_COLOR); FSK_edit_label[11]->selection_color(FL_SELECTION_COLOR); FSK_edit_label[11]->labeltype(FL_NORMAL_LABEL); FSK_edit_label[11]->labelfont(0); FSK_edit_label[11]->labelsize(14); FSK_edit_label[11]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_label[11]->callback((Fl_Callback*)cb_FSK_edit_labelb); FSK_edit_label[11]->align(Fl_Align(FL_ALIGN_TOP_LEFT)); FSK_edit_label[11]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_label[11] { FSK_edit_msg[11] = new Fl_Input2(90, 265, 475, 65); FSK_edit_msg[11]->type(4); FSK_edit_msg[11]->box(FL_DOWN_BOX); FSK_edit_msg[11]->color(FL_BACKGROUND2_COLOR); FSK_edit_msg[11]->selection_color(FL_SELECTION_COLOR); FSK_edit_msg[11]->labeltype(FL_NORMAL_LABEL); FSK_edit_msg[11]->labelfont(0); FSK_edit_msg[11]->labelsize(14); FSK_edit_msg[11]->labelcolor(FL_FOREGROUND_COLOR); FSK_edit_msg[11]->callback((Fl_Callback*)cb_FSK_edit_msgb); FSK_edit_msg[11]->align(Fl_Align(FL_ALIGN_LEFT)); FSK_edit_msg[11]->when(FL_WHEN_RELEASE); } // Fl_Input2* FSK_edit_msg[11] o->end(); } // Fl_Group* o o->end(); } // Fl_Tabs* o { Fl_Group* o = new Fl_Group(575, 27, 90, 43); o->box(FL_ENGRAVED_FRAME); { new Fl_Box(579, 29, 82, 20, _("\'[\' Send")); } // Fl_Box* o { new Fl_Box(579, 49, 82, 20, _("\']\' Recv")); } // Fl_Box* o o->end(); } // Fl_Group* o { FSK_btn_cancel_edit = new Fl_Button(575, 88, 90, 22, _("Cancel")); FSK_btn_cancel_edit->tooltip(_("Exit editor, discard changes")); FSK_btn_cancel_edit->callback((Fl_Callback*)cb_FSK_btn_cancel_edit); } // Fl_Button* FSK_btn_cancel_edit { FSK_btn_apply_edit = new Fl_Button(575, 114, 90, 22, _("Apply")); FSK_btn_apply_edit->tooltip(_("Apply current changes to function keys")); FSK_btn_apply_edit->callback((Fl_Callback*)cb_FSK_btn_apply_edit); } // Fl_Button* FSK_btn_apply_edit { FSK_btn_FSK_done_edit = new Fl_Button(575, 141, 90, 22, _("Close")); FSK_btn_FSK_done_edit->tooltip(_("Apply changes and close editor")); FSK_btn_FSK_done_edit->callback((Fl_Callback*)cb_FSK_btn_FSK_done_edit); } // Fl_Button* FSK_btn_FSK_done_edit o->end(); o->resizable(o); } // Fl_Double_Window* o return w; } Fl_ComboBox *select_fskioPORT=(Fl_ComboBox *)0; static void cb_select_fskioPORT(Fl_ComboBox* o, void*) { progStatus.FSK_PORT = o->value(); } Fl_Light_Button *btn_fskioCONNECT=(Fl_Light_Button *)0; static void cb_btn_fskioCONNECT(Fl_Light_Button* o, void*) { if (o->value() == 0) { FSK_close_port(); btn_fskioCAT->activate(); btn_fskioAUX->activate(); btn_fskioSEP->activate(); progStatus.FSK_CONNECTED = 0; } else if (!FSK_open_port()) { o->value(0); btn_fskioCAT->activate(); btn_fskioAUX->activate(); btn_fskioSEP->activate(); progStatus.FSK_CONNECTED = 0; } else { btn_fskioCAT->value(0); btn_fskioCAT->deactivate(); btn_fskioAUX->value(0); btn_fskioAUX->deactivate(); btn_fskioSEP->value(0); btn_fskioSEP->deactivate(); progStatus.FSK_CONNECTED = 1; } FSK_open_port(); progStatus.FSK_SHARED = FSK_USES_FSK; } Fl_Check_Button *btn_fskioCAT=(Fl_Check_Button *)0; static void cb_btn_fskioCAT(Fl_Check_Button* o, void*) { if (o->value()) { progStatus.FSK_SHARED = FSK_USES_CAT; btn_fskioAUX->value(0); btn_fskioAUX->deactivate(); btn_fskioSEP->value(0); btn_fskioSEP->deactivate(); btn_fskioCONNECT->value(0); btn_fskioCONNECT->deactivate(); btn_fskioSHARED->value(0); btn_fskioSHARED->deactivate(); select_fskioPORT->value("NONE"); select_fskioPORT->deactivate(); }else { progStatus.FSK_SHARED = FSK_USES_FSK; btn_fskioCONNECT->activate(); btn_fskioAUX->activate(); btn_fskioCAT->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); select_fskioPORT->activate(); }; } Fl_Check_Button *btn_fskioAUX=(Fl_Check_Button *)0; static void cb_btn_fskioAUX(Fl_Check_Button* o, void*) { if (o->value()) { progStatus.FSK_SHARED = FSK_USES_AUX; btn_fskioCAT->value(0); btn_fskioCAT->deactivate(); btn_fskioSEP->value(0); btn_fskioSEP->deactivate(); btn_fskioCONNECT->value(0); btn_fskioCONNECT->deactivate(); btn_fskioSHARED->value(0); btn_fskioSHARED->deactivate(); select_fskioPORT->value("NONE"); select_fskioPORT->deactivate(); }else { progStatus.FSK_SHARED = FSK_USES_FSK; btn_fskioCONNECT->activate(); btn_fskioAUX->activate(); btn_fskioCAT->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); select_fskioPORT->activate(); }; } Fl_Check_Button *btn_fskioSEP=(Fl_Check_Button *)0; static void cb_btn_fskioSEP(Fl_Check_Button* o, void*) { if (o->value()) { progStatus.FSK_SHARED = FSK_USES_SEP; btn_fskioAUX->value(0); btn_fskioAUX->deactivate(); btn_fskioCAT->value(0); btn_fskioCAT->deactivate(); btn_fskioCONNECT->value(0); btn_fskioCONNECT->deactivate(); btn_fskioSHARED->value(0); btn_fskioSHARED->deactivate(); select_fskioPORT->value("NONE"); select_fskioPORT->deactivate(); }else { progStatus.FSK_SHARED = FSK_USES_FSK; btn_fskioCONNECT->activate(); btn_fskioAUX->activate(); btn_fskioCAT->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); select_fskioPORT->activate(); }; } Fl_Check_Button *btn_fskioSHARED=(Fl_Check_Button *)0; static void cb_btn_fskioSHARED(Fl_Check_Button* o, void*) { if (o->value()) { progStatus.FSK_SHARED = FSK_USES_CWIO; btn_fskioAUX->value(0); btn_fskioAUX->deactivate(); btn_fskioCAT->value(0); btn_fskioCAT->deactivate(); btn_fskioSEP->value(0); btn_fskioSEP->deactivate(); btn_fskioCONNECT->value(0); btn_fskioCONNECT->deactivate(); select_fskioPORT->value("NONE"); select_fskioPORT->deactivate(); }else { progStatus.FSK_SHARED = FSK_USES_FSK; btn_fskioCONNECT->activate(); btn_fskioAUX->activate(); btn_fskioCAT->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); select_fskioPORT->activate(); }; } Fl_Check_Button *btn_fskioINVERTED=(Fl_Check_Button *)0; static void cb_btn_fskioINVERTED(Fl_Check_Button* o, void*) { progStatus.FSK_INVERTED = o->value(); } Fl_Check_Button *btn_fskioSTOPBITS=(Fl_Check_Button *)0; static void cb_btn_fskioSTOPBITS(Fl_Check_Button* o, void*) { progStatus.FSK_STOPBITS = o->value(); } Fl_ListBox *listbox_fskioKEYLINE=(Fl_ListBox *)0; static void cb_listbox_fskioKEYLINE(Fl_ListBox* o, void*) { progStatus.FSK_KEYLINE = o->index(); } Fl_Spinner *cntr_fskioPTT=(Fl_Spinner *)0; static void cb_cntr_fskioPTT(Fl_Spinner* o, void*) { progStatus.FSK_PTT = o->value(); } Fl_Counter *fsk_idles=(Fl_Counter *)0; static void cb_fsk_idles(Fl_Counter* o, void*) { progStatus.fsk_idles = o->value(); } Fl_Double_Window* fskio_config_dialog() { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(670, 100, _("FSK Configuration")); w = o; if (w) {/* empty */} { Fl_Group* o = new Fl_Group(2, 3, 666, 100); o->box(FL_ENGRAVED_FRAME); { Fl_ComboBox* o = select_fskioPORT = new Fl_ComboBox(73, 73, 496, 23, _("Ser. Port")); select_fskioPORT->tooltip(_("FSKIO serial port")); select_fskioPORT->box(FL_DOWN_BOX); select_fskioPORT->color((Fl_Color)53); select_fskioPORT->selection_color(FL_BACKGROUND_COLOR); select_fskioPORT->labeltype(FL_NORMAL_LABEL); select_fskioPORT->labelfont(0); select_fskioPORT->labelsize(14); select_fskioPORT->labelcolor(FL_FOREGROUND_COLOR); select_fskioPORT->callback((Fl_Callback*)cb_select_fskioPORT); select_fskioPORT->align(Fl_Align(FL_ALIGN_LEFT)); select_fskioPORT->when(FL_WHEN_RELEASE); o->value(progStatus.FSK_PORT.c_str()); select_fskioPORT->end(); } // Fl_ComboBox* select_fskioPORT { Fl_Light_Button* o = btn_fskioCONNECT = new Fl_Light_Button(578, 73, 80, 23, _("Connect")); btn_fskioCONNECT->callback((Fl_Callback*)cb_btn_fskioCONNECT); o->value(progStatus.FSK_CONNECTED); } // Fl_Light_Button* btn_fskioCONNECT { Fl_Check_Button* o = btn_fskioCAT = new Fl_Check_Button(87, 15, 23, 15, _("Use CAT")); btn_fskioCAT->tooltip(_("Use DTR/RTS on CAT serial port")); btn_fskioCAT->down_box(FL_DOWN_BOX); btn_fskioCAT->callback((Fl_Callback*)cb_btn_fskioCAT); btn_fskioCAT->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.FSK_SHARED == FSK_USES_CAT); } // Fl_Check_Button* btn_fskioCAT { Fl_Check_Button* o = btn_fskioAUX = new Fl_Check_Button(88, 46, 23, 15, _("Use AUX")); btn_fskioAUX->tooltip(_("Use DTR/RTS on Auxiliary serial port")); btn_fskioAUX->down_box(FL_DOWN_BOX); btn_fskioAUX->callback((Fl_Callback*)cb_btn_fskioAUX); btn_fskioAUX->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.FSK_SHARED == FSK_USES_AUX); } // Fl_Check_Button* btn_fskioAUX { Fl_Check_Button* o = btn_fskioSEP = new Fl_Check_Button(212, 15, 23, 15, _("Use SEP")); btn_fskioSEP->tooltip(_("Use DTR/RTS Separate serial port")); btn_fskioSEP->down_box(FL_DOWN_BOX); btn_fskioSEP->callback((Fl_Callback*)cb_btn_fskioSEP); btn_fskioSEP->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.FSK_SHARED == FSK_USES_SEP); } // Fl_Check_Button* btn_fskioSEP { Fl_Check_Button* o = btn_fskioSHARED = new Fl_Check_Button(212, 46, 23, 15, _("CWIO shared")); btn_fskioSHARED->tooltip(_("Use DTR/RTS fskio shared port")); btn_fskioSHARED->down_box(FL_DOWN_BOX); btn_fskioSHARED->callback((Fl_Callback*)cb_btn_fskioSHARED); btn_fskioSHARED->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.FSK_SHARED == FSK_USES_CWIO); } // Fl_Check_Button* btn_fskioSHARED { Fl_Check_Button* o = btn_fskioINVERTED = new Fl_Check_Button(339, 15, 23, 15, _("Inverted")); btn_fskioINVERTED->tooltip(_("DTR/RTS signaling is inverted\n(-) keying")); btn_fskioINVERTED->down_box(FL_DOWN_BOX); btn_fskioINVERTED->callback((Fl_Callback*)cb_btn_fskioINVERTED); btn_fskioINVERTED->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.FSK_INVERTED); } // Fl_Check_Button* btn_fskioINVERTED { Fl_Check_Button* o = btn_fskioSTOPBITS = new Fl_Check_Button(339, 46, 23, 15, _("1.5 stop bits")); btn_fskioSTOPBITS->tooltip(_("Enabled - 1.5 stop bits\nDisable - 2 stop bits")); btn_fskioSTOPBITS->down_box(FL_DOWN_BOX); btn_fskioSTOPBITS->callback((Fl_Callback*)cb_btn_fskioSTOPBITS); btn_fskioSTOPBITS->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.FSK_STOPBITS); } // Fl_Check_Button* btn_fskioSTOPBITS { Fl_ListBox* o = listbox_fskioKEYLINE = new Fl_ListBox(593, 41, 65, 24, _("FSK Keyline")); listbox_fskioKEYLINE->tooltip(_("Select either DTR or RTS for keyline")); listbox_fskioKEYLINE->box(FL_DOWN_BOX); listbox_fskioKEYLINE->color(FL_BACKGROUND2_COLOR); listbox_fskioKEYLINE->selection_color(FL_BACKGROUND_COLOR); listbox_fskioKEYLINE->labeltype(FL_NORMAL_LABEL); listbox_fskioKEYLINE->labelfont(0); listbox_fskioKEYLINE->labelsize(14); listbox_fskioKEYLINE->labelcolor(FL_FOREGROUND_COLOR); listbox_fskioKEYLINE->callback((Fl_Callback*)cb_listbox_fskioKEYLINE); listbox_fskioKEYLINE->align(Fl_Align(FL_ALIGN_LEFT)); listbox_fskioKEYLINE->when(FL_WHEN_RELEASE); o->add("None|RTS|DTR"); o->index(progStatus.FSK_KEYLINE); listbox_fskioKEYLINE->end(); } // Fl_ListBox* listbox_fskioKEYLINE { Fl_Spinner* o = cntr_fskioPTT = new Fl_Spinner(608, 10, 50, 25, _("PTT delay")); cntr_fskioPTT->tooltip(_("PTT delay before keydown\n0 = Break-in")); cntr_fskioPTT->minimum(0); cntr_fskioPTT->value(0); cntr_fskioPTT->callback((Fl_Callback*)cb_cntr_fskioPTT); o->value(progStatus.FSK_PTT); } // Fl_Spinner* cntr_fskioPTT { Fl_Counter* o = fsk_idles = new Fl_Counter(400, 11, 80, 21, _("Start Idles")); fsk_idles->tooltip(_("Transmit # after PTT on")); fsk_idles->type(1); fsk_idles->minimum(0); fsk_idles->maximum(20); fsk_idles->step(1); fsk_idles->callback((Fl_Callback*)cb_fsk_idles); o->value(progStatus.fsk_idles); } // Fl_Counter* fsk_idles o->end(); } // Fl_Group* o o->end(); } // Fl_Double_Window* o return w; } Fl_Menu_Bar *FSKlog_menubar=(Fl_Menu_Bar *)0; static void cb_fsklog_fsk_menu_open(Fl_Menu_*, void*) { fsklog_open(); } static void cb_fsklog_fsk_menu_new(Fl_Menu_*, void*) { fsklog_new(); } static void cb_fsklog_fsk_menu_save(Fl_Menu_*, void*) { fsklog_save(); } static void cb_fsklog_fsk_menu_save_as(Fl_Menu_*, void*) { fsklog_save_as(); } static void cb_fsklog_fsk_menu_export_adif(Fl_Menu_*, void*) { fsklog_export_adif(); } static void cb_fsklog_fsk_menu_import_adif(Fl_Menu_*, void*) { fsklog_import_adif(); } static void cb_fsklog_fsk_menu_dupcheck(Fl_Menu_* o, void*) { //fsklog.dupcheck = o->value(); } static void cb_fsklog_fsk_menu_leading_zeros(Fl_Menu_* o, void*) { //fsklog.dupcheck = o->value(); } static void cb_fsklog_fsk_menu_cut_numbers(Fl_Menu_* o, void*) { //fsklog.cut_nbrs = o->value(); } unsigned char menu_FSKlog_menubar_i18n_done = 0; Fl_Menu_Item menu_FSKlog_menubar[] = { {"Files", 0, 0, 0, 64, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Open", 0, (Fl_Callback*)cb_fsklog_fsk_menu_open, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"New", 0, (Fl_Callback*)cb_fsklog_fsk_menu_new, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Save", 0, (Fl_Callback*)cb_fsklog_fsk_menu_save, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Save As", 0, (Fl_Callback*)cb_fsklog_fsk_menu_save_as, 0, 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Export ADIF", 0, (Fl_Callback*)cb_fsklog_fsk_menu_export_adif, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Import ADIF", 0, (Fl_Callback*)cb_fsklog_fsk_menu_import_adif, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {"Config", 0, 0, 0, 64, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Dup check", 0, (Fl_Callback*)cb_fsklog_fsk_menu_dupcheck, 0, 2, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Leading zeros", 0, (Fl_Callback*)cb_fsklog_fsk_menu_leading_zeros, 0, 2, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {"Cut numbers", 0, (Fl_Callback*)cb_fsklog_fsk_menu_cut_numbers, 0, 2, (uchar)FL_NORMAL_LABEL, 0, 14, 0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0} }; Fl_Output *txt_fsklog_file=(Fl_Output *)0; static void cb_txt_fsklog_file(Fl_Output* o, void*) { //progStatus.fsklogfile_name = o->value(); } Fl_Group *fsk_grp_qso_data=(Fl_Group *)0; Fl_Input2 *fsk_op_freq=(Fl_Input2 *)0; Fl_Button *btn_fsklog_clear_qso=(Fl_Button *)0; static void cb_btn_fsklog_clear_qso(Fl_Button*, void*) { fsklog_clear_qso(); } Fl_Button *btn_fsklog_save_qso=(Fl_Button *)0; static void cb_btn_fsklog_save_qso(Fl_Button*, void*) { fsklog_save_qso(); } Fl_Button *btn_fsklog_edit_entry=(Fl_Button *)0; static void cb_btn_fsklog_edit_entry(Fl_Button*, void*) { fsklog_edit_entry(); } Fl_Button *btn_fsklog_delete_entry=(Fl_Button *)0; static void cb_btn_fsklog_delete_entry(Fl_Button*, void*) { fsklog_delete_entry(); } Fl_Input2 *fsk_date=(Fl_Input2 *)0; Fl_Input2 *fsk_time=(Fl_Input2 *)0; Fl_Input2 *fsk_rst_out=(Fl_Input2 *)0; Fl_Input2 *fsk_rst_in=(Fl_Input2 *)0; Fl_Input2 *fsk_xchg_in=(Fl_Input2 *)0; Fl_Counter *cntr_fsk_log_nbr=(Fl_Counter *)0; static void cb_cntr_fsk_log_nbr(Fl_Counter* o, void*) { progStatus.fsk_log_nbr = o->value(); } Fl_Input2 *fsk_op_name=(Fl_Input2 *)0; Fl_Input2 *fsk_op_call=(Fl_Input2 *)0; Fl_Button *btn_fsk_datetime=(Fl_Button *)0; static void cb_btn_fsk_datetime(Fl_Button*, void*) { fsklog_sort_by_datetime(); } Fl_Button *btn_fsk_time=(Fl_Button *)0; static void cb_btn_fsk_time(Fl_Button*, void*) { fsklog_sort_by_datetime(); } Fl_Button *btn_fsk_freq=(Fl_Button *)0; static void cb_btn_fsk_freq(Fl_Button*, void*) { fsklog_sort_by_freq(); } Fl_Button *btn_fsk_call=(Fl_Button *)0; static void cb_btn_fsk_call(Fl_Button*, void*) { fsklog_sort_by_call(); } Fl_Button *btn_fsk_name=(Fl_Button *)0; Fl_Button *btn_fsk_in=(Fl_Button *)0; Fl_Button *btn_fsk_out=(Fl_Button *)0; Fl_Button *btn_fsk_sent_nbr=(Fl_Button *)0; static void cb_btn_fsk_sent_nbr(Fl_Button*, void*) { fsklog_sort_by_nbr(); } Fl_Button *btn_fsk_exchange=(Fl_Button *)0; Fl_Browser *brwsr_fsklog_entries=(Fl_Browser *)0; static void cb_brwsr_fsklog_entries(Fl_Browser*, void*) { if (!fsklog_editing) fsklog_edit_entry(); } Fl_Double_Window* new_fsklogbook_dialog() { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(670, 284, _("Flrig RTTY Log")); w = o; if (w) {/* empty */} { FSKlog_menubar = new Fl_Menu_Bar(0, 0, 670, 20); if (!menu_FSKlog_menubar_i18n_done) { int i=0; for ( ; i<12; i++) if (menu_FSKlog_menubar[i].label()) menu_FSKlog_menubar[i].label(_(menu_FSKlog_menubar[i].label())); menu_FSKlog_menubar_i18n_done = 1; } FSKlog_menubar->menu(menu_FSKlog_menubar); } // Fl_Menu_Bar* FSKlog_menubar { Fl_Group* o = new Fl_Group(2, 22, 668, 29); o->box(FL_ENGRAVED_FRAME); { txt_fsklog_file = new Fl_Output(75, 26, 590, 22, _("Log File:")); txt_fsklog_file->callback((Fl_Callback*)cb_txt_fsklog_file); //->value(progStatus.fsklogfile_name); } // Fl_Output* txt_fsklog_file o->end(); } // Fl_Group* o { fsk_grp_qso_data = new Fl_Group(2, 52, 560, 30); fsk_grp_qso_data->box(FL_ENGRAVED_BOX); { fsk_op_freq = new Fl_Input2(43, 56, 120, 22, _("Freq")); fsk_op_freq->tooltip(_("Frequency")); fsk_op_freq->box(FL_DOWN_BOX); fsk_op_freq->color(FL_BACKGROUND2_COLOR); fsk_op_freq->selection_color(FL_SELECTION_COLOR); fsk_op_freq->labeltype(FL_NORMAL_LABEL); fsk_op_freq->labelfont(0); fsk_op_freq->labelsize(14); fsk_op_freq->labelcolor(FL_FOREGROUND_COLOR); fsk_op_freq->align(Fl_Align(FL_ALIGN_LEFT)); fsk_op_freq->when(FL_WHEN_RELEASE); } // Fl_Input2* fsk_op_freq { btn_fsklog_clear_qso = new Fl_Button(380, 56, 60, 22, _("Clear")); btn_fsklog_clear_qso->tooltip(_("Clear fsklog entries")); btn_fsklog_clear_qso->callback((Fl_Callback*)cb_btn_fsklog_clear_qso); } // Fl_Button* btn_fsklog_clear_qso { btn_fsklog_save_qso = new Fl_Button(440, 56, 60, 22, _("Save")); btn_fsklog_save_qso->tooltip(_("Save QSO data to fsklog file")); btn_fsklog_save_qso->callback((Fl_Callback*)cb_btn_fsklog_save_qso); } // Fl_Button* btn_fsklog_save_qso { btn_fsklog_edit_entry = new Fl_Button(501, 56, 60, 22, _("Edit")); btn_fsklog_edit_entry->tooltip(_("Delete Entry")); btn_fsklog_edit_entry->callback((Fl_Callback*)cb_btn_fsklog_edit_entry); } // Fl_Button* btn_fsklog_edit_entry { btn_fsklog_delete_entry = new Fl_Button(492, 56, 60, 22, _("Delete")); btn_fsklog_delete_entry->tooltip(_("Delete Entry")); btn_fsklog_delete_entry->callback((Fl_Callback*)cb_btn_fsklog_delete_entry); btn_fsklog_delete_entry->hide(); } // Fl_Button* btn_fsklog_delete_entry { fsk_date = new Fl_Input2(193, 56, 85, 22, _("Dt")); fsk_date->tooltip(_("QSO call\nQuery flfsklog if connected")); fsk_date->box(FL_DOWN_BOX); fsk_date->color(FL_BACKGROUND2_COLOR); fsk_date->selection_color(FL_SELECTION_COLOR); fsk_date->labeltype(FL_NORMAL_LABEL); fsk_date->labelfont(0); fsk_date->labelsize(14); fsk_date->labelcolor(FL_FOREGROUND_COLOR); fsk_date->align(Fl_Align(FL_ALIGN_LEFT)); fsk_date->when(FL_WHEN_RELEASE); } // Fl_Input2* fsk_date { fsk_time = new Fl_Input2(313, 56, 55, 22, _("Tm:")); fsk_time->box(FL_DOWN_BOX); fsk_time->color(FL_BACKGROUND2_COLOR); fsk_time->selection_color(FL_SELECTION_COLOR); fsk_time->labeltype(FL_NORMAL_LABEL); fsk_time->labelfont(0); fsk_time->labelsize(14); fsk_time->labelcolor(FL_FOREGROUND_COLOR); fsk_time->align(Fl_Align(FL_ALIGN_LEFT)); fsk_time->when(FL_WHEN_RELEASE); } // Fl_Input2* fsk_time fsk_grp_qso_data->end(); } // Fl_Group* fsk_grp_qso_data { Fl_Group* o = new Fl_Group(565, 52, 103, 62); o->box(FL_ENGRAVED_BOX); { fsk_rst_out = new Fl_Input2(622, 56, 40, 22, _("RSTout")); fsk_rst_out->tooltip(_("Send RST")); fsk_rst_out->box(FL_DOWN_BOX); fsk_rst_out->color(FL_BACKGROUND2_COLOR); fsk_rst_out->selection_color(FL_SELECTION_COLOR); fsk_rst_out->labeltype(FL_NORMAL_LABEL); fsk_rst_out->labelfont(0); fsk_rst_out->labelsize(14); fsk_rst_out->labelcolor(FL_FOREGROUND_COLOR); fsk_rst_out->align(Fl_Align(FL_ALIGN_LEFT)); fsk_rst_out->when(FL_WHEN_RELEASE); } // Fl_Input2* fsk_rst_out { fsk_rst_in = new Fl_Input2(624, 87, 40, 22, _("RST in")); fsk_rst_in->tooltip(_("Send RST")); fsk_rst_in->box(FL_DOWN_BOX); fsk_rst_in->color(FL_BACKGROUND2_COLOR); fsk_rst_in->selection_color(FL_SELECTION_COLOR); fsk_rst_in->labeltype(FL_NORMAL_LABEL); fsk_rst_in->labelfont(0); fsk_rst_in->labelsize(14); fsk_rst_in->labelcolor(FL_FOREGROUND_COLOR); fsk_rst_in->align(Fl_Align(FL_ALIGN_LEFT)); fsk_rst_in->when(FL_WHEN_RELEASE); } // Fl_Input2* fsk_rst_in o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(2, 84, 560, 30); o->box(FL_ENGRAVED_FRAME); { fsk_xchg_in = new Fl_Input2(313, 87, 150, 22, _("Xch")); fsk_xchg_in->tooltip(_("Input exchange")); fsk_xchg_in->box(FL_DOWN_BOX); fsk_xchg_in->color(FL_BACKGROUND2_COLOR); fsk_xchg_in->selection_color(FL_SELECTION_COLOR); fsk_xchg_in->labeltype(FL_NORMAL_LABEL); fsk_xchg_in->labelfont(0); fsk_xchg_in->labelsize(14); fsk_xchg_in->labelcolor(FL_FOREGROUND_COLOR); fsk_xchg_in->align(Fl_Align(FL_ALIGN_LEFT)); fsk_xchg_in->when(FL_WHEN_RELEASE); } // Fl_Input2* fsk_xchg_in { Fl_Counter* o = cntr_fsk_log_nbr = new Fl_Counter(491, 87, 70, 22, _("#:")); cntr_fsk_log_nbr->tooltip(_("QSO number (out)")); cntr_fsk_log_nbr->type(1); cntr_fsk_log_nbr->step(1); cntr_fsk_log_nbr->callback((Fl_Callback*)cb_cntr_fsk_log_nbr); cntr_fsk_log_nbr->align(Fl_Align(FL_ALIGN_LEFT)); o->value(progStatus.fsk_log_nbr); } // Fl_Counter* cntr_fsk_log_nbr { fsk_op_name = new Fl_Input2(193, 88, 85, 22, _("Nm")); fsk_op_name->box(FL_DOWN_BOX); fsk_op_name->color(FL_BACKGROUND2_COLOR); fsk_op_name->selection_color(FL_SELECTION_COLOR); fsk_op_name->labeltype(FL_NORMAL_LABEL); fsk_op_name->labelfont(0); fsk_op_name->labelsize(14); fsk_op_name->labelcolor(FL_FOREGROUND_COLOR); fsk_op_name->align(Fl_Align(FL_ALIGN_LEFT)); fsk_op_name->when(FL_WHEN_RELEASE); } // Fl_Input2* fsk_op_name { fsk_op_call = new Fl_Input2(43, 88, 120, 22, _("Call")); fsk_op_call->tooltip(_("QSO call\nQuery flfsklog if connected")); fsk_op_call->box(FL_DOWN_BOX); fsk_op_call->color(FL_BACKGROUND2_COLOR); fsk_op_call->selection_color(FL_SELECTION_COLOR); fsk_op_call->labeltype(FL_NORMAL_LABEL); fsk_op_call->labelfont(0); fsk_op_call->labelsize(14); fsk_op_call->labelcolor(FL_FOREGROUND_COLOR); fsk_op_call->align(Fl_Align(FL_ALIGN_LEFT)); fsk_op_call->when(FL_WHEN_RELEASE); } // Fl_Input2* fsk_op_call o->end(); } // Fl_Group* o { Fl_Group* o = new Fl_Group(2, 113, 674, 170); { Fl_Group* o = new Fl_Group(2, 116, 668, 22); { btn_fsk_datetime = new Fl_Button(2, 116, 80, 22, _("Date")); btn_fsk_datetime->box(FL_BORDER_BOX); btn_fsk_datetime->color((Fl_Color)51); btn_fsk_datetime->callback((Fl_Callback*)cb_btn_fsk_datetime); } // Fl_Button* btn_fsk_datetime { btn_fsk_time = new Fl_Button(81, 116, 45, 22, _("Time")); btn_fsk_time->box(FL_BORDER_BOX); btn_fsk_time->color((Fl_Color)51); btn_fsk_time->callback((Fl_Callback*)cb_btn_fsk_time); } // Fl_Button* btn_fsk_time { btn_fsk_freq = new Fl_Button(126, 116, 70, 22, _("Freq")); btn_fsk_freq->box(FL_BORDER_BOX); btn_fsk_freq->color((Fl_Color)51); btn_fsk_freq->callback((Fl_Callback*)cb_btn_fsk_freq); } // Fl_Button* btn_fsk_freq { btn_fsk_call = new Fl_Button(196, 116, 75, 22, _("Call")); btn_fsk_call->box(FL_BORDER_BOX); btn_fsk_call->color((Fl_Color)51); btn_fsk_call->callback((Fl_Callback*)cb_btn_fsk_call); } // Fl_Button* btn_fsk_call { btn_fsk_name = new Fl_Button(271, 116, 75, 22, _("Name")); btn_fsk_name->box(FL_BORDER_BOX); btn_fsk_name->color((Fl_Color)51); } // Fl_Button* btn_fsk_name { btn_fsk_in = new Fl_Button(346, 116, 40, 22, _("In")); btn_fsk_in->box(FL_BORDER_BOX); btn_fsk_in->color((Fl_Color)51); } // Fl_Button* btn_fsk_in { btn_fsk_out = new Fl_Button(386, 116, 40, 22, _("Out")); btn_fsk_out->box(FL_BORDER_BOX); btn_fsk_out->color((Fl_Color)51); } // Fl_Button* btn_fsk_out { btn_fsk_sent_nbr = new Fl_Button(426, 116, 55, 22, _("Nbr")); btn_fsk_sent_nbr->box(FL_BORDER_BOX); btn_fsk_sent_nbr->color((Fl_Color)51); btn_fsk_sent_nbr->callback((Fl_Callback*)cb_btn_fsk_sent_nbr); } // Fl_Button* btn_fsk_sent_nbr { btn_fsk_exchange = new Fl_Button(481, 116, 185, 22, _("Exchange")); btn_fsk_exchange->box(FL_BORDER_BOX); btn_fsk_exchange->color((Fl_Color)51); Fl_Group::current()->resizable(btn_fsk_exchange); } // Fl_Button* btn_fsk_exchange o->end(); } // Fl_Group* o { Fl_Browser* o = brwsr_fsklog_entries = new Fl_Browser(2, 140, 666, 141); brwsr_fsklog_entries->type(2); brwsr_fsklog_entries->selection_color((Fl_Color)230); brwsr_fsklog_entries->callback((Fl_Callback*)cb_brwsr_fsklog_entries); Fl_Group::current()->resizable(brwsr_fsklog_entries); static int widths[]={80,45,70,75,75,40,40,55,0}; o->column_widths(widths); o->column_char('\t'); o->has_scrollbar(Fl_Browser_::VERTICAL_ALWAYS); } // Fl_Browser* brwsr_fsklog_entries o->end(); } // Fl_Group* o o->end(); } // Fl_Double_Window* o return w; } flrig-2.0.04/src/fskio/fskioUI.fl0000664000175000017500000005330614502041135013423 00000000000000# data file for the Fltk User Interface Designer (fluid) version 1.0308 i18n_type 1 i18n_include "gettext.h" i18n_function _ header_name {.h} code_name {.cxx} decl {\#include "config.h"} {private local } decl {\#include "compat.h"} {private local } decl {\#include "fsk.h"} {private local } decl {\#include "fsklog.h"} {private local } decl {\#include } {public global } decl {Fl_Double_Window *fsklog_viewer;} {public local } Function {fskio_window()} {open } { Fl_Window {} { label {FSK keying} open xywh {610 38 670 130} type Double resizable code0 {\#include "status.h"} code1 {\#include "fsk.h"} code2 {\#include "ValueSlider.h"} visible } { Fl_Input FSK_txt_to_send { callback {FSK_control_function_keys();} xywh {2 2 666 68} type Multiline align 16 when 1 resizable class Fl_Input2 } Fl_Group {} {open xywh {0 70 670 60} } { Fl_Button btn_fskio_config { label Config callback {FSK_open_config();} tooltip {Open FSK configuration dialog} xywh {390 73 60 22} } Fl_Button btn_fskio_clear { label Clear callback {FSK_clear_text();} tooltip {Clear transmit text} xywh {473 73 60 22} } Fl_Light_Button btn_fskioSEND { label {Xmt / Rcv} callback {FSK_send_text(o->value());} tooltip {Send / Pause sending characters} xywh {557 73 105 22} } Fl_Group {} { xywh {2 98 220 30} box ENGRAVED_BOX } { Fl_Button {FSK_btn_msg[0]} { label {F 1} callback {FSK_exec_msg(0);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {5 102 50 22} } Fl_Button {FSK_btn_msg[1]} { label {F 2} callback {FSK_exec_msg(1);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {59 102 50 22} } Fl_Button {FSK_btn_msg[2]} { label {F 3} callback {FSK_exec_msg(2);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {113 102 50 22} } Fl_Button {FSK_btn_msg[3]} { label {F 4} callback {FSK_exec_msg(3);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {168 102 50 22} } } Fl_Group {} { xywh {225 98 220 30} box ENGRAVED_BOX } { Fl_Button {FSK_btn_msg[4]} { label {F 5} callback {FSK_exec_msg(4);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {229 102 50 22} } Fl_Button {FSK_btn_msg[5]} { label {F 6} callback {FSK_exec_msg(5);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {283 102 50 22} } Fl_Button {FSK_btn_msg[6]} { label {F 7} callback {FSK_exec_msg(6);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {337 102 50 22} } Fl_Button {FSK_btn_msg[7]} { label {F 8} callback {FSK_exec_msg(7);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {391 102 50 22} } } Fl_Group {} { xywh {448 98 220 30} box ENGRAVED_BOX } { Fl_Button {FSK_btn_msg[8]} { label {F 9} callback {FSK_exec_msg(8);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {451 102 50 22} } Fl_Button {FSK_btn_msg[9]} { label {F 10} callback {FSK_exec_msg(9);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {505 102 50 22} } Fl_Button {FSK_btn_msg[10]} { label {F 11} callback {FSK_exec_msg(10);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {559 102 50 22} } Fl_Button {FSK_btn_msg[11]} { label {F 12} callback {FSK_exec_msg(11);} tooltip {Action - Function Key Left click Edit - Control left click} xywh {614 102 50 22} } } } } } Function {FSK_make_message_editor()} {open } { Fl_Window {} { label {FSK Message Editor} open xywh {613 338 670 344} type Double hide resizable } { Fl_Tabs {} {open xywh {0 0 570 345} align 17 } { Fl_Group {} { label {F1-F4} open xywh {0 25 570 320} hide } { Fl_Box {} { label Label xywh {22 30 84 20} } Fl_Box {} { label {Message Text} xywh {211 30 223 20} } Fl_Input {FSK_edit_label[0]} { label F1 callback {FSK_label_cb(1);} xywh {5 74 80 22} align 5 code0 {\#include "flinput2.h"} class Fl_Input2 } Fl_Input {FSK_edit_msg[0]} { callback {FSK_msg_cb(1);} xywh {90 55 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[1]} { label F2 callback {FSK_label_cb(2);} xywh {5 144 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[1]} { callback {FSK_msg_cb(2);} xywh {90 125 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[2]} { label F3 callback {FSK_label_cb(3);} xywh {5 214 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[2]} { callback {FSK_msg_cb(3);} xywh {90 195 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[3]} { label F4 callback {FSK_label_cb(4);} xywh {5 284 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[3]} { callback {FSK_msg_cb(4);} xywh {90 265 475 65} type Multiline class Fl_Input2 } } Fl_Group {} { label {F5-f8} open xywh {0 25 570 320} hide } { Fl_Box {} { label Label xywh {24 30 90 20} } Fl_Box {} { label {Message Text} xywh {227 30 240 20} } Fl_Input {FSK_edit_label[4]} { label F5 callback {FSK_label_cb(5);} xywh {5 74 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[4]} { callback {FSK_msg_cb(5);} xywh {90 55 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[5]} { label F6 callback {FSK_label_cb(6);} xywh {5 144 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[5]} { callback {FSK_msg_cb(6);} xywh {90 125 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[6]} { label F7 callback {FSK_label_cb(7);} xywh {5 214 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[6]} { callback {FSK_msg_cb(7);} xywh {90 195 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[7]} { label F8 callback {FSK_label_cb(8);} xywh {5 284 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[7]} { callback {FSK_msg_cb(8);} xywh {90 265 475 65} type Multiline class Fl_Input2 } } Fl_Group {} { label {F9-F12} open xywh {0 25 570 320} } { Fl_Box {} { label Label xywh {24 30 90 20} } Fl_Box {} { label {Message Text} xywh {227 30 240 20} } Fl_Input {FSK_edit_label[8]} { label F9 callback {FSK_label_cb(9);} xywh {5 73 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[8]} { callback {FSK_msg_cb(9);} xywh {90 55 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[9]} { label F10 callback {FSK_label_cb(10);} xywh {5 143 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[9]} { callback {FSK_msg_cb(10);} xywh {90 125 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[10]} { label F11 callback {FSK_label_cb(11);} xywh {5 213 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[10]} { callback {FSK_msg_cb(11);} xywh {90 195 475 65} type Multiline class Fl_Input2 } Fl_Input {FSK_edit_label[11]} { label F12 callback {FSK_label_cb(12);} xywh {5 283 80 22} align 5 class Fl_Input2 } Fl_Input {FSK_edit_msg[11]} { callback {FSK_msg_cb(12);} xywh {90 265 475 65} type Multiline class Fl_Input2 } } } Fl_Group {} {open xywh {575 27 90 43} box ENGRAVED_FRAME } { Fl_Box {} { label {'[' Send} xywh {579 29 82 20} } Fl_Box {} { label {']' Recv} xywh {579 49 82 20} } } Fl_Button FSK_btn_cancel_edit { label Cancel callback {FSK_cancel_edit();} tooltip {Exit editor, discard changes} xywh {575 88 90 22} } Fl_Button FSK_btn_apply_edit { label Apply callback {FSK_apply_edit();} tooltip {Apply current changes to function keys} xywh {575 114 90 22} } Fl_Button FSK_btn_FSK_done_edit { label Close callback {FSK_done_edit();} tooltip {Apply changes and close editor} xywh {575 141 90 22} } } } Function {fskio_config_dialog()} {open } { Fl_Window {} { label {FSK Configuration} open xywh {610 200 670 100} type Double visible } { Fl_Group {} {open xywh {2 3 666 100} box ENGRAVED_FRAME } { Fl_Group select_fskioPORT { label {Ser. Port} callback {progStatus.FSK_PORT = o->value();} open tooltip {FSKIO serial port} xywh {73 73 496 23} box DOWN_BOX color 53 align 4 code0 {\#include "combo.h"} code1 {o->value(progStatus.FSK_PORT.c_str());} class Fl_ComboBox } {} Fl_Light_Button btn_fskioCONNECT { label Connect callback {if (o->value() == 0) { FSK_close_port(); btn_fskioCAT->activate(); btn_fskioAUX->activate(); btn_fskioSEP->activate(); progStatus.FSK_CONNECTED = 0; } else if (!FSK_open_port()) { o->value(0); btn_fskioCAT->activate(); btn_fskioAUX->activate(); btn_fskioSEP->activate(); progStatus.FSK_CONNECTED = 0; } else { btn_fskioCAT->value(0); btn_fskioCAT->deactivate(); btn_fskioAUX->value(0); btn_fskioAUX->deactivate(); btn_fskioSEP->value(0); btn_fskioSEP->deactivate(); progStatus.FSK_CONNECTED = 1; } FSK_open_port(); progStatus.FSK_SHARED = FSK_USES_FSK;} xywh {578 73 80 23} code0 {o->value(progStatus.FSK_CONNECTED);} } Fl_Check_Button btn_fskioCAT { label {Use CAT} callback {if (o->value()) { progStatus.FSK_SHARED = FSK_USES_CAT; btn_fskioAUX->value(0); btn_fskioAUX->deactivate(); btn_fskioSEP->value(0); btn_fskioSEP->deactivate(); btn_fskioCONNECT->value(0); btn_fskioCONNECT->deactivate(); btn_fskioSHARED->value(0); btn_fskioSHARED->deactivate(); select_fskioPORT->value("NONE"); select_fskioPORT->deactivate(); }else { progStatus.FSK_SHARED = FSK_USES_FSK; btn_fskioCONNECT->activate(); btn_fskioAUX->activate(); btn_fskioCAT->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); select_fskioPORT->activate(); }} tooltip {Use DTR/RTS on CAT serial port} xywh {87 15 23 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.FSK_SHARED == FSK_USES_CAT);} } Fl_Check_Button btn_fskioAUX { label {Use AUX} callback {if (o->value()) { progStatus.FSK_SHARED = FSK_USES_AUX; btn_fskioCAT->value(0); btn_fskioCAT->deactivate(); btn_fskioSEP->value(0); btn_fskioSEP->deactivate(); btn_fskioCONNECT->value(0); btn_fskioCONNECT->deactivate(); btn_fskioSHARED->value(0); btn_fskioSHARED->deactivate(); select_fskioPORT->value("NONE"); select_fskioPORT->deactivate(); }else { progStatus.FSK_SHARED = FSK_USES_FSK; btn_fskioCONNECT->activate(); btn_fskioAUX->activate(); btn_fskioCAT->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); select_fskioPORT->activate(); }} tooltip {Use DTR/RTS on Auxiliary serial port} xywh {88 46 23 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.FSK_SHARED == FSK_USES_AUX);} } Fl_Check_Button btn_fskioSEP { label {Use SEP} callback {if (o->value()) { progStatus.FSK_SHARED = FSK_USES_SEP; btn_fskioAUX->value(0); btn_fskioAUX->deactivate(); btn_fskioCAT->value(0); btn_fskioCAT->deactivate(); btn_fskioCONNECT->value(0); btn_fskioCONNECT->deactivate(); btn_fskioSHARED->value(0); btn_fskioSHARED->deactivate(); select_fskioPORT->value("NONE"); select_fskioPORT->deactivate(); }else { progStatus.FSK_SHARED = FSK_USES_FSK; btn_fskioCONNECT->activate(); btn_fskioAUX->activate(); btn_fskioCAT->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); select_fskioPORT->activate(); }} tooltip {Use DTR/RTS Separate serial port} xywh {212 15 23 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.FSK_SHARED == FSK_USES_SEP);} } Fl_Check_Button btn_fskioSHARED { label {CWIO shared} callback {if (o->value()) { progStatus.FSK_SHARED = FSK_USES_CWIO; btn_fskioAUX->value(0); btn_fskioAUX->deactivate(); btn_fskioCAT->value(0); btn_fskioCAT->deactivate(); btn_fskioSEP->value(0); btn_fskioSEP->deactivate(); btn_fskioCONNECT->value(0); btn_fskioCONNECT->deactivate(); select_fskioPORT->value("NONE"); select_fskioPORT->deactivate(); }else { progStatus.FSK_SHARED = FSK_USES_FSK; btn_fskioCONNECT->activate(); btn_fskioAUX->activate(); btn_fskioCAT->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); select_fskioPORT->activate(); }} tooltip {Use DTR/RTS fskio shared port} xywh {212 46 23 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.FSK_SHARED == FSK_USES_CWIO);} } Fl_Check_Button btn_fskioINVERTED { label Inverted callback {progStatus.FSK_INVERTED = o->value();} tooltip {DTR/RTS signaling is inverted (-) keying} xywh {339 15 23 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.FSK_INVERTED);} } Fl_Check_Button btn_fskioSTOPBITS { label {1.5 stop bits} callback {progStatus.FSK_STOPBITS = o->value();} tooltip {Enabled - 1.5 stop bits Disable - 2 stop bits} xywh {339 46 23 15} down_box DOWN_BOX align 4 code0 {o->value(progStatus.FSK_STOPBITS);} } Fl_Group listbox_fskioKEYLINE { label {FSK Keyline} callback {progStatus.FSK_KEYLINE = o->index();} tooltip {Select either DTR or RTS for keyline} xywh {593 41 65 24} box DOWN_BOX color 7 align 4 code0 {\#include "combo.h"} code1 {o->add("None|RTS|DTR");} code2 {o->index(progStatus.FSK_KEYLINE);} class Fl_ListBox } {} Fl_Spinner cntr_fskioPTT { label {PTT delay} callback {progStatus.FSK_PTT = o->value();} tooltip {PTT delay before keydown 0 = Break-in} xywh {608 10 50 25} minimum 0 value 0 code0 {o->value(progStatus.FSK_PTT);} } Fl_Counter fsk_idles { label {Start Idles} callback {progStatus.fsk_idles = o->value();} tooltip {Transmit \# after PTT on} xywh {400 11 80 21} type Simple minimum 0 maximum 20 step 1 code0 {o->value(progStatus.fsk_idles);} } } } } Function {new_fsklogbook_dialog()} {open } { Fl_Window {} { label {Flrig RTTY Log} open xywh {610 351 670 284} type Double visible } { Fl_Menu_Bar FSKlog_menubar {open xywh {0 0 670 20} } { Submenu FSKlog_menu { label Files open xywh {0 0 70 21} } { MenuItem fsklog_fsk_menu_open { label Open callback {fsklog_open();} xywh {0 0 36 21} } MenuItem fsklog_fsk_menu_new { label New callback {fsklog_new();} xywh {0 0 36 21} } MenuItem fsklog_fsk_menu_save { label Save callback {fsklog_save();} xywh {0 0 36 21} } MenuItem fsklog_fsk_menu_save_as { label {Save As} callback {fsklog_save_as();} xywh {0 0 36 21} divider } MenuItem fsklog_fsk_menu_export_adif { label {Export ADIF} callback {fsklog_export_adif();} xywh {0 0 36 21} } MenuItem fsklog_fsk_menu_import_adif { label {Import ADIF} callback {fsklog_import_adif();} xywh {0 0 36 21} } } Submenu {} { label Config open xywh {0 0 70 21} } { MenuItem fsklog_fsk_menu_dupcheck { label {Dup check} callback {//fsklog.dupcheck = o->value();} xywh {0 0 36 21} type Toggle } MenuItem fsklog_fsk_menu_leading_zeros { label {Leading zeros} callback {//fsklog.dupcheck = o->value();} xywh {0 0 36 21} type Toggle } MenuItem fsklog_fsk_menu_cut_numbers { label {Cut numbers} callback {//fsklog.cut_nbrs = o->value();} xywh {0 0 36 21} type Toggle } } } Fl_Group {} {open xywh {2 22 668 29} box ENGRAVED_FRAME } { Fl_Output txt_fsklog_file { label {Log File:} callback {//progStatus.fsklogfile_name = o->value();} xywh {75 26 590 22} code0 {//->value(progStatus.fsklogfile_name);} } } Fl_Group fsk_grp_qso_data {open xywh {2 52 560 30} box ENGRAVED_BOX } { Fl_Input fsk_op_freq { label Freq tooltip Frequency xywh {43 56 120 22} class Fl_Input2 } Fl_Button btn_fsklog_clear_qso { label Clear callback {fsklog_clear_qso();} tooltip {Clear fsklog entries} xywh {380 56 60 22} } Fl_Button btn_fsklog_save_qso { label Save callback {fsklog_save_qso();} tooltip {Save QSO data to fsklog file} xywh {440 56 60 22} } Fl_Button btn_fsklog_edit_entry { label Edit callback {fsklog_edit_entry();} tooltip {Delete Entry} xywh {501 56 60 22} } Fl_Button btn_fsklog_delete_entry { label Delete callback {fsklog_delete_entry();} tooltip {Delete Entry} xywh {492 56 60 22} hide } Fl_Input fsk_date { label Dt tooltip {QSO call Query flfsklog if connected} xywh {193 56 85 22} class Fl_Input2 } Fl_Input fsk_time { label {Tm:} xywh {313 56 55 22} class Fl_Input2 } } Fl_Group {} {open xywh {565 52 103 62} box ENGRAVED_BOX } { Fl_Input fsk_rst_out { label RSTout tooltip {Send RST} xywh {622 56 40 22} class Fl_Input2 } Fl_Input fsk_rst_in { label {RST in} tooltip {Send RST} xywh {624 87 40 22} class Fl_Input2 } } Fl_Group {} {open xywh {2 84 560 30} box ENGRAVED_FRAME } { Fl_Input fsk_xchg_in { label Xch tooltip {Input exchange} xywh {313 87 150 22} class Fl_Input2 } Fl_Counter cntr_fsk_log_nbr { label {\#:} callback {progStatus.fsk_log_nbr = o->value();} tooltip {QSO number (out)} xywh {491 87 70 22} type Simple align 4 step 1 code0 {o->value(progStatus.fsk_log_nbr);} } Fl_Input fsk_op_name { label Nm xywh {193 88 85 22} class Fl_Input2 } Fl_Input fsk_op_call { label Call tooltip {QSO call Query flfsklog if connected} xywh {43 88 120 22} class Fl_Input2 } } Fl_Group {} {open xywh {2 113 674 170} } { Fl_Group {} {open xywh {2 116 668 22} } { Fl_Button btn_fsk_datetime { label Date callback {fsklog_sort_by_datetime();} xywh {2 116 80 22} box BORDER_BOX color 51 } Fl_Button btn_fsk_time { label Time callback {fsklog_sort_by_datetime();} xywh {81 116 45 22} box BORDER_BOX color 51 } Fl_Button btn_fsk_freq { label Freq callback {fsklog_sort_by_freq();} xywh {126 116 70 22} box BORDER_BOX color 51 } Fl_Button btn_fsk_call { label Call callback {fsklog_sort_by_call();} xywh {196 116 75 22} box BORDER_BOX color 51 } Fl_Button btn_fsk_name { label Name xywh {271 116 75 22} box BORDER_BOX color 51 } Fl_Button btn_fsk_in { label In xywh {346 116 40 22} box BORDER_BOX color 51 } Fl_Button btn_fsk_out { label Out xywh {386 116 40 22} box BORDER_BOX color 51 } Fl_Button btn_fsk_sent_nbr { label Nbr callback {fsklog_sort_by_nbr();} xywh {426 116 55 22} box BORDER_BOX color 51 } Fl_Button btn_fsk_exchange { label Exchange xywh {481 116 185 22} box BORDER_BOX color 51 resizable } } Fl_Browser brwsr_fsklog_entries { callback {if (!fsklog_editing) fsklog_edit_entry();} xywh {2 140 666 141} type Hold selection_color 230 resizable code0 {static int widths[]={80,45,70,75,75,40,40,55,0};} code1 {o->column_widths(widths);} code2 {o->column_char('\\t');} code3 {o->has_scrollbar(Fl_Browser_::VERTICAL_ALWAYS);} } } } } flrig-2.0.04/src/fskio/fsk.cxx0000664000175000017500000003001614502041135013027 00000000000000 // ---------------------------------------------------------------------------- // fsk.cxx -- FSK signal generator // // Copyright (C) 2021 // Dave Freese, W1HKJ // // This file is part of flrig. // // flrig is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with fldigi. If not, see . // ---------------------------------------------------------------------------- #include "config.h" #include "fsk.h" #include "fskioUI.h" #include "serial.h" #include "support.h" #include "status.h" #include "util.h" extern int errno; char FSK::letters[32] = { '\0', 'E', '\n', 'A', ' ', 'S', 'I', 'U', '\r', 'D', 'R', 'J', 'N', 'F', 'C', 'K', 'T', 'Z', 'L', 'W', 'H', 'Y', 'P', 'Q', 'O', 'B', 'G', ' ', 'M', 'X', 'V', ' ' }; /* * U.S. version of the figures case. */ char FSK::figures[32] = { '\0', '3', '\n', '-', ' ', '\a', '8', '7', '\r', '$', '4', '\'', ',', '!', ':', '(', '5', '"', ')', '2', '#', '6', '0', '1', '9', '?', '&', ' ', '.', '/', ';', ' ' }; /* static const char * FSK::ascii[256] = { "", "", "", "", "", "", "", "", "", "", "\n", "", "", "", "", "", "", "", "", "", "", "", "", "", "", " ", "", "", "", "", "", "", " ", "!", "\"","#", "$", "%", "&", "\'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\","]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "", "<128>", "<129>", "<130>", "<131>", "<132>", "<133>", "<134>", "<135>", "<136>", "<137>", "<138>", "<139>", "<140>", "<141>", "<142>", "<143>", "<144>", "<145>", "<146>", "<147>", "<148>", "<149>", "<150>", "<151>", "<152>", "<153>", "<154>", "<155>", "<156>", "<157>", "<158>", "<159>", "<160>", "<161>", "<162>", "<163>", "<164>", "<165>", "<166>", "<167>", "<168>", "<169>", "<170>", "<171>", "<172>", "<173>", "<174>", "<175>", "<176>", "<177>", "<178>", "<179>", "<180>", "<181>", "<182>", "<183>", "<184>", "<185>", "<186>", "<187>", "<188>", "<189>", "<190>", "<191>", "<192>", "<193>", "<194>", "<195>", "<196>", "<197>", "<198>", "<199>", "<200>", "<201>", "<202>", "<203>", "<204>", "<205>", "<206>", "<207>", "<208>", "<209>", "<210>", "<211>", "<212>", "<213>", "<214>", "<215>", "<216>", "<217>", "<218>", "<219>", "<220>", "<221>", "<222>", "<223>", "<224>", "<225>", "<226>", "<227>", "<228>", "<229>", "<230>", "<231>", "<232>", "<233>", "<234>", "<235>", "<236>", "<237>", "<238>", "<239>", "<240>", "<241>", "<242>", "<243>", "<244>", "<245>", "<246>", "<247>", "<248>", "<249>", "<250>", "<251>", "<252>", "<253>", "<254>", "<255>" }; */ pthread_mutex_t fsk_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t fskio_text_mutex = PTHREAD_MUTEX_INITIALIZER; Cserial *FSK_serial = (Cserial *)0; FSK *fsk_instance = (FSK *)0; static std::string FSK_new_text; FSK::FSK() { str_buff.clear(); start_bits = 0; stop_bits = 0; chr_bits = 0; chr_out = 0; shift = 0; shift_state = FSK_FIGURES; _shift_on_space = false; idles = progStatus.fsk_idles; BITLEN = 0.022; init_fsk_thread(); shared_port = false; } FSK::~FSK() { exit_fsk_thread(); if (shared_port) return; if (FSK_serial) FSK_serial->ClosePort(); } int FSK_open_port() { if (progStatus.FSK_SHARED != FSK_USES_FSK) return 0; if (!FSK_serial) return 0; FSK_serial->Device(progStatus.FSK_PORT); FSK_serial->OpenPort(); return (FSK_serial->IsOpen()); } void FSK_close_port() { if (!FSK_serial) return; FSK_serial->ClosePort(); } void FSK_reset_port() { } void FSK::fsk_shares_port(Cserial *shared_device) { shared_port = true; // fsk_serial = shared_device; } void update_fsk_txt_to_send(void *v) { FSK *fsk = (FSK *)v; FSK_txt_to_send->value(fsk->str_buff.c_str()); } void btn_fskioSEND_ON(void *v) { btn_fskioSEND->value(1); } void btn_fskioSEND_OFF(void *v) { btn_fskioSEND->value(0); } bool FSK::sending() { { guard_lock lck(&fskio_text_mutex); if (!FSK_new_text.empty()) { str_buff.append(FSK_new_text); FSK_new_text.clear(); } } if (str_buff[0] == '[') { str_buff.erase(0,1); Fl::awake(update_fsk_txt_to_send, this); Fl::awake(btn_fskioSEND_ON, this); FSK_send_text(true); idles = progStatus.fsk_idles; return true; } else if (str_buff[0] == ']') { str_buff.clear(); Fl::awake(update_fsk_txt_to_send, this); Fl::awake(btn_fskioSEND_OFF, this); FSK_send_text(false); return false; } return btn_fskioSEND->value(); } void FSK::fsk_out (bool state) { Cserial *serial = (Cserial *)0; switch (progStatus.FSK_SHARED) { default : break; case FSK_USES_FSK: serial = FSK_serial; break; case FSK_USES_CAT: serial = RigSerial; break; case FSK_USES_AUX: serial = AuxSerial; break; case FSK_USES_SEP: serial = SepSerial; break; case FSK_USES_CWIO: serial = cwio_serial; break; } if (!serial) return; if (progStatus.FSK_INVERTED) state = !state; switch (progStatus.FSK_KEYLINE) { case 1: serial->setRTS(state); break; case 2: serial->setDTR(state); break; default: break; } } int FSK::baudot_enc(int data) { data &= 0xFF; int i; if (islower(data)) data = toupper(data); if (data == ' ') // always force space to be a LETTERS char return FSK_LETTERS | 4; for (i = 0; i < 32; i++) { if (data == letters[i]) { return (i | FSK_LETTERS); } if (data == figures[i]) { return (i | FSK_FIGURES); } } return shift_state | 4; } // return current tick time in seconds double FSK::now() { static struct timeval t1; gettimeofday(&t1, NULL); return t1.tv_sec + t1.tv_usec / 1e6; } int FSK::sleep (double sleep_time) { struct timespec tv; double start_at = now(); double end_at = start_at + sleep_time; double delay = sleep_time - 0.005; tv.tv_sec = (time_t) delay; tv.tv_nsec = (long) ((delay - tv.tv_sec) * 1e+9); int rval = 0; #ifdef __WIN32__ timeBeginPeriod(1); end_at -= 0.0005; #endif while (1) { rval = nanosleep (&tv, &tv); if (rval == 0) break; else if (errno == EINTR) continue; else return rval; } while (now() < end_at); #ifdef __WIN32__ timeEndPeriod(1); #endif return 0; } void FSK::send_baudot(int ch) { double t1; if (ch == LTRS) shift_state = FSK_LETTERS; else if (ch == FIGS) shift_state = FSK_FIGURES; t1 = now(); fsk_out(FSK_SPACE); sleep(BITLEN - (now() - t1)); t1 = now(); fsk_out((ch & 0x01) == 0x01 ? FSK_MARK : FSK_SPACE); sleep(BITLEN - (now() - t1)); t1 = now(); fsk_out((ch & 0x02) == 0x02 ? FSK_MARK : FSK_SPACE); sleep(BITLEN - (now() - t1)); t1 = now(); fsk_out((ch & 0x04) == 0x04 ? FSK_MARK : FSK_SPACE); sleep(BITLEN - (now() - t1)); t1 = now(); fsk_out((ch & 0x08) == 0x08 ? FSK_MARK : FSK_SPACE); sleep(BITLEN - (now() - t1)); t1 = now(); fsk_out((ch & 0x10) == 0x10 ? FSK_MARK : FSK_SPACE); sleep(BITLEN - (now() - t1)); t1 = now(); fsk_out(FSK_MARK); sleep(BITLEN * (progStatus.FSK_STOPBITS ? 1.5 : 2.0) - (now() - t1) ); } int FSK::callback_method() { if (sending()) { if (str_buff.empty() || idles) { send_baudot(LTRS); if (idles) idles--; } else { chr_out = baudot_enc(str_buff[0]); if ((chr_out & 0x300) != shift_state) { shift_state = chr_out & 0x300; if (shift_state == FSK_LETTERS) { send_baudot(LTRS); } else { send_baudot(FIGS); } } str_buff.erase(0,1); Fl::awake(update_fsk_txt_to_send, this); send_baudot(chr_out & 0x1F); } } else MilliSleep(BITLEN*100L); return 0; } void *fsk_loop(void *data) { FSK *fsk = (FSK *)data; while (1) { fsk->callback_method(); { guard_lock tlock (&fsk_mutex); if (fsk->fsk_loop_terminate) goto _exit; } } _exit: return NULL; } int FSK::init_fsk_thread() { fsk_loop_terminate = false; if(pthread_mutex_init(&fsk_mutex, NULL)) { LOG_ERROR("FSK pthread_mutex_init failed"); return 0; } if (pthread_create(&fsk_thread, NULL, fsk_loop, this)) { LOG_ERROR("FSK timer thread create failed"); return 0; } return 1; } void FSK::exit_fsk_thread() { { guard_lock tlock (&fsk_mutex); fsk_loop_terminate = true; MilliSleep(50); } pthread_join(fsk_thread, NULL); fsk_loop_terminate = false; } int FSK_start_thread() { if (fsk_instance) return 0; try { fsk_instance = new FSK; } catch (const char *error) { std::cerr << error << '\n'; debug::stop(); return 1; } return 0; } void FSK_stop_thread() { } void FSK_add(std::string txt) { guard_lock lck(&fskio_text_mutex); FSK_new_text.append(txt); } int FSK_process = 0; // RX state void FSK_send_text(bool state) // state == 1 (xmt), 0 (rcv) { if (FSK_process == state) return; FSK_process = state; doPTT(FSK_process); } void FSK_clear_text() { guard_lock lck(&fskio_text_mutex); if (fsk_instance) fsk_instance->str_buff.clear(); FSK_txt_to_send->value(""); } void FSK_msg_cb(int n) { } void FSK_label_cb(int n) { } void FSK_exec_msg(int n) { if (!FSK_editor) FSK_editor = FSK_make_message_editor(); if ((Fl::event_state() & FL_CTRL) == FL_CTRL) { for (int n = 0; n < 12; n++) { FSK_edit_label[n]->value(progStatus.FSK_labels[n].c_str()); FSK_edit_msg[n]->value(progStatus.FSK_msgs[n].c_str()); } FSK_editor->show(); return; } FSK_add(progStatus.FSK_msgs[n]); } void FSK_cancel_edit() { FSK_editor->hide(); } void FSK_apply_edit() { for (int n = 0; n < 12; n++) { progStatus.FSK_labels[n] = FSK_edit_label[n]->value(); progStatus.FSK_msgs[n] = FSK_edit_msg[n]->value(); FSK_btn_msg[n]->label(progStatus.FSK_labels[n].c_str()); FSK_btn_msg[n]->redraw_label(); } } void FSK_done_edit() { FSK_editor->hide(); } // Alt-P pause transmit // Alt-S start sending text // F1 - F12 same as function-button mouse press void FSK_control_function_keys() { int key = Fl::event_key(); int state = Fl::event_state(); if (state & FL_ALT) { if (key == 'p') { btn_fskioSEND->value(0); btn_fskioSEND->redraw(); FSK_send_text(false); return; } if (key == 's') { btn_fskioSEND->value(1); btn_fskioSEND->redraw(); FSK_send_text(true); return; } if (key == 'c') { FSK_txt_to_send->value(""); return; } } if ((key >= FL_F) && (key <= FL_F_Last)) { FSK_exec_msg( key - FL_F - 1); } } void FSK_open_config() { if (!FSK_configure) FSK_configure = fskio_config_dialog(); switch ( progStatus.FSK_SHARED) { default: case FSK_USES_FSK: select_fskioPORT->activate(); btn_fskioCONNECT->activate(); btn_fskioCAT->activate(); btn_fskioAUX->activate(); btn_fskioSEP->activate(); btn_fskioSHARED->activate(); break; case FSK_USES_AUX: select_fskioPORT->deactivate(); btn_fskioCONNECT->deactivate(); btn_fskioCAT->deactivate(); btn_fskioAUX->activate(); btn_fskioSEP->deactivate(); btn_fskioSHARED->deactivate(); break; case FSK_USES_CAT: select_fskioPORT->deactivate(); btn_fskioCONNECT->deactivate(); btn_fskioCAT->activate(); btn_fskioAUX->deactivate(); btn_fskioSEP->deactivate(); btn_fskioSHARED->deactivate(); break; case FSK_USES_SEP: select_fskioPORT->deactivate(); btn_fskioCONNECT->deactivate(); btn_fskioCAT->deactivate(); btn_fskioAUX->deactivate(); btn_fskioSEP->activate(); btn_fskioSHARED->deactivate(); break; case FSK_USES_CWIO: select_fskioPORT->deactivate(); btn_fskioCONNECT->deactivate(); btn_fskioCAT->deactivate(); btn_fskioAUX->deactivate(); btn_fskioSEP->deactivate(); btn_fskioSHARED->activate(); break; } FSK_configure->show(); } flrig-2.0.04/src/wc/0000775000175000017500000000000014511461606011107 500000000000000flrig-2.0.04/src/wc/tci_io.cxx0000664000175000017500000001770214502041135013017 00000000000000// --------------------------------------------------------------------- // // tci_io.cxx, a part of flrig // // Copyright (C) 2022 // Dave Freese, W1HKJ // // This library is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more detailrx. // // You should have received a copy of the GNU General Public License // along with the program; if not, write to the // // Free Software Foundation, Inc. // 51 Franklin Street, Fifth Floor // Boston, MA 02110-1301 USA. // // --------------------------------------------------------------------- #include "tci_io.h" #include #include #include #include #include //#define TCI_DEBUG #if 0 #include #include //---------------------------------------------------------------------- // utility functions & classes //---------------------------------------------------------------------- void MilliSleep(long msecs) { struct timespec tv; tv.tv_sec = msecs / 1000; tv.tv_nsec = (msecs - tv.tv_sec * 1000) * 1000000L; nanosleep(&tv, NULL); } class guard_lock { public: guard_lock(pthread_mutex_t* m) { mutex = m; pthread_mutex_lock(mutex); } ~guard_lock(void) { pthread_mutex_unlock(mutex); } private: pthread_mutex_t* mutex; }; //---------------------------------------------------------------------- #else #include "util.h" #include "trace.h" #include "threads.h" #endif TCI_VALS slice_0, slice_1; void print_vals(TCI_VALS &slice) { std::cout << "A: " << slice.A.freq << ", " << slice.A.bw << ", " << slice.A.mod << ", " << slice.A.smeter << std::endl; std::cout << "B: " << slice.B.freq << ", " << slice.B.bw << ", " << slice.B.mod << ", " << slice.B.smeter << std::endl; std::cout << "Volume: " << slice.vol << std::endl; std::cout << "PTT: " << slice.ptt << std::endl; std::cout << "Power: " << slice.pwr << std::endl; } using WSclient::WebSocket; void handle_message(const std::string & message) { int rxnbr, vfo, ival; float fval; char szstr[50]; std::string str; std::string rx = message; size_t p = 0; for (size_t n = 0; n < rx.length(); n++) rx[n] = toupper(rx[n] & 0xFF); #ifdef TCI_DEBUG std::cout << "R: " << rx << std::endl; #endif if ((p = rx.find("RX_SMETER:")) != std::string::npos) { // smeter reading sscanf(rx.substr(p).c_str(), "RX_SMETER:%d,%d,%d;", &rxnbr, &vfo, &ival); if (rxnbr == 0) { if (vfo == 0) slice_0.A.smeter = ival; else slice_0.B.smeter = ival; } else { if (vfo == 0) slice_1.A.smeter = ival; else slice_1.B.smeter = ival; } } else { tci_trace(2, "PARSE:", rx.c_str()); if ((p = rx.find("VFO:")) != std::string::npos) { // vfo:0,0,7032050; sscanf(rx.substr(p).c_str(), "VFO:%d,%d,%d", &rxnbr, &vfo, &ival); if (rxnbr == 0) { if (vfo == 0) slice_0.A.freq = ival; else slice_0.B.freq = ival; } else { if (vfo == 0) slice_1.A.freq = ival; else slice_1.B.freq = ival; } } else if ((p = rx.find("DDS:")) != std::string::npos) { // dds:1,14070000; sscanf(rx.substr(p).c_str(), "DDS:%d,%d", &rxnbr, &ival); if (rxnbr == 0) { slice_0.dds = ival; } else { slice_1.dds = ival; } } else if ((p = rx.find("RX_FILTER_BAND:")) != std::string::npos) { // rx_filter_band:0,-600,600; int slice; sscanf(rx.substr(p).c_str(), "RX_FILTER_BAND:%d,%s", &slice, szstr); if (slice == 0) {slice_0.A.bw = slice_0.B.bw = szstr; } else {slice_1.A.bw = slice_1.B.bw = szstr; } } else if ((p = rx.find("MODULATION:")) != std::string::npos) { // modulation:0,cw; int slice = 0; sscanf(rx.substr(p).c_str(), "MODULATION:%d,%s", &slice, szstr); if (slice == 0) { slice_0.A.mod = slice_0.B.mod = szstr; } else { slice_1.A.mod = slice_1.B.mod = szstr; } } else if ((p = rx.find("TRX:")) != std::string::npos) { sscanf(rx.substr(p).c_str(), "TRX:%d,%s", &rxnbr, szstr); str = szstr; if (rxnbr == 0) { slice_0.ptt = (str == "TRUE;"); } else { slice_1.ptt = (str == "TRUE;"); } } else if ((p = rx.find("SPLIT_ENABLE:")) != std::string::npos) { // split_enable:0,false; sscanf(rx.substr(p).c_str(), "SPLIT_ENABLE:%d,%s", &rxnbr, szstr); str = szstr; if (rxnbr == 0) { slice_0.split = (str == "TRUE;"); } else { slice_1.split = (str == "TRUE;"); } } else if ((p = rx.find("VOLUME:")) != std::string::npos) { // volume:-16; sscanf(rx.substr(p).c_str(), "VOLUME:%d", &ival); slice_0.vol = ival; } else if ((p = rx.find("SQL_ENABLE:")) != std::string::npos) { // sql_enable:1,false; sscanf(rx.substr(p).c_str(), "SQL_ENABLE:%d,%s", &rxnbr, szstr); str = szstr; if (rxnbr == 0) { slice_0.sql = (str == "TRUE;"); } else slice_1.sql = (str == "TRUE;"); } else if ((p = rx.find("SQL_LEVEL:")) != std::string::npos) { // sql_level:0,-79; sscanf(rx.substr(p).c_str(), "SQL_LEVEL:%d,%d", &rxnbr, &ival); if (rxnbr == 0) { slice_0.sql_level = ival; } else { slice_1.sql_level = ival; } } else if ((p = rx.find("DRIVE:")) != std::string::npos) { // drive:100; sscanf(rx.substr(p).c_str(), "DRIVE:%d", &ival); slice_0.pwr = ival; } else if ((p = rx.find("TUNE:")) != std::string::npos) { // tune:0,false; sscanf(rx.substr(p).c_str(), "TUNE:%d,%s", &rxnbr, szstr); str = szstr; if (rxnbr == 0) { slice_0.tune = (str == "TRUE;"); } else { slice_1.tune = (str == "TRUE;"); } } else if ((p = rx.find("TX_POWER:")) != std::string::npos) { // tx_power:4.3; sscanf(rx.substr(p).c_str(), "TX_POWER:%f", &fval); slice_0.tx_power = fval; } else if ((p = rx.find("TX_SWR:")) != std::string::npos) { // tx_swr:1.3; sscanf(rx.substr(p).c_str(), "TX_SWR:%f", &fval); slice_0.tx_swr = fval; } } } static WebSocket::pointer ws = (WebSocket::pointer)0; static bool tci_run = true; static std::string send_txt = ""; static pthread_mutex_t send_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t run_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_t *receiver = (pthread_t *)0; static std::list *send_list = (std::list *)0; void *tci_loop(void *) { while (tci_run && tci_running()) { if (!send_list->empty()) { guard_lock S(&send_mutex); while (!send_list->empty()) { send_txt = send_list->front(); send_list->pop_front(); if (send_txt.find("rx_smeter") == std::string::npos) tci_trace(2, "SEND:", send_txt.c_str()); ws->send(send_txt); MilliSleep(1); } } ws->poll(); ws->dispatch(handle_message); MilliSleep(5); } return NULL; } void tci_open(std::string address, std::string port) { std::string url; url.assign("ws://").append(address).append(":").append(port); if (ws) tci_close(); ws = WebSocket::from_url(url); if (ws && (ws->getReadyState() != WebSocket::CLOSED)) { if (!send_list) send_list = new std::list; send_list->clear(); tci_run = true; receiver = new pthread_t; if (pthread_create(receiver, NULL, tci_loop, NULL) < 0) { perror("pthread_create"); exit(EXIT_FAILURE); } } else delete ws; } void tci_close() { guard_lock R(&run_mutex); if (ws) { tci_run = false; pthread_join(*receiver, NULL); delete receiver; receiver = (pthread_t *)0; delete ws; ws = (WebSocket::pointer)0; } delete send_list; send_list = (std::list *)0; } void tci_send(std::string txt) { guard_lock R(&run_mutex); if (!send_list) return; { guard_lock S(&send_mutex); send_list->push_back(txt); if (txt.find("rx_smeter") == std::string::npos) tci_trace(2, "PUSH:", txt.c_str()); } } bool tci_running() { if (!ws) return false; return (ws->getReadyState() != WebSocket::CLOSED); } flrig-2.0.04/src/wc/WSclient.cxx0000664000175000017500000004452614475136651013326 00000000000000// --------------------------------------------------------------------- // // WSclient.cxx, a part of flrig // // Copyright (C) 2022 // Dave Freese, W1HKJ // // This code is derived from: // https://github.com/dhbaird/easywsclient // // This library is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more detailrx. // // You should have received a copy of the GNU General Public License // along with the program; if not, write to the // // Free Software Foundation, Inc. // 51 Franklin Street, Fifth Floor // Boston, MA 02110-1301 USA. // // --------------------------------------------------------------------- #ifdef _WIN32 #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS // _CRT_SECURE_NO_WARNINGS for sscanf errors in MSVC2013 Express #endif #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include #include #include #include #include #include #ifndef _SSIZE_T_DEFINED typedef int ssize_t; #define _SSIZE_T_DEFINED #endif #ifndef _SOCKET_T_DEFINED typedef SOCKET socket_t; #define _SOCKET_T_DEFINED #endif #ifndef snprintf #define snprintf _snprintf_s #endif #include #define socketerrno WSAGetLastError() #define SOCKET_EAGAIN_EINPROGRESS WSAEINPROGRESS #define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK #else #include #include #include #include #include #include #include #include #include #include #include #include #ifndef _SOCKET_T_DEFINED typedef int socket_t; #define _SOCKET_T_DEFINED #endif #ifndef INVALID_SOCKET #define INVALID_SOCKET (-1) #endif #ifndef SOCKET_ERROR #define SOCKET_ERROR (-1) #endif #define closesocket(s) ::close(s) #include #define socketerrno errno #define SOCKET_EAGAIN_EINPROGRESS EAGAIN #define SOCKET_EWOULDBLOCK EWOULDBLOCK #endif #include #include #include "WSclient.h" using WSclient::Callback_Imp; using WSclient::BytesCallback_Imp; namespace { // private module-only namespace socket_t hostname_connect(const std::string& hostname, int port) { struct addrinfo hints; struct addrinfo *result; struct addrinfo *p; int ret; socket_t sockfd = INVALID_SOCKET; char sport[16]; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; snprintf(sport, 16, "%d", port); if ((ret = getaddrinfo(hostname.c_str(), sport, &hints, &result)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret)); return 1; } for(p = result; p != NULL; p = p->ai_next) { sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol); if (sockfd == INVALID_SOCKET) { continue; } if (connect(sockfd, p->ai_addr, p->ai_addrlen) != SOCKET_ERROR) { break; } closesocket(sockfd); sockfd = INVALID_SOCKET; } freeaddrinfo(result); return sockfd; } class _DummyWebSocket : public WSclient::WebSocket { public: void poll(int timeout) { } void send(const std::string& message) { } void sendBinary(const std::string& message) { } void sendBinary(const std::vector& message) { } void sendPing() { } void close() { } readyStateValues getReadyState() const { return CLOSED; } void _dispatch(Callback_Imp & callable) { } void _dispatchBinary(BytesCallback_Imp& callable) { } }; class _RealWebSocket : public WSclient::WebSocket { public: // http://tools.ietf.org/html/rfc6455#section-5.2 Base Framing Protocol // // 0 1 2 3 // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 // +-+-+-+-+-------+-+-------------+-------------------------------+ // |F|R|R|R| opcode|M| Payload len | Extended payload length | // |I|S|S|S| (4) |A| (7) | (16/64) | // |N|V|V|V| |S| | (if payload len==126/127) | // | |1|2|3| |K| | | // +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + // | Extended payload length continued, if payload len == 127 | // + - - - - - - - - - - - - - - - +-------------------------------+ // | |Masking-key, if MASK set to 1 | // +-------------------------------+-------------------------------+ // | Masking-key (continued) | Payload Data | // +-------------------------------- - - - - - - - - - - - - - - - + // : Payload Data continued ... : // + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + // | Payload Data continued ... | // +---------------------------------------------------------------+ struct wsheader_type { unsigned header_size; bool fin; bool mask; enum opcode_type { CONTINUATION = 0x0, TEXT_FRAME = 0x1, BINARY_FRAME = 0x2, CLOSE = 8, PING = 9, PONG = 0xa, } opcode; int N0; uint64_t N; uint8_t masking_key[4]; }; std::vector rxbuf; std::vector txbuf; std::vector receivedData; socket_t sockfd; readyStateValues readyState; bool useMask; bool isRxBad; _RealWebSocket(socket_t sockfd, bool useMask) : sockfd(sockfd) , readyState(OPEN) , useMask(useMask) , isRxBad(false) { } readyStateValues getReadyState() const { return readyState; } void poll(int timeout) { // timeout in milliseconds if (readyState == CLOSED) { if (timeout > 0) { timeval tv = { timeout/1000, (timeout%1000) * 1000 }; select(0, NULL, NULL, NULL, &tv); } return; } if (timeout != 0) { fd_set rfds; fd_set wfds; timeval tv = { timeout/1000, (timeout%1000) * 1000 }; FD_ZERO(&rfds); FD_ZERO(&wfds); FD_SET(sockfd, &rfds); if (txbuf.size()) { FD_SET(sockfd, &wfds); } select(sockfd + 1, &rfds, &wfds, 0, timeout > 0 ? &tv : 0); } while (true) { // FD_ISSET(0, &rfds) will be true int N = rxbuf.size(); ssize_t ret; rxbuf.resize(N + 1500); ret = recv(sockfd, (char*)&rxbuf[0] + N, 1500, 0); if (false) { } else if (ret < 0 && (socketerrno == SOCKET_EWOULDBLOCK || socketerrno == SOCKET_EAGAIN_EINPROGRESS)) { rxbuf.resize(N); break; } else if (ret <= 0) { rxbuf.resize(N); closesocket(sockfd); readyState = CLOSED; fputs(ret < 0 ? "Connection error!\n" : "Connection closed!\n", stderr); break; } else { rxbuf.resize(N + ret); } } while (txbuf.size()) { int ret = ::send(sockfd, (char*)&txbuf[0], txbuf.size(), 0); if (false) { } // ?? else if (ret < 0 && (socketerrno == SOCKET_EWOULDBLOCK || socketerrno == SOCKET_EAGAIN_EINPROGRESS)) { break; } else if (ret <= 0) { closesocket(sockfd); readyState = CLOSED; fputs(ret < 0 ? "Connection error!\n" : "Connection closed!\n", stderr); break; } else { txbuf.erase(txbuf.begin(), txbuf.begin() + ret); } } if (!txbuf.size() && readyState == CLOSING) { closesocket(sockfd); readyState = CLOSED; } } // Callable must have signature: void(const std::string & message). // Should work with C functions, C++ functors, and C++11 std::function and // lambda: //template //void dispatch(Callable callable) virtual void _dispatch(Callback_Imp & callable) { struct CallbackAdapter : public BytesCallback_Imp // Adapt void(const std::string&) to void(const std::string&) { Callback_Imp& callable; CallbackAdapter(Callback_Imp& callable) : callable(callable) { } void operator()(const std::vector& message) { std::string stringMessage(message.begin(), message.end()); callable(stringMessage); } }; CallbackAdapter bytesCallback(callable); _dispatchBinary(bytesCallback); } virtual void _dispatchBinary(BytesCallback_Imp & callable) { // TODO: consider acquiring a lock on rxbuf... if (isRxBad) { return; } while (true) { wsheader_type ws; if (rxbuf.size() < 2) { return; /* Need at least 2 */ } const uint8_t * data = (uint8_t *) &rxbuf[0]; // peek, but don't consume ws.fin = (data[0] & 0x80) == 0x80; ws.opcode = (wsheader_type::opcode_type) (data[0] & 0x0f); ws.mask = (data[1] & 0x80) == 0x80; ws.N0 = (data[1] & 0x7f); ws.header_size = 2 + (ws.N0 == 126? 2 : 0) + (ws.N0 == 127? 8 : 0) + (ws.mask? 4 : 0); if (rxbuf.size() < ws.header_size) { return; /* Need: ws.header_size - rxbuf.size() */ } int i = 0; if (ws.N0 < 126) { ws.N = ws.N0; i = 2; } else if (ws.N0 == 126) { ws.N = 0; ws.N |= ((uint64_t) data[2]) << 8; ws.N |= ((uint64_t) data[3]) << 0; i = 4; } else if (ws.N0 == 127) { ws.N = 0; ws.N |= ((uint64_t) data[2]) << 56; ws.N |= ((uint64_t) data[3]) << 48; ws.N |= ((uint64_t) data[4]) << 40; ws.N |= ((uint64_t) data[5]) << 32; ws.N |= ((uint64_t) data[6]) << 24; ws.N |= ((uint64_t) data[7]) << 16; ws.N |= ((uint64_t) data[8]) << 8; ws.N |= ((uint64_t) data[9]) << 0; i = 10; if (ws.N & 0x8000000000000000ull) { // https://tools.ietf.org/html/rfc6455 writes the "the most // significant bit MUST be 0." // // We can't drop the frame, because (1) we don't we don't // know how much data to skip over to find the next header, // and (2) this would be an impractically long length, even // if it were valid. So just close() and return immediately // for now. isRxBad = true; fprintf(stderr, "ERROR: Frame has invalid frame length. Closing.\n"); close(); return; } } if (ws.mask) { ws.masking_key[0] = ((uint8_t) data[i+0]) << 0; ws.masking_key[1] = ((uint8_t) data[i+1]) << 0; ws.masking_key[2] = ((uint8_t) data[i+2]) << 0; ws.masking_key[3] = ((uint8_t) data[i+3]) << 0; } else { ws.masking_key[0] = 0; ws.masking_key[1] = 0; ws.masking_key[2] = 0; ws.masking_key[3] = 0; } // Note: The checks above should hopefully ensure this addition // cannot overflow: if (rxbuf.size() < ws.header_size+ws.N) { return; /* Need: ws.header_size+ws.N - rxbuf.size() */ } // We got a whole message, now do something with it: if (false) { } else if ( ws.opcode == wsheader_type::TEXT_FRAME || ws.opcode == wsheader_type::BINARY_FRAME || ws.opcode == wsheader_type::CONTINUATION ) { if (ws.mask) { for (size_t i = 0; i != ws.N; ++i) { rxbuf[i+ws.header_size] ^= ws.masking_key[i&0x3]; } } receivedData.insert(receivedData.end(), rxbuf.begin()+ws.header_size, rxbuf.begin()+ws.header_size+(size_t)ws.N);// just feed if (ws.fin) { callable((const std::vector) receivedData); receivedData.erase(receivedData.begin(), receivedData.end()); std::vector ().swap(receivedData);// free memory } } else if (ws.opcode == wsheader_type::PING) { if (ws.mask) { for (size_t i = 0; i != ws.N; ++i) { rxbuf[i+ws.header_size] ^= ws.masking_key[i&0x3]; } } std::string data(rxbuf.begin()+ws.header_size, rxbuf.begin()+ws.header_size+(size_t)ws.N); sendData(wsheader_type::PONG, data.size(), data.begin(), data.end()); } else if (ws.opcode == wsheader_type::PONG) { } else if (ws.opcode == wsheader_type::CLOSE) { close(); } else { fprintf(stderr, "ERROR: Got unexpected WebSocket message.\n"); close(); } rxbuf.erase(rxbuf.begin(), rxbuf.begin() + ws.header_size+(size_t)ws.N); } } void sendPing() { std::string empty; sendData(wsheader_type::PING, empty.size(), empty.begin(), empty.end()); } void send(const std::string& message) { sendData(wsheader_type::TEXT_FRAME, message.size(), message.begin(), message.end()); } void sendBinary(const std::string& message) { sendData(wsheader_type::BINARY_FRAME, message.size(), message.begin(), message.end()); } void sendBinary(const std::vector& message) { sendData(wsheader_type::BINARY_FRAME, message.size(), message.begin(), message.end()); } template void sendData(wsheader_type::opcode_type type, uint64_t message_size, Iterator message_begin, Iterator message_end) { // TODO: // Masking key should (must) be derived from a high quality random // number generator, to mitigate attacks on non-WebSocket friendly // middleware: const uint8_t masking_key[4] = { 0x12, 0x34, 0x56, 0x78 }; // TODO: consider acquiring a lock on txbuf... if (readyState == CLOSING || readyState == CLOSED) { return; } std::vector header; header.assign(2 + (message_size >= 126 ? 2 : 0) + (message_size >= 65536 ? 6 : 0) + (useMask ? 4 : 0), 0); header[0] = 0x80 | type; if (false) { } else if (message_size < 126) { header[1] = (message_size & 0xff) | (useMask ? 0x80 : 0); if (useMask) { header[2] = masking_key[0]; header[3] = masking_key[1]; header[4] = masking_key[2]; header[5] = masking_key[3]; } } else if (message_size < 65536) { header[1] = 126 | (useMask ? 0x80 : 0); header[2] = (message_size >> 8) & 0xff; header[3] = (message_size >> 0) & 0xff; if (useMask) { header[4] = masking_key[0]; header[5] = masking_key[1]; header[6] = masking_key[2]; header[7] = masking_key[3]; } } else { // TODO: run coverage testing here header[1] = 127 | (useMask ? 0x80 : 0); header[2] = (message_size >> 56) & 0xff; header[3] = (message_size >> 48) & 0xff; header[4] = (message_size >> 40) & 0xff; header[5] = (message_size >> 32) & 0xff; header[6] = (message_size >> 24) & 0xff; header[7] = (message_size >> 16) & 0xff; header[8] = (message_size >> 8) & 0xff; header[9] = (message_size >> 0) & 0xff; if (useMask) { header[10] = masking_key[0]; header[11] = masking_key[1]; header[12] = masking_key[2]; header[13] = masking_key[3]; } } // N.B. - txbuf will keep growing until it can be transmitted over the socket: txbuf.insert(txbuf.end(), header.begin(), header.end()); txbuf.insert(txbuf.end(), message_begin, message_end); if (useMask) { size_t message_offset = txbuf.size() - message_size; for (size_t i = 0; i != message_size; ++i) { txbuf[message_offset + i] ^= masking_key[i&0x3]; } } } void close() { if(readyState == CLOSING || readyState == CLOSED) { return; } readyState = CLOSING; uint8_t closeFrame[6] = {0x88, 0x80, 0x00, 0x00, 0x00, 0x00}; // last 4 bytes are a masking key std::vector header(closeFrame, closeFrame+6); txbuf.insert(txbuf.end(), header.begin(), header.end()); } }; WSclient::WebSocket::pointer from_url(const std::string& url, bool useMask, const std::string& origin) { char host[512]; int port; char path[512]; if (url.size() >= 512) { fprintf(stderr, "ERROR: url size limit exceeded: %s\n", url.c_str()); return NULL; } if (origin.size() >= 200) { fprintf(stderr, "ERROR: origin size limit exceeded: %s\n", origin.c_str()); return NULL; } if (false) { } else if (sscanf(url.c_str(), "ws://%[^:/]:%d/%s", host, &port, path) == 3) { } else if (sscanf(url.c_str(), "ws://%[^:/]/%s", host, path) == 2) { port = 80; } else if (sscanf(url.c_str(), "ws://%[^:/]:%d", host, &port) == 2) { path[0] = '\0'; } else if (sscanf(url.c_str(), "ws://%[^:/]", host) == 1) { port = 80; path[0] = '\0'; } else { fprintf(stderr, "ERROR: Could not parse WebSocket url: %s\n", url.c_str()); return NULL; } //fprintf(stderr, "WSclient: connecting: host=%s port=%d path=/%s\n", host, port, path); socket_t sockfd = hostname_connect(host, port); if (sockfd == INVALID_SOCKET) { fprintf(stderr, "Unable to connect to %s:%d\n", host, port); return NULL; } { // XXX: this should be done non-blocking, char line[1024]; int status; int i; snprintf(line, 1024, "GET /%s HTTP/1.1\r\n", path); ::send(sockfd, line, strlen(line), 0); if (port == 80) { snprintf(line, 1024, "Host: %s\r\n", host); ::send(sockfd, line, strlen(line), 0); } else { snprintf(line, 1024, "Host: %s:%d\r\n", host, port); ::send(sockfd, line, strlen(line), 0); } snprintf(line, 1024, "Upgrade: websocket\r\n"); ::send(sockfd, line, strlen(line), 0); snprintf(line, 1024, "Connection: Upgrade\r\n"); ::send(sockfd, line, strlen(line), 0); if (!origin.empty()) { snprintf(line, 1024, "Origin: %s\r\n", origin.c_str()); ::send(sockfd, line, strlen(line), 0); } snprintf(line, 1024, "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\r\n"); ::send(sockfd, line, strlen(line), 0); snprintf(line, 1024, "Sec-WebSocket-Version: 13\r\n"); ::send(sockfd, line, strlen(line), 0); snprintf(line, 1024, "\r\n"); ::send(sockfd, line, strlen(line), 0); for (i = 0; i < 2 || (i < 1023 && line[i-2] != '\r' && line[i-1] != '\n'); ++i) { if (recv(sockfd, line+i, 1, 0) == 0) { return NULL; } } line[i] = 0; if (i == 1023) { fprintf(stderr, "ERROR: Got invalid status line connecting to: %s\n", url.c_str()); return NULL; } if (sscanf(line, "HTTP/1.1 %d", &status) != 1 || status != 101) { fprintf(stderr, "ERROR: Got bad status connecting to %s: %s", url.c_str(), line); return NULL; } // TODO: verify response headers, while (true) { for (i = 0; i < 2 || (i < 1023 && line[i-2] != '\r' && line[i-1] != '\n'); ++i) { if (recv(sockfd, line+i, 1, 0) == 0) { return NULL; } } if (line[0] == '\r' && line[1] == '\n') { break; } } } int flag = 1; setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char*) &flag, sizeof(flag)); // Disable Nagle's algorithm #ifdef _WIN32 u_long on = 1; ioctlsocket(sockfd, FIONBIO, &on); #else fcntl(sockfd, F_SETFL, O_NONBLOCK); #endif //fprintf(stderr, "Connected to: %s\n", url.c_str()); return WSclient::WebSocket::pointer(new _RealWebSocket(sockfd, useMask)); } } // end of module-only namespace namespace WSclient { WebSocket::pointer WebSocket::create_dummy() { static pointer dummy = pointer(new _DummyWebSocket); return dummy; } WebSocket::pointer WebSocket::from_url(const std::string& url, const std::string& origin) { return ::from_url(url, true, origin); } WebSocket::pointer WebSocket::from_url_no_mask(const std::string& url, const std::string& origin) { return ::from_url(url, false, origin); } } // namespace WSclient flrig-2.0.04/src/cmedia/0000775000175000017500000000000014511461606011720 500000000000000flrig-2.0.04/src/cmedia/hid_win.cxx0000664000175000017500000005301414475136651014020 00000000000000/******************************************************* HIDAPI - Multi-Platform library for communication with HID devices. Alan Ott Signal 11 Software 8/22/2009 Copyright 2009, All Rights Reserved. C++ implementation Copyright 2021 David Freese, W1HKJ for use in flrig At the discretion of the user of this library, this software may be licensed under the terms of the GNU General Public License v3, a BSD-Style license, or the original HIDAPI license as outlined in the LICENSE.txt, LICENSE-gpl3.txt, LICENSE-bsd.txt, and LICENSE-orig.txt files located at the root of the source distribution. These files may also be found in the public source code repository located at: https://github.com/libusb/hidapi . ********************************************************/ #include "debug.h" #include "hid_win.h" #undef MIN #define MIN(x,y) ((x) < (y)? (x): (y)) #ifdef _MSC_VER /* Thanks Microsoft, but I know how to use strncpy(). */ #pragma warning(disable:4996) #endif void errtext(std::string s) { FILE *erf = fopen("erf.txt", "a"); fprintf(erf, "%s\n", s.c_str()); fclose(erf); } std::string wchar2str( const char *where, wchar_t *WC ) { size_t count = wcstombs(NULL, WC, 1024); char MB[count + 1]; memset(MB, 0, count + 1); int ret = wcstombs(MB, WC, count); if (ret == -1) { LOG_DEBUG("Cannot convert %s: %ls", where, WC); return ""; } return MB; } hid_api_version api_version = { HID_API_VERSION_MAJOR, HID_API_VERSION_MINOR, HID_API_VERSION_PATCH }; void hid_device::register_error(const char *op) { WCHAR *ptr, *msg; (void)op; // unreferenced param FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&msg, 0/*sz*/, NULL); /* Get rid of the CR and LF that FormatMessage() sticks at the end of the message. Thanks Microsoft! */ ptr = msg; while (*ptr) { if (*ptr == '\r') { *ptr = 0x0000; break; } ptr++; } /* Store the message off in the Device entry so that the hid_error() function can pick it up. */ LocalFree(last_error_str); last_error_str = msg; } HANDLE open_device(const char *path, BOOL open_rw) { HANDLE handle; DWORD desired_access = (open_rw)? (GENERIC_WRITE | GENERIC_READ): GENERIC_READ; DWORD share_mode = FILE_SHARE_READ|FILE_SHARE_WRITE; handle = CreateFileA(path, desired_access, share_mode, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, //FILE_FLAG_OVERLAPPED,/*FILE_ATTRIBUTE_NORMAL,*/ NULL); return handle; } const struct hid_api_version* hid_version() { return &api_version; } const char* hid_version_str() { return HID_API_VERSION_STR; } int hid_init(void) { /* #ifndef HIDAPI_USE_DDK if (!initialized) { if (lookup_functions() < 0) { hid_exit(); return -1; } initialized = TRUE; } #endif */ // initialized = TRUE; return 0; } int hid_exit(void) { //#ifndef HIDAPI_USE_DDK // if (lib_handle) // FreeLibrary(lib_handle); // lib_handle = NULL; // initialized = FALSE; //#endif return 0; } hid_device_info * hid_enumerate(unsigned short vendor_id, unsigned short product_id) { BOOL res; hid_device_info *root = NULL; /* return object */ hid_device_info *cur_dev = NULL; /* Hard-coded GUID retreived by HidD_GetHidGuid */ GUID InterfaceClassGuid = {0x4d1e55b2, 0xf16f, 0x11cf, {0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30} }; /* Windows objects for interacting with the driver. */ SP_DEVINFO_DATA devinfo_data; SP_DEVICE_INTERFACE_DATA device_interface_data; SP_DEVICE_INTERFACE_DETAIL_DATA_A *device_interface_detail_data = NULL; HDEVINFO device_info_set = INVALID_HANDLE_VALUE; char driver_name[256]; int device_index = 0; if (hid_init() < 0) return NULL; /* Initialize the Windows objects. */ memset(&devinfo_data, 0x0, sizeof(devinfo_data)); devinfo_data.cbSize = sizeof(SP_DEVINFO_DATA); device_interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); /* Get information for all the devices belonging to the HID class. */ device_info_set = SetupDiGetClassDevsA(&InterfaceClassGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); /* Iterate over each device in the HID class, looking for the right one. */ for (;;) { HANDLE query_handle = INVALID_HANDLE_VALUE; DWORD required_size = 0; HIDD_ATTRIBUTES attrib; res = SetupDiEnumDeviceInterfaces(device_info_set, NULL, &InterfaceClassGuid, device_index, &device_interface_data); if (!res) { /* A return of FALSE from this function means that there are no more devices. */ break; } /* Call with 0-sized detail size, and let the function tell us how long the detail struct needs to be. The size is put in &required_size. */ res = SetupDiGetDeviceInterfaceDetailA(device_info_set, &device_interface_data, NULL, 0, &required_size, NULL); /* Allocate a long enough structure for device_interface_detail_data. */ device_interface_detail_data = (SP_DEVICE_INTERFACE_DETAIL_DATA_A*) malloc(required_size); device_interface_detail_data->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); /* Get the detailed data for this device. The detail data gives us the device path for this device, which is then passed into CreateFile() to get a handle to the device. */ res = SetupDiGetDeviceInterfaceDetailA(device_info_set, &device_interface_data, device_interface_detail_data, required_size, NULL, NULL); if (!res) { /* register_error("Unable to call SetupDiGetDeviceInterfaceDetail"); Continue to the next device. */ goto cont; } /* Populate devinfo_data. This function will return failure when the device with such index doesn't exist. We've already checked it does. */ res = SetupDiEnumDeviceInfo(device_info_set, device_index, &devinfo_data); if (!res) goto cont; /* Make sure this device has a driver bound to it. */ res = SetupDiGetDeviceRegistryPropertyA(device_info_set, &devinfo_data, SPDRP_DRIVER, NULL, (PBYTE)driver_name, sizeof(driver_name), NULL); if (!res) goto cont; //wprintf(L"HandleName: %s\n", device_interface_detail_data->DevicePath); /* Open a handle to the device */ query_handle = open_device(device_interface_detail_data->DevicePath, FALSE); /* Check validity of query_handle. */ if (query_handle == INVALID_HANDLE_VALUE) { /* Unable to open the device. */ //register_error("CreateFile"); goto cont_close; } /* Get the Vendor ID and Product ID for this device. */ attrib.Size = sizeof(HIDD_ATTRIBUTES); HidD_GetAttributes(query_handle, &attrib); //wprintf(L"Product/Vendor: %x %x\n", attrib.ProductID, attrib.VendorID); /* Check the VID/PID to see if we should add this device to the enumeration list. */ if ((vendor_id == 0x0 || attrib.VendorID == vendor_id) && (product_id == 0x0 || attrib.ProductID == product_id)) { #define WSTR_LEN 512 const char *str; hid_device_info *tmp; PHIDP_PREPARSED_DATA pp_data = NULL; HIDP_CAPS caps; NTSTATUS nt_res; /* VID/PID match. Create the record. */ tmp = new hid_device_info; if (cur_dev) { cur_dev->next = tmp; } else { root = tmp; } cur_dev = tmp; /* Get the Usage Page and Usage for this device. */ res = HidD_GetPreparsedData(query_handle, &pp_data); if (res) { nt_res = HidP_GetCaps(pp_data, &caps); if (nt_res == HIDP_STATUS_SUCCESS) { cur_dev->usage_page = caps.UsagePage; cur_dev->usage = caps.Usage; } HidD_FreePreparsedData(pp_data); } /* Fill out the record */ cur_dev->next = NULL; str = device_interface_detail_data->DevicePath; if (str) { cur_dev->path = str; } else cur_dev->path.clear(); /* Serial Number */ static wchar_t WC[1024]; memset(WC, 0, sizeof(wchar_t) * 1024); cur_dev->str_serial_number.clear(); res = HidD_GetSerialNumberString(query_handle, WC, 1024); if (res) cur_dev->str_serial_number = wchar2str("HidD_GetSerialNumberString", WC);; /* Manufacturer String */ memset(WC, 0, sizeof(wchar_t) * 1024); cur_dev->str_manufacturer_string.clear(); res = HidD_GetManufacturerString(query_handle, WC, 1024); if (res) cur_dev->str_manufacturer_string = wchar2str("HidD_GetManufacturerString", WC);; /* Product String */ memset(WC, 0, sizeof(wchar_t) * 1024); cur_dev->str_product_string.clear(); res = HidD_GetProductString(query_handle, WC, 1024); if (res) cur_dev->str_product_string = wchar2str("HidD_GetProductString", WC);; /* VID/PID */ cur_dev->vendor_id = attrib.VendorID; cur_dev->product_id = attrib.ProductID; /* Release Number */ cur_dev->release_number = attrib.VersionNumber; /* Interface Number. It can sometimes be parsed out of the path on Windows if a device has multiple interfaces. See http://msdn.microsoft.com/en-us/windows/hardware/gg487473 or search for "Hardware IDs for HID Devices" at MSDN. If it's not in the path, it's set to -1. */ cur_dev->interface_number = -1; // if (!cur_dev->path.empty()) { // char *interface_component = strstr(cur_dev->path, "&mi_"); // if (interface_component) { // char *hex_str = interface_component + 4; // char *endptr = NULL; // cur_dev->interface_number = strtol(hex_str, &endptr, 16); // if (endptr == hex_str) { // /* The parsing failed. Set interface_number to -1. */ // cur_dev->interface_number = -1; // } // } // } } cont_close: CloseHandle(query_handle); cont: /* We no longer need the detail data. It can be freed */ free(device_interface_detail_data); device_index++; } /* Close the device information handle. */ SetupDiDestroyDeviceInfoList(device_info_set); return root; } void hid_free_enumeration(hid_device_info *devs) { /* TODO: Merge this with the Linux version. This function is platform-independent. */ hid_device_info *d = devs; while (d) { hid_device_info *next = d->next; // free(d->path); // free(d->serial_number); // free(d->manufacturer_string); // free(d->product_string); delete d; d = next; } } hid_device * hid_open(unsigned short vendor_id, unsigned short product_id, std::string serial_number) { /* TODO: Merge this functions with the Linux version. This function should be platform independent. */ hid_device_info *devs, *cur_dev; std::string path_to_open; hid_device *handle = NULL; path_to_open.clear(); devs = hid_enumerate(vendor_id, product_id); cur_dev = devs; while (cur_dev) { if (cur_dev->vendor_id == vendor_id && cur_dev->product_id == product_id) { if (!cur_dev->str_serial_number.empty()) { if (cur_dev->str_serial_number == serial_number) { path_to_open = cur_dev->path; break; } } else { path_to_open = cur_dev->path; break; } } cur_dev = cur_dev->next; } if (!path_to_open.empty()) { /* Open the device */ handle = hid_open_path(path_to_open); } hid_free_enumeration(devs); return handle; } hid_device * hid_open_path(std::string path) { hid_device *dev; HIDP_CAPS caps; PHIDP_PREPARSED_DATA pp_data = NULL; BOOLEAN res; NTSTATUS nt_res; if (hid_init() < 0) { return NULL; } dev = new hid_device; /* Open a handle to the device */ dev->device_handle = open_device(path.c_str(), TRUE); /* Check validity of write_handle. */ if (dev->device_handle == INVALID_HANDLE_VALUE) { /* System devices, such as keyboards and mice, cannot be opened in read-write mode, because the system takes exclusive control over them. This is to prevent keyloggers. However, feature reports can still be sent and received. Retry opening the device, but without read/write access. */ dev->device_handle = open_device(path.c_str(), FALSE); /* Check the validity of the limited device_handle. */ if (dev->device_handle == INVALID_HANDLE_VALUE) { /* Unable to open the device, even without read-write mode. */ dev->register_error("CreateFile"); errtext("CreateFile for ro failed: INVALID_HANDLE"); goto err; } else errtext("CreateFile for ro OK"); } else errtext("CreateFile for r/w OK"); /* Set the Input Report buffer size to 64 reports. */ res = HidD_SetNumInputBuffers(dev->device_handle, 64); if (!res) { dev->register_error("HidD_SetNumInputBuffers"); goto err; } /* Get the Input Report length for the device. */ res = HidD_GetPreparsedData(dev->device_handle, &pp_data); if (!res) { dev->register_error("HidD_GetPreparsedData"); goto err; } nt_res = HidP_GetCaps(pp_data, &caps); if (nt_res != HIDP_STATUS_SUCCESS) { dev->register_error("HidP_GetCaps"); goto err_pp_data; } dev->output_report_length = caps.OutputReportByteLength; dev->input_report_length = caps.InputReportByteLength; dev->feature_report_length = caps.FeatureReportByteLength; HidD_FreePreparsedData(pp_data); dev->read_buf = (char*) malloc(dev->input_report_length); return dev; err_pp_data: HidD_FreePreparsedData(pp_data); err: return NULL; } int hid_device::hid_write(const unsigned char *data, size_t length) { DWORD bytes_written = 0; int function_result = -1; BOOL res; BOOL overlapped = FALSE; unsigned char *buf; /* Make sure the right number of bytes are passed to WriteFile. Windows expects the number of bytes which are in the _longest_ report (plus one for the report number) bytes even if the data is a report which is shorter than that. Windows gives us this value in caps.OutputReportByteLength. If a user passes in fewer bytes than this, use cached temporary buffer which is the proper size. */ if (length >= output_report_length) { /* The user passed the right number of bytes. Use the buffer as-is. */ buf = (unsigned char *) data; } else { if (write_buf == NULL) write_buf = (unsigned char *) malloc(output_report_length); buf = write_buf; memcpy(buf, data, length); memset(buf + length, 0, output_report_length - length); length = output_report_length; } res = WriteFile(device_handle, buf, (DWORD) length, NULL, &write_ol); if (!res) { if (GetLastError() != ERROR_IO_PENDING) { /* WriteFile() failed. Return error. */ register_error("WriteFile"); goto end_of_function; } overlapped = TRUE; } if (overlapped) { /* Wait for the transaction to complete. This makes hid_write() synchronous. */ res = WaitForSingleObject(write_ol.hEvent, 1000); if (res != WAIT_OBJECT_0) { /* There was a Timeout. */ register_error("WriteFile/WaitForSingleObject Timeout"); goto end_of_function; } /* Get the result. */ res = GetOverlappedResult(device_handle, &write_ol, &bytes_written, FALSE/*wait*/); if (res) { function_result = bytes_written; } else { /* The Write operation failed. */ register_error("WriteFile"); goto end_of_function; } } end_of_function: return function_result; } int hid_device::hid_read_timeout(unsigned char *data, size_t length, int milliseconds) { DWORD bytes_read = 0; size_t copy_len = 0; BOOL res = FALSE; BOOL overlapped = FALSE; /* Copy the handle for convenience. */ HANDLE ev = ol.hEvent; if (!read_pending) { /* Start an Overlapped I/O read. */ read_pending = TRUE; memset(read_buf, 0, input_report_length); ResetEvent(ev); res = ReadFile(device_handle, read_buf, (DWORD) input_report_length, &bytes_read, &ol); if (!res) { if (GetLastError() != ERROR_IO_PENDING) { /* ReadFile() has failed. Clean up and return error. */ CancelIo(device_handle); read_pending = FALSE; goto end_of_function; } overlapped = TRUE; } } else { overlapped = TRUE; } if (overlapped) { if (milliseconds >= 0) { /* See if there is any data yet. */ res = WaitForSingleObject(ev, milliseconds); if (res != WAIT_OBJECT_0) { /* There was no data this time. Return zero bytes available, but leave the Overlapped I/O running. */ return 0; } } /* Either WaitForSingleObject() told us that ReadFile has completed, or we are in non-blocking mode. Get the number of bytes read. The actual data has been copied to the data[] array which was passed to ReadFile(). */ res = GetOverlappedResult(device_handle, &ol, &bytes_read, TRUE/*wait*/); } /* Set pending back to false, even if GetOverlappedResult() returned error. */ read_pending = FALSE; if (res && bytes_read > 0) { if (read_buf[0] == 0x0) { /* If report numbers aren't being used, but Windows sticks a report number (0x0) on the beginning of the report anyway. To make this work like the other platforms, and to make it work more like the HID spec, we'll skip over this byte. */ bytes_read--; copy_len = length > bytes_read ? bytes_read : length; memcpy(data, read_buf+1, copy_len); } else { /* Copy the whole buffer, report number and all. */ copy_len = length > bytes_read ? bytes_read : length; memcpy(data, read_buf, copy_len); } } end_of_function: if (!res) { register_error("GetOverlappedResult"); return -1; } return (int) copy_len; } int hid_device::hid_read(unsigned char *data, size_t length) { return hid_read_timeout(data, length, (blocking)? -1: 0); } int hid_device::hid_set_nonblocking(int nonblock) { blocking = !nonblock; return 0; /* Success */ } int hid_device::hid_send_feature_report(const unsigned char *data, size_t length) { BOOL res = FALSE; unsigned char *buf; size_t length_to_send; /* Windows expects at least caps.FeatureReportByteLength bytes passed to HidD_SetFeature(), even if the report is shorter. Any less sent and the function fails with error ERROR_INVALID_PARAMETER set. Any more and HidD_SetFeature() silently truncates the data sent in the report to caps.FeatureReportByteLength. */ if (length >= feature_report_length) { buf = (unsigned char *) data; length_to_send = length; } else { if (feature_buf == NULL) feature_buf = (unsigned char *) malloc(feature_report_length); buf = feature_buf; memcpy(buf, data, length); memset(buf + length, 0, feature_report_length - length); length_to_send = feature_report_length; } res = HidD_SetFeature(device_handle, (PVOID)buf, (DWORD) length_to_send); if (!res) { register_error("HidD_SetFeature"); return -1; } return (int) length; } int hid_device::hid_get_feature_report(unsigned char *data, size_t length) { BOOL res; #if 0 res = HidD_GetFeature(device_handle, data, length); if (!res) { register_error("HidD_GetFeature"); return -1; } return 0; /* HidD_GetFeature() doesn't give us an actual length, unfortunately */ #else DWORD bytes_returned; OVERLAPPED ol; memset(&ol, 0, sizeof(ol)); res = DeviceIoControl(device_handle, IOCTL_HID_GET_FEATURE, data, (DWORD) length, data, (DWORD) length, &bytes_returned, &ol); if (!res) { if (GetLastError() != ERROR_IO_PENDING) { /* DeviceIoControl() failed. Return error. */ register_error("Send Feature Report DeviceIoControl"); return -1; } } /* Wait here until the write is done. This makes hid_get_feature_report() synchronous. */ res = GetOverlappedResult(device_handle, &ol, &bytes_returned, TRUE/*wait*/); if (!res) { /* The operation failed. */ register_error("Send Feature Report GetOverLappedResult"); return -1; } /* bytes_returned does not include the first byte which contains the report ID. The data buffer actually contains one more byte than bytes_returned. */ bytes_returned++; return bytes_returned; #endif } int hid_device::hid_get_input_report(unsigned char *data, size_t length) { BOOL res; #if 0 res = HidD_GetInputReport(device_handle, data, length); if (!res) { register_error("HidD_GetInputReport"); return -1; } return length; #else DWORD bytes_returned; OVERLAPPED ol; memset(&ol, 0, sizeof(ol)); res = DeviceIoControl(device_handle, IOCTL_HID_GET_INPUT_REPORT, data, (DWORD) length, data, (DWORD) length, &bytes_returned, &ol); if (!res) { if (GetLastError() != ERROR_IO_PENDING) { /* DeviceIoControl() failed. Return error. */ register_error("Send Input Report DeviceIoControl"); return -1; } } /* Wait here until the write is done. This makes hid_get_feature_report() synchronous. */ res = GetOverlappedResult(device_handle, &ol, &bytes_returned, TRUE/*wait*/); if (!res) { /* The operation failed. */ register_error("Send Input Report GetOverLappedResult"); return -1; } /* bytes_returned does not include the first byte which contains the report ID. The data buffer actually contains one more byte than bytes_returned. */ bytes_returned++; return bytes_returned; #endif } void hid_device::hid_close() { CancelIo(device_handle); } std::string hid_device::hid_get_manufacturer_string() { BOOL res; wchar_t WC[256]; res = HidD_GetManufacturerString(device_handle, WC, 256); if (!res) { register_error("HidD_GetManufacturerString"); return ""; } return wchar2str("HidD_GetManufacturerString", WC); } std::string hid_device::hid_get_product_string() { BOOL res; wchar_t WC[256]; res = HidD_GetProductString(device_handle, WC, 256); if (!res) { register_error("HidD_GetProductString"); return ""; } return wchar2str("HidD_GetProductString", WC); } std::string hid_device::hid_get_serial_number_string() { BOOL res; wchar_t WC[256]; res = HidD_GetSerialNumberString(device_handle, WC, 256); if (!res) { register_error("HidD_GetSerialNumberString"); return ""; } return wchar2str("HidD_GetSerialNumberString", WC); } int hid_device::hid_get_indexed_string(int string_index, std::string string, size_t maxlen) { BOOL res; wchar_t WC[maxlen+1]; res = HidD_GetIndexedString(device_handle, string_index, WC, maxlen); if (!res) { register_error("HidD_GetIndexedString"); string = ""; return -1; } string = wchar2str("HidD_Get_IndexedString", WC); return 0; } const char * hid_device::hid_error() { return "hid_error for global errors is not implemented yet"; } flrig-2.0.04/src/cmedia/cmedia.cxx0000664000175000017500000001322514475136651013621 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // This interface is based on the CM108 HID support code found in hamlib // // CM108 Audio chips found on many USB audio interfaces have controllable // General Purpose Input/Output pins. // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include #ifndef __WIN32__ #include #include # ifndef __APPLE__ # include # endif #endif #include "config.h" #include "threads.h" #include "debug.h" #include "util.h" #include "status.h" #include "hidapi.h" #include "cmedia.h" static int ptt_state_cmedia = 0; static std::map paths; static hid_device *ptt_dev = (hid_device *)0; void test_hid_ptt() { hid_device *test_dev = (hid_device *)0; if (ptt_dev) test_dev = ptt_dev; else if (progStatus.cmedia_device == "NONE") return; else test_dev = hid_open_path(paths[progStatus.cmedia_device]); if (test_dev == (hid_device *)0) { LOG_ERROR("Could not open %s", progStatus.cmedia_device.c_str()); return; } if (test_dev == ptt_dev) LOG_INFO("Testing using ptt device: %s", progStatus.cmedia_device.c_str()); else LOG_INFO("Testing using test_dev: %s", progStatus.cmedia_device.c_str()); int bitnbr = 2; // GPIO-3 unsigned char out_rep[5]; for (int i = 0; i < 5; out_rep[i++] = 0x00); out_rep[3] = 0x01 << bitnbr; for (int j = 0; j < 20; j++) { out_rep[2] = 0x01 << bitnbr; test_dev->hid_write(out_rep, 5); MilliSleep(50); out_rep[2] = 0x00; test_dev->hid_write(out_rep, 5); MilliSleep(50); } if (test_dev != ptt_dev) delete test_dev; return; } int open_cmedia(std::string str_device) { if (str_device == "NONE") return -1; std::string dev_path = paths[str_device]; if (ptt_dev) close_cmedia(); LOG_DEBUG("Device path: %s", dev_path.c_str()); ptt_dev = hid_open_path(dev_path); if (!ptt_dev) { LOG_ERROR( "unable to open device"); return -1; } LOG_INFO("C-Media device %s opened for GPIO i/o", str_device.c_str()); return 0; } void close_cmedia() { delete ptt_dev; ptt_dev = (hid_device *)0; } // // Set or unset the Push To Talk bit on a CM108 GPIO. // // param ptt 1 - Set PTT, 0 - unset PTT. // // return true on success, false otherwise // For a CM108 USB audio device PTT is wired up to one of the GPIO // pins. Usually this is GPIO3 (bit 2 of the GPIO register) because it // is on the corner of the chip package (pin 13) so it's easily accessible. // Some CM108 chips are epoxy-blobbed onto the PCB, so no GPIO // pins are accessible. The SSS1623 chips have a different pinout, so // we make the GPIO bit number configurable. bool set_cmedia(int ptt) { if (!ptt_dev) return false; int bitnbr = 2; if (progStatus.cmedia_gpio_line == "GPIO-1") bitnbr = 0; else if (progStatus.cmedia_gpio_line == "GPIO-2") bitnbr = 1; else if (progStatus.cmedia_gpio_line == "GPIO-3") bitnbr = 2; else if (progStatus.cmedia_gpio_line == "GPIO-4") bitnbr = 3; else return false; // Build a packet for CM108 HID to turn GPIO bit on or off. // Packet is 4 bytes, preceded by a 'report number' byte // 0x00 report number // Write data packet (from CM108 documentation) // byte 0: 00xx xxxx Write GPIO // byte 1: xxxx dcba GPIO3-0 output values (1=high) // byte 2: xxxx dcba GPIO3-0 data-direction register (1=output) // byte 3: xxxx xxxx SPDIF unsigned char out_rep[5]; out_rep[0] = 0x00; out_rep[1] = 0x00; out_rep[2] = ptt ? (0x01 << bitnbr) : 0x00; out_rep[3] = 0x01 << bitnbr; out_rep[4] = 0x00; LOG_DEBUG("bit %d : %d; %s", bitnbr, ptt ? 1 : 0, str2hex(out_rep, 5)); // Send the HID packet int nw = ptt_dev->hid_write(out_rep, 5); if (nw < 0) return false; ptt_state_cmedia = ptt; return true; } // Get the state of Push To Talk from a CM108 GPIO. // return 1 if ON, 0 if OFF int get_cmedia() { return ptt_state_cmedia; } void init_hids() { std::string hidstr = "NONE"; hid_device_info *devs = 0; inp_cmedia_dev->clear(); paths.clear(); if (hid_init()) { inp_cmedia_dev->add(hidstr.c_str()); return; } devs = hid_enumerate(0x0d8c, 0x0); // find all C-Media devices std::string dev_name = "C-Media-A"; while (devs) { LOG_INFO("\n\ HID : %s\n\ vendor id : %04hx\n\ product id : %04hx\n\ Manufacturer : %s\n\ Product : %s\n\ Release : %hx", dev_name.c_str(), devs->vendor_id, devs->product_id, devs->str_manufacturer_string.c_str(), devs->str_product_string.c_str(), devs->release_number); hidstr.append("|").append(dev_name); paths[dev_name] = devs->path; ++dev_name[8]; // increment A->B->C... devs = devs->next; } inp_cmedia_dev->add(hidstr.c_str()); inp_cmedia_dev->value(progStatus.cmedia_device.c_str()); inp_cmedia_GPIO_line->value(progStatus.cmedia_gpio_line.c_str()); } flrig-2.0.04/src/cmedia/hid.cxx0000664000175000017500000000116714475136651013145 00000000000000/*********************************************************************** HIDAPI - Multi-Platform library for communication with HID devices. Alan Ott Signal 11 Software 8/22/2009 Linux Version - 6/2/2009 Copyright 2009, All Rights Reserved. C++ implementation Copyright 2021 David Freese, W1HKJ for use in flrig This software is licensed under the terms of the GNU General Public License v3. ***********************************************************************/ #ifdef __WIN32__ # include "hid_win.cxx" #else # ifdef __APPLE__ # include "hid_mac.cxx" # else # include "hid_lin.cxx" # endif #endif flrig-2.0.04/src/cmedia/tmate2.cxx0000664000175000017500000006237714475136651013607 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2021 // David Freese, W1HKJ // Dominik, DB1RUF // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // This interface uses hidapi to communicate with the Elard TMATE 2 device // // adapt frequency step size to your transceiver in the setting menu // // ---------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include #include #ifndef __WIN32__ #include #include # ifndef __APPLE__ # include # endif #endif #include "config.h" #include "threads.h" #include "debug.h" #include "util.h" #include "support.h" #include "status.h" #include "hidapi.h" #include "tmate2.h" // enable TMATE2_DEBUG for debugging output //#define TMATE2_DEBUG 1 int ChangeSpeedEvalTime_ms = 500; static std::map paths; static hid_device *tm2_dev = (hid_device *)0; //this is used for writing to USB it contains settings, LED and LCD symbols unsigned char lcdstring[LCD_STRING_SIZE]; int LcdRefreshTime_ms=100; pthread_t *tmate_thread = 0; std::string tm2_dev_path; int tmate2_close_connection(void) //currently no function executed in hidapi { // Finalize the hidapi library // Close the device return hid_exit(); } void tmate2_close() { delete tm2_dev; tm2_dev = (hid_device *)0; } //reads the knob values from the device int tmate2_read_value (unsigned short *enc1, unsigned short *enc2, unsigned short *enc3, unsigned short *keys) { // This function gives the values of the buttons and knob's back // enc1 = big knob // enc2 = knob E2 // enc2 = knob E3 // keys = buttons F1 to F6 and pressed E1 E2 big knob int res = 0; unsigned char buf[66]; tm2_dev = hid_open_path(tm2_dev_path); //is needed Warum ??? if (!tm2_dev) { LOG_ERROR( "unable to open TMATE2 device for read"); return false; } res = tm2_dev->hid_read(buf, 64); if (res <= 0) { LOG_ERROR( "TMATE 2 read return bytes are %i",res); return false; } *enc1 = buf[2] << 8 | buf[1]; *enc2 = buf[4] << 8 | buf[3]; *enc3 = buf[6] << 8 | buf[5]; *keys = buf[8] << 8 | buf[7]; #ifdef TMATE2_DEBUG LOG_DEBUG("enc1: %i enc2: %i enc3: %i keys: %i",*enc1, *enc2, *enc3, *keys); if ((*keys & ENCODER1_KEY_MASK) == 0x00) { LOG_DEBUG("ENCODER1 KEY PRESSED\n"); } if ((*keys & ENCODER2_KEY_MASK) == 0x00) { LOG_DEBUG("ENCODER2 KEY PRESSED\n"); } if ((*keys & MAIN_ENCODER_KEY_MASK) == 0x00) { LOG_DEBUG("MAIN ENCODER KEY PRESSED\n"); } if ((*keys & F1_KEY_PRESSED) == 0x00) { LOG_DEBUG("F1 KEY PRESSED\n"); } if ((*keys & F2_KEY_PRESSED) == 0x00) { LOG_DEBUG("F2 KEY PRESSED\n"); } if ((*keys & F3_KEY_PRESSED) == 0x00) { LOG_DEBUG("F3 KEY PRESSED\n"); } if ((*keys & F4_KEY_PRESSED) == 0x00) { LOG_DEBUG("F4 KEY PRESSED\n"); } if ((*keys & F5_KEY_PRESSED) == 0x00) { LOG_DEBUG("F5 KEY PRESSED\n"); } if ((*keys & F6_KEY_PRESSED) == 0x00) { LOG_DEBUG("F6 KEY PRESSED\n"); } #endif return true; } //sets values to the display and turns on the LED must be sent out to the USB bus minimum once in 400ms otherwise the LED and LCD turns off int tmate2_set_lcd (unsigned char *bufout) { // just write the first 44 BYTE and fill up with 0x0 // lcdstring[0-31] LCD Segment status. // Use the function tmate2_set_segment to turn on the desired segment // lcdstring [32] Led status. // Bit 0: red TUNE LOCK led (0:OFF, 1:ON) // Bit 1: green USB led (0:OFF, 1: ON) // lcdstring [33] “Red” backlight component [0:255]; // lcdstring [34] “Green” backlight component [0:255]; // lcdstring [35] “Blue” backlight component [0:255]; // lcdstring [36] LCD contrast. Set 0 for maximum contrast, 255 for minimum contrast // lcdstring [37] Display refresh time in ms/10; // For a refresh time of 100ms, set LCD[37]=10 // lcdstring [38] Main encoder increment count for each encoder click in speed 1 // lcdstring [39] Main encoder increment count for each encoder click in speed 2 // lcdstring [40] Main encoder increment count for each encoder click in speed 3 // lcdstring [41] Increment count to a speed 1 -> speed 2 transition // lcdstring [42] Increment count to a speed 2 -> speed 3 transition // lcdstring [43] Evaluation time in ms/10 for speed transition int res = 0; int i; unsigned char buf[65]; buf[64]= '\0'; buf[0] = 0x0; // report number for (i = 1; i <= 45; i++) { buf[i] = bufout[i-1]; } for (i = 46; i <= 64; i++) { buf[i] = 0xFF; } buf[64]= '\0'; if (tm2_dev != 0x0) { while (res == 0) { res = tm2_dev->hid_write(buf, 65); if (res == 0) { LOG_ERROR("HID WRITE return1: %i\n",res); } if (res < 0) { LOG_ERROR("HID WRITE return2: %i\n",res); tm2_dev->hid_close(); return false; } if (res > 1) { tm2_dev->hid_close(); #ifdef TMATE2_DEBUG LOG_DEBUG("Bytes successfully written to TMATE 2: %i\n",res); #endif return true; } } return true; } return false; } //sets the bits in the lcdstring to the value and did not touch the other values void tmate2_write_main_display (unsigned char *lcdstring, int Value) { //The left site of the seven segment frequency display is on lcdstring[3] and lcdstring[4] if (Value < 0) return; int number; int i; for (i = 3; i < 19; i++) { //Ensures that the used bytes are in a clear state lcdstring[i]=0x00; } for (i = 19; i >= 3; i--) { number = Value % 10 ; Value = Value / 10 ; switch (number) { case 0: lcdstring[i] |= SEG0L; lcdstring[i+1] |= SEG0H; if (Value == 0) { lcdstring[i] = 0x0; lcdstring[i+1] = 0x0; } break; case 1: lcdstring[i] |= SEG1L; lcdstring[i+1] |= SEG1H; break; case 2: lcdstring[i] |= SEG2L; lcdstring[i+1] |= SEG2H; break; case 3: lcdstring[i] |= SEG3L; lcdstring[i+1] |= SEG3H; break; case 4: lcdstring[i] |= SEG4L; lcdstring[i+1] |= SEG4H; break; case 5: lcdstring[i] |= SEG5L; lcdstring[i+1] |= SEG5H; break; case 6: lcdstring[i] |= SEG6L; lcdstring[i+1] |= SEG6H; break; case 7: lcdstring[i] |= SEG7L; lcdstring[i+1] |= SEG7H; break; case 8: lcdstring[i] |= SEG8L; lcdstring[i+1] |= SEG8H; break; case 9: lcdstring[i] |= SEG9L; lcdstring[i+1] |= SEG9H; break; } i--; } } //sets the bits in the lcdstring to the value and did not touch the other values void tmate2_set_segment(unsigned char *lcdstring, int lcd_mask, unsigned char status) { //This function set one bit of the lcdstring according to the status and returns the new value. This bit corresponds on the LCD to on segment and displays it or not. unsigned char mask = 0; int vector = 0; switch(lcd_mask) { case 0 : // SEG_SMETER_LINE vector = 2; mask = 0x0; break; case 1 : // SEG_SMETER_DB_MINUS vector = 28; mask = 0x10; break; case 2 : // SEG_CW_PLUS vector = 21; mask = 0x01; break; case 3 : // SEG_CW_MINUS vector = 21; mask = 0x02; break; case 4 : // SEG_DIG_PLUS vector = 21; mask = 0x04; break; case 5 : // SEG_DIG_MINUS vector = 21; mask = 0x08; break; case 6 : // SEG_UNDERLINE_9 vector = 4; mask = 0x08; break; case 7 : // SEG_UNDERLINE_8 vector = 6; mask = 0x08; break; case 8 : // SEG_UNDERLINE_7 vector = 8; mask = 0x08; break; case 9 : // SEG_UNDERLINE_6 vector = 10; mask = 0x08; break; case 10 : // SEG_UNDERLINE_5 vector = 12; mask = 0x08; break; case 11 : // SEG_UNDERLINE_4 vector = 14; mask = 0x08; break; case 12 : // SEG_UNDERLINE_3 vector = 16; mask = 0x08; break; case 13 : // SEG_UNDERLINE_2 vector = 18; mask = 0x08; break; case 14 : // SEG_UNDERLINE_1 vector = 20; mask = 0x08; break; case 15 : // SEG_DOT1 vector = 9; mask = 0x10; break; case 16 : // SEG_DOT2 vector = 15; mask = 0x10; break; case 17 : // SEG_HZ vector = 23; mask = 0x01; break; case 18 : // SEG_E1 vector = 0; mask = 0x80; break; case 19 : // SEG_ERR vector = 19; mask = 0x10; break; case 20 : // SEG_E2 vector = 8; mask = 0x10; break; case 21 : // SEG_LP vector = 0; mask = 0x02; break; case 22 : // SEG_ATT vector = 1; mask = 0x01; break; case 23 : // SEG_S vector = 0; mask = 0x10; break; case 24 : // SEG_VFO vector = 0; mask = 0x20; break; case 25 : // SEG_NR vector = 0; mask = 0x40; break; case 26 : // SEG_NB vector = 1; mask = 0x40; break; case 27 : // SEG_SMETER_1 vector = 1; mask = 0x10; break; case 28 : // SEG_A vector = 1; mask = 0x20; break; case 29 : // SEG_B vector = 2; mask = 0x20; break; case 30 : // SEG_VOL vector = 1; mask = 0x80; break; case 31 : // SEG_SMETER_9 vector = 2; mask = 0x2; break; case 32 : // SEG_SMETER_7 vector = 2; mask = 0x04; break; case 33 : // SEG_SMETER_5 vector = 2; mask = 0x08; break; case 34 : // SEG_SMETER_3 vector = 2; mask = 0x10; break; case 35 : // SEG_AN vector = 2; mask = 0x40; break; case 36 : // SEG_RFG vector = 2; mask = 0x80; break; case 37 : // SEG_SQL vector = 3; mask = 0x10; break; case 38 : // SEG_DRV vector = 4; mask = 0x10; break; case 39 : // SEG_SHIFT vector = 12; mask = 0x10; break; case 40 : // SEG_LOW vector = 11; mask = 0x10; break; case 41 : // SEG_HIGH vector = 10; mask = 0x10; break; case 42 : // SEG_DSB vector = 21; mask = 0x10; break; case 43 : // SEG_FM vector = 21; mask = 0x20; break; case 44 : // SEG_USB vector = 21; mask = 0x40; break; case 45 : // SEG_SAM vector = 21; mask = 0x80; break; case 46 : // SEG_DRM vector = 22; mask = 0x01; break; case 47 : // SEG_DIG vector = 22; mask = 0x02; break; case 48 : // SEG_STEREO vector = 22; mask = 0x04; break; case 49 : // SEG_DBM vector = 22; mask = 0x10; break; case 50 : // SEG_CW vector = 22; mask = 0x20; break; case 51 : // SEG_LSB vector = 22; mask = 0x40; break; case 52 : // SEG_AM vector = 22; mask = 0x80; break; case 53 : // SEG_SMETER_PLUS20 vector = 9; mask = 0x20; break; case 54 : // SEG_SMETER_PLUS40 vector = 15; mask = 0x20; break; case 55 : // SEG_SMETER_PLUS60 vector = 18; mask = 0x20; break; case 56 : // SEG_SMETER_10 vector = 8; mask = 0x20; break; case 57 : // SEG_SMETER_20 vector = 10; mask = 0x20; break; case 58 : // SEG_SMETER_40 vector = 16; mask = 0x20; break; case 59 : // SEG_SMETER_60 vector = 19; mask = 0x20; break; case 60 : // SEG_RX vector = 0; mask = 0x04; break; case 61 : // SEG_TX vector = 0; mask = 0x08; break; case 62 : // SEG_ATT_1 vector = 31; mask = 0x04; break; case 63 : // SEG_ATT_2 vector = 31; mask = 0x01; break; case 64 : // SEG_PRE vector = 31; mask = 0x02; break; case 65 : // SEG_PRE_1 vector = 30; mask = 0x01; break; case 66 : // SEG_PRE_2 vector = 30; mask = 0x02; break; case 67 : // SEG_mW_W vector = 27; mask = 0x01; break; case 68 : // SEG_mW_m vector = 28; mask = 0x01; break; case 69 : // SEG_W vector = 20; mask = 0x20; break; case 70 : // SEG_K vector = 25; mask = 0x01; break; case 71 : // SEG_RIT vector = 13; mask = 0x10; break; case 72 : // SEG_XIT vector = 14; mask = 0x10; break; case 73 : // SEG_W_FM vector = 20; mask = 0x10; break; case 74 : // SEG_NR2 vector = 5; mask = 0x10; break; case 75 : // SEG_NB2 vector = 6; mask = 0x10; break; case 76 : // SEG_AN2 vector = 7; mask = 0x10; break; case 77 : // SMETER_BAR1 vector = 1; mask = 0x08; break; case 78 : // SMETER_BAR2 vector = 1; mask = 0x04; break; case 79 : // SMETER_BAR3 vector = 1; mask = 0x02; break; case 80 : // SMETER_BAR4 vector = 31; mask = 0x80; break; case 81 : // SMETER_BAR5 vector = 31; mask = 0x40; break; case 82 : // SMETER_BAR6 vector = 31; mask = 0x20; break; case 83 : // SMETER_BAR7 vector = 31; mask = 0x10; break; case 84 : // SMETER_BAR8 vector = 30; mask = 0x10; break; case 85 : // SMETER_BAR9 vector = 30; mask = 0x20; break; case 86 : // SMETER_BAR10 vector = 30; mask = 0x40; break; case 87 : // SMETER_BAR11 vector = 30; mask = 0x80; break; case 88 : // SMETER_BAR12 vector = 29; mask = 0x80; break; case 89 : // SMETER_BAR13 vector = 29; mask = 0x40; break; case 90 : // SMETER_BAR14 vector = 29; mask = 0x20; break; case 91 : // SMETER_BAR15 vector = 29; mask = 0x10; break; case 92 : // SEG_MAIN_9A vector = 4; mask = 0x01; break; case 93 : // SEG_MAIN_9B vector = 4; mask = 0x02; break; case 94 : // SEG_MAIN_9C vector = 4; mask = 0x04; break; case 95 : // SEG_MAIN_9D vector = 3; mask = 0x08; break; case 96 : // SEG_MAIN_9E vector = 3; mask = 0x04; break; case 97 : // SEG_MAIN_9F vector = 3; mask = 0x01; break; case 98 : // SEG_MAIN_9G vector = 3; mask = 0x02; break; case 99 : // SEG_MAIN_8A vector = 6; mask = 0x01; break; case 100 : // SEG_MAIN_8B vector = 6; mask = 0x02; break; case 101 : // SEG_MAIN_8C vector = 6; mask = 0x04; break; case 102 : // SEG_MAIN_8D vector = 5; mask = 0x08; break; case 103 : // SEG_MAIN_8E vector = 5; mask = 0x04; break; case 104 : // SEG_MAIN_8F vector = 5; mask = 0x01; break; case 105 : // SEG_MAIN_8G vector = 5; mask = 0x02; break; case 106 : // SEG_MAIN_7A vector = 8; mask = 0x01; break; case 107 : // SEG_MAIN_7B vector = 8; mask = 0x02; break; case 108 : // SEG_MAIN_7C vector = 8; mask = 0x04; break; case 109 : // SEG_MAIN_7D vector = 7; mask = 0x08; break; case 110 : // SEG_MAIN_7E vector = 7; mask = 0x04; break; case 111 : // SEG_MAIN_7F vector = 7; mask = 0x01; break; case 112 : // SEG_MAIN_7G vector = 7; mask = 0x02; break; case 113 : // SEG_MAIN_6A vector = 10; mask = 0x01; break; case 114 : // SEG_MAIN_6B vector = 10; mask = 0x02; break; case 115 : // SEG_MAIN_6C vector = 10; mask = 0x04; break; case 116 : // SEG_MAIN_6D vector = 9; mask = 0x08; break; case 117 : // SEG_MAIN_6E vector = 9; mask = 0x04; break; case 118 : // SEG_MAIN_6F vector = 9; mask = 0x01; break; case 119 : // SEG_MAIN_6G vector = 9; mask = 0x02; break; case 120 : // SEG_MAIN_5A vector = 12; mask = 0x01; break; case 121 : // SEG_MAIN_5B vector = 12; mask = 0x02; break; case 122 : // SEG_MAIN_5C vector = 12; mask = 0x04; break; case 123 : // SEG_MAIN_5D vector = 11; mask = 0x08; break; case 124 : // SEG_MAIN_5E vector = 11; mask = 0x04; break; case 125 : // SEG_MAIN_5F vector = 11; mask = 0x01; break; case 126 : // SEG_MAIN_5G vector = 11; mask = 0x02; break; case 127 : // SEG_MAIN_4A vector = 14; mask = 0x01; break; case 128 : // SEG_MAIN_4B vector = 14; mask = 0x02; break; case 129 : // SEG_MAIN_4C vector = 14; mask = 0x04; break; case 130 : // SEG_MAIN_4D vector = 13; mask = 0x08; break; case 131 : // SEG_MAIN_4E vector = 13; mask = 0x04; break; case 132 : // SEG_MAIN_4F vector = 13; mask = 0x01; break; case 133 : // SEG_MAIN_4G vector = 13; mask = 0x02; break; case 134 : // SEG_MAIN_3A vector = 16; mask = 0x01; break; case 135 : // SEG_MAIN_3B vector = 16; mask = 0x02; break; case 136 : // SEG_MAIN_3C vector = 16; mask = 0x04; break; case 137 : // SEG_MAIN_3D vector = 15; mask = 0x08; break; case 138 : // SEG_MAIN_3E vector = 15; mask = 0x04; break; case 139 : // SEG_MAIN_3F vector = 15; mask = 0x01; break; case 140 : // SEG_MAIN_3G vector = 15; mask = 0x02; break; case 141 : // SEG_MAIN_2A vector = 18; mask = 0x01; break; case 142 : // SEG_MAIN_2B vector = 18; mask = 0x02; break; case 143 : // SEG_MAIN_2C vector = 18; mask = 0x04; break; case 144 : // SEG_MAIN_2D vector = 17; mask = 0x08; break; case 145 : // SEG_MAIN_2E vector = 17; mask = 0x04; break; case 146 : // SEG_MAIN_2F vector = 17; mask = 0x01; break; case 147 : // SEG_MAIN_2G vector = 17; mask = 0x02; break; case 148 : // SEG_MAIN_1A vector = 20; mask = 0x01; break; case 149 : // SEG_MAIN_1B vector = 20; mask = 0x02; break; case 150 : // SEG_MAIN_1C vector = 20; mask = 0x04; break; case 151 : // SEG_MAIN_1D vector = 19; mask = 0x08; break; case 152 : // SEG_MAIN_1E vector = 19; mask = 0x04; break; case 153 : // SEG_MAIN_1F vector = 19; mask = 0x01; break; case 154 : // SEG_MAIN_1G vector = 19; mask = 0x02; break; case 155 : // SEG_SMETER_3A vector = 27; mask = 0x80; break; case 156 : // SEG_SMETER_3B vector = 27; mask = 0x40; break; case 157 : // SEG_SMETER_3C vector = 27; mask = 0x20; break; case 158 : // SEG_SMETER_3D vector = 27; mask = 0x10; break; case 159 : // SEG_SMETER_3E vector = 28; mask = 0x20; break; case 160 : // SEG_SMETER_3F vector = 28; mask = 0x80; break; case 161 : // SEG_SMETER_3G vector = 28; mask = 0x40; break; case 162 : // SEG_SMETER_2A vector = 25; mask = 0x80; break; case 163 : // SEG_SMETER_2B vector = 25; mask = 0x40; break; case 164 : // SEG_SMETER_2C vector = 25; mask = 0x20; break; case 165 : // SEG_SMETER_2D vector = 25; mask = 0x10; break; case 166 : // SEG_SMETER_2E vector = 26; mask = 0x20; break; case 167 : // SEG_SMETER_2F vector = 26; mask = 0x80; break; case 168 : // SEG_SMETER_2G vector = 26; mask = 0x40; break; case 169 : // SEG_SMETER_1A vector = 23; mask = 0x80; break; case 170 : // SEG_SMETER_1B vector = 23; mask = 0x40; break; case 171 : // SEG_SMETER_1C vector = 23; mask = 0x20; break; case 172 : // SEG_SMETER_1D vector = 23; mask = 0x10; break; case 173 : // SEG_SMETER_1E vector = 24; mask = 0x20; break; case 174 : // SEG_SMETER_1F vector = 24; mask = 0x80; break; case 175 : // SEG_SMETER_1G vector = 24; mask = 0x40; break; } if (status == 0x0) lcdstring[vector] ^= mask; else lcdstring[vector] |= mask; } //sets the bits in the lcdstring to the value and did not touch the other values void tmate2_write_smeter_display (unsigned char *lcdstring, int SmeterValue) { // lcdstring[23] = 0xB0; right segment low byte // lcdstring[24] = 0xC0; right segment high byte // lcdstring[25] = 0xB0; // lcdstring[26] = 0xE0; // lcdstring[27] = 0xE0; // lcdstring[28] = 0x00; left segment high byte if (SmeterValue < 0) return; int number; int i; for (i = 23; i <= 28; i++) { number = SmeterValue % 10 ; SmeterValue = SmeterValue / 10 ; switch (number) { case 0: lcdstring[i] |= SEGSWR0L; lcdstring[i+1] |= SEGSWR0H; if (SmeterValue == 0) { lcdstring[i] = 0x00; lcdstring[i+1] = 0x00; } break; case 1: lcdstring[i] |= SEGSWR1L; lcdstring[i+1] |= SEGSWR1H; break; case 2: lcdstring[i] |= SEGSWR2L; lcdstring[i+1] |= SEGSWR2H; break; case 3: lcdstring[i] |= SEGSWR3L; lcdstring[i+1] |= SEGSWR3H; break; case 4: lcdstring[i] |= SEGSWR4L; lcdstring[i+1] |= SEGSWR4H; break; case 5: lcdstring[i] |= SEGSWR5L; lcdstring[i+1] |= SEGSWR5H; break; case 6: lcdstring[i] |= SEGSWR6L; lcdstring[i+1] |= SEGSWR6H; break; case 7: lcdstring[i] |= SEGSWR7L; lcdstring[i+1] |= SEGSWR7H; break; case 8: lcdstring[i] |= SEGSWR8L; lcdstring[i+1] |= SEGSWR8H; break; case 9: lcdstring[i] |= SEGSWR9L; lcdstring[i+1] |= SEGSWR9H; break; } i++; } } // all updates to the UI must be from main thread // otherwise random segmentation faults may occur void tmate2_update (void *) { FreqDispA->value( vfoA.freq ); selrig->set_vfoA(vfoA.freq); FreqDispA->redraw(); } //Continuously read and write to TMATE2 void * tmate2_thread_loop (void *d) { unsigned short enc1 = 0; unsigned short enc2 = 0; unsigned short enc3 = 0; unsigned short keys = 0; unsigned short enc1old = 0; // unsigned short enc2old = 0; // unsigned short enc3old = 0; // unsigned short keysold = 0; if (!tmate2_read_value (&enc1, &enc2, &enc3, &keys)) { LOG_ERROR( "TMATE 2 error1"); } //this loop is feeding the LED and LCD and continuously read the value from the buttons for (;;) { tmate2_write_main_display (lcdstring, vfoA.freq); if (!tmate2_set_lcd (lcdstring)) { LOG_ERROR( "TMATE 2 error2"); } MilliSleep(150); enc1old = enc1; // enc2old = enc2; // enc3old = enc3; // keysold = keys; if (!tmate2_read_value (&enc1, &enc2, &enc3, &keys)) { LOG_ERROR( "TMATE 2 error3"); } //Main knob if ( (enc1old - enc1 != 0) && (enc1old - enc1 <10000) ) { //there is an overflow 0 one step backwards is 65535 //step size is transceiver dependent vfoA.freq = vfoA.freq + (enc1old - enc1) * atoi(progStatus.tmate2_freq_step.c_str()) ; Fl::awake (tmate2_update); } } return NULL; } int tmate2_open() { std::string str_device = progStatus.tmate2_device; memset (lcdstring,0x00,LCD_STRING_SIZE); //clear lcdstring[LED_STATUS] |= 0x01; //LED USB on lcdstring[BACKLIGTH_R] = 0; lcdstring[BACKLIGTH_G] = 255; lcdstring[BACKLIGTH_B] = 0; lcdstring[CONTRAST] = 0; //0 MAX 255 MIN lcdstring[LCD_REFRESH_TIME] = (char)(LcdRefreshTime_ms / 10); lcdstring[INCR_STEP_SPEED1] = (char)1; lcdstring[INCR_STEP_SPEED2] = (char)2; lcdstring[INCR_STEP_SPEED3] = (char)5; lcdstring[THR_SPEED_1_2] = 45; lcdstring[THR_SPEED_2_3] = 50; lcdstring[CHANGE_SPEED_EVAL_TIME] = (char)(ChangeSpeedEvalTime_ms / 10); tmate2_set_segment(lcdstring, SEG_HZ, TM_ON); tmate2_set_segment(lcdstring, SEG_VFO, TM_ON); tmate2_set_segment(lcdstring, SEG_A, TM_ON); if (str_device == "NONE") { progStatus.tmate2_connected = false; return -1; } tm2_dev_path = paths[str_device]; LOG_DEBUG("TMATE2 Device path: %s", tm2_dev_path.c_str()); tm2_dev = hid_open_path(tm2_dev_path); if (!tm2_dev) { LOG_ERROR( "unable to open TMATE2 device"); progStatus.tmate2_connected = false; return -1; } //start feeding the USB tmate_thread = new pthread_t; if (pthread_create(tmate_thread, NULL, tmate2_thread_loop, NULL)) { perror("pthread_create"); progStatus.tmate2_connected = false; exit(EXIT_FAILURE); } LOG_INFO("TMATE2 device %s opened", str_device.c_str()); progStatus.tmate2_connected = true; return 0; } void tmate2_init_hids() { std::string hidstr = "NONE"; hid_device_info *devs = 0; cbo_tmate2_dev->clear(); //Fl_ComboBox in xvcr_setup and as external in rigpanel.h paths.clear(); if (hid_init()) { cbo_tmate2_dev->add(hidstr.c_str()); return; } devs = hid_enumerate(VID, PID); // find all Elad TM2 devices currently only one supported but lets see std::string dev_name = "TMATE2-A"; while (devs) { LOG_INFO("\n\ HID : %s\n\ vendor id : %04hx\n\ product id : %04hx\n\ Manufacturer : %s\n\ Product : %s\n\ Serial Number : %s\n\ Release : %hx", dev_name.c_str(), devs->vendor_id, devs->product_id, devs->str_manufacturer_string.c_str(), devs->str_product_string.c_str(), devs->str_serial_number.c_str(), devs->release_number); hidstr.append("|").append(dev_name); paths[dev_name] = devs->path; ++dev_name[7]; // increment A->B->C... devs = devs->next; } cbo_tmate2_dev->add(hidstr.c_str()); cbo_tmate2_dev->value(progStatus.tmate2_device.c_str()); cbo_tmate2_freq_step->value(progStatus.tmate2_freq_step.c_str()); } flrig-2.0.04/src/cmedia/hid_mac.cxx0000664000175000017500000005613014475136651013765 00000000000000/*********************************************************************** HIDAPI - Multi-Platform library for communication with HID devices. hid_mac.cxx Alan Ott Signal 11 Software Copyright 2009, All Rights Reserved. C++ implementation * Copyright 2021 * David Freese, W1HKJ * for use in flrig This software is licensed under the terms of the GNU General Public License v3. ***********************************************************************/ /* See Apple Technical Note TN2187 for details on IOHidManager. */ /*********************************************************************** Tested on both Intel and M1 architecture ***********************************************************************/ #include #include "hidapi.h" #define UTF8 134217984 std::string wchar2str( char *WC ) { // size_t count = sizeof(WC); // char MB[count + 1]; // memset(MB, 0, count + 1); // size_t ret = wcstombs(MB, WC, count); static std::string retstr; // if (ret) retstr = MB; return retstr; } int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count) { if(count == 0) { errno = EINVAL; return -1; } if(pthread_mutex_init(&barrier->mutex, 0) < 0) { return -1; } if(pthread_cond_init(&barrier->cond, 0) < 0) { pthread_mutex_destroy(&barrier->mutex); return -1; } barrier->trip_count = count; barrier->count = 0; return 0; } int pthread_barrier_destroy(pthread_barrier_t *barrier) { pthread_cond_destroy(&barrier->cond); pthread_mutex_destroy(&barrier->mutex); return 0; } int pthread_barrier_wait(pthread_barrier_t *barrier) { pthread_mutex_lock(&barrier->mutex); ++(barrier->count); if(barrier->count >= barrier->trip_count) { barrier->count = 0; pthread_cond_broadcast(&barrier->cond); pthread_mutex_unlock(&barrier->mutex); return 1; } else { pthread_cond_wait(&barrier->cond, &(barrier->mutex)); pthread_mutex_unlock(&barrier->mutex); return 0; } } static IOHIDManagerRef hid_mgr = 0x0; void hid_device::register_error(const char *op) { } static int32_t get_int_property(IOHIDDeviceRef device, CFStringRef key) { CFTypeRef ref; int32_t value; ref = IOHIDDeviceGetProperty(device, key); if (ref) { if (CFGetTypeID(ref) == CFNumberGetTypeID()) { CFNumberGetValue((CFNumberRef) ref, kCFNumberSInt32Type, &value); return value; } } return 0; } static unsigned short get_vendor_id(IOHIDDeviceRef device) { return get_int_property(device, CFSTR(kIOHIDVendorIDKey)); } static unsigned short get_product_id(IOHIDDeviceRef device) { return get_int_property(device, CFSTR(kIOHIDProductIDKey)); } static int32_t get_max_report_length(IOHIDDeviceRef device) { return get_int_property(device, CFSTR(kIOHIDMaxInputReportSizeKey)); } static int get_string_property(IOHIDDeviceRef device, CFStringRef prop, char *buf, size_t len) { if (!len) return 0; CFStringRef str = reinterpret_cast(IOHIDDeviceGetProperty(device, prop)); UniChar ubuf[len]; memset(buf, 0, len); if (str) { CFIndex str_len = CFStringGetLength(str); CFRange range; range.location = 0; range.length = ((size_t)str_len > len)? len: (size_t)str_len; CFStringGetCharacters( str, range, ubuf); for (int i = 0; i < range.length; i++) buf[i] = ubuf[i]; return 0; } else return -1; } static int get_serial_number(IOHIDDeviceRef device, char *buf, size_t len) { return get_string_property(device, CFSTR(kIOHIDSerialNumberKey), buf, len); } static int get_manufacturer_string(IOHIDDeviceRef device, char *buf, size_t len) { return get_string_property(device, CFSTR(kIOHIDManufacturerKey), buf, len); } static int get_product_string(IOHIDDeviceRef device, char *buf, size_t len) { return get_string_property(device, CFSTR(kIOHIDProductKey), buf, len); } /* hidapi_IOHIDDeviceGetService() * * Return the io_service_t corresponding to a given IOHIDDeviceRef, either by: * - on OS X 10.6 and above, calling IOHIDDeviceGetService() * - on OS X 10.5, extract it from the IOHIDDevice struct */ static io_service_t hidapi_IOHIDDeviceGetService(IOHIDDeviceRef device) { static void *iokit_framework = NULL; static io_service_t (*dynamic_IOHIDDeviceGetService)(IOHIDDeviceRef device) = NULL; /* Use dlopen()/dlsym() to get a pointer to IOHIDDeviceGetService() if it exists. * If any of these steps fail, dynamic_IOHIDDeviceGetService will be left NULL * and the fallback method will be used. */ if (iokit_framework == NULL) { iokit_framework = dlopen("/System/Library/IOKit.framework/IOKit", RTLD_LAZY); if (iokit_framework != NULL) dynamic_IOHIDDeviceGetService = reinterpret_cast(dlsym(iokit_framework, "IOHIDDeviceGetService")); } if (dynamic_IOHIDDeviceGetService != NULL) { /* Running on OS X 10.6 and above: IOHIDDeviceGetService() exists */ return dynamic_IOHIDDeviceGetService(device); } else { /* Running on OS X 10.5: IOHIDDeviceGetService() doesn't exist. * * Be naughty and pull the service out of the IOHIDDevice. * IOHIDDevice is an opaque struct not exposed to applications, but its * layout is stable through all available versions of OS X. * Tested and working on OS X 10.5.8 i386, x86_64, and ppc. */ struct IOHIDDevice_internal { /* The first field of the IOHIDDevice struct is a * CFRuntimeBase (which is a private CF struct). * * a, b, and c are the 3 fields that make up a CFRuntimeBase. * See http://opensource.apple.com/source/CF/CF-476.18/CFRuntime.h * * The second field of the IOHIDDevice is the io_service_t we're looking for. */ uintptr_t a; uint8_t b[4]; #if __LP64__ uint32_t c; #endif io_service_t service; }; struct IOHIDDevice_internal *tmp = (struct IOHIDDevice_internal *)device; return tmp->service; } } /* Initialize the IOHIDManager. Return 0 for success and -1 for failure. */ static int init_hid_manager(void) { /* Initialize all the HID Manager Objects */ hid_mgr = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); if (hid_mgr) { IOHIDManagerSetDeviceMatching(hid_mgr, NULL); IOHIDManagerScheduleWithRunLoop(hid_mgr, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); return 0; } return -1; } /* Initialize the IOHIDManager if necessary. This is the public function, and it is safe to call this function repeatedly. Return 0 for success and -1 for failure. */ int hid_init(void) { if (!hid_mgr) { return init_hid_manager(); } /* Already initialized. */ return 0; } int hid_exit(void) { if (hid_mgr) { /* Close the HID manager. */ IOHIDManagerClose(hid_mgr, kIOHIDOptionsTypeNone); CFRelease(hid_mgr); hid_mgr = NULL; } return 0; } static void process_pending_events(void) { SInt32 res; do { res = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.001, FALSE); } while(res != kCFRunLoopRunFinished && res != kCFRunLoopRunTimedOut); } hid_device_info *hid_enumerate(unsigned short vendor_id, unsigned short product_id) { hid_device_info *root = NULL; /* return object */ hid_device_info *cur_dev = NULL; CFIndex num_devices; int i; /* Set up the HID Manager if it hasn't been done */ if (hid_init() < 0) return NULL; /* give the IOHIDManager a chance to update itself */ process_pending_events(); /* Get a list of the Devices */ IOHIDManagerSetDeviceMatching(hid_mgr, NULL); CFSetRef device_set = IOHIDManagerCopyDevices(hid_mgr); /* Convert the list into a C array so we can iterate easily. */ num_devices = CFSetGetCount(device_set); IOHIDDeviceRef *device_array = reinterpret_cast(calloc(num_devices, sizeof(IOHIDDeviceRef))); CFSetGetValues(device_set, (const void **) device_array); /* Iterate over each device, making an entry for it. */ for (i = 0; i < num_devices; i++) { unsigned short dev_vid; unsigned short dev_pid; #define BUF_LEN 256 char buf[BUF_LEN]; IOHIDDeviceRef dev = device_array[i]; if (!dev) { continue; } dev_vid = get_vendor_id(dev); dev_pid = get_product_id(dev); /* Check the VID/PID against the arguments */ if ((vendor_id == 0x0 || vendor_id == dev_vid) && (product_id == 0x0 || product_id == dev_pid)) { hid_device_info *tmp; io_object_t iokit_dev; kern_return_t res; io_string_t path; /* VID/PID match. Create the record. */ tmp = new hid_device_info; if (cur_dev) { cur_dev->next = tmp; } else { root = tmp; } cur_dev = tmp; /* Get the Usage Page and Usage for this device. */ cur_dev->usage_page = get_int_property(dev, CFSTR(kIOHIDPrimaryUsagePageKey)); cur_dev->usage = get_int_property(dev, CFSTR(kIOHIDPrimaryUsageKey)); /* Fill out the record */ cur_dev->next = NULL; /* Fill in the path (IOService plane) */ iokit_dev = hidapi_IOHIDDeviceGetService(dev); res = IORegistryEntryGetPath(iokit_dev, kIOServicePlane, path); if (res == KERN_SUCCESS) cur_dev->path = strdup(path); else cur_dev->path = strdup(""); /* Serial Number */ get_serial_number(dev, buf, BUF_LEN); cur_dev->str_serial_number = buf; /* Manufacturer and Product strings */ get_manufacturer_string(dev, buf, BUF_LEN); cur_dev->str_manufacturer_string = buf; get_product_string(dev, buf, BUF_LEN); std::cout << buf << std::endl; cur_dev->str_product_string = buf; /* VID/PID */ cur_dev->vendor_id = dev_vid; cur_dev->product_id = dev_pid; /* Release Number */ cur_dev->release_number = get_int_property(dev, CFSTR(kIOHIDVersionNumberKey)); /* Interface Number (Unsupported on Mac)*/ cur_dev->interface_number = -1; } } free(device_array); CFRelease(device_set); return root; } void hid_free_enumeration(hid_device_info *devs) { hid_device_info *d = devs; while (d) { hid_device_info *next = d->next; delete d; d = next; } } hid_device * hid_open(unsigned short vendor_id, unsigned short product_id, std::string serial_number) { /* This function is identical to the Linux version. Platform independent. */ hid_device_info *devs, *cur_dev; std::string path_to_open; hid_device * handle = NULL; path_to_open.clear(); devs = hid_enumerate(vendor_id, product_id); cur_dev = devs; while (cur_dev) { if (cur_dev->vendor_id == vendor_id && cur_dev->product_id == product_id) { if (!serial_number.empty() && (cur_dev->str_serial_number == serial_number) ) { path_to_open = cur_dev->path; break; } else { path_to_open = cur_dev->path; break; } } cur_dev = cur_dev->next; } if (!path_to_open.empty()) { /* Open the device */ handle = hid_open_path(path_to_open); } hid_free_enumeration(devs); return handle; } static void hid_device_removal_callback(void *context, IOReturn result, void *sender) { /* Stop the Run Loop for this device. */ hid_device *d = reinterpret_cast(context); d->disconnected = 1; CFRunLoopStop(d->run_loop); } /* The Run Loop calls this function for each input report received. This function puts the data into a linked list to be picked up by hid_read(). */ static void hid_report_callback(void *context, IOReturn result, void *sender, IOHIDReportType report_type, uint32_t report_id, uint8_t *report, CFIndex report_length) { input_report *rpt; hid_device *dev = reinterpret_cast(context); /* Make a new Input Report object */ rpt = reinterpret_cast(calloc(1, sizeof(input_report))); rpt->data = reinterpret_cast(calloc(1, report_length)); memcpy(rpt->data, report, report_length); rpt->len = report_length; rpt->next = NULL; /* Lock this section */ pthread_mutex_lock(&dev->mutex); /* Attach the new report object to the end of the list. */ if (dev->input_reports == NULL) { /* The list is empty. Put it at the root. */ dev->input_reports = rpt; } else { /* Find the end of the list and attach. */ input_report *cur = dev->input_reports; int num_queued = 0; while (cur->next != NULL) { cur = cur->next; num_queued++; } cur->next = rpt; /* Pop one off if we've reached 30 in the queue. This way we don't grow forever if the user never reads anything from the device. */ if (num_queued > 30) { dev->return_data(NULL, 0); } } /* Signal a waiting thread that there is data. */ pthread_cond_signal(&dev->condition); /* Unlock */ pthread_mutex_unlock(&dev->mutex); } /* This gets called when the read_thread's run loop gets signaled by hid_close(), and serves to stop the read_thread's run loop. */ static void perform_signal_callback(void *context) { hid_device *dev = reinterpret_cast(context); CFRunLoopStop(dev->run_loop); /*TODO: CFRunLoopGetCurrent()*/ } static void *read_thread(void *param) { hid_device *dev = reinterpret_cast(param); SInt32 code; /* Move the device's run loop to this thread. */ IOHIDDeviceScheduleWithRunLoop(dev->device_handle, CFRunLoopGetCurrent(), dev->run_loop_mode); /* Create the RunLoopSource which is used to signal the event loop to stop when hid_close() is called. */ CFRunLoopSourceContext ctx; memset(&ctx, 0, sizeof(ctx)); ctx.version = 0; ctx.info = dev; ctx.perform = &perform_signal_callback; dev->source = CFRunLoopSourceCreate(kCFAllocatorDefault, 0/*order*/, &ctx); CFRunLoopAddSource(CFRunLoopGetCurrent(), dev->source, dev->run_loop_mode); /* Store off the Run Loop so it can be stopped from hid_close() and on device disconnection. */ dev->run_loop = CFRunLoopGetCurrent(); /* Notify the main thread that the read thread is up and running. */ pthread_barrier_wait(&dev->barrier); /* Run the Event Loop. CFRunLoopRunInMode() will dispatch HID input reports into the hid_report_callback(). */ while (!dev->shutdown_thread && !dev->disconnected) { code = CFRunLoopRunInMode(dev->run_loop_mode, 1000/*sec*/, FALSE); /* Return if the device has been disconnected */ if (code == kCFRunLoopRunFinished) { dev->disconnected = 1; break; } /* Break if The Run Loop returns Finished or Stopped. */ if (code != kCFRunLoopRunTimedOut && code != kCFRunLoopRunHandledSource) { /* There was some kind of error. Setting shutdown seems to make sense, but there may be something else more appropriate */ dev->shutdown_thread = 1; break; } } /* Now that the read thread is stopping, Wake any threads which are waiting on data (in hid_read_timeout()). Do this under a mutex to make sure that a thread which is about to go to sleep waiting on the condition actually will go to sleep before the condition is signaled. */ pthread_mutex_lock(&dev->mutex); pthread_cond_broadcast(&dev->condition); pthread_mutex_unlock(&dev->mutex); /* Wait here until hid_close() is called and makes it past the call to CFRunLoopWakeUp(). This thread still needs to be valid when that function is called on the other thread. */ pthread_barrier_wait(&dev->shutdown_barrier); return NULL; } /* hid_open_path() * * path must be a valid path to an IOHIDDevice in the IOService plane * Example: "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/EHC1@1D,7/AppleUSBEHCI/PLAYSTATION(R)3 Controller@fd120000/IOUSBInterface@0/IOUSBHIDDriver" */ hid_device * hid_open_path(std::string path) { hid_device *dev = NULL; io_registry_entry_t entry = MACH_PORT_NULL; IOReturn ret; dev = new hid_device; /* Set up the HID Manager if it hasn't been done */ if (hid_init() < 0) return NULL; /* Get the IORegistry entry for the given path */ entry = IORegistryEntryFromPath(kIOMasterPortDefault, path.c_str()); if (entry == MACH_PORT_NULL) { /* Path wasn't valid (maybe device was removed?) */ goto return_error; } /* Create an IOHIDDevice for the entry */ dev->device_handle = IOHIDDeviceCreate(kCFAllocatorDefault, entry); if (dev->device_handle == NULL) { /* Error creating the HID device */ goto return_error; } /* Open the IOHIDDevice */ ret = IOHIDDeviceOpen(dev->device_handle, kIOHIDOptionsTypeSeizeDevice); if (ret == kIOReturnSuccess) { char str[32]; /* Create the buffers for receiving data */ dev->max_input_report_len = (CFIndex) get_max_report_length(dev->device_handle); dev->input_report_buf = reinterpret_cast(calloc(dev->max_input_report_len, sizeof(uint8_t))); /* Create the Run Loop Mode for this device. printing the reference seems to work. */ sprintf(str, "HIDAPI_%p", dev->device_handle); dev->run_loop_mode = CFStringCreateWithCString(NULL, str, kCFStringEncodingASCII); /* Attach the device to a Run Loop */ IOHIDDeviceRegisterInputReportCallback( dev->device_handle, dev->input_report_buf, dev->max_input_report_len, &hid_report_callback, dev); IOHIDDeviceRegisterRemovalCallback(dev->device_handle, hid_device_removal_callback, dev); /* Start the read thread */ pthread_create(&dev->thread, NULL, read_thread, dev); /* Wait here for the read thread to be initialized. */ pthread_barrier_wait(&dev->barrier); IOObjectRelease(entry); return dev; } else { goto return_error; } return_error: if (dev->device_handle != NULL) CFRelease(dev->device_handle); if (entry != MACH_PORT_NULL) IOObjectRelease(entry); delete dev; return NULL; } int hid_device::set_report(IOHIDReportType type, const unsigned char *data, size_t length) { const unsigned char *data_to_send; size_t length_to_send; IOReturn res; /* Return if the device has been disconnected. */ if (disconnected) return -1; if (data[0] == 0x0) { /* Not using numbered Reports. Don't send the report number. */ data_to_send = data+1; length_to_send = length-1; } else { /* Using numbered Reports. Send the Report Number */ data_to_send = data; length_to_send = length; } if (!disconnected) { res = IOHIDDeviceSetReport(device_handle, type, data[0], /* Report ID*/ data_to_send, length_to_send); if (res == kIOReturnSuccess) { return length; } else return -1; } return -1; } int hid_device::hid_write(const unsigned char *data, size_t length) { return set_report(kIOHIDReportTypeOutput, data, length); } /* Helper function, so that this isn't duplicated in hid_read(). */ int hid_device::return_data(unsigned char *data, size_t length) { /* Copy the data out of the linked list item (rpt) into the return buffer (data), and delete the liked list item. */ input_report *rpt = input_reports; size_t len = (length < rpt->len)? length: rpt->len; memcpy(data, rpt->data, len); input_reports = rpt->next; free(rpt->data); free(rpt); return len; } int hid_device::cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) { while (!input_reports) { int res = pthread_cond_wait(cond, mutex); if (res != 0) return res; /* A res of 0 means we may have been signaled or it may be a spurious wakeup. Check to see that there's acutally data in the queue before returning, and if not, go back to sleep. See the pthread_cond_timedwait() man page for details. */ if (shutdown_thread || disconnected) return -1; } return 0; } int hid_device::cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime) { while (!input_reports) { int res = pthread_cond_timedwait(cond, mutex, abstime); if (res != 0) return res; /* A res of 0 means we may have been signaled or it may be a spurious wakeup. Check to see that there's acutally data in the queue before returning, and if not, go back to sleep. See the pthread_cond_timedwait() man page for details. */ if (shutdown_thread || disconnected) return -1; } return 0; } int hid_device::hid_read_timeout(unsigned char *data, size_t length, int milliseconds) { int bytes_read = -1; /* Lock the access to the report list. */ pthread_mutex_lock(&mutex); /* There's an input report queued up. Return it. */ if (input_reports) { /* Return the first one */ bytes_read = return_data(data, length); goto ret; } /* Return if the device has been disconnected. */ if (disconnected) { bytes_read = -1; goto ret; } if (shutdown_thread) { /* This means the device has been closed (or there has been an error. An error code of -1 should be returned. */ bytes_read = -1; goto ret; } /* There is no data. Go to sleep and wait for data. */ if (milliseconds == -1) { /* Blocking */ int res; res = cond_wait(&condition, &mutex); if (res == 0) bytes_read = return_data(data, length); else { /* There was an error, or a device disconnection. */ bytes_read = -1; } } else if (milliseconds > 0) { /* Non-blocking, but called with timeout. */ int res; struct timespec ts; struct timeval tv; gettimeofday(&tv, NULL); TIMEVAL_TO_TIMESPEC(&tv, &ts); ts.tv_sec += milliseconds / 1000; ts.tv_nsec += (milliseconds % 1000) * 1000000; if (ts.tv_nsec >= 1000000000L) { ts.tv_sec++; ts.tv_nsec -= 1000000000L; } res = cond_timedwait(&condition, &mutex, &ts); if (res == 0) bytes_read = return_data(data, length); else if (res == ETIMEDOUT) bytes_read = 0; else bytes_read = -1; } else { /* Purely non-blocking */ bytes_read = 0; } ret: /* Unlock */ pthread_mutex_unlock(&mutex); return bytes_read; } int hid_device::hid_read(unsigned char *data, size_t length) { return hid_read_timeout(data, length, (blocking)? -1: 0); } int hid_device::hid_set_nonblocking(int nonblock) { /* All Nonblocking operation is handled by the library. */ blocking = !nonblock; return 0; } int hid_device::hid_send_feature_report(const unsigned char *data, size_t length) { return set_report(kIOHIDReportTypeFeature, data, length); } int hid_device::hid_get_feature_report(unsigned char *data, size_t length) { CFIndex len = length; IOReturn res; /* Return if the device has been unplugged. */ if (disconnected) return -1; res = IOHIDDeviceGetReport(device_handle, kIOHIDReportTypeFeature, data[0], /* Report ID */ data, &len); if (res == kIOReturnSuccess) return len; else return -1; } void hid_device::hid_close() { /* Disconnect the report callback before close. */ if (!disconnected) { IOHIDDeviceRegisterInputReportCallback( device_handle, input_report_buf, max_input_report_len, NULL, this); IOHIDDeviceRegisterRemovalCallback(device_handle, NULL, this); IOHIDDeviceUnscheduleFromRunLoop(device_handle, run_loop, run_loop_mode); IOHIDDeviceScheduleWithRunLoop(device_handle, CFRunLoopGetMain(), kCFRunLoopDefaultMode); } /* Cause read_thread() to stop. */ shutdown_thread = 1; /* Wake up the run thread's event loop so that the thread can exit. */ CFRunLoopSourceSignal(source); CFRunLoopWakeUp(run_loop); /* Notify the read thread that it can shut down now. */ pthread_barrier_wait(&shutdown_barrier); /* Wait for read_thread() to end. */ pthread_join(thread, NULL); /* Close the OS handle to the device, but only if it's not been unplugged. If it's been unplugged, then calling IOHIDDeviceClose() will crash. */ if (!disconnected) { IOHIDDeviceClose(device_handle, kIOHIDOptionsTypeSeizeDevice); } /* Clear out the queue of received reports. */ pthread_mutex_lock(&mutex); while (input_reports) { return_data(NULL, 0); } pthread_mutex_unlock(&mutex); CFRelease(device_handle); // delete dev; } const char * hid_device::hid_error() { return "HID error string not implemented"; } flrig-2.0.04/src/cmedia/hid_lin.cxx0000664000175000017500000003256214475136651014012 00000000000000/*********************************************************************** HIDAPI - Multi-Platform library for communication with HID devices. hid_lin.cxx Alan Ott Signal 11 Software Copyright 2009, All Rights Reserved. C++ implementation * Copyright 2021 * David Freese, W1HKJ * for use in flrig This software is licensed under the terms of the GNU General Public License v3. ***********************************************************************/ #include /* C */ #include #include #include #include #include /* Unix */ #include #include #include #include #include #include #include /* Linux */ #include #include #include #include #include "hidapi.h" /* Definitions from linux/hidraw.h. Since these are new, some distros may not have header files which contain them. */ #ifndef HIDIOCSFEATURE #define HIDIOCSFEATURE(len) _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len) #endif #ifndef HIDIOCGFEATURE #define HIDIOCGFEATURE(len) _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x07, len) #endif /* uses_numbered_reports() returns 1 if report_descriptor describes a device which contains numbered reports. */ static int uses_numbered_reports(__u8 *report_descriptor, __u32 size) { unsigned int i = 0; int size_code; int data_len, key_size; while (i < size) { int key = report_descriptor[i]; /* Check for the Report ID key */ if (key == 0x85/*Report ID*/) { /* This device has a Report ID, which means it uses numbered reports. */ return 1; } //printf("key: %02hhx\n", key); if ((key & 0xf0) == 0xf0) { /* This is a Long Item. The next byte contains the length of the data section (value) for this key. See the HID specification, version 1.11, section 6.2.2.3, titled "Long Items." */ if (i+1 < size) data_len = report_descriptor[i+1]; else data_len = 0; /* malformed report */ key_size = 3; } else { /* This is a Short Item. The bottom two bits of the key contain the size code for the data section (value) for this key. Refer to the HID specification, version 1.11, section 6.2.2.2, titled "Short Items." */ size_code = key & 0x3; switch (size_code) { case 0: case 1: case 2: data_len = size_code; break; case 3: data_len = 4; break; default: /* Can't ever happen since size_code is & 0x3 */ data_len = 0; break; }; key_size = 1; } /* Skip over this key and it's associated data */ i += data_len + key_size; } /* Didn't find a Report ID key. Device doesn't use numbered reports. */ return 0; } /* * The caller is responsible for free()ing the (newly-allocated) character * strings pointed to by serial_number_utf8 and product_name_utf8 after use. */ static int parse_uevent_info(const char *uevent, int *bus_type, unsigned short *vendor_id, unsigned short *product_id, char **serial_number_utf8, char **product_name_utf8) { char *tmp = strdup(uevent); char *saveptr = NULL; char *line; char *key; char *value; int found_id = 0; int found_serial = 0; int found_name = 0; line = strtok_r(tmp, "\n", &saveptr); while (line != NULL) { /* line: "KEY=value" */ key = line; value = strchr(line, '='); if (!value) { goto next_line; } *value = '\0'; value++; if (strcmp(key, "HID_ID") == 0) { /** * type vendor product * HID_ID=0003:000005AC:00008242 **/ int ret = sscanf(value, "%x:%hx:%hx", bus_type, vendor_id, product_id); if (ret == 3) { found_id = 1; } } else if (strcmp(key, "HID_NAME") == 0) { /* The caller has to free the product name */ *product_name_utf8 = strdup(value); found_name = 1; } else if (strcmp(key, "HID_UNIQ") == 0) { /* The caller has to free the serial number */ *serial_number_utf8 = strdup(value); found_serial = 1; } next_line: line = strtok_r(NULL, "\n", &saveptr); } free(tmp); return (found_id && found_name && found_serial); } int hid_init(void) { const char *locale; /* Set the locale if it's not set. */ locale = setlocale(LC_CTYPE, NULL); if (!locale) setlocale(LC_CTYPE, ""); return 0; } int hid_exit(void) { /* Nothing to do for this in the Linux/hidraw implementation. */ return 0; } hid_device_info *hid_enumerate(unsigned short vendor_id, unsigned short product_id) { struct udev *udev; struct udev_enumerate *enumerate; struct udev_list_entry *devices, *dev_list_entry; hid_device_info *root = NULL; /* return object */ hid_device_info *cur_dev = NULL; hid_device_info *prev_dev = NULL; /* previous device */ hid_init(); /* Create the udev object */ udev = udev_new(); if (!udev) { printf("Can't create udev\n"); return NULL; } /* Create a list of the devices in the 'hidraw' subsystem. */ enumerate = udev_enumerate_new(udev); udev_enumerate_add_match_subsystem(enumerate, "hidraw"); udev_enumerate_scan_devices(enumerate); devices = udev_enumerate_get_list_entry(enumerate); /* For each item, see if it matches the vid/pid, and if so create a udev_device record for it */ udev_list_entry_foreach(dev_list_entry, devices) { const char *sysfs_path; const char *dev_path; const char *str; struct udev_device *raw_dev; /* The device's hidraw udev node. */ struct udev_device *hid_dev; /* The device's HID udev node. */ struct udev_device *usb_dev; /* The device's USB udev node. */ struct udev_device *intf_dev; /* The device's interface (in the USB sense). */ unsigned short dev_vid; unsigned short dev_pid; char *serial_number_utf8 = NULL; char *product_name_utf8 = NULL; int bus_type; int result; /* Get the filename of the /sys entry for the device and create a udev_device object (dev) representing it */ sysfs_path = udev_list_entry_get_name(dev_list_entry); raw_dev = udev_device_new_from_syspath(udev, sysfs_path); dev_path = udev_device_get_devnode(raw_dev); hid_dev = udev_device_get_parent_with_subsystem_devtype( raw_dev, "hid", NULL); if (!hid_dev) { /* Unable to find parent hid device. */ goto next; } result = parse_uevent_info( udev_device_get_sysattr_value(hid_dev, "uevent"), &bus_type, &dev_vid, &dev_pid, &serial_number_utf8, &product_name_utf8); if (!result) { /* parse_uevent_info() failed for at least one field. */ goto next; } if (bus_type != BUS_USB && bus_type != BUS_BLUETOOTH) { /* We only know how to handle USB and BT devices. */ goto next; } /* Check the VID/PID against the arguments */ if ((vendor_id == 0x0 || vendor_id == dev_vid) && (product_id == 0x0 || product_id == dev_pid)) { hid_device_info *tmp = new hid_device_info; if (cur_dev) { cur_dev->next = tmp; } else { root = tmp; } prev_dev = cur_dev; cur_dev = tmp; /* Fill out the record */ cur_dev->next = NULL; cur_dev->path.assign(dev_path ? dev_path : ""); /* VID/PID */ cur_dev->vendor_id = dev_vid; cur_dev->product_id = dev_pid; /* Serial Number */ cur_dev->str_serial_number.assign(serial_number_utf8); /* Release Number */ cur_dev->release_number = 0x0; /* Interface Number */ cur_dev->interface_number = -1; switch (bus_type) { case BUS_USB: /* The device pointed to by raw_dev contains information about the hidraw device. In order to get information about the USB device, get the parent device with the subsystem/devtype pair of "usb"/"usb_device". This will be several levels up the tree, but the function will find it. */ usb_dev = udev_device_get_parent_with_subsystem_devtype( raw_dev, "usb", "usb_device"); if (!usb_dev) { delete cur_dev; /* Take it off the device list. */ if (prev_dev) { prev_dev->next = NULL; cur_dev = prev_dev; } else { cur_dev = root = NULL; } goto next; } /* Manufacturer and Product strings */ str = udev_device_get_sysattr_value(usb_dev, "manufacturer"); if (str) cur_dev->str_manufacturer_string.assign(str); str = udev_device_get_sysattr_value(usb_dev, "product"); if (str) cur_dev->str_product_string.assign(str); /* Release Number */ str = udev_device_get_sysattr_value(usb_dev, "bcdDevice"); if (str) cur_dev->release_number = strtol(str, NULL, 16); else cur_dev = 0x0; /* Get a handle to the interface's udev node. */ intf_dev = udev_device_get_parent_with_subsystem_devtype( raw_dev, "usb", "usb_interface"); if (intf_dev) { str = udev_device_get_sysattr_value(intf_dev, "bInterfaceNumber"); cur_dev->interface_number = (str)? strtol(str, NULL, 16): -1; } break; case BUS_BLUETOOTH: /* Manufacturer and Product strings */ cur_dev->str_product_string.assign(product_name_utf8); break; default: /* Unknown device type - this should never happen, as we * check for USB and Bluetooth devices above */ break; } } next: free(serial_number_utf8); free(product_name_utf8); udev_device_unref(raw_dev); /* hid_dev, usb_dev and intf_dev don't need to be (and can't be) unref()d. It will cause a double-free() error. I'm not sure why. */ } /* Free the enumerator and udev objects. */ udev_enumerate_unref(enumerate); udev_unref(udev); return root; } void hid_free_enumeration(hid_device_info *devs) { hid_device_info *d = devs; while (d) { hid_device_info *next = d->next; delete d; d = next; } } hid_device * hid_open(unsigned short vendor_id, unsigned short product_id, std::string serial_number) { hid_device_info *devs, *cur_dev; hid_device *device = NULL; std::string path_to_open; devs = hid_enumerate(vendor_id, product_id); cur_dev = devs; while (cur_dev) { if (cur_dev->vendor_id == vendor_id && cur_dev->product_id == product_id) { if (!serial_number.empty() && (cur_dev->str_serial_number == serial_number) ) { path_to_open = cur_dev->path; break; } else { path_to_open = cur_dev->path; break; } } cur_dev = cur_dev->next; } if (!path_to_open.empty()) { /* Open the device */ device = hid_open_path(path_to_open); } hid_free_enumeration(devs); return device; } hid_device * hid_open_path(std::string path) { hid_device *dev = new hid_device; hid_init(); /* OPEN HERE */ dev->device_handle = open(path.c_str(), O_RDWR); /* If we have a good handle, return it. */ if (dev->device_handle > 0) { /* Get the report descriptor */ int res, desc_size = 0; struct hidraw_report_descriptor rpt_desc; memset(&rpt_desc, 0x0, sizeof(rpt_desc)); /* Get Report Descriptor Size */ res = ioctl(dev->device_handle, HIDIOCGRDESCSIZE, &desc_size); if (res < 0) perror("HIDIOCGRDESCSIZE"); /* Get Report Descriptor */ rpt_desc.size = desc_size; res = ioctl(dev->device_handle, HIDIOCGRDESC, &rpt_desc); if (res < 0) { perror("HIDIOCGRDESC"); } else { /* Determine if this device uses numbered reports. */ dev->uses_numbered_reports = uses_numbered_reports(rpt_desc.value, rpt_desc.size); } return dev; } else { /* Unable to open any devices. */ delete dev; return (hid_device *)0; } } int hid_device::hid_write(const unsigned char *data, size_t length) { int bytes_written; bytes_written = write(device_handle, data, length); return bytes_written; } int hid_device::hid_read_timeout(unsigned char *data, size_t length, int milliseconds) { int bytes_read; if (milliseconds >= 0) { /* Milliseconds is either 0 (non-blocking) or > 0 (contains a valid timeout). In both cases we want to call poll() and wait for data to arrive. Don't rely on non-blocking operation (O_NONBLOCK) since some kernels don't seem to properly report device disconnection through read() when in non-blocking mode. */ int ret; struct pollfd fds; fds.fd = device_handle; fds.events = POLLIN; fds.revents = 0; ret = poll(&fds, 1, milliseconds); if (ret == -1 || ret == 0) { /* Error or timeout */ return ret; } else { /* Check for errors on the file descriptor. This will indicate a device disconnection. */ if (fds.revents & (POLLERR | POLLHUP | POLLNVAL)) return -1; } } bytes_read = read(device_handle, data, length); if (bytes_read < 0 && (errno == EAGAIN || errno == EINPROGRESS)) bytes_read = 0; return bytes_read; } int hid_device::hid_read(unsigned char *data, size_t length) { return hid_read_timeout(data, length, (blocking)? -1: 0); } int hid_device::hid_set_nonblocking(int nonblock) { /* Do all non-blocking in userspace using poll(), since it looks like there's a bug in the kernel in some versions where read() will not return -1 on disconnection of the USB device */ blocking = !nonblock; return 0; /* Success */ } int hid_device::hid_send_feature_report(const unsigned char *data, size_t length) { int res; res = ioctl(device_handle, HIDIOCSFEATURE(length), data); if (res < 0) perror("ioctl (SFEATURE)"); return res; } int hid_device::hid_get_feature_report(unsigned char *data, size_t length) { int res; res = ioctl(device_handle, HIDIOCGFEATURE(length), data); if (res < 0) perror("ioctl (GFEATURE)"); return res; } void hid_device::hid_close() { close(device_handle); } const char *hid_device::hid_error() { return "HID error string not implemented"; } flrig-2.0.04/src/flrig_icon.cxx0000664000175000017500000004153514475136651013275 00000000000000// ---------------------------------------------------------------------------- // Copyright (C) 2014 // David Freese, W1HKJ // // This file is part of flrig. // // flrig is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // flrig is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // ---------------------------------------------------------------------------- /* XPM */ const char * flrig_icon[] = { "48 48 719 2", " c None", ". c #2F2F2F", "+ c #2D2D2D", "@ c #2E2E2E", "# c #303030", "$ c #2C2C2C", "% c #313131", "& c #424242", "* c #2B2B2B", "= c #505050", "- c #393939", "; c #404040", "> c #333333", ", c #383838", "' c #323232", ") c #3A3A3A", "! c #3D3D3D", "~ c #4B4B4B", "{ c #484848", "] c #353535", "^ c #3B3B3B", "/ c #3C3C3C", "( c #363636", "_ c #444444", ": c #373737", "< c #787878", "[ c #4D4D4D", "} c #181818", "| c #A8A8A8", "1 c #3F3F3F", "2 c #343434", "3 c #7E7E7E", "4 c #434343", "5 c #747474", "6 c #636363", "7 c #2E2E2F", "8 c #676767", "9 c #252525", "0 c #222222", "a c #9E9E9E", "b c #525252", "c c #4E5050", "d c #242424", "e c #606060", "f c #888888", "g c #282828", "h c #898989", "i c #414141", "j c #717171", "k c #555555", "l c #878787", "m c #6A6A6A", "n c #565656", "o c #838383", "p c #2F2F30", "q c #8B8B8B", "r c #272727", "s c #7B7973", "t c #54524B", "u c #3A3832", "v c #52504A", "w c #44423C", "x c #494741", "y c #46433E", "z c #504E49", "A c #36342F", "B c #474540", "C c #43403D", "D c #45423E", "E c #3D3B37", "F c #36332F", "G c #46433F", "H c #4A4843", "I c #44423D", "J c #5D5A55", "K c #322F2A", "L c #37342F", "M c #3D3B35", "N c #3F3D37", "O c #45433C", "P c #3C3A33", "Q c #424039", "R c #44413A", "S c #393730", "T c #39372F", "U c #4F4D44", "V c #37352D", "W c #4A4840", "X c #46443C", "Y c #35332B", "Z c #36342B", "` c #49483E", " . c #424038", ".. c #37352F", "+. c #3C3A32", "@. c #D3C326", "#. c #D7C52A", "$. c #D8C72C", "%. c #D6C42C", "&. c #D7C62E", "*. c #D7C829", "=. c #E0CD36", "-. c #D9C63A", ";. c #D7C52F", ">. c #D9C632", ",. c #D8C431", "'. c #D9C532", "). c #E0CC31", "!. c #E7D333", "~. c #D7C331", "{. c #E1CE33", "]. c #DBC832", "^. c #DAC730", "/. c #EAD62F", "(. c #D9C62D", "_. c #DAC72F", ":. c #E0CE2F", "<. c #E9D62D", "[. c #E9D62C", "}. c #DFCD2A", "|. c #E7D42A", "1. c #E8D629", "2. c #E9D728", "3. c #DAC827", "4. c #E9D626", "5. c #E8D725", "6. c #E8D624", "7. c #DBCA26", "8. c #E9D725", "9. c #E7D626", "0. c #E1D026", "a. c #E8D625", "b. c #E0D023", "c. c #D9C926", "d. c #DAC926", "e. c #DACA26", "f. c #D8CA25", "g. c #FFF206", "h. c #FFF205", "i. c #FFF500", "j. c #FFD548", "k. c #7D6831", "l. c #FBD16A", "m. c #FDEC10", "n. c #E3D605", "o. c #918021", "p. c #322D0A", "q. c #FFFF06", "r. c #837C05", "s. c #E2D505", "t. c #F1E405", "u. c #000000", "v. c #FFF306", "w. c #928A05", "x. c #111103", "y. c #0F0F03", "z. c #978F05", "A. c #403C04", "B. c #111003", "C. c #0C0B03", "D. c #F2E506", "E. c #121103", "F. c #050503", "G. c #F1E406", "H. c #040302", "I. c #3F3C04", "J. c #9F9705", "K. c #898205", "L. c #FFF406", "M. c #FFF107", "N. c #FAE80E", "O. c #F6E219", "P. c #FCE62E", "Q. c #F5CE64", "R. c #EABE40", "S. c #AC8449", "T. c #F5DE19", "U. c #FFF106", "V. c #DED106", "W. c #817A04", "X. c #FFFF07", "Y. c #716B05", "Z. c #EBDE06", "`. c #22200B", " + c #FFFF08", ".+ c #030303", "++ c #6F6905", "@+ c #CCC106", "#+ c #F1E306", "$+ c #100F04", "%+ c #777105", "&+ c #ECDF06", "*+ c #0C0C04", "=+ c #F8EB06", "-+ c #FFFE07", ";+ c #131204", ">+ c #807905", ",+ c #FFFB07", "'+ c #FEF006", ")+ c #FFF207", "!+ c #E1D506", "~+ c #DDD106", "{+ c #EEE106", "]+ c #E5C62B", "^+ c #C1944E", "/+ c #A68258", "(+ c #DFC32E", "_+ c #CBA750", ":+ c #B08654", "<+ c #E1C931", "[+ c #D9B34C", "}+ c #AA7661", "|+ c #FFF702", "1+ c #787205", "2+ c #938B06", "3+ c #706A05", "4+ c #292705", "5+ c #DDD201", "6+ c #FFF724", "7+ c #645E0B", "8+ c #767006", "9+ c #FFF907", "0+ c #C9BE06", "a+ c #726C05", "b+ c #D0C406", "c+ c #E4D706", "d+ c #867F06", "e+ c #6D6705", "f+ c #767005", "g+ c #121104", "h+ c #D9CD06", "i+ c #706A04", "j+ c #C0B506", "k+ c #827B06", "l+ c #6E6805", "m+ c #B7AD06", "n+ c #80633B", "o+ c #D0AE6F", "p+ c #745C39", "q+ c #D5AD73", "r+ c #987A4F", "s+ c #D3A76B", "t+ c #F8E80D", "u+ c #F7E512", "v+ c #F7E511", "w+ c #FFF807", "x+ c #DED206", "y+ c #5F5B02", "z+ c #EBD836", "A+ c #2C2A01", "B+ c #F6E906", "C+ c #797405", "D+ c #EFE206", "E+ c #EADE06", "F+ c #756E05", "G+ c #252305", "H+ c #F4E606", "I+ c #040403", "J+ c #141304", "K+ c #8A8206", "L+ c #EFE005", "M+ c #EADB18", "N+ c #656004", "O+ c #FFF307", "P+ c #695130", "Q+ c #634C2D", "R+ c #695131", "S+ c #644C2D", "T+ c #624B2D", "U+ c #A8814E", "V+ c #FFED0E", "W+ c #FBE812", "X+ c #FEF007", "Y+ c #EEE103", "Z+ c #111004", "`+ c #040303", " @ c #FFFD07", ".@ c #302E05", "+@ c #3C3905", "@@ c #0B0A04", "#@ c #E3D706", "$@ c #F0E306", "%@ c #000001", "&@ c #2E2C05", "*@ c #302E04", "=@ c #967E55", "-@ c #AE8656", ";@ c #A38655", ">@ c #997E53", ",@ c #AD8456", "'@ c #C89E6C", ")@ c #DFAF75", "!@ c #DAA974", "~@ c #EDC33C", "{@ c #FFF304", "]@ c #FDEF06", "^@ c #A08249", "/@ c #FFF90B", "(@ c #C49B50", "_@ c #BB924F", ":@ c #FFF20F", "<@ c #FFEF10", "[@ c #C59060", "}@ c #C99162", "|@ c #FBE11D", "1@ c #FFF400", "2@ c #FFF301", "3@ c #FFF402", "4@ c #FFF201", "5@ c #FFF204", "6@ c #FFF503", "7@ c #FFF903", "8@ c #FFF603", "9@ c #FFF602", "0@ c #FFF300", "a@ c #F9C06B", "b@ c #E0B76C", "c@ c #D6A95F", "d@ c #FDCD64", "e@ c #EFCE2F", "f@ c #FFF007", "g@ c #FFF006", "h@ c #E2CB30", "i@ c #BD9841", "j@ c #FBED06", "k@ c #DBCF06", "l@ c #DCD006", "m@ c #FCEF06", "n@ c #E3D606", "o@ c #B8A31E", "p@ c #DDCD0E", "q@ c #FFF601", "r@ c #FFF203", "s@ c #F6D132", "t@ c #E5CC32", "u@ c #E7CA30", "v@ c #FFDF29", "w@ c #F5E114", "x@ c #FFF403", "y@ c #FFEE15", "z@ c #FFF609", "A@ c #F9DD1E", "B@ c #E4CA1D", "C@ c #FFF804", "D@ c #EDE006", "E@ c #E4D806", "F@ c #282707", "G@ c #000002", "H@ c #282705", "I@ c #7A7405", "J@ c #F8EA07", "K@ c #201F05", "L@ c #080704", "M@ c #817A06", "N@ c #6B6605", "O@ c #E2D606", "P@ c #777005", "Q@ c #BFB406", "R@ c #261E1C", "S@ c #8E6B40", "T@ c #FFED12", "U@ c #C99B52", "V@ c #ECD73A", "W@ c #FFF105", "X@ c #BB9737", "Y@ c #D6AE38", "Z@ c #D5AE32", "`@ c #DCB83B", " # c #B2903C", ".# c #A78222", "+# c #EDC12C", "@# c #D3AE23", "## c #D7B31F", "$# c #C2A61D", "%# c #FFF605", "&# c #FFF507", "*# c #948B06", "=# c #827A08", "-# c #151404", ";# c #E0D406", "># c #E5D806", ",# c #28240A", "'# c #6D5B35", ")# c #F5E60F", "!# c #FEF204", "~# c #FFDB36", "{# c #FDDE1C", "]# c #E2B54A", "^# c #FEF108", "/# c #FFF703", "(# c #FFF705", "_# c #FFF505", ":# c #FFF405", "<# c #5D5805", "[# c #DFD206", "}# c #6B660A", "|# c #0D0C05", "1# c #F9E612", "2# c #0C0B06", "3# c #646008", "4# c #DDD006", "5# c #756F05", "6# c #FFF707", "7# c #FFFF02", "8# c #FFFF00", "9# c #FFF701", "0# c #FFF800", "a# c #FFE90E", "b# c #F4DA21", "c# c #F1DA25", "d# c #FFF801", "e# c #FFF604", "f# c #F5E803", "g# c #756F02", "h# c #6D6802", "i# c #FDF003", "j# c #746E02", "k# c #7C7602", "l# c #FAED03", "m# c #6B6702", "n# c #7C7702", "o# c #FAED04", "p# c #6C6702", "q# c #FFF704", "r# c #BCB203", "s# c #F3E603", "t# c #B99F49", "u# c #B99F47", "v# c #B9A147", "w# c #B9A145", "x# c #B9A144", "y# c #B9A244", "z# c #B9A141", "A# c #B9A240", "B# c #B9A23F", "C# c #B8A23E", "D# c #B9A33E", "E# c #B9A33A", "F# c #B9A339", "G# c #B9A338", "H# c #B9A436", "I# c #B9A435", "J# c #B9A432", "K# c #B9A532", "L# c #B9A530", "M# c #B9A630", "N# c #B8A630", "O# c #BCA831", "P# c #BCA930", "Q# c #B9A531", "R# c #BCA830", "S# c #BCA82F", "T# c #BCAA2F", "U# c #BAA62F", "V# c #BEAC2F", "W# c #BDAA30", "X# c #BEAA30", "Y# c #C0AC31", "Z# c #BFAB30", "`# c #C0AE31", " $ c #C2AE32", ".$ c #C0AE32", "+$ c #C1AD32", "@$ c #B8A52E", "#$ c #B4A22E", "$$ c #B4A12C", "%$ c #B79E3D", "&$ c #25272C", "*$ c #25262C", "=$ c #25262D", "-$ c #24262D", ";$ c #25262E", ">$ c #23242B", ",$ c #25272F", "'$ c #25262F", ")$ c #262730", "!$ c #2C2D35", "~$ c #2D2E37", "{$ c #2F3138", "]$ c #303239", "^$ c #32333C", "/$ c #35363D", "($ c #35373E", "_$ c #373940", ":$ c #2D2F36", "<$ c #24252D", "[$ c #181A21", "}$ c #101116", "|$ c #15161C", "1$ c #191A1F", "2$ c #343433", "3$ c #353536", "4$ c #2B2B2A", "5$ c #353534", "6$ c #3C3C3B", "7$ c #3F3E3E", "8$ c #2A2B2B", "9$ c #2B2C2C", "0$ c #232322", "a$ c #414242", "b$ c #464646", "c$ c #454545", "d$ c #474747", "e$ c #4E4E4E", "f$ c #4F4F4F", "g$ c #494949", "h$ c #434344", "i$ c #454444", "j$ c #171717", "k$ c #141414", "l$ c #181718", "m$ c #0C0C0B", "n$ c #1E1E1E", "o$ c #232323", "p$ c #0D0D0D", "q$ c #0E0E0E", "r$ c #1F1F1F", "s$ c #262626", "t$ c #1C1C1C", "u$ c #1B1B1B", "v$ c #202020", "w$ c #1A1A1A", "x$ c #212121", "y$ c #0C0C0C", "z$ c #333A31", "A$ c #4D5A47", "B$ c #111211", "C$ c #232223", "D$ c #525452", "E$ c #434C44", "F$ c #424441", "G$ c #111111", "H$ c #131313", "I$ c #121212", "J$ c #1D1D1D", "K$ c #0F0F0F", "L$ c #5C5C5C", "M$ c #6D6D6D", "N$ c #626262", "O$ c #101010", "P$ c #151515", "Q$ c #2B2A2B", "R$ c #342E29", "S$ c #322E29", "T$ c #3B632C", "U$ c #58AA3C", "V$ c #151A16", "W$ c #090809", "X$ c #1D271E", "Y$ c #28512A", "Z$ c #233122", "`$ c #8A8A8A", " % c #7A7A7A", ".% c #5D5D5D", "+% c #4A4A4A", "@% c #545454", "#% c #514E4B", "$% c #947041", "%% c #906C3C", "&% c #110E11", "*% c #3C343E", "=% c #605F60", "-% c #6B6B6B", ";% c #5E5D5E", ">% c #3B373B", ",% c #5B5B5B", "'% c #AAAAAA", ")% c #292929", "!% c #3E3E3E", "~% c #ABABAB", "{% c #5A5A5A", "]% c #555453", "^% c #735F42", "/% c #6C593F", "(% c #808080", "_% c #5E5E5E", ":% c #535353", "<% c #959595", "[% c #848484", "}% c #666666", "|% c #868686", "1% c #111110", "2% c #3C3B3B", "3% c #4A4032", "4% c #4A4034", "5% c #5F5F5F", "6% c #595959", "7% c #AEAEAE", "8% c #B7B7B7", "9% c #B9B9B9", "0% c #111112", "a% c #26251D", "b% c #3B3B29", "c% c #2B2B1F", "d% c #646464", "e% c #BABABA", "f% c #191919", "g% c #3F3E24", "h% c #615F30", "i% c #787741", "j% c #6C6C6C", "k% c #B8B8B8", "l% c #BCBCBC", "m% c #939393", "n% c #131312", "o% c #0E0E0F", "p% c #0D0E0E", "q% c #0B0B0C", "r% c #646465", "s% c #121213", "t% c #C3C3C3", "u% c #A7A7A7", "v% c #8C8C8C", "w% c #202019", "x% c #1B1C16", "y% c #626251", "z% c #131310", "A% c #1A1A17", "B% c #202018", "C% c #161614", "D% c #A2A2A2", "E% c #585858", "F% c #696969", "G% c #686739", "H% c #50502E", "I% c #19191A", "J% c #3B3A1F", "K% c #34331D", "L% c #383828", "M% c #47472F", "N% c #24241E", "O% c #656565", "P% c #535354", "Q% c #777777", "R% c #6D6D6E", "S% c #151513", "T% c #151514", "U% c #141413", "V% c #707070", "W% c #757575", "X% c #0F0F10", "Y% c #33331F", "Z% c #555535", "`% c #5F5D38", " & c #61603B", ".& c #0B0B0B", "+& c #767676", "@& c #797979", "#& c #101011", "$& c #333320", "%& c #383723", "&& c #2E2E1D", "*& c #454345", "=& c #565359", "-& c #363737", ";& c #5D5B5D", ">& c #494849", ",& c #575757", "'& c #515151", ")& c #121211", "!& c #0B0C0C", "~& c #0C0C0D", "{& c #131213", "]& c #355228", "^& c #538C37", "/& c #151B16", "(& c #100E10", "_& c #1E271F", ":& c #244526", "<& c #1D2B1E", "[& c #182716", "}& c #405F3A", "|& c #3C3E3D", "1& c #424142", "2& c #414542", "3& c #334033", "4& c #141814", "5& c #727272", "6& c #858585", "7& c #353435", "8& c #6F6E6F", "9& c #3D3C3D", "0& c #272828", "a& c #ADADAD", "b& c #21221A", "c& c #2E2D1E", "d& c #3F3E2A", "e& c #8D8D8D", "f& c #999999", "g& c #393727", "h& c #45442A", "i& c #434325", "j& c #161616", "k& c #6E6E6E", "l& c #0F0F11", "m& c #0D0D0F", "n& c #100F11", "o& c #0C0C0F", "p& c #0B0B0E", "q& c #0C0C0E", "r& c #3C3C22", "s& c #5B5B37", "t& c #171715", "u& c #2A2A2C", "v& c #54542F", "w& c #444429", "x& c #6B6A33", "y& c #797749", "z& c #676640", "A& c #1A1A15", "B& c #7C7C7C", "C& c #7D7D7D", "D& c #303025", "E& c #191814", "F& c #0E0E0D", "G& c #24231C", "H& c #2F2E21", "I& c #27271B", "J& c #141412", ". + @ @ . . . . . . # # # # # . . . . @ @ @ . + + + @ + + + + + $ + $ $ + + + + @ @ . . # # # % ", "& * # = - # - % ; > , + ' ) , ! % @ ~ > { ] @ ^ / ( % . ( > ] # _ @ ) , , > ) : - # . . . . . # ", "< [ } | { $ < [ 1 2 3 4 5 6 7 8 9 0 a b = c d ! e f g h i j k l % @ m m ( n o p q > g g g g g r ", "s t u v w x y u z A B C D E F G F F H I J K L M N O P Q R S O T U V W X Y Z ` .X T ..V V V V +.", "@.#.$.%.&.*.=.-.;.>.,.'.>.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.5.9.0.a.8.b.c.d.d.e.f.c.e.", "g.g.h.g.i.j.k.l.m.g.g.g.n.o.p.q.r.s.t.u.t.v.w.x.y.z.A.B.C.D.E.B.F.G.H.x.I.J.x.y.K.L.g.g.g.g.g.g.", "M.N.O.g.P.Q.R.S.T.U.M.M.V.W.B.X.Y.Z.`. +.+X.++@+#+X.$+X.%+&+*+=+-+M.X.X.;+>+@+#+,+'+M.)+!+~+{+M.", "]+^+/+(+_+:+<+[+}+|+M.M.V.1+2+3+4+5+6+7+8+9+0+a+3+b+;+X.3+c+d+e+f+9+X.X.g+h+a+i+j+)+M.9+k+l+m+)+", "n+o+p+q+r+s+t+u+v+U.M.M.V.3+w+x+y+z+A+B+-+)+C+D+E+F+;+X.%+Z.G+X..+H+I+D.J+K+L+M+N+O+M.'+O+O+)+'+", "P+Q+R+S+T+U+V+W+X+X+M.M.!+k+O+O+k+Y+Z+$+`+ @X..@.@X.+@$+@@#@$@%@$@#@I+G.&@X..@*@X.'+M.M.M.M.M.M.", "=@-@;@>@,@'@)@!@~@{@M.M.)+9+'+'+9+)+X.X.X.'+'+ @ @]@ @X.X.)+)+X.)+)+X.M.-+]@ @ @'+M.M.M.M.M.M.M.", "^@/@(@_@:@<@[@}@|@1@2@3@4@5@X+M.M.M.X+5@6@X+M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "7@M.6@8@X+X+9@9@0@a@b@c@d@e@U.f@U.U.g@h@i@6@M.M.j@k@l@]@~+x+]@~+l@m@k@]@n@D+m@l@~+j@O+)+'+M.M.M.", "o@p@h.M.M.X+q@r@5@s@t@u@v@w@8@x@y@z@f@A@B@C@X+M.D@++1+E@F@G@&+H@I@J@K@&+L@M@#@N@K@O@P@Q@)+M.M.M.", "R@S@T@M.M.6@U@V@W@W@W@8@X@Y@Z@`@ #.#+#@###$#%#M.&#*#I+Z.=#J+D@%@-#D+%@D+%@%@;#>#Y.-+%@P@O+M.M.M.", ",#'#)#M.M.X+9@r@X+M.M.!#~#{#]#^#/#(#{@_#:#_#X+M.k@<#{+[#}#|# @1#2#X.3#4#X.5#~+~+l+)+X.6#'+M.M.M.", "7#8#9#9@9@|+9@|+9@8@8@8@0#a#b#c#d#8@8@e#e#e#e#e#f#g#h#i#j#k#l#m#n#o#p#f#q#r#s#s#r#/#8@e#e#q#q#/#", "t#u#v#w#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#L#L#M#N#M#O#P#Q#P#R#M#S#T#U#V#W#X#Y#Z#`# $.$+$P#@$#$$$%$", "&$&$*$*$*$*$*$=$=$=$=$-$=$;$=$=$=$>$,$;$;$;$;$;$;$;$;$'$;$=$;$;$;$)$!$~${$]$^$/$($_$:$<$[$}$|$1$", "2 2$2 2 ] 2 2 2 2$] ] ] 2$2 3$] ] 4$( > 5$2 > > > > > > > & & ] : ) ) 6$! 7$1 ; ; / r * d 8$9$0$", "& & 4 4 _ 4 4 & a$& & 4 4 _ 4 4 4 4 _ _ _ b$c$b$b$b$d${ { [ [ ~ ~ e$f$f$= b b b = g$& ; ; & h$i$", ": ! j$k$l$p m$n$! i - o$p$q$q$q$p$r$s$# t$t$t$t$t$u$t$n$v$r$r$r$r$t$w$u$u$u$u$u$$ $ x$y$q$p$p$p$", "' ^ + : z$A$B$C$D$E$F$% G$H$H$H$I$J$/ f$} I$I$G$K$x$+ L$M$h l l N$@ o$O$O$I$I$P$) L$n$G$H$Q$R$S$", "I$G$I$I$T$U$V$W$X$Y$Z$G$H$H$H$H$I$v$j$n$H$H$O$t$b$`$ %.%[ +%+%@%6 3 `$d$o$K$H$H$u$w$o$G$H$#%$%%%", "H$H$H$I$&%*%=%-%;%>%I$I$I$H$H$H$I$x$G$I$H$I$> ,%'%c$)%9 % i !%+ 9 $ ~ ~%{%, H$I$I$G$o$G$H$]%^%/%", "H$H$I$} ,%~ & b$/ 5 @%P$H$H$H$H$I$x$G$H$q$# (%_%* r d :%<%[%8 +%) s$s$+ }%|%] O$H$G$o$1%I$2%3%4%", "H$H$O$d$5%4 ! / / 6%h n$H$H$H$H$I$x$G$K$* 7%{ * g r ' 8%9%o N$& 9 - g g $ b 7%> q$I$o$G$0%a%b%c%", "H$H$I$o$= ) ! ! ! ~ j x$G$H$H$H$I$x$O$t$d%:%s$g )%o$j e%e%[%N$_ f%- g )%g r }%L$o$G$o$G$0%g%h%i%", "H$H$G$s$d$i ! / ! g$j%b$q$H$H$H$I$x$I$: q s$g )%)%0 h k%l%[%N$_ f%, g )%)%g * m%) k$o$G$n%o%p%q%", "H$H$H$I$] 4 ^ ^ : r%^ O$s%s%H$H$I$x$P$f i g g )%)%r # t%u%3 N$& s$( g )%)%)%r +%v%P$o$G$G$n$J$n$", "w%x%H$I$O$e f$,%}%y%z%A%B%C%I$H$I$v$d _%% g )%)%)%)%9 6%D%3 6 c$!%r )%)%)%g g > e > 0 G$H$E%(%F%", "G%H%C%H$I$K$n$* I%J%K%L%M%N%I$H$I$n$d$O%)%)%)%)%)%g )%s$!%:%g$, g )%)%)%)%)%g + L$~ x$G$H$P%Q%R%", "S%T%n%H$H$I$I$I$I$I$I$U%n%H$I$H$I$n$k V%s$)%)%)%)%)%g g g g g g g g )%)%)%)%)%g 5 6%r$G$O$U%s%I$", "H$H$H$I$I$I$I$H$I$I$I$I$H$H$H$H$G$v$e$:%r )%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%r W%{%J$X%Y%Z%`% &", "H$H$H$P$' r ; .&1 , ] P$n%H$H$H$G$o$n +&s$)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%r @&E%J$#&B%$&%&&&", "H$H$H$j$*&=&-&y$: ;&>&j$H$n%H$H$I$t$,&< r g )%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%k '&v$)&0%!&y$~&", "H$H$H${&]&^&/&(&_&:&<&I$n%H$H$H$I$} _ .%* )%g )%)%)%)%)%)%)%)%)%)%)%)%)%)%)%g . d%~ } I$H$k k '&", "H$H$H$H$[&}&|&1&2&3&4&I$H$H$H$H$H$O$$ 5&( g )%)%)%)%)%)%)%)%)%)%)%)%)%)%)%)%g - < # H$I$I$ %h 6&", "H$H$H$G$7&8&= e +%!%9&G$I$H$H$H$I$I$r$k _ * g )%)%)%)%)%)%)%)%)%)%)%)%)%)%g g :%,&d I$H$G$)%r 0&", "H$H$G$# W%f$!%) 1 8 6%J$H$H$H$H$H$H$I$> a&)%g g )%)%)%)%)%)%)%)%)%)%)%)%g r ' ~%( k$H$I$I$b&c&d&", "H$H$G$$ ; ^ / ! / [ [%} H$I$H$H$H$I$H$J$& e&. g )%)%)%)%)%)%)%)%)%)%)%)%g 2 f&i x$I$H$H$G$g&h&i&", "H$H$O$; .%! / ! ! +%d%6 y$H$H$I$H$I$G$G$o$N$@%+ g g )%)%)%)%)%)%)%)%g r % 5%6 s$I$I$H$I$H$I$I$I$", "H$H$H$I$@ ! / / / '&F%y$H$H$H$H$O$$ ' j&I$s$6&k&& $ g g g g g g g g $ b$@&6&)%k$I$H$H$H$G$0 o$0 ", "l&m&I$I$$ e$E%; ,&e n&o&p&q&I$I$q$M$6 ] I$I$x$4 q m :%' * o$o$g ] n M$q _ d k$I$H$H$H$I$H$L$f q ", "r&s&t&H$I$} ( ,%u&v&w&x&y&z&A&H$.&B&_%: I$I$I$f%g = [ ~%C&7%a&7%8%[ b * t$I$I$H$H$H$H$I$H$,&}%O%", "D&E&H$H$H$H$G$F&I$X%~&G&H&I&J&H$I$y$q$O$H$H$H$I$I$j$0 2 ) ! ! - > r j$G$I$H$H$H$H$H$H$H$G$.&.&.&", "#&0%)&I$I$I$I$#&I$I$I$#&#&#&I$I$I$I$I$I$I$I$I$I$I$I$O$H$j&H$H$P$H$O$I$I$I$I$I$I$I$I$I$I$I$I$I$I$", "G$0%G$0%G$G$G$O$I$B$G$G$G$G$G$G$G$G$G$G$G$G$G$G$G$G$I$G$G$G$G$G$G$I$G$G$G$G$G$G$G$G$G$G$G$G$G$G$"}; flrig-2.0.04/Makefile.am0000664000175000017500000000032614475136505011672 00000000000000ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src if DARWIN appbundle: (cd src && $(MAKE) $(AM_MAKEFLAGS) $@) endif if HAVE_NSIS nsisinst: (cd src && $(MAKE) $(AM_MAKEFLAGS) $@) endif #EXTRA_DIST = build-aux/config.rpath flrig-2.0.04/build-aux/0000775000175000017500000000000014511461605011600 500000000000000flrig-2.0.04/build-aux/config.sub0000755000175000017500000010511614175772605013520 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: flrig-2.0.04/build-aux/missing0000755000175000017500000001533614215102164013116 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: flrig-2.0.04/build-aux/install-sh0000755000175000017500000003577614215102164013535 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: flrig-2.0.04/build-aux/depcomp0000755000175000017500000005602014215102164013067 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: flrig-2.0.04/build-aux/compile0000755000175000017500000001635014215102164013072 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: flrig-2.0.04/build-aux/config.guess0000755000175000017500000014051214175772605014054 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: flrig-2.0.04/scripts/0000775000175000017500000000000014511461606011376 500000000000000flrig-2.0.04/scripts/buildmxe.sh0000775000175000017500000000066714502041135013466 00000000000000#!/bin/sh ./configure \ $PKGCFG \ --host=i686-w64-mingw32.static \ --with-ptw32=$PREFIX/i686-w64-mingw32.static \ --with-libiconv-prefix=$PREFIX/iconv \ --enable-static \ PTW32_LIBS="-lpthread -lpcreposix -lpcre -lwinmm" \ FLTK_CONFIG=$PREFIX/i686-w64-mingw32.static/bin/fltk-config \ CXXFLAGS="-std=c++11 -std=gnu++11" make -j 6 $PREFIX/bin/i686-w64-mingw32.static-strip src/flrig.exe make nsisinst mv src/*setup*exe . flrig-2.0.04/scripts/mknsisinst.sh0000775000175000017500000000162114475136505014065 00000000000000#!/bin/sh ### Script to create a win32 installer file ### 20090510 Stelios Bounanos M0GLD, Dave Freese W1HKJ ### change for the target application FLRIG_name=flrig FLRIG_bin=flrig.exe if [ $# -ne 2 ]; then echo "Syntax: $0 data-dir build-dir" >&2 exit 1 fi if [ -z "$PACKAGE_TARNAME" ]; then echo "E: \$PACKAGE_TARNAME undefined" exit 1 fi PWD=`pwd` data="${PWD}/$1" build="${PWD}/$2" # more sanity checks for d in "$data" "$build"; do test -d "$d" && continue echo "E: ${d}: not a directory" >&2 exit 1 done if ! test -w "$build"; then echo "E: ${build} is not writeable" >&2 exit 1 fi set -e def="-DFLRIG_NAME=$FLRIG_name -DFLRIG_BINARY=$FLRIG_bin -DFLRIG_VERSION=$PACKAGE_VERSION" $MAKENSIS -V2 -NOCD -D"INSTALLER_FILE=$INSTALLER_FILE" -D"LICENSE_FILE=$data/../COPYING" \ -D"SUPPORT_URL=$PACKAGE_HOME" -D"UPDATES_URL=$PACKAGE_DL" $def "$data/win32/fl_app.nsi" flrig-2.0.04/scripts/mkappbundle.sh0000775000175000017500000000600414475136505014165 00000000000000#!/bin/sh ### Script to create the .app structure for osx ### 20180201 David Freese W1HKJ if [ $# -ne 2 ]; then echo "Syntax: $0 data-dir build-dir" >&2 exit 1 fi upcase1() { sed 'h; s/\(^.\).*/\1/; y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; G; s/\n.//' } function copy_libs() { list="$1" while test "x$list" != "x"; do change="$list" list="" for obj in $change; do for lib in `otool -L $obj | \ sed -n 's!^.*[[:space:]]\([^[:space:]]*\.dylib\).*$!\1!p' | \ grep -Ev '^/(usr/lib|System)'`; do libfn="`basename $lib`" if ! test -f "Frameworks/$libfn"; then cp "$lib" "Frameworks/$libfn" install_name_tool -id "@executable_path/../Frameworks/$libfn" "Frameworks/$libfn" list="$list Frameworks/$libfn" fi install_name_tool -change "$lib" "@executable_path/../Frameworks/$libfn" "$obj" done done done } function bundle() { appname="${binary}-${appversion}.app" cd "$build" echo "creating ${build}/$bundle_dir/$appname" $mkinstalldirs "$bundle_dir/$appname/Contents/MacOS" "$bundle_dir/$appname/Contents/Resources" cd "$bundle_dir" $INSTALL_PROGRAM "${build}/$binary" "$appname/Contents/MacOS" test "x$NOSTRIP" = "x" && ${STRIP:-strip} -S "$appname/Contents/MacOS/$binary" $INSTALL_DATA "$icon" "$appname/Contents/Resources" echo "APPL${signature}" > "$appname/Contents/PkgInfo" sed -e "s!%%IDENTIFIER%%!${identifier}!g; s!%%NAME%%!${name}!g;\ s!%%SIGNATURE%%!${signature}!g; s!%%BINARY%%!${binary}!g;\ s!%%VERSION%%!${version}!g; s!%%ICON%%!${icon##*/}!g;" < "$plist" > "$appname/Contents/Info.plist" if grep '%%[A-Z]*%%' "$appname/Contents/Info.plist"; then echo "E: unsubstituted variables in $appname/Contents/Info.plist" >&2 exit 1 fi $mkinstalldirs "$appname/Contents/Frameworks" cd "$appname/Contents" copy_libs "MacOS/$binary" } #======================================================================= if [ -z "$PACKAGE_TARNAME" ]; then echo "E: \$PACKAGE_TARNAME undefined" exit 1 fi PWD=`pwd` data="${PWD}/$1" build="${PWD}/$2" bundle_dir="$APPBUNDLE" # more sanity checks for d in "$data" "$build"; do test -d "$d" && continue echo "E: ${d}: not a directory" >&2 exit 1 done if ! test -w "$build"; then echo "E: ${build} is not writeable" >&2 exit 1 fi plist="${data}/mac/Info.plist.in" flrig_icon="${data}/mac/flrig.icns" for f in "$plist" "$flrig_icon"; do test -r "$f" && continue echo "E: ${f}: not readable" >&2 exit 1 done set -e identifier="com.w1hkj.$PACKAGE_TARNAME" name=$(echo "$PACKAGE_TARNAME" | upcase1) # we'll use the first four consonants as the signature signature="$(echo $PACKAGE_TARNAME | sed 's/[aeiouAEIOU]//g; s/\(^....\).*/\1/')" signature="$PACKAGE_TARNAME" binary="$PACKAGE_TARNAME" icon="$flrig_icon" version="${FLRIG_VERSION_MAJOR}.${FLRIG_VERSION_MINOR}${FLRIG_VERSION_PATCH}" appversion="$PACKAGE_VERSION" bundle cd "$build" echo "creating disk image" echo " source: " $bundle_dir echo " target: " ${APPBUNDLE}.dmg hdiutil create -ov -srcfolder "$bundle_dir" -format UDZO -tgtimagekey zlib-level=9 "${APPBUNDLE}.dmg" flrig-2.0.04/scripts/builddist.sh0000775000175000017500000000104114502041135013623 00000000000000#!/bin/sh clear ./configure \ $PKGCFG \ --host=i686-w64-mingw32.static \ --with-ptw32=$PREFIX/i686-w64-mingw32.static \ --with-libiconv-prefix=$PREFIX/iconv \ --enable-static \ PTW32_LIBS="-lpthread -lpcreposix -lpcre -lwinmm" \ FLTK_CONFIG=$PREFIX/i686-w64-mingw32.static/bin/fltk-config \ CXXFLAGS="-std=c++11 -std=gnu++11" make clean make -j 6 $PREFIX/bin/i686-w64-mingw32.static-strip src/flrig.exe make nsisinst mv src/*setup*exe . make clean # build the distribution tarball ./configure make distcheck make clean flrig-2.0.04/Makefile.in0000664000175000017500000006345314511461156011707 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/build.m4 \ $(top_srcdir)/m4/debug.m4 $(top_srcdir)/m4/fltk.m4 \ $(top_srcdir)/m4/funcs.m4 $(top_srcdir)/m4/macosx.m4 \ $(top_srcdir)/m4/np-compat.m4 $(top_srcdir)/m4/opt.m4 \ $(top_srcdir)/m4/pkg-config.m4 $(top_srcdir)/m4/static.m4 \ $(top_srcdir)/m4/win32.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/missing AUTHORS COPYING ChangeLog \ INSTALL README build-aux/compile build-aux/config.guess \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AC_CONFIG_ARGS = @AC_CONFIG_ARGS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BFD_CFLAGS = @BFD_CFLAGS@ BFD_LIBS = @BFD_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEBUG_CFLAGS = @DEBUG_CFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ EXTRA_LIBS = @EXTRA_LIBS@ FLRIG_BUILD_CPPFLAGS = @FLRIG_BUILD_CPPFLAGS@ FLRIG_BUILD_CXXFLAGS = @FLRIG_BUILD_CXXFLAGS@ FLRIG_BUILD_LDADD = @FLRIG_BUILD_LDADD@ FLRIG_BUILD_LDFLAGS = @FLRIG_BUILD_LDFLAGS@ FLRIG_VERSION = @FLRIG_VERSION@ FLRIG_VERSION_MAJOR = @FLRIG_VERSION_MAJOR@ FLRIG_VERSION_MINOR = @FLRIG_VERSION_MINOR@ FLRIG_VERSION_PATCH = @FLRIG_VERSION_PATCH@ FLTK_CFLAGS = @FLTK_CFLAGS@ FLTK_CONFIG = @FLTK_CONFIG@ FLTK_LIBS = @FLTK_LIBS@ FLUID = @FLUID@ FLXMLRPC_CFLAGS = @FLXMLRPC_CFLAGS@ FLXMLRPC_LIBS = @FLXMLRPC_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAC_UNIVERSAL_CFLAGS = @MAC_UNIVERSAL_CFLAGS@ MAC_UNIVERSAL_LDFLAGS = @MAC_UNIVERSAL_LDFLAGS@ MAKEINFO = @MAKEINFO@ MAKENSIS = @MAKENSIS@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PTW32_CFLAGS = @PTW32_CFLAGS@ PTW32_LIBS = @PTW32_LIBS@ RDYNAMIC = @RDYNAMIC@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ dist-zstd distcheck distclean distclean-generic distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @DARWIN_TRUE@appbundle: @DARWIN_TRUE@ (cd src && $(MAKE) $(AM_MAKEFLAGS) $@) @HAVE_NSIS_TRUE@nsisinst: @HAVE_NSIS_TRUE@ (cd src && $(MAKE) $(AM_MAKEFLAGS) $@) #EXTRA_DIST = build-aux/config.rpath # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: flrig-2.0.04/aclocal.m40000664000175000017500000014713614511461156011503 00000000000000# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/build.m4]) m4_include([m4/debug.m4]) m4_include([m4/fltk.m4]) m4_include([m4/funcs.m4]) m4_include([m4/macosx.m4]) m4_include([m4/np-compat.m4]) m4_include([m4/opt.m4]) m4_include([m4/pkg-config.m4]) m4_include([m4/static.m4]) m4_include([m4/win32.m4]) flrig-2.0.04/INSTALL0000664000175000017500000000323214475136505010666 00000000000000Installation Instructions for flrig ************************************ To compile flrig you will need: * A recent C++ compiler. The GNU C++ compilers in the 4.x series are known to work. * Version 1.3.4 or later of the Fast Light Tool Kit (FLTK), with its development library and headers. FLTK's multi-threading support is required. * The samplerate (a.k.a. secret rabbit code) library. * The PNG library. * The libxft library. You should read and follow the instructions for building on various OS platforms that are on the fldigi wiki: http://www.w1hkj.com/doku/doku.php?id=howtos The simplest way to compile this package on Linux is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. flrig-2.0.04/README0000664000175000017500000000120414475136505010512 00000000000000Flrig is a transceiver control program for Amateur Radio use. It does not use any 3rd party transceiver control libraries. It is a c++ pro- gram that encapsulates each transceiver in it's own class. Where ever possible the transceiver class(s) use polymorphism to reuse code that is portable across a series of transceivers. The latest version can always be found at: http://www.w1hkj.com/ Join the linuxham, NBEMSham or win-fldigi Yahoo group for support, news and updates on W1HKJ software: http://groups.yahoo.com/group/linuxham/join http://groups.yahoo.com/group/NBEMSham/join http://groups.yahoo.com/group/win-fldigi/join flrig-2.0.04/AUTHORS0000664000175000017500000000021514475136505010703 00000000000000AUTHOR: Dave Freese CALLSIGN: W1HKJ EMAIL: w1hkj@w1hkj.com Author can be contacted on the linuxham yahoo group EMAIL: linuxham@yahoo.com flrig-2.0.04/data/0000775000175000017500000000000014511461606010620 500000000000000flrig-2.0.04/data/flrig.xpm0000664000175000017500000004101014475136505012373 00000000000000/* XPM */ static char * flrig_xpm[] = { "64 64 525 2", " c #2F2F2F", ". c #303030", "+ c #313131", "@ c #323232", "# c #2E2E2E", "$ c #333333", "% c #434343", "& c #373737", "* c #383838", "= c #363636", "- c #515151", "; c #2C2C2C", "> c #777777", ", c #404040", "' c #454545", ") c #2B2B2B", "! c #3F3F3F", "~ c #4F4F4F", "{ c #2A2A2A", "] c #393939", "^ c #525252", "/ c #4D4D4D", "( c #6A6A6A", "_ c #474747", ": c #5F5F5F", "< c #464646", "[ c #4A4A4A", "} c #3A3A3A", "| c #272727", "1 c #565656", "2 c #3C3C3C", "3 c #444444", "4 c #4B4B4B", "5 c #7F7F7F", "6 c #838383", "7 c #252525", "8 c #242424", "9 c #B2B2B2", "0 c #6E6E6E", "a c #818181", "b c #3D3D3D", "c c #696969", "d c #292929", "e c #9C9C9C", "f c #5C5C5C", "g c #7E7E7E", "h c #282829", "i c #9A9A9A", "j c #919191", "k c #595959", "l c #565858", "m c #626262", "n c #636363", "o c #A8A8A8", "p c #222222", "q c #969696", "r c #5F6060", "s c #585858", "t c #787878", "u c #929292", "v c #232323", "w c #202020", "x c #A6A6A6", "y c #757575", "z c #939393", "A c #2B2B2C", "B c #8C8C8C", "C c #7A7A7A", "D c #717272", "E c #414141", "F c #4A4B4B", "G c #2B2C2C", "H c #39393A", "I c #444545", "J c #353535", "K c #3E3E3E", "L c #393A3A", "M c #474746", "N c #2A2B2A", "O c #474847", "P c #2C2C2E", "Q c #A4924C", "R c #A4924D", "S c #A6924E", "T c #A4924F", "U c #A49151", "V c #A49152", "W c #A49153", "X c #A49154", "Y c #A49155", "Z c #A49156", "` c #A48F58", " . c #A68F59", ".. c #A48F5A", "+. c #A68F5B", "@. c #A48E5B", "#. c #A48E5C", "$. c #A48F59", "%. c #A69158", "&. c #A69156", "*. c #A69155", "=. c #A69154", "-. c #A69153", ";. c #A49252", ">. c #A6924F", ",. c #A6924D", "'. c #A6934D", "). c #A6934B", "!. c #A6934A", "~. c #A49447", "{. c #A69346", "]. c #A69345", "^. c #A69443", "/. c #A49443", "(. c #A69543", "_. c #A69643", ":. c #A79643", "<. c #A69641", "[. c #A79543", "}. c #A49641", "|. c #A49544", "1. c #A79844", "2. c #FFF107", "3. c #FFEF13", "4. c #FFE63D", "5. c #FFC55C", "6. c #6D5433", "7. c #EECC6B", "8. c #EDBB67", "9. c #050505", "0. c #FFE03C", "a. c #FFEF12", "b. c #FFE34D", "c. c #FFD668", "d. c #F2BF4E", "e. c #F7BF63", "f. c #F9BF4B", "g. c #B88F43", "h. c #B98F4D", "i. c #FFE735", "j. c #CB9D5A", "k. c #B48546", "l. c #D8A45C", "m. c #AB7C4A", "n. c #FFE73D", "o. c #C29A45", "p. c #C09B47", "q. c #A88B54", "r. c #A08558", "s. c #BC944E", "t. c #BB944C", "u. c #AB8C58", "v. c #C09C62", "w. c #C29D5F", "x. c #C3995B", "y. c #C39B62", "z. c #C2945B", "A. c #CBA76B", "B. c #BF9F67", "C. c #CDA76F", "D. c #CBA771", "E. c #E6B76D", "F. c #FFEB3D", "G. c #FFEF07", "H. c #FFEE1B", "I. c #BB914F", "J. c #B29258", "K. c #E0AD61", "L. c #E0AB62", "M. c #E1AD61", "N. c #B9A373", "O. c #EEC071", "P. c #F0BF69", "Q. c #D6B675", "R. c #C3A773", "S. c #E9B968", "T. c #FCC676", "U. c #EDBB78", "V. c #E0B67A", "W. c #D4B075", "X. c #DFB26D", "Y. c #E6AB56", "Z. c #967648", "`. c #BD914F", " + c #B68A4E", ".+ c #CF9B55", "++ c #A97C4A", "@+ c #F6B662", "#+ c #FFCB61", "$+ c #E4B75F", "%+ c #E9C46D", "&+ c #DBAF58", "*+ c #FFD460", "=+ c #E7B654", "-+ c #C7AD4E", ";+ c #C6A438", ">+ c #F4B959", ",+ c #CFA85C", "'+ c #D4AF61", ")+ c #D3A758", "!+ c #FCC655", "~+ c #D4A84E", "{+ c #EFBF2E", "]+ c #EAC63D", "^+ c #C49C35", "/+ c #6F5330", "(+ c #FFD63F", "_+ c #FFF40D", ":+ c #FFF208", "<+ c #FFF006", "[+ c #FFF007", "}+ c #FFF408", "|+ c #241E1C", "1+ c #1E1716", "2+ c #F5B96B", "3+ c #C9984E", "4+ c #D6B771", "5+ c #B9933C", "6+ c #D2A73E", "7+ c #D2A73C", "8+ c #D2A839", "9+ c #E0B93F", "0+ c #A88B3E", "a+ c #B99237", "b+ c #A47E22", "c+ c #EBBD2F", "d+ c #D3AB28", "e+ c #D3AB24", "f+ c #D3AD21", "g+ c #B99922", "h+ c #FFEF0B", "i+ c #0F0B0C", "j+ c #241C1B", "k+ c #A38455", "l+ c #FFD241", "m+ c #F6C33D", "n+ c #E1B846", "o+ c #FFF211", "p+ c #FFF40A", "q+ c #FFE319", "r+ c #FFF50C", "s+ c #F2BD35", "t+ c #DDB845", "u+ c #D9B94B", "v+ c #A98F51", "w+ c #A98F4F", "x+ c #A98F4E", "y+ c #A9914E", "z+ c #A9914C", "A+ c #A9914B", "B+ c #A9924B", "C+ c #A99148", "D+ c #A99147", "E+ c #A99247", "F+ c #A99246", "G+ c #A89245", "H+ c #A89344", "I+ c #A99344", "J+ c #A99341", "K+ c #A99340", "L+ c #A9933F", "M+ c #A9943D", "N+ c #A9943C", "O+ c #A9943A", "P+ c #A99438", "Q+ c #A99538", "R+ c #A99536", "S+ c #A99636", "T+ c #A89636", "U+ c #A99637", "V+ c #A99537", "W+ c #A99635", "X+ c #A99835", "Y+ c #AA9635", "Z+ c #AA9935", "`+ c #AD9A35", " @ c #AE9B36", ".@ c #AF9B36", "+@ c #AF9C37", "@@ c #B09C37", "#@ c #B09D37", "$@ c #B19F38", "%@ c #B29F39", "&@ c #B2A039", "*@ c #AA9835", "=@ c #A79433", "-@ c #A39132", ";@ c #A28F30", ">@ c #A49133", ",@ c #A68D45", "'@ c #2B2C2E", ")@ c #2C2C2F", "!@ c #323236", "~@ c #333335", "{@ c #353538", "]@ c #363738", "^@ c #373839", "/@ c #38393A", "(@ c #3A3A3D", "_@ c #3C3C3E", ":@ c #3D3D3F", "<@ c #3D3E3F", "[@ c #3E3F40", "}@ c #303032", "|@ c #272729", "1@ c #1E1E21", "2@ c #161617", "3@ c #1A1A1A", "4@ c #1E1E20", "5@ c #232324", "6@ c #414143", "7@ c #464645", "8@ c #484848", "9@ c #404041", "0@ c #3A3C3C", "a@ c #282828", "b@ c #222221", "c@ c #191919", "d@ c #232424", "e@ c #292928", "f@ c #464747", "g@ c #474646", "h@ c #4C4C4C", "i@ c #4E4E4E", "j@ c #535353", "k@ c #545454", "l@ c #555555", "m@ c #48484A", "n@ c #484747", "o@ c #111111", "p@ c #121212", "q@ c #141414", "r@ c #2B2A2A", "s@ c #212121", "t@ c #131313", "u@ c #5C5C5D", "v@ c #666666", "w@ c #161616", "x@ c #5A5A5A", "y@ c #868686", "z@ c #151515", "A@ c #1D1D1D", "B@ c #151415", "C@ c #141415", "D@ c #1A1C1A", "E@ c #314F24", "F@ c #324F25", "G@ c #1B201B", "H@ c #1E241E", "I@ c #243725", "J@ c #293728", "K@ c #B8B8B8", "L@ c #171717", "M@ c #434344", "N@ c #5B4F44", "O@ c #635340", "P@ c #5B5141", "Q@ c #20251E", "R@ c #59A73E", "S@ c #5AA83F", "T@ c #212C20", "U@ c #283629", "V@ c #2A532C", "W@ c #355436", "X@ c #151514", "Y@ c #737373", "Z@ c #5B5B5B", "`@ c #606060", " # c #616161", ".# c #806644", "+# c #A97C41", "@# c #926D3C", "## c #141214", "$# c #484548", "%# c #605F60", "&# c #727272", "*# c #5D5D5D", "=# c #3C3A3C", "-# c #676767", ";# c #515152", "># c #6A5B47", ",# c #7D633F", "'# c #6D593F", ")# c #646364", "!# c #8B8B8B", "~# c #6B6B6B", "{# c #7C7C7C", "]# c #1B1B1B", "^# c #525253", "/# c #71614B", "(# c #7D6443", "_# c #776146", ":# c #1E1E1E", "<# c #686868", "[# c #40403F", "}# c #7D7D7D", "|# c #161615", "1# c #242324", "2# c #242423", "3# c #242422", "4# c #232425", "5# c #646464", "6# c #707070", "7# c #29281E", "8# c #3A3928", "9# c #4B4B31", "0# c #323122", "a# c #BCBCBC", "b# c #797979", "c# c #3A3A23", "d# c #83813F", "e# c #514F2B", "f# c #8B8A4B", "g# c #9F9F9F", "h# c #1C1C1C", "i# c #171914", "j# c #171713", "k# c #161611", "l# c #C3C3C3", "m# c #141515", "n# c #6F6F63", "o# c #171715", "p# c #191914", "q# c #171716", "r# c #918F4D", "s# c #85843D", "t# c #47472F", "u# c #2B2B2A", "v# c #5F5F31", "w# c #686736", "x# c #35351E", "y# c #4F4F39", "z# c #686845", "A# c #4E4D38", "B# c #767676", "C# c #949494", "D# c #989898", "E# c #888888", "F# c #313120", "G# c #383827", "H# c #25241C", "I# c #161515", "J# c #191912", "K# c #171612", "L# c #212117", "M# c #21211B", "N# c #141412", "O# c #141413", "P# c #393922", "Q# c #4F4F32", "R# c #666440", "S# c #51512F", "T# c #63623E", "U# c #363621", "V# c #52512F", "W# c #605F36", "X# c #595831", "Y# c #4D4C2A", "Z# c #717171", "`# c #151615", " $ c #151616", ".$ c #5B5B5C", "+$ c #363737", "@$ c #525152", "#$ c #1D211D", "$$ c #538539", "%$ c #54853A", "&$ c #1E281D", "*$ c #243025", "=$ c #274729", "-$ c #2F4831", ";$ c #141514", ">$ c #1D201B", ",$ c #3C772F", "'$ c #3D772F", ")$ c #1C241C", "!$ c #232C24", "~$ c #29442A", "{$ c #2F4430", "]$ c #6F6F6F", "^$ c #8A8A8A", "/$ c #6D6D6D", "($ c #232222", "_$ c #222323", ":$ c #1E201A", "<$ c #141411", "[$ c #3C3C2A", "}$ c #3A3929", "|$ c #848484", "1$ c #514F36", "2$ c #605F3C", "3$ c #6A693C", "4$ c #636333", "5$ c #191716", "6$ c #1D1D15", "7$ c #202016", "8$ c #202017", "9$ c #A3A3A3", "0$ c #C2C2C2", "a$ c #141313", "b$ c #5C5D59", "c$ c #131314", "d$ c #141314", "e$ c #999999", "f$ c #9D9D9D", "g$ c #A9A9A9", "h$ c #3C3C21", "i$ c #797644", "j$ c #41432B", "k$ c #4D4D28", "l$ c #6B6B3D", "m$ c #30301E", "n$ c #807F3D", "o$ c #85834E", "p$ c #817F4D", "q$ c #5A5A39", "r$ c #161613", "s$ c #858585", "t$ c #39392B", "u$ c #27251B", "v$ c #1E1E19", "w$ c #333223", "x$ c #383723", "y$ c #28281E", "z$ c #151516", " . . . + + + + + + + @ @ @ @ @ @ @ + + + + + . . . . . . # # # # # # # # # # # . . + + + @ @ + @ $ ", "% & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * & & & & & & & & & & & & & & & & & & & & & & & & & & & = ", "- ; ; > , ' ) ' ! ) ~ + ~ & { ] & ^ ] / $ ; ; ( _ @ : ! ; ; < [ } [ { & ) [ * } ! $ ^ | 1 @ ' 2 3 # 4 ] _ 3 ; ; ; ; ; ; ; ; # ", "5 6 7 8 9 0 ; a b c ] d e f [ 5 [ g h 0 ; ; ; i j 7 k l ; ; % m n o p q & r > s t u v w x . y # z p j A B 5 ; ; ; ; ; ; ; ; ) ", "C D ) @ ^ * % ! E b ) F G b ' H E = & ) E ; ; ; < I H s ) ; ; J * * _ b 2 ] $ K L @ M d ~ = , ) $ N O * , E ; P ; ; ; ; ; ; @ ", "Q R S T U V W X Y Y Z ` ` ...+.@.#.@.@. .$.$.` %.&.*.=.-.;.V >.>.,.'.).!.!.~.{.].^./.^.(.(.(._._.(.:.(.(.<.<.(.[.[._._.}.|._.1.", "2.2.2.2.2.2.2.2.3.4.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "2.2.2.2.2.2.2.5.6.7.8.2.2.2.2.2.2.9.0.9.2.2.9.2.2.9.9.2.2.2.9.9.9.9.2.9.9.9.9.2.9.9.9.9.2.9.9.9.9.2.9.9.9.9.2.2.2.2.2.2.2.2.2.2.", "2.2.2.a.2.2.b.c.d.6.e.2.2.2.2.2.2.9.2.9.2.2.9.2.9.2.2.9.2.2.9.2.2.2.2.9.2.2.9.2.9.2.2.2.2.2.2.2.9.2.9.2.2.2.2.2.2.2.2.2.2.2.2.2.", "2.f.g.h.a.i.j.k.2.2.l.m.2.2.2.2.2.9.2.9.2.2.9.2.n.3.3.9.2.2.9.9.9.2.2.9.2.2.9.2.9.9.9.2.2.2.2.2.9.2.9.9.9.2.2.2.2.2.2.9.9.9.2.2.", "o.p.q.r.s.t.u.v.w.x.y.z.2.2.2.2.2.9.2.2.9.9.9.2.2.9.9.2.2.2.2.2.2.9.2.9.2.2.9.2.2.2.2.9.2.2.2.2.9.2.2.2.2.9.2.2.2.2.2.2.2.2.2.2.", "6.A.B.6.C.D.6.E.2.2.2.2.2.2.2.2.2.9.2.2.2.2.9.F.9.2.2.2.2.2.9.2.2.9.2.9.2.2.9.2.9.G.2.9.2.9.9.2.9.2.9.G.H.9.2.2.2.2.2.2.2.2.2.2.", "6.6.6.6.6.6.6.I.2.2.2.2.2.2.2.2.2.9.2.2.2.2.9.2.9.9.9.9.2.2.2.9.9.2.2.9.9.9.9.2.2.9.9.2.2.9.9.2.9.2.2.9.9.2.2.2.2.2.2.2.2.2.2.2.", "6.6.6.6.6.6.6.J.K.L.M.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "N.O.P.Q.R.S.T.U.V.W.X.Y.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "Z.2.2.`. +2.2.2..+++@+2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "2.2.2.2.2.2.2.2.2.2.2.2.#+$+%+&+*+=+2.2.2.2.2.2.2.2.-+;+2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "2.2.2.2.2.2.2.2.2.2.2.2.>+,+'+)+!+~+2.2.2.2.2.2.2.{+]+^+2.2.2.2.2.9.9.9.2.9.9.9.2.9.9.9.2.9.9.2.9.2.9.2.9.9.9.2.2.2.2.2.2.2.2.2.", "6./+2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.(+2.2.2.2.2.2.2.2.2.2.2.2.2.2.9._+9.2.9.:+<+[+}+9.2.9.2.9.2.2.2.9.2.9.9.2.2.2.2.2.2.", "|+1+2+2.2.2.2.2.3+4+2.2.2.2.2.2.5+6+7+8+9+0+a+b+c+d+e+f+g+2.2.2.2.2.9.9.2.9.h+9.2.9.9.9.2.9.9.2.9.9.9.2.2.9.2.2.9.9.2.2.2.2.2.2.", "i+j+k+2.2.2.2.2.2.2.2.2.2.2.2.2.l+2.m+n+2.2.2.2.2.2.2.2.2.2.2.2.2.9.2.2.2.9.o+9.2.p+q+9.2.r+9.2.2.2.9.2.2.9.2.2.2.2.2.2.2.2.2.2.", "2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.s+t+u+2.2.2.2.2.2.2.2.2.2.2.2.9.9.9.2.9.9.9.2.9.9.9.2.9.9.2.2.2.9.2.2.9.2.2.2.2.2.2.2.2.2.2.", "2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "v+w+x+y+z+z+z+A+B+C+D+E+F+G+H+I+J+K+K+L+M+N+O+P+Q+R+R+R+R+S+S+T+T+U+S+S+V+W+S+S+S+W+W+X+Y+Z+`+ @.@+@@@#@$@$@%@&@%@.@*@=@-@;@>@,@", "P P P P P P P P P P P P P '@)@'@P P )@P P P P P )@P P P P P P P P P P P )@)@P P P )@P )@)@!@~@{@]@^@/@(@_@:@<@[@/@}@|@1@2@3@4@5@", "E E E E E E E E E E E E E E E E E E 6@6@E E E + % E E E E E E E E E E E E E E % % E E E 3 3 ' 7@< _ _ 8@8@8@[ [ @ 9@b * ] 0@@ 7 ", "; ; ; ; ; # # ; ; ; ; ; # # # # ; ; ; # # # ; ) # ; ; # # ; ; ; ; ; ; ; ; ; # 8@_ . @ $ J = & * ] 2 2 b K ! } @ a@b@c@3@w d@a@e@", "_ _ _ < < < _ _ < < < f@_ M _ g@< _ < < < < < _ 8@8@[ 8@[ [ 8@[ [ [ 4 4 h@h@h@i@i@i@~ ~ - ^ ^ ^ j@k@l@l@l@k@- h@_ ' 3 ' < < m@n@", "] ) ' o@p@p@w A q@q@ & K , r@s@q@q@q@q@q@q@q@| | ] 8 v v v v v v v v v v v v p p p v v v v v v v v v v v 8 * a@{ t@q@q@q@q@q@q@", "[ a b < s + u@v@w@w@x@y@m t ~ 4 w@w@w@w@w@w@w@8 * / 8@w@w@w@w@w@w@w@z@A@$ K < _ < < ! = w q@w@w@w@w@w@w@w@J _ f | z@w@w@B@C@C@C@", "q@q@z@w@w@D@E@F@G@w@B@H@I@J@t@z@w@w@w@w@w@w@w@8 = / , w@w@w@w@w@z@+ / i@a c K@K@K@K@K@5 i@/ = L@w@w@w@w@w@# b j@a@z@w@c@M@N@O@P@", "w@w@w@w@w@Q@R@S@T@q@q@U@V@W@X@w@w@w@w@w@w@w@w@7 w@w z@w@w@w@z@d j@: K@Y@Z@[ , 2 2 E h@`@t K@ #j@+ z@w@w@w@z@w w@a@z@w@3@h@.#+#@#", "w@w@w@w@w@w@##$#%# #&#*#=#q@w@w@w@w@w@w@w@w@w@7 z@w@w@w@w@z@! *#K@-#, . ; ) b b ) ; @ ' 0 K@Z@< L@w@w@w@w@w@a@z@w@3@;#>#,#'#", "w@w@w@w@w@w@)#2 3 k@^ } &#-#q@w@w@w@w@w@w@w@w@7 z@w@w@w@w@i@K@&#% ; ; ) #!#5 ~#Z@8@; ; ; 8@{#K@^ ]#w@w@w@w@a@z@w@3@^#/#(#_#", "w@w@w@w@:#<#&#^ _ [#, [ ( &#m q@w@w@w@w@w@w@w@7 z@w@w@z@~ #-#J ; ; ; { y K@u }#<#- ] < ) ; ; ; ] &#<#^ c@w@w@w@a@z@|#z@1#2#3#4#", "w@w@w@w@' 5#^ , ! ! ! ! k@Y@u p@w@w@w@w@w@w@w@7 z@w@z@, K@n + ; ; ; ; % K@K@K@}#<#- ] v K ; ; ; ; J 6#K@8@q@w@w@a@z@w@w@7#8#9#0#", "w@w@w@w@]#&#+ ! ! ! ! ! b a#p 3@w@w@w@w@w@w@w@7 z@w@) : v@+ ; ; ; ; ; y K@K@K@}#<#^ ] ]#2 ; ; ; ; ; = b#1 & w@w@a@z@w@w@c#d#e#f#", "w@w@w@w@* i@! ! ! ! ! ! g#8 > t@w@w@w@w@w@w@7 z@q@^ K@= ; ; ; ; ; ; K@K@K@K@}#<#^ ] h#& ; ; ; ; ; ; , K@k@c@w@a@z@w@w@X@i#j#k#", "w@w@w@w@w@; &#K ! ! ! ! 2 l#L@w@w@w@w@w@w@w@w@7 z@J : j@# ; ; ; ; ; ; ~#K@K@K@}#<#^ ] ]#K ; ; ; ; ; ; n *#K w@a@z@w@|#w@w@w@w@", "w@w@w@w@w@z@/ < ! ! ! K c k@z@w@w@w@w@w@w@w@w@7 q@/ K@ ; ; ; ; ; ; ; = K@K@u }#<#^ ] ; * ; ; ; ; ; ; ) * K@k@q@a@z@w@z@7 | | | ", "q@q@m#w@w@w@:#&#^ &#[ &#n#L@w@o#p#q#|#w@w@w@w@7 h#j@*# ; ; ; ; ; ; ; ) k K@j }#<#- ! E ; ; ; ; ; ; ; ; #  # a@z@w@3@~ b#6# #", "r#s#t#w@w@w@w@]## < 3 u#v#w#x#y#z#A#w@w@w@w@w@7 * K@! ; ; ; ; ; ; ; ; ; ) ' B#{#~#1 K ) ; ; ; ; ; ; ; ; # h@g ! a@z@w@3@h@C#D#E#", "F#G#H#|#w@w@w@w@w@z@z@w@I#J#K#H#L#M#w@w@w@w@w@7 E #. ; ; ; ; ; ; ; ; ; ; ; ) # # ) ; ; ; ; ; ; ; ; ; ; ; 2 ( [ a@z@w@c@[ h@h@[ ", "w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@7 8@K@| ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; . K@h@| z@w@X@N#N#O#N#", "w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@| _ > d ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ) K@h@7 z@w@P#Q#R#S#T#", "w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@d 8@K@d ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; { K@[ v z@w@U#V#W#X#Y#", "w@w@w@w@w@K f E 6#q@t@Z#: m < w@w@w@w@w@w@w@w@{ _ K@| ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; K@8@| w@w@w@`#X@w@ $", "w@w@w@w@w@2 [ .$+$w@q@* x@@$* w@2@w@w@w@w@w@w@p 8@K@# ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; * ~#h@| w@w@z@t@t@t@t@", "w@w@w@w@w@#$$$%$&$w@w@*$=$-$;$w@w@w@w@w@w@w@w@w , 5 b ) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; # 8@}#< w w@w@3@4 8@4 _ ", "w@w@w@w@w@>$,$'$)$t@t@!$~${$z@w@w@w@w@w@w@w@w@z@. 8@k . ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; # ]$E } ]#w@w@3@B#i D#^$", "w@w@w@w@w@w@t@l@: &#&#`@8@q@w@w@w@w@w@w@w@w@w@w@7 i@K@) ) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; @ K@k@7 z@w@w@]#-#`@/$6#", "w@w@w@w@w@c@c &#~ f x@' 2 &#q@w@w@w@w@w@w@w@w@w@A@, 1 4 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; # Z@1 < s@w@w@w@z@($_$_$_$", "w@w@w@w@8 6#&#- % K ! < 6#. &#q@w@w@w@w@w@w@w@w@z@| l@K@. ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; & K@k@; w@w@w@w@w@:$<$[$}$", "w@w@w@w@E : i@! ! ! ! ! / y@|$p@w@w@w@w@w@w@w@w@w@h#] 1 *## ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; . &#~ % :#w@w@w@w@w@1$2$3$4$", "w@w@w@w@z@@ J ! ! ! ! ! b K@:#p w@w@w@w@w@w@w@w@w@w@v [ K@k # ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; . <#K@~ 8 z@w@w@w@w@w@5$6$7$8$", "w@w@w@w@b &#[ ! ! ! ! ! ! 9$7 0 q@w@w@w@w@w@w@w@w@w@z@| j@k Z@ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; @ <#: k@{ L@w@w@w@w@w@w@w@w@w@w@", "w@w@w@w@w@d = K ! ! ! ! b 0$z@w@w@w@w@w@w@w@z@d @ L@w@L@d k@K@m & # ; ; ; ; ; ; ; ; ; ; ; ; # b 6#K@l@; 3@w@w@w@w@w@w@z@:#:#:#:#", "w@w@w@w@w@q@@K ! ! K Z#2 z@w@w@w@w@w@w@w@w@6#l@f w@w@L@| 4 *#K@k = ) ; ; ; ; ; ; ; ] #K@k - { 3@w@w@w@w@w@w@w@3@^ ( Z@`@", "C@a$q@w@w@w@]#- &#h@/ &#b$w@w@c$d$t@O#w@w@w@3@{#Y@j@w@w@w@z@p * - l@K@c ~ K J + @ = , k@]$K@1 - ! v w@w@w@w@w@w@w@w@w@3@- e$f$g$", "h$i$j$w@w@w@w@w@8 &#] p k$l$m$n$o$p$q$r$w@w@z@s$Z@x@w@w@w@w@w@]#v ! h@i@K@*#K@K@K@K@K@K@/ i@E 7 A@w@w@w@w@w@w@w@w@w@w@3@~ : 1 x@", "t$u$v$w@w@w@w@w@w@z@|#w@|#O#t@w$8#x$y$|#w@w@z@z@z@z@w@w@w@w@w@w@w@h#s@; , E _ h@h@8@3 , @ s@A@z@w@w@w@w@w@w@w@w@w@w@w@q@p@p@p@p@", "w@w@|#w@w@w@w@w@w@t@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@z@]#p w :#:#w s@h#z@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@", "z@z@z@X@z@z@z@z@z@p@z$z@z@z@B@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@", "z@z@z@X@z@z@z@z@z@p@z$z@z@z@B@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@"}; flrig-2.0.04/data/flrig.desktop0000664000175000017500000000027114475136505013244 00000000000000[Desktop Entry] Name=Flrig GenericName=Amateur Radio Rig Control Comment=Amateur Radio Communications Exec=flrig Icon=flrig Terminal=false Type=Application Categories=Network;HamRadio; flrig-2.0.04/data/win32/0000775000175000017500000000000014511461606011562 500000000000000flrig-2.0.04/data/win32/flrig.ico0000664000175000017500000003056614475136505013321 00000000000000@?`1(@~    !-- '(-.+,"""333444999======:::666333''' //6ad!54000--->>0XX%%0ij?ln>ik-II nnnJJJIII222===???eeeLLLqqqfffcccsssMMMddd>>>???444@@@MMMFFFIII AAAFFF===>>>FFFHLK fff___CCC,,,AAAEEEuuuVVV@@@111)))&&&'''***333DDD[[[wwwFFFAAA222AAA <<<:::111222222111]]]///\\\EEEKKK<<>>ooommm ---FFFLLL###""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""%%%^^^@@@555*@A/MN/VW(QQ\\\&&&AAA555111222888\\\%%%^^^ EEEppp%%%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""+++vvvDDD""" //-.VVV,,,@@@KKKIII777///^^^ 333FFF<<<$$$""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""###JJJFFF888 EEEMMMNONPPPNNN::: ???ppp!!!!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""'''vvvDDDTTTNNNYYY\\\$b/$b0 " 6%6$%%%:::HHH%%%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""###[[[444...aaa~~~rrr-nC.nD%9&:$  333iii000!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""###:::ggg888<<<:::<<<999///;;;KJJ++* ,,,IIIBAB,,,:::PPP###"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""",,,XXX=== 111KKK444\\\ ]]]MMMPPP888 999lll""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$$$ttt::: :::ddd"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" rrr;;;**$AB*MN&GH =>999bbb""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!ooo===--'@@3RS$AA1PQ:::ppp""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""%%%www===  &&,,  444OOO%%%"""""""""""""""""""""""""""""""""!!!######!!!"""""""""""""""""""""""""""""""""///WWW;;;;;;======;;;>wx0mn$99###888666 !!&MM*TU))-@@7UU,>?,,,iii222"""""""""""""""""""""""""""!!!777aaafffXXXFFF111!!!""""""""""""""""""""""""###===hhh222==={{{~~~qqq  CCCBBB:::;;;CCDQ[[ CCCLLL$$$"""""""""""""""""""""!!!HHHxxxgggUUUAAA222444""""""""""""""""""""""""###^^^<<<###@@@ddd\\\OOO>>>888222222222111VVVDDD >>>sss$$$"""""""""""""""""""""***yyygggUUUBBB---""",,,""""""""""""""""""!!!,,,xxxDDD """'''111222222222222///)))MMMCCC###""""""""""""""""""XXXyyygggUUUBBB---111""""""""""""""""""$$$QQQLLL111,,,$$$???222222222222222222bbb  BBBsss***""""""""""""""""""kkkyyygggUUUBBB---+++""""""""""""""""""333xxxDDD    (((&&&222222222222222000!!!MMMSSS&&&"""""""""""""""```yyygggUUUBBB---///"""""""""""""""***dddFFF+++..2kl!@A>>333&&&>>>???kkkVVVvvvnnnlllwwwVVViii???>>>***###000CCC6556@J3CQ4AJ;;;kkk000888GGG&&&LKKSSSIIIoooPPPccc@@@<<<,,,>>>:::(((111888999888888222*** )))999KKK    ---!!!777 "!! $$$+++111333 ! ---,,, 999999999888888888999999888888888998999899999889888999888888888888888999::::::;;;:::;;;;;;:::;;;;;;;;;<<<<<<=========?????????@@@@@@AAABBBBBBBBBCCCDDDEEEEEEEEEDDDAAA===999777666777888888;::99:"""""""""""""""######"""""""""""""""############"""""""""#########"""!!!###""""""######"""""""""""""""""""""""""""###:::999%%%'''((()))***+++,,,---//////000111222...'''444444444444444444444444444444444444444444444444444444544544444444444&&&555444444444444444444444444444444444444444444555555444444444666666777788888999999:::::::::;;;;;;'''433000,,,---//.'''#""#""#""#""#""#""#""#""#""#""#""#""#""#"!$""#"!#""#""$""#""#""#""#""#""$""#""#""#""#""#""#""#""#""#""#""#""$""$""#""#""#""$""#""$""$""*'')((,)),+*-,+.-,0..1//200210321.-,'%%Aw@w?w?x=x=x=xwJGKIFB?;951.)7<0! " "  Emheda\NMIEB?<;400845$"    +${w X][YVR?~]NIFB?A/z1/-21s+yh$ !',""!p,#/}*w (DY%C[`Z][YUNUOJHEA><:63192-! v$'0z ('|(~ RSUW[^[XVRPNHKOGE?;61.+'�) z opu {  UPR^`[]\]ZVPOMYGND<9620,):?,)   :a}OQ@x?rYZ^E;fPSPOKIFB>;=9{/hI34'!!q0#u '@;r?z4 / _]V`_Uace`YFRPNKIEB?><922.)$ ' $w'z#s& !~ BiwGnBi{Hm~GkImJm~GyOPOTVRPNKOFB>wHKI8nSSK;f_][YZ!:R^-ToCB"7DIG:5*Ym;/*ap(&n|'e}!j,9ADKDXTQUX[]\HVETOHJI&`!Le"E[5;BWMd Ma(-=OOdOc!idzSd Pe VjRdIY|PaRd +/37:>@DKGMPQUXZ][YVRPNJJOMJ<9@=:,'+,(    =y>y?y@yAxBxCxDxExExFxGwGwHwIwJwJvKvJvJvHwHwHwGwGxFxExDxCxByBx@y@y>y>z>>(((""""""WWW999'''MMM222""""""888;;;...;;; +++!!!;;;,,,...222(((BBBFFF'''777///666###<<<---999666""""""""""""""""""""""""###555++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++***$$$$$$$$$%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$#################################$$$$$$$$$$$$%%%%%%&&&&&&&&&''''''&&&'''(((flrig-2.0.04/data/win32/fl_app.nsi0000664000175000017500000001334714475136505013474 00000000000000# -*- conf -*- # NSIS installer script based on example2.nsi from the nsis-2.44 distribution. # Copyright (c) 2009 Stelios Bounanos, M0GLD. # Copyright (c) 2009 Dave Freese, W1HKJ # substitute your application name for instances of FLRIG # Variables !define FLRIG_DESCRIPTION "${FLRIG_NAME} ${FLRIG_VERSION}" !define FLRIG_STRING "${FLRIG_NAME}-${FLRIG_VERSION}" !define PRODUCT_BINARY "${FLRIG_BINARY}" !define PRODUCT_NAME "${FLRIG_NAME}" !define PRODUCT_VERSION "${FLRIG_VERSION}" !define PRODUCT_STRING "${FLRIG_STRING}" !define PRODUCT_DESCRIPTION "${FLRIG_DESCRIPTION}" # Compression options SetCompressor /SOLID lzma # This function is called before displaying the first installer page. # It aborts the installation if the Windows version is too old. !include WinVer.nsh Function .onInit ${IfNot} ${AtLeastWin2000} MessageBox MB_ICONSTOP "Sorry, your Windows version is too old.$\n${PRODUCT_NAME} requires Windows 2000 or later." Abort ${EndIf} FunctionEnd # The name of the installer Name "${PRODUCT_DESCRIPTION}" # The file to write OutFile ${INSTALLER_FILE} # The default installation directory InstallDir $PROGRAMFILES\${PRODUCT_STRING} # Registry key to check for directory (so if you install again, it will # overwrite the old one automatically) !define INSTALL_DIR_REG_KEY SOFTWARE\${PRODUCT_STRING} InstallDirRegKey HKLM "${INSTALL_DIR_REG_KEY}" "Install_Dir" # Request application privileges for Windows Vista RequestExecutionLevel admin # License LicenseText "${PRODUCT_NAME} is distributed under the GNU GPL as detailed \ below. You must abide by the terms of this license if you modify or \ redistribute the program." "Continue" LicenseData "${LICENSE_FILE}" SubCaption 0 ": License Information" # Other options BrandingText " " InstProgressFlags smooth VIAddVersionKey ProductName "${PRODUCT_NAME}" VIAddVersionKey ProductVersion "${PRODUCT_VERSION}" VIAddVersionKey FileVersion "${PRODUCT_VERSION}" VIAddVersionKey FileDescription "${FLRIG_DESCRIPTION} installer" VIAddVersionKey LegalCopyright "${PRODUCT_NAME} developers" VIAddVersionKey OriginalFilename "${INSTALLER_FILE}" VIProductVersion "3.0.0.0" WindowIcon off XPStyle on # Installer pages Page license Page components Page directory Page instfiles UninstPage uninstConfirm UninstPage instfiles # Registry uninstall path !define REG_UNINSTALL_PATH Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_STRING} # This is a hidden section and is always selected. It writes the uninstall # registry keys and uninstaller binary. Section -install # Set output path to the installation directory. SetOutPath $INSTDIR # Write the installation paths into the registry WriteRegStr HKLM "${INSTALL_DIR_REG_KEY}" "Install_Dir" "$INSTDIR" # Write the uninstall keys for Windows WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayName" "${PRODUCT_DESCRIPTION}" WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayIcon" '"$INSTDIR\${PRODUCT_BINARY}"' WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "HelpLink" "${SUPPORT_URL}" WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "Publisher" "FLRIG developers" WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "URLUpdateInfo" "${UPDATES_URL}" WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "QuietUninstallString" '"$INSTDIR\uninstall.exe" /S' WriteRegDWORD HKLM "${REG_UNINSTALL_PATH}" "NoModify" 1 WriteRegDWORD HKLM "${REG_UNINSTALL_PATH}" "NoRepair" 1 WriteUninstaller "uninstall.exe" SectionEnd #Var WANT_FLRIG Section "FLRIG" SectionIn RO SetOutPath $INSTDIR File "${FLRIG_BINARY}" SectionEnd # Start Menu path !define SM_PATH_BASE $SMPROGRAMS\${PRODUCT_NAME} !define SM_PATH ${SM_PATH_BASE}\${PRODUCT_STRING} # The following sections are optional Section "Start Menu Shortcuts" CreateDirectory "${SM_PATH}" CreateShortCut "${SM_PATH}\${FLRIG_NAME}.lnk" "$INSTDIR\${FLRIG_BINARY}" "" "$INSTDIR\${FLRIG_BINARY}" 0 # CreateShortCut "${SM_PATH}\${FLRIG_NAME} Beginners' Guide.lnk" "${GUIDE_URL}" # CreateShortCut "${SM_PATH}\${FLRIG_NAME} Documentation.lnk" "${FLRIG_DOCS_URL}" CreateShortCut "${SM_PATH}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 SectionEnd Section "Desktop Shortcuts" CreateShortCut "$DESKTOP\${FLRIG_DESCRIPTION}.lnk" "$INSTDIR\${FLRIG_BINARY}" "" \ "$INSTDIR\${FLRIG_BINARY}" 0 SectionEnd # This is unselected by default Section /o "Quick Launch Shortcuts" CreateShortCut "$QUICKLAUNCH\${FLRIG_DESCRIPTION}}.lnk" "$INSTDIR\${FLRIG_BINARY}" "" \ "$INSTDIR\${FLRIG_BINARY}" 0 SectionEnd # Uninstaller Section "Uninstall" # Remove registry keys DeleteRegKey HKLM "${REG_UNINSTALL_PATH}" DeleteRegKey HKLM "${INSTALL_DIR_REG_KEY}" # Remove files and uninstaller Delete /REBOOTOK $INSTDIR\${FLRIG_BINARY} Delete /REBOOTOK $INSTDIR\uninstall.exe # Remove shortcuts, if any Delete "${SM_PATH}\*.*" Delete "$DESKTOP\${FLRIG_DESCRIPTION}.lnk" Delete "$QUICKLAUNCH\${FLRIG_DESCRIPTION}.lnk" # Remove directories used RMDir "${SM_PATH}" RMDir "${SM_PATH_BASE}" RMDir "$INSTDIR" SectionEnd # Offer to reboot the machine if the reboot flag is nonzero. This flag is set by # commands that specify the /REBOOTOK switch if the BINARY_* files were in use # during uninstallation. Stupid Windows. Function un.onGUIEnd IfRebootFlag 0 noreboot MessageBox MB_YESNO|MB_ICONQUESTION \ "A reboot is required to finish removing ${PRODUCT_NAME}. Do you wish to reboot now?" IDNO noreboot Reboot noreboot: FunctionEnd # Tell the user if we could not reboot for some reason. Function un.onRebootFailed MessageBox MB_OK|MB_ICONSTOP "Reboot failed. Please reboot manually." /SD IDOK FunctionEnd flrig-2.0.04/data/mac/0000775000175000017500000000000014511461606011360 500000000000000flrig-2.0.04/data/mac/Info.plist.in0000664000175000017500000000212314475136505013661 00000000000000 CFBundleInfoDictionaryVersion 6.0 CFBundleIdentifier %%IDENTIFIER%% CFBundleName %%NAME%% CFBundlePackageType APPL CFBundleSignature %%SIGNATURE%% CFBundleDevelopmentRegion English CFBundleExecutable %%BINARY%% CFBundleVersion %%VERSION%% CFBundleShortVersionString %%VERSION%% CFBundleLongVersionString %%VERSION%% CFBundleIconFile %%ICON%% NSAppleScriptEnabled No NSHumanReadableCopyright Copyright (c) 2009 Dave Freese W1HKJ NSPrincipalClass NSApplication flrig-2.0.04/data/mac/flrig.icns0000664000175000017500000015263214475136505013300 00000000000000icns՚it32##$ %$#"$$%%&&%&&%&'&%&%$%$##$$%$#$$##$$##"##"!"#$#$$%%&'&'(('&%&&%&''&''&'(('&'&&%&&%&%$%&'(('(0/+)*)&&()**)**((**(()*)(())(()* )'&()*)''()*)( ))((*+))*)(()()'())''))())(())()*74+')?,34/,-,))+,-+()./+*--+)(()**+..,,..+*))(+12.+*,11-+*))*-..-++,,*)(*--+*++,+)*0/*)..+*,-,+**,-,+*)a((<6$"$"0LO:02.%$-22, $8:+)45,%!!&((-890/66,'$"!,EI8-'.AD5+%""'2774,,1/&"$$!&35+'*,-*#)<;%$69,(/2/ ,&(14/.121-&#$pKE7+"3fj>/=9$%'*FM>1%%3<@?6;LE%!79&&:A;635;=;:<2%MQ/(<>/1C?%&CF/.AIF;' !q"dbcP)6;)ML'+Y^:3IK8(2kvS>5>ZZ>@`Y+(NP/ 4lz]* ?LI=(%0=JNIY~n)%bh6*ARZVFFVdp_1.ru6*QR,3gc''be/,\qkT. !q mlr\+2wx5&JK)-WZ71GH5%.dqS@7@ZY=)!&+-,3D>!49,'+-../02231.% BF*$31/.:=(%5==3 -khfX<15@;14EF837=:87536>>636>A@>=CPL7/243589,;@?868;>><956=>;727EE65CF=;><523326?B><=>?<634 589yyxunklmopnmnnoonnomjkpplklnoon mmllkklnnlklnoptsmklmnmnoom&noomllmnonmklqqmlpqononmlkllnopoonnonmlmlkkllmnn$0 ݀݀ ݀ պK쪅|wtؐpvywluzy~vtՕvxwtţtt ͬM椢ᮧ몆pYilQpxjod>izslf]qyvӔvykIiۙvrqtȴLpp曋锂ʌʳyݹ_Ṭf|_T]drfһZ\wrf★}˥fkn|NJ˃ eb`Z$Ѷ̰Ȱ9bdkϰY^غ}xxɡ{~O@`bbQ$ߤzзڮ⽟8qtJ]غyϷuw{۶pW;nqjޞrwމ״wCc󷑁~繓socqë𳒍}}ߎģv»pۄܰC`jdoķѵǭvg݋ҮRm׸ocdIUsa嚄Ԁvʯßvff[cʨ]^҃IYTdZ{tpЦwЍwܽ|Z\`jͭfky|rpv|zr{qt؃qr]bUxpr{yB^~ac`^|ֿtqxhlڸxbȹ[_lnedinturmemݞ-梌y{zu|v|qX|wmwwlvвtozٖЪtqwײmovvqpsvyzyvqw8ĺлֺ˻Ʒڇ+#}y!ҸדҺξ θξ ¡ ܧx㯒仞 㱒楖 | 縦 3̰廢캴鮣ɥ ̳ 3dz ļ Ѽջ ζ/Ű̱ н5Ǯ̿欓ժ굛ͺ9Ȱ}ט߸޵뷘y|w=ҙԥȬ׭ǜٽ·:=4eχ6ݥᰨ৩ö}Dǽ5ڼùğѹ̝w / 鳡̿5õֱɲѷӸĿվ%n5뷱⭲𭛺Ӽ۠ל墡,16O{ǽ+诨鬧؟˼֢詩塠˭¸'ìѻ 켼Ӷ ĸȲǭѻ    臬noonmmnonoonononoon ooppqrssttuvwxxyxwurpmkigfhijk32234347899::;;<<==>?@ABA@=951.+'#"$%(*-."##$$%%&&''())**+,*%"! /.//../,$$-0/./0112234567794)&-/-*'&%%'&#12.&&/2100101026775211234556782'$+-+)'')*+*'#$%$%$%$# !$%$%$ ##)5::4*%'(()*++,,--./01220.+& %&''&&%&%&'&'&%&&'&'& ,8==7-)+,,--../00123 4455652/,(%" #$%%445544565565456565578789;?AA?<;<=>>?@@ABBCB?=;864321012344567"645981..//013431001345578875432101101455688656556767889:;<<=> =<<=<86641/012!.+"%61 " "'(+/12.'!  #"%-,#!!"!!"!!  !""#$ #"%.-$!%""/0027.$+$#07:89>9,#  "--# *-'#    "//3<7$%:GN?7PccRO\XD::. $-7:7+  "'*,- ,+*(#   *2:B;%  "3KP@ 3J]^LIVR>57-  (2=A@2 " "199=EIHGFFHF>::3$  "-4?ME( $ '/0)&)&'-) '2>A=. " #,10=X_RVhojgfhoiVR]V=00-%   )0:HB( )%18=>>;9  &--&    H!(35/$  (7IOIPdgWWhmgcbemiXWfdPIOJ:,  !'.73$ )/AOZaaZW   ;HF8  '" H .8?OjpcZWPFBCA><;>BDCHSZ^eqjQA9/$  0F\owq4BIB,&($## "   !2JTQXik\OD;5/*()"**,28>HS`mk[SUL7&    2I^rzt5BDDBBCEF@2#  1 -9Njo^QG>5.+'#!!(+,)$"#%(,18ALVcrkM:1$   5HUamnc^ .2*%"""6J\c`ZSLE?9/# "#&+4BQ`fcWA+   8MZdjjfc(DJ8037=@?:008BOE%   !9Qfj\K5'! 8"&6Rgvyqh^VNF=4*$! "*:ScjeS>%    0AKRVVTS >D0-:?:765 >NL62?6   ):GR]V>.&"!:'A\v}vmd[QH>3051$ ! !#(2D]dXK=+    $&'(('' ,RS/':@:520026ASO59ZQ   @QRQMA+ ! 2^{tkbYOE:/,21'""!! "0IWYXSA$      )=RTC9754221 28EKKZxe!   7WcZK7)#!"$B{}skbYPE;1("#+,$!%-=VcdX=%   !(1/"  (8FIA:301028IftqT ?  .F`dR>) !!""!%2T|skbYPF<2&,0% !""!! ,G[icJ2   )8@A?;9 ,0++021 /,IF  #;NZS9)# !"" +Gh|tkbYPF<2%*/%!!""! $-AaeL8)   #;]bIIbm !&(+02 .(H/ !   4OXP@) !!" .Tu}tkbYPF=2%(-%!!"!! 0P]WK:(   6VX==Zg  #(#(6:412 /+E~v-ML  -JjfA*# !" /Yy}tkbYPF=2%&+$!!"! &4KjkM1  !""% #(#(7;411221122/*Ex-LK  8Rja5 !!" /Wx}tkbYPF<2%'+$!!"! !%=iqT9    &),/11221122.%G1  *@NRG, !" -No}tkbYPF=2%*/%!!"!1S]O@0!    !(-021 0/L~, %:QSA2& !" )?`}tkbYPF<2&+/% !"! )>MVQ@, 3=84101 0.5FT^L   ,Iid8"!"! #(J}tkbYPF<1' +,$!!"! #+BhmP2     .;<;753 2>UU<&   1Nkb2 !!"!! 8q~tkbYPF<2+'')(#!!"! 29jrR4  '*,*)''  '=FC>:78:>J\O#   4HVM.!" +JiukbYOE<302/&""!!"!!! 2\cG1"  /APTOJDB%$#1=;512.$ !"!!"" -LVK=-#  5Ngqle]YigcU='  '/8<;5*1KVPA+&2>II?.   4Z_C/% !"!#-?Rdmlh_VLB7.'#"!!"! );M^X:(! 1Npzqnqom^C*  !+0/( 6EMD,'5AKKA0  '<^^;'"!!"!!""! '5JVXVPJB:1)"!"! &0Da`A-" 1Jguurkh;;>9*  !&'&$   +;OL1#"!!"!!""! !"&+.00.,)'%$!"!$+;SVB1$  4DKNNMJI    !.>RL- !!" !!""!! !!""!!"!!"&7UZE3$  )1.- ,,   !0Fe]."!!""! !""!!"! 7elK3#    !0Ikb."!!"!"!!"!! 6jrM2#  "0EbZ-"!!"!"!!" 2dlK3" !*18BA76@D     #1D^V-"1bkK2! '5@KVVJHPS     $1E_W-"1dlJ1  %4@KSTNJGF    $1FcZ-"2fnJ0  )3:?@>:42 #1=<-2LDCRE@D@6(   %0Gh_-"!! 4hpJ0!  *;HI=AVJI\TQSNA.  $1FbZ-""!!"!5ciH1#   )66*  0ARL/!"! #)9SXE4"#:GJ># $'*% ,Ba^9%! !"! %-A`bF0)0-+--,+7DC6 " '1#  !3Jf_4 !!"!"&H52?HMOOJA7.6ND  .?MK:-%!"! '8EONC4  !&$#$$,IM5/8?DFE@845?TM*  '4?GKB+ !"!.MVH>7,  #DK60:<86 5>QN32IA  )61/ 03?UQ49bY    !5Mha:%" !"! $-CfiN7%   3;97  (;PQ@76421 6@KVdu^  +;LPH:& "!! +IUOH?2 1@BHQSON  %4@D>9201121 2Hq}jI  !.;HTM4%" !"! "(;\_G82( 0?EILLIG )/--02112 11/+HA $5I_`J7% "!! )AUebK8'  !#%%$$  &)-022112 /(G- "%  +@Z`RB1&" !"! #)7N\aYD0    %*%(48312 /+Fx.IH   -EOKGD9& !"!! *ANPE0   &+$'48311221122/*F|/FE  2>ELSL5(#!"!!"!%,* !"!!"!  #1IY`]PA0"  )/221 001Ny)  %//*   2EX^WMA6.'#!$(0;GW^^UE4#  !""   2=951/011/-7NVP<  CPB=B5 -@JMVgcK7(  !  "+=QhjVLLC0" 0?FE>;=>  ,9=<7543?YS- '  !RcSLQ@ +7?PklTD>71,'%$#"!"$%')-2:BJZokN=:0 ?8O`d][^`   $;FFB=;;>BISC   "TiaXM8 )$.;KOGNdgUG;3.)$! !!"%*06?KYifQIPL>2'/4Qq}~ .;>><;;<=AI@&!""!: #YndYM8   )18 '&2=ILFL]]LM`f^ZX]gbNM^]LGNK?3' 8LY]YX[\2;VW<&  $)'!*/=9$%'*FM>1%%3<@?6;LE%!79&&:A;635;=;:<2%MQ/(<>/1C?%&CF/.AIF;' !q"dbcP)6;)ML'+Y^:3IK8(2kvS>5>ZZ>@`Y+(NP/ 4lz]* ?MJ=(%0=JNIY~n)%bh6*BRZVFFVdp_1.ru6*QR,3gc''be/,\qkT. !q mmr]+3wx6&JK*.W[71GI5%.eqS@7@[Z==XP%#IL+0byv[*LVTEESan]-,or5)ON&-a^$%`b-*YmhR,N hffQ'*IJ-&46,,89.(&)3/ 6>:4,.98+)2-34"$;FD:')>?*#(,.-4E?"6:-(-/ 0134420& CG+%420/ =4!ifeV:/3:CD<:=?.=<=9.2CD6149?@;9;;865303;;401104;?>=:@MI5,02125769==6469<<:734:<9504CC43AD;9<;401 5>@<:;<=;412367pookdacdfedcded c`aefbaabddcbbaa``acca`acd cehgb`bbaabcdeedccdedccdeedbcghddghffggedccdeggfggfdedefg À Ľ€ 0²Ƽƺ Ľχ΁́΂bd^YWinU[]]jƵqS\`_ftsg_]mɭy`ba^yk^_k̆ʁɁg{{d_TDQ}S=U\TZnĮO0R`\XTtiM_d^lǫw_cW=Wb^]^jʁȀˁʀȽOUXwloenf_b}mMCTeJCOVaWɁ΁sȿDHm]WQŭylern~TVšZf;:ݲTTRMɃzĸĽĶysFKeSzGKÿebdntqdiɵfv¯=3׬MQRÈͶvyui}ɳxlj|sixxcrRVxbus;I~bjzaejfzxðuĶZG}ԭX]lX˶ptpcyɍumjqwsw~yn}¦hipgo^4Mpfcimov\XkhQ\ówsniioӶuwˡwrvpaxͺū~yutuy{{zw{æffûv~g2IpSdpwrhk|rOZéȵypeWqԷtttCWͰ½ ȈhĠMMĽ5>\Nį{me`x’|drذVTžƠMRʧ~|}zzlœHHýӧB>RKƬsf][qevufvĿiy֫LLǿSYʩʂ\^caXXaeeddbaguZWX¼˩YIx{QJfqn}ît[ajud6KjTUnnSRj~qeagΨY[˱tshTm˶ɂȀSUZXOOW[[ZZYW]kŻ΀ȼĴΰrpʀɃȀqswxvuwvssuwxz}NĿźƺüƾѯgeɁ Ʉ&ĿĀíŀʀ}yɁ"ƼƂɁ̾xpqplq}ʂɃȀarsnxjp'tgu÷˵{|ƁɁȂ̿xpmpw˂ɀ žǀȀo~}zsy.}sŷʷʀɁ&~{~ȯȀGù¶΀1ƹȀ ½WúĿȼƽǀ Ȁ ¾ ù>ʽ{|yƵȾǼȀ ýƀ7ʾ}kpvŧĿ{ɀȀ[\Xq1½Ł5̷s~ųŘʿɃȀ-/'K0Á7yȚ̻DZ{roʃȀ3ôO{|q{Ý{ì{pj˃Ȁ#p[òzs{›w}ͽǰȁɀX\̻ͺēϸ̸зǿȁ"'??@@>;73/+(%! !#%')*     #$$%%&'(()**++,,--.,'$# /0,%%-1/././0122344567894)'-/-*(&%&('#12.&&/2100101026775211234556782'$+-+)'')*,+'#$%$%$%$# !$%$%$ ##)5::4*%'(()*++,,--./01220.+& %&''&&%&%&'&%&&'&'& ,8==7-)+,,--../00123 4455652/,(%"!#$%%445544565565456565578789;?AA?<;<=>>?@@ABBC8B?=;864321012344567767645981..//013431001355678875321001101455688656556767889:;<<=> =<<=<86641/012"1.+"%61 " "'(+/12.&!  #"%-,#!!"!!"!!  !""#$ #"%.-$!%""/0027.#*$#07:79>9+#  "--# *-'#   "//3<7$$8EL=7PccQN[WC::. $-7:7+  "'*,- ,+*(#   *2:B;%  "3::3$  "-4?ME( # 6BC7(.037/ '2>A=. " #,10=X_RVhojgfhoiVR]V=00-%   )0:HB( &/35"44  !EVUE$  )00% H!(35/$  (7IOIPdgWWhmgcbemiXWfdPIOJ:,  !'.73$ )0>EJMMJI  1om2  *9BE6 H .8?OjpcZWPFBCA><;>BDCHSZ^eqjQA9/$  2BLV_`YU,ap>",7>@=/ "   !2JTQXik\OD;5/*()"**,28>HS`mk[SUL7&    4ENWabZV+CLHEBBCEHD8* 1 -9Njo^QG>5.+'#!!(+,)$"#%(,18ALVcrkM:1$   6EIOTTMJ '6ENQRSQLB3' ?   7FO[jhTB1&!$)05:;:5-(%" #)5FYlm[OJ;"   8GJMPOKH 8B2.7?FJIC81/6F;  5 (@YebZK>2*%"""6J\c`ZSLE?9/# "#&+4BQ`fcWA+   9JOSUTQP(DI8137=@?:008BOE%   !9Qfj\K5'! 8"&6Rgvyqh^VNF=4*$! "*:ScjeS>%    0>CEFEED >D0-:?:765 >NL62?6   ):GR]V>.&"!:'A\v}vmd[QH>3051$ ! !#(2D]dXK=+    #$$#$$% ,RS0':@:520026ASO59ZQ   @QRQMA+ ! 2^{tkbYOE:/,21'""!! "0IWYXSA$      )=RTC9754221 28EKKZxe!   7WcZK7)#!"$B{}skbYPE;1("#+,$!%-=VcdX=%   !(20"  (8FIA:301028IftqT ?  .F`dR>) !!""!%2T|skbYPF<2&,0% !""!! ,G[icJ2   (7?@>:7 ,0++021 /,IF  #;NZS9)# !"" +Gh|tkbYPF<2%*/%!!""! $-AaeL8)   #;\aHHal !&(+02 .(H/ !   4OXP@) !!" .Tu}tkbYPF=2%(-%!!"!! 0P]WK:(   5UW<MVQ@, 3=84101 0.5FT^L   ,Iid8"!"! #(J}tkbYPF<1' +,$!!"! #+BhmP2     .;<;753 2=UU<'   1Nkb2 !!"!! 8q~tkbYPF<2+'')(#!!"! 29jrR4  '*,*)''  '=FC>:78:>I[O#   4HVM.!" +JiukbYOE<302/&""!!"!!! 2\cG1"  /APTOJDB$$#1=;EXO) #ANI=* !"!$1Il{wrld[QG>512.$ !"!!"" -LVK=-#  5Ngqle]YhfbU=(  '/8<;5)1LVOA+&2>II>-   4Z_C/% !"!#-?Rdmlh_VLB7.'#"!!"! );M^X:(! 1Npzqnpnl]B*  !+0/( 6ELC+'5AKKA/  '<^^;'"!!"!!""! '5JVXVPJB:1)"!"! &0Da`A-" 1Jguurkh;;>8)   &#   +;OL1#"!!"!!""! !"&+.00.,)'%$!"!$+;SVB1$  4DKNNMJI!   !.>RL- !!" !!""!! !!""!!"!!"&7UZE3$  )1.- ,,   !0Fe]."!!""! !""!!"! 7elK3#    !0Ikb."!!"!"!!"!! 6jrM2#  "0EbZ-"!!"!"!!" 2dlK3" !*18AA76?C     #1D^V-"1bkK2! '5@JUUJHOR     $1E_W-"1dlJ1  %3@JRSMIFE    $1FcZ-"2fnJ0  )3:>?=941 #1=<-2LDCRE@D@6(   %0Gh_-"!! 4hpJ0!  *;HH<@VJI\TQSMA.  $1FbZ-""!!"!5ciH1#   *6:>CB=. -?IMIB7) !2BSK+ ""!!" !!"$5TZF4$  "1>JTK0 /@FB9+  0ARL/!"! #)9SXE4",UknZ/ +8>>3 ,Ba^9%! !"! %-A`bF0)0-+--,+)_yw]- (3:<0 'HMPOJA7.5ND  .?MK:-%!"! '8EONC4   &$%%,IM5/8?DFE@845?TM*  '4?GKB+ !"!.MVH>7,  #DK60:<86 5>QN32IA  )61/ 03?UQ49bY    !5Mha:%" !"! $-CfiN7%   3;86  (;PQ@76421 6@KVdu^  +;LPH:& "!! +IUOH?2 1?AGPSOM  %4@D>9201121 2Hq}jI  !.;HTM4%" !"! "(;\_G82(  />DHKKHG )/--02112 11/+HA $5I_`J7% "!! )AUebK8'   #$%$$  &)-022112 /(G- "%  +@Z`RB1&" !"! #)7N\aYD0    %*%(48312 /+Fx.IH   -EOKGD9& !"!! *ANPE0   &+$'48311221122/*F|/FE  2>ELSL5(#!"!!"!%,* !"!!"!  #1IY`]PA0"  )/221 001My)  %//*   2EX^WMA6.'#!$(0;GW^^UE4#  !""   2=951/011/-7NVP<  CPB=B5 -@JMVgcK7(  !  "+=QhjVLLC0" 0?FE>;=>  ,9=<7543?YS- '  !RcSLQ@ +7?PklTD>71,'%$#"!"$%')-2:BJZokN=:0 '8O`d][^`   $;FFB=;;>BISD   "TiaXM8 )$.;KOGNdgUG;3.)$! !!"%*06?KYifQIPL>2'(4Qq}~ .;>><;;<=AJA'! : #YndYM8   )18 '&2=ILFL]]LM`f^ZX]gbNM^]LGNK?3' 8LY]YX[\2:TT=' - $)'!*>=8."  !  %.<@<=EIHIJG?=@<1(! '#   "  &*,--/1221/..-+'"                              ##$ %$#"$$%%&&%&&%&'&%&%$%$##$$%$#$$##$$##"##"!"#$#$$%%&'&'(('&%&&%&''&''&'(('&'&&%&&%&%$%&'(('(0/+)*)&&()**)**((**(()*)(())(()* )'&()*)''()*)( ))((*+))*)(()()'())''))())(())()*74+')?,34/,-,))+,-+()./+*--+)(()**+..,,..+*))(+12.+*,11-+*))*-..-++,,*)(*--+*++,+)*0/*)..+*,-,+**,-,+*)a((<6$"$"0LO:02.%$-22, $8:+)45,%!!&((-89//66,'$"!,EI8-'.AD5+%""'2774,,1/&"$$!&34+'*,-*#)<;%$69,(/2/ ,&(14..121-&#$pKE7+"3fj>/=9$%ZZ>@_Y,)NP/ 4lz]* ?MJ=(%0=JNIY~n)%bh6*BRZVFFVdp_1.ru6*QR,3gc''be0-\qjT. !q ont^,4xy7(KL+/X\92HJ6&/frTA8A\[>>YQ'%JM,2czw]+!=ID9'$,7EJGX}m*&cj:,?NXUGFTbp^..qs6+PP(.b_&&ad/,[oiT. !qljjU+.MN1)8:/0<=2,)-62!#9A=702<;/,51 "67%'>IG>+-BC.# !',0219IC'#:?1-13345689974+&HL0*97$#54 $@C.+;CC9& ! A!#$^\[L0%)09:3145664350%):<.(,17832430.-+(+33,())(+365428D@,#'(()+-/32,)+.11/,()/1.*$)77((580-0/(% $(140//01/)&'&&''&'*,FB<9:>??@@?@@?=>CC@>?ACBAA@ABA@? ABA@@ACB=;;<;#:;<;98789987667753248855786565433434656654344545679=? @ABCCDEGGFGIKKLMNOPPONLKLKJIHHIHFEDCBBDDBAA?<:99::998742100/.,+ *+-..-.-++,-.-,+**+.-.,+,,--/24689:<>?@ABEIJFFJLMNOPQSTUVWYZZYWVVTQO@NMKIIKOPONMHA<;:3.+,/110.*#     -*+-/13579;=>?ACFIJJKNOPQQSUWXZ[\^]ZXYXTSSRQONMJIGEDCB@;98/76541,('&%%&%$      [..024679;=?@ADGHEIRVTRPPSUVXY[\]]YPOUTKKRTQNLKJJKC2)('(,38;5' !"$'*,'   01359<<=>?@BDHMKCDPUTSIUVWYZ[\]^UCCSSDBOTPKCAGJJA/%$" $08=5!!#%(.)     125:@DEEA@ADINUQB>BHOTXYXRZ[\[\_Q33TW>:KRPF31BHEA<983*+4:>7$&,1.$#-+!   458;?CFFDCDGKNOLEABFLPRTY[Z[:Z[_N)+TY93ENMA))?HDBA@?9.-6;<5'$*040! +*$!  e % 89;:78=AEHJKKF=?KPPOMH@EW_]\[ZYZ^L&)TX5-?HG<&'?KIE?;94+,8:4/)'(**&&%!   '^)"99:967<@DFGHHD;>MTRPMF;AWa^\[YXY]N-.RW;2=?CGHJLLJJMKDIX_\[ZXWX[R<;PUIA:9<4"'DJ:11012540-,+*(#$+.-+'   !   <=>AFJLJFCBDINRTRPOPTTPRZ][ZXWUV[S=:LSOH=:?6#CG0(/2112220,,.-*% "-0+(& #"   #   OPRSRTWXWVWXYZYZ]_`acb_^\[ZXWURU]Q/,GQLHCDK=?D'"4:30/".-*&(10&&(!  )  #'*" PRUTPPUXNYZYWTV_defgfda]ZYWUSQT\N*'DOJGEHOA:>'$5:2..-+("%00&""    */.$ @BGF??FINJJHFCIV]]^``^\ZYWUSQPRWK.+CMIECEKB+'47/.33.-//,'!#+.)# $!!    170! :;A@:9@CBBCCB@>CPVVWXYXWUTRPOPRJ86EJFCAAEA625C320-,.-*&"#()($#!   +1) >?CC??CEDDFEBELPQUVWVSRPOONMKIHGFDA?>-=;97531/-+)&%&&%$#        JIIKJGGLNMLKLNOMNRTSRPOOQTTRPOOMLJKOMGCA@><;<@?:87520.,)&##$%$"  r      \[ZWST[^]ZSSZ]]^ab`]YSIHPSQOOMLKIIHGDB@?>=<;<94132/-+)&#!  %$   " ] YY[ZWVYZYXVX^bcc`]ZXXTJHOQPOMLKIHGDBA@>=>=<:766531/-)&#!$%" " '+-.-++-$(!$ @CNSSOGCBGSZ[]`[OF@CNRP*ONKJIHFECA?=<<==;714BC722/(#!!&--( /;?<;=<9+, *- <@JPQNFBAHU[Z[^YLD>ALRSRPON'LIHHFC@><::;;84.2AB5054.)%! '(!  (3732551$"#% NNOOPRVXXYZZ\8[YVTSTTQPONMOUTJGLKFA=;:986420021+-7<<7-((#   WVRQQT[`a`\[\\[[]][YVSPNMLKOWUJGLKEA=:97531//-*'&*29>;0+*#       VVUUSTWZ[]"\ZYXXWUSRPOMJIJMQPIGGFB?<:7530.-,*'&B'+34.)&     I=<:864202662/.*$  ! "#  )'  ""  #%B*Rc]Z\\ZYXWUQKLTVQMJHHFEB@?><9887531002773/+'#  3 $  &(!  .-# ',-$ C L`][[ZYWVUSMBEW[RLJHGECA??A=40220/-.0221/)"# { &!  (,%  ,-"+1/$ CZ_`^\\[YWVOCEUYPKIGEDB@>>@<2./0/../1220,% ! 7# &&  &$ &,) :9Rbieddca_]WMKOOKHFECB@>=<=:510//1453351)#! 3   '  "  ;(=O^ec`]\]\YVPMKJHGECA@>=;::8520..0797660% ! 3  '( !"    9CDGJNQSUWRGELNLKLKJHGECA@><;:97520/-*-5:<;6-! 3  &! $   6]]^\XTQPRMCAGIGGJJIGFDB@?=;987421/-+()/464.& -    8 ``_^[XVUTSRQOMLKJIHFDBA?=<;97531/.,)'&&%%#  9YYXWUTSQOORRMKJHGFDCA??><::975321/-,*(&$"       !)IIHGF ECCDDCBA@@?>=<;:99876654322110.-,++*)'&&%$##"#"#"!"! !"##"##$"!  %1688765432 12100//00//.-,,+,+*+**+*))*+,--./0100/,*)('&$#"#%)03'&%&&%&%$%$$#$%%$#$%()+,,--./001210-)%"!$%&&%&%&&%##&'&'&%&''&''(+,.//0012233453.+*($ 1212.''/3210123456678 99:<7,*130-*(*)%!1001010100121.&&/2100102577521 23434454556782'$,.+)'')*,+'#$%$%$%$# !$%$%$ ##)5::4*%'(()*++,,--./01220.+& %&''&&%&%&'&%&&'&'& ,8==7-)+,,--../001234455652/,(%!!#$44554456566543456565578789;?AA?<;<=>>?@@ABBC8B?=;864321012344578767645981..//013441001355678765421001101455688656556767889:;<<=> =<<=<86641/01%3321.+"%61 #!"'(+/12.&!  #"%-,#!!"!!"!!  !""#$ #"%.-$!%""/0027.$,%#07:89>9+#  "--# *-'#   "//3<7$%;IO@7PccRO\XD::. $-7:7+  "'*,- ,+*(#   *2:B;%  "357-  (2=A@2 " "199=EIHGFFHF>::3$  "-4?ME( " !&("&)'(,( '2>A=. " #,10=X_RVhojgfhoiVR]V=00-%   )0:HB( )'/.-++,,      H!(35/$  (7IOIPdgWWhmgcbemiXWfdPIOJ:,  !'.73$ 1<:865  )/.&  !(" H .8?OjpcZWPFBCA><;>BDCHSZ^eqjQA9/$  4>865310$-42'&)&$% "   !2JTQXik\OD;5/*()"**,28>HS`mk[SUL7&    6@9542/. 0>CDBBCEF@3$  1 -9Njo^QG>5.+'#!!(+,)$"#%(,18ALVcrkM:1$   8B;63100  0>IOQRSQLC6* ?   7FO[jhTB1&!$)05:;:5-(%" #)5FYlm[OJ;"   :E>84234 ;E508?FJIC8107G<  5 (@YebZK>2*%"""6J\c`ZSLE?9/# "#&+4BQ`fcWA+   ;GA;7688(DJ8037=@?:008BOE%   !9Qfj\K5'! 8"&6Rgvyqh^VNF=4*$! "*:ScjeS>%    3<730/13 >D0-:?:75 6>NL62?6   ):GR]V>.&"!.'A\v}vmd[QH>3051$ ! !#(2D]dXK=+   $!!" ,RS/':@:510026ASO59ZQ   @QRQMA+ ! 2^{tkbYOE:/,21'""! "0IWYXSA$     )=RTC975421 28EKKZxe!   7WcZK7)#!"$B{}skbYPE;1("#+,$!%-=VcdX=%  "!  (8FIA:301211028IftqT ?  .F`dR>) !!""!%2T|skbYPF<2&,0% !""!! ,G[icJ2   $&%"  ,0++02121 /,IF  #;NZS9)# !"" +Gh|tkbYPF<2%*/%!!""! $-AaeL8)  -/%'39 !&(+02 .(H/ !   4OXP@) !!" .Tu}tkbYPF=2%(-%!!"!! 0P]WK:(  )) .5  #(#(6:412 /+E~v-ML  -JjfA*# !" /Yy}tkbYPF=2%&+$!!"! &4KjkM1   #(#(7;411221122/*Ex-LK  8Rja5 !!" /Wx}tkbYPF<2%'+$!!"! !%=iqT9    &),/11221122.%G1  *@NRG, !" -No}tkbYPF=2%*/%!!"! 1S]O@0!   !(-021 0/M~, %:QSA2& !" )?`}tkbYPF<2&+/% !"!)>MVQ@,  3=84101 0.5GU_L  ,Iid8"!"! #(J}tkbYPF<1' +,$!!"! #+BhmP2      .;<;7532=TT=(  1Nkb2 !!"!! 8q~tkbYPF<2+'')(#!!"! =9jrR4  '*,*)''  '=FC>:78:>GVJ$  4HVM.!" +JiukbYOE<302/&""!!"!!! 2\cG1"  /APTOJDB1=;   #ANI=* !"!$1Il{wrld[QG>512.$ !"!!"" -LVK=-#  5Ngqle]Y74-'#  '/8<;6+)//)!#+00+"   4Z_C/% !"!#-?Rdmlh_VLB7.'#"!!"! );M^X:(! 1Npzqn:71,&  !+0/) %!$-11,# '<^^;'"!!"!!""! '5JVXVPJB:1)"!"! &0Da`A-" 1Kguurkh!!"    +;OL1#"!!"!!""! !"&+.00.,)'%$!"!$+;SVB1$  4DKNNMKI   !.>RL- !!" !!""!! !!""!!"!!"&7UZE3$  *2.-,,   !0Fe]."!!""! !""!!"! 7elK3#   !0Ikb."!!"!"!!"!! 6jrM2#    "0EbZ-"!!"!"!!" 2dlK3" #)(&*     #1D^V-"1bkK2! %,32)'.1     $1E_W-"1dlJ1  #)--)&%%    $1FcZ-"2fnJ0   ##"  #1=<-2LDCRE@D@6(   %0Gh_-"!! 4hpJ0!  *;IJ=BWJI\TQSNA.  $1FbZ-""!!"!5ciH1#  )7=CIG>. .@KOKD8( !2BSK+ ""!!" !!"$5TZF4$   #-36*  0ARL/!"! #)9SXE4"+36/ !%),& ,Ba^9%! !"! %-A`bF0)0-+--,+&,+$ $ '1#  !3Jf_4 !!"!"&H52?HMOOJA7.6ND  .?MK:-%!"! '8EONC4   &%$%%&&,IM5/8?DFE@845?TM*  '4?GKB+ !"!.MVH>7,  #DK60:<86 5>QN32IA  )61/ 03?UQ49bY    !5Mha:%" !"! $-CfiN7%  %"!  (;PQ@76421 6@KVdu^  +;LPH:& "!! +IUOH?2 !()*--)'  %4@D>9201121 2Hq}jI  !.;HTM4%" !"! "(;\_G82(  !(*+*($# )/--02112 11/+HA $5I_`J7% "!! )AUebK8'   &)-022112 /(G- "%  +@Z`RB1&" !"! #)7N\aYD0     %*%(48312 /+Fx.IH   -EOKGD9& !"!! *ANPE0   &+$'48311221122/*F|/FE  2>ELSL5(#!"!!"!%,* !"!!"!  #1IY`]PA0"  )/221 001Ny)  %//*   2EX^WMA6.'#!$(0;GW^^UE4#  !""   2=951/011/-7NVP<  CPB=B5 -@JMVgcK7(  !  "+=QhjVLLC0" 0?FE>;=>  ,9=<7543?YS. & !RcSLQ@ +7?PklTD>71,'%$#"!"$%')-2:BJZokN=:0 )8O`d][^`  $;FFB=;;>BIRD   "TiaXM8 )$.;KOGNdgUG;3.)$! !!"%*06?KYifQIPL>2'(4Qq}~ .;>><;;<>?A5: #YndYM8   )18 '&2=ILFL]]LM`f^ZX]gbNM^]LGNK?3' 8LY]YX[\ .0$ - $)'!(''2:=<70#  MZD;?4 #%-024@X[LOdlea_cmfPL[V@432/'-9;;6567!'  "&&$!  !  %.<@<=EIHIJG?=@<1(!      &*,--/1221/..-+'"                                  t8mk@flrig-2.0.04/configure0000775000175000017500000100510114511461156011534 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for FLRIG 2.0.04. # # Report bugs to . # # Copyright (C) 2009 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com) # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and w1hkj AT w1hkj DOT $0: com about your system, including any error possibly $0: output before this message. Then install a modern $0: shell, or manually run the script under such a shell if $0: you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='FLRIG' PACKAGE_TARNAME='flrig' PACKAGE_VERSION='2.0.04' PACKAGE_STRING='FLRIG 2.0.04' PACKAGE_BUGREPORT='w1hkj AT w1hkj DOT com' PACKAGE_URL='' ac_unique_file="src/main.cxx" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS FLRIG_BUILD_LDADD FLRIG_BUILD_LDFLAGS FLRIG_BUILD_CXXFLAGS FLRIG_BUILD_CPPFLAGS ENABLE_FLXMLRPC_FALSE ENABLE_FLXMLRPC_TRUE FLXMLRPC_LIBS FLXMLRPC_CFLAGS X_LIBS X_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG HAVE_FLUID_FALSE HAVE_FLUID_TRUE FLUID FLTK_LIBS FLTK_CFLAGS FLTK_CONFIG COMPAT_STRCASESTR_FALSE COMPAT_STRCASESTR_TRUE EXTRA_LIBS PTW32_LIBS PTW32_CFLAGS MINGW32_FALSE MINGW32_TRUE WIN32_FALSE WIN32_TRUE HAVE_NSIS_FALSE HAVE_NSIS_TRUE HAVE_WINDRES_FALSE HAVE_WINDRES_TRUE MAKENSIS WINDRES DARWIN_FALSE DARWIN_TRUE MAC_UNIVERSAL_LDFLAGS MAC_UNIVERSAL_CFLAGS COMPAT_STACK_FALSE COMPAT_STACK_TRUE RDYNAMIC DEBUG_CFLAGS ENABLE_DEBUG_FALSE ENABLE_DEBUG_TRUE BFD_LIBS BFD_CFLAGS OPT_CFLAGS am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build AC_CONFIG_ARGS FLRIG_VERSION FLRIG_VERSION_PATCH FLRIG_VERSION_MINOR FLRIG_VERSION_MAJOR target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_static enable_optimizations enable_debug with_bfd enable_mac_universal with_ptw32 with_flxmlrpc ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS BFD_CFLAGS BFD_LIBS PTW32_CFLAGS PTW32_LIBS FLTK_CONFIG FLTK_CFLAGS FLTK_LIBS FLUID PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR X_CFLAGS X_LIBS FLXMLRPC_CFLAGS FLXMLRPC_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures FLRIG 2.0.04 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/flrig] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of FLRIG 2.0.04:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-static enable static linking for some libraries --enable-optimizations use CPU optimizations (none|sse|sse2|sse3|sse4|i486|i686|avx|avx2|x86-64|rpi1|rpi2|rpi3|rpi4|bbb|cyclone5|nativeARM|native) [none] --enable-debug turn on debugging --enable-mac-universal build a universal binary on Mac OS X [no] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-bfd[=DIR] search for libbfd in DIR/include and DIR/lib [mingw32 only] --with-ptw32[=DIR] search for pthreads-w32 in DIR/include and DIR/lib [mingw32 only] --with-flxmlrpc use external flxmlrpc library [autodetect] Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags BFD_CFLAGS C compiler flags for libbfd BFD_LIBS linker flags for libbfd PTW32_CFLAGS C compiler flags for pthreads-w32 PTW32_LIBS linker flags for pthreads-w32 FLTK_CONFIG Path to fltk-config utility FLTK_CFLAGS C compiler flags for FLTK, overriding fltk-config FLTK_LIBS linker flags for FLTK, overriding fltk-config FLUID Fast Light User-Interface Designer PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path X_CFLAGS C compiler flags for X, overriding pkg-config X_LIBS linker flags for X, overriding pkg-config FLXMLRPC_CFLAGS C compiler flags for FLXMLRPC, overriding pkg-config FLXMLRPC_LIBS linker flags for FLXMLRPC, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF FLRIG configure 2.0.04 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright (C) 2009 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com) _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by FLRIG $as_me 2.0.04, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" # Auxiliary files required by this configure script. ac_aux_files="compile missing install-sh config.guess config.sub" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}/build-aux" # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu FLRIG_VERSION_MAJOR=2 FLRIG_VERSION_MINOR=0 FLRIG_VERSION_PATCH=.04 FLRIG_VERSION=2.0.04 printf "%s\n" "#define FLRIG_VERSION_MAJOR 2" >>confdefs.h printf "%s\n" "#define FLRIG_VERSION_MINOR 0" >>confdefs.h printf "%s\n" "#define FLRIG_VERSION_PATCH \".04\"" >>confdefs.h printf "%s\n" "#define FLRIG_VERSION \"2.0.04\"" >>confdefs.h AC_CONFIG_ARGS=$ac_configure_args # define build, build_cpu, build_vendor, build_os # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac # define host, host_cpu, host_vendor, host_os { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # define target, target_cpu, target_vendor, target_os { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 printf %s "checking target system type... " >&6; } if test ${ac_cv_target+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 printf "%s\n" "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='flrig' VERSION='2.0.04' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi #change the next config item for the specific application src's ac_config_headers="$ac_config_headers src/config.h" # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 printf %s "checking whether the C++ compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 printf %s "checking for C++ compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_98+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else $as_nop ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else $as_nop MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi # Checks for libraries. # Checks for header files. ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h fi # Checks for typedefs, structures, and compiler characteristics. ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes then : printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 printf %s "checking for stdbool.h that conforms to C99... " >&6; } if test ${ac_cv_header_stdbool_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __bool_true_false_are_defined #error "__bool_true_false_are_defined is not defined" #endif char a[__bool_true_false_are_defined == 1 ? 1 : -1]; /* Regardless of whether this is C++ or "_Bool" is a valid type name, "true" and "false" should be usable in #if expressions and integer constant expressions, and "bool" should be a valid type name. */ #if !true #error "'true' is not true" #endif #if true != 1 #error "'true' is not equal to 1" #endif char b[true == 1 ? 1 : -1]; char c[true]; #if false #error "'false' is not false" #endif #if false != 0 #error "'false' is not equal to 0" #endif char d[false == 0 ? 1 : -1]; enum { e = false, f = true, g = false * true, h = true * 256 }; char i[(bool) 0.5 == true ? 1 : -1]; char j[(bool) 0.0 == false ? 1 : -1]; char k[sizeof (bool) > 0 ? 1 : -1]; struct sb { bool s: 1; bool t; } s; char l[sizeof s.t > 0 ? 1 : -1]; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ bool m[h]; char n[sizeof m == h * sizeof m[0] ? 1 : -1]; char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ bool p = true; bool *pp = &p; /* C 1999 specifies that bool, true, and false are to be macros, but C++ 2011 and later overrule this. */ #if __cplusplus < 201103 #ifndef bool #error "bool is not defined" #endif #ifndef false #error "false is not defined" #endif #ifndef true #error "true is not defined" #endif #endif /* If _Bool is available, repeat with it all the tests above that used bool. */ #ifdef HAVE__BOOL struct sB { _Bool s: 1; _Bool t; } t; char q[(_Bool) 0.5 == true ? 1 : -1]; char r[(_Bool) 0.0 == false ? 1 : -1]; char u[sizeof (_Bool) > 0 ? 1 : -1]; char v[sizeof t.t > 0 ? 1 : -1]; _Bool w[h]; char x[sizeof m == h * sizeof m[0] ? 1 : -1]; char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; _Bool z = true; _Bool *pz = &p; #endif int main (void) { bool ps = &s; *pp |= p; *pp |= ! p; #ifdef HAVE__BOOL _Bool pt = &t; *pz |= z; *pz |= ! z; #endif /* Refer to every declared value, so they cannot be discarded as unused. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + !l + !m + !n + !o + !p + !pp + !ps #ifdef HAVE__BOOL + !q + !r + !u + !v + !w + !x + !y + !z + !pt #endif ); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stdbool_h=yes else $as_nop ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } if test $ac_cv_header_stdbool_h = yes; then printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else $as_nop printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi # Checks for library functions. ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" if test "x$ac_cv_func_getaddrinfo" = xyes then : printf "%s\n" "#define HAVE_GETADDRINFO 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes then : printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "hstrerror" "ac_cv_func_hstrerror" if test "x$ac_cv_func_hstrerror" = xyes then : printf "%s\n" "#define HAVE_HSTRERROR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r" if test "x$ac_cv_func_gmtime_r" = xyes then : printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r" if test "x$ac_cv_func_localtime_r" = xyes then : printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" if test "x$ac_cv_func_memmove" = xyes then : printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes then : printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mkdir" "ac_cv_func_mkdir" if test "x$ac_cv_func_mkdir" = xyes then : printf "%s\n" "#define HAVE_MKDIR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select" if test "x$ac_cv_func_select" = xyes then : printf "%s\n" "#define HAVE_SELECT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" if test "x$ac_cv_func_setenv" = xyes then : printf "%s\n" "#define HAVE_SETENV 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = xyes then : printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket" if test "x$ac_cv_func_socket" = xyes then : printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "socketpair" "ac_cv_func_socketpair" if test "x$ac_cv_func_socketpair" = xyes then : printf "%s\n" "#define HAVE_SOCKETPAIR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes then : printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" if test "x$ac_cv_func_strcasestr" = xyes then : printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr" if test "x$ac_cv_func_strchr" = xyes then : printf "%s\n" "#define HAVE_STRCHR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" if test "x$ac_cv_func_strdup" = xyes then : printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" if test "x$ac_cv_func_strlcpy" = xyes then : printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" if test "x$ac_cv_func_strncasecmp" = xyes then : printf "%s\n" "#define HAVE_STRNCASECMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strrchr" "ac_cv_func_strrchr" if test "x$ac_cv_func_strrchr" = xyes then : printf "%s\n" "#define HAVE_STRRCHR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr" if test "x$ac_cv_func_strstr" = xyes then : printf "%s\n" "#define HAVE_STRSTR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" if test "x$ac_cv_func_strtol" = xyes then : printf "%s\n" "#define HAVE_STRTOL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname" if test "x$ac_cv_func_uname" = xyes then : printf "%s\n" "#define HAVE_UNAME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = xyes then : printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = xyes then : printf "%s\n" "#define HAVE_VSNPRINTF 1" >>confdefs.h fi ### static flag # Set ac_cv_static to yes/no # Substitute RTLIB in Makefile # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; case "${enableval}" in yes|no) ac_cv_static="${enableval}" ;; *) as_fn_error $? "bad value ${enableval} for --enable-static" "$LINENO" 5 ;; esac else $as_nop ac_cv_static=no fi ### optimizations # Set ac_cv_opt to arg # Substitute OPT_FLAGS in Makefile # Check whether --enable-optimizations was given. if test ${enable_optimizations+y} then : enableval=$enable_optimizations; case "${enableval}" in none|sse|sse2|sse3|sse4|i486|i686|avx|avx2|x86-64|rpi1|rpi2|rpi3|rpi4|bbb|cyclone5|nativeARM|native) ac_cv_opt="${enableval}" ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: possible values: none|sse|sse2|sse3|sse4|avx|avx2|i486|i686|x86-64|native" >&5 printf "%s\n" "$as_me: WARNING: possible values: none|sse|sse2|sse3|sse4|avx|avx2|i486|i686|x86-64|native" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: possible values: none|rpi1|rpi2|rpi3|rpi4|bbb|cyclone5|nativeARM" >&5 printf "%s\n" "$as_me: WARNING: possible values: none|rpi1|rpi2|rpi3|rpi4|bbb|cyclone5|nativeARM" >&2;} as_fn_error $? "bad value ${enableval} for --enable-optimizations" "$LINENO" 5 ;; esac else $as_nop ac_cv_opt=none fi OPT_CFLAGS="-O2" OPT_CFLAGS_X86="-O2 -mno-3dnow" OPT_CFLAGS_ARM="-O2 -mfloat-abi=hard" case "$ac_cv_opt" in sse) OPT_CFLAGS="$OPT_CFLAGS_x86 -mmmx -msse -mfpmath=sse" ;; sse2) OPT_CFLAGS="$OPT_CFLAGS_x86 -mmmx -msse -msse2 -mfpmath=sse" ;; sse3) OPT_CFLAGS="$OPT_CFLAGS_x86 -mmmx -msse -msse2 -msse3 -mfpmath=sse" ;; sse4) OPT_CFLAGS="$OPT_CFLAGS_x86 -mmmx -msse -msse2 -msse3 -msse4 -mfpmath=sse" ;; avx) OPT_CFLAGS="$OPT_CFLAGS_x86 -mavx -mfpmath=sse" ;; avx2) OPT_CFLAGS="$OPT_CFLAGS_x86 -mavx2 -mfpmath=sse" ;; i486) OPT_CFLAGS="$OPT_CFLAGS_x86 -march=i486 -mtune=i486 -mno-mmx -mno-sse -mfpmath=387" ;; i686) OPT_CFLAGS="$OPT_CFLAGS_x86 -march=i686 -mtune=i686 -mmmx -msse -mfpmath=sse" ;; x86-64) OPT_CFLAGS="$OPT_CFLAGS_x86 -march=x86-64 -mtune=k8 -mmmx -msse -msse2 -mfpmath=sse" ;; rpi1) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=arm1176jzf-s -mfpu=vfp" ;; rpi2) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a7 -mfpu=neon-vfpv4" ;; rpi3) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a7 -mfpu=neon-vfpv4" ;; rpi4) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a7 -mfpu=neon-vfpv4" ;; bbb) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a8 -mfpu=neon" ;; cyclone5) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a9 -mfpu=neon" ;; nativeARM) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=native -mfpu=auto" # GCC for ARM uses -mcpu only for best-results ;; native) OPT_CFLAGS="$OPT_CFLAGS_X86 -march=native -mtune=native -mfpmath=sse" ;; none) ;; esac ### debug flag # Set ac_cv_debug to yes/no # Override CXXFLAGS # Set ENABLE_DEBUG Makefile conditional # Substitute RDYNAMIC in Makefile # Check whether --enable-debug was given. if test ${enable_debug+y} then : enableval=$enable_debug; case "${enableval}" in yes|no) ac_cv_debug="${enableval}" ;; *) as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;; esac else $as_nop ac_cv_debug=no fi # Check whether --with-bfd was given. if test ${with_bfd+y} then : withval=$with_bfd; ac_cv_want_bfd="$withval" else $as_nop ac_cv_want_bfd=yes fi if test "x$ac_cv_debug" = "xyes" && test "x$ac_cv_want_bfd" != "xno" && \ test "x$target_mingw32" = "xyes"; then if test "x$ac_cv_want_bfd" != "xyes"; then # set -I and -L switches bfd_default_cflags="-I${ac_cv_want_bfd}/include" bfd_default_libs="-L${ac_cv_want_bfd}/lib" fi # don't override the user-specified vars BFD_CFLAGS="${BFD_CFLAGS:-$bfd_default_cflags}" BFD_LIBS="${BFD_LIBS:-$bfd_default_libs}" ac_cv_want_bfd="yes" CPPFLAGS_saved="$CPPFLAGS" LDFLAGS_saved="$LDFLAGS" CPPFLAGS="$CPPFLAGS $BFD_CFLAGS" LDFLAGS="$LDFLAGS $BFD_LIBS" ac_fn_c_check_header_compile "$LINENO" "bfd.h" "ac_cv_header_bfd_h" "$ac_includes_default" if test "x$ac_cv_header_bfd_h" = xyes then : ac_cv_have_bfd="yes" else $as_nop ac_cv_have_bfd="no" fi if test "x$ac_cv_have_bfd" = "xyes"; then bfd_other_libs="-liberty -lpsapi -limagehlp" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bfd_set_format in -lbfd" >&5 printf %s "checking for bfd_set_format in -lbfd... " >&6; } if test ${ac_cv_lib_bfd_bfd_set_format+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lbfd $bfd_other_libs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char bfd_set_format (); int main (void) { return bfd_set_format (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_bfd_bfd_set_format=yes else $as_nop ac_cv_lib_bfd_bfd_set_format=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bfd_bfd_set_format" >&5 printf "%s\n" "$ac_cv_lib_bfd_bfd_set_format" >&6; } if test "x$ac_cv_lib_bfd_bfd_set_format" = xyes then : ac_cv_have_bfd="yes" else $as_nop ac_cv_have_bfd="no" fi fi CPPFLAGS="$CPPFLAGS_saved" LDFLAGS="$LDFLAGS_saved" if test "x$ac_cv_have_bfd" = "xyes"; then BFD_LIBS="$BFD_LIBS -lbfd $bfd_other_libs" fi fi if test "x$ac_cv_debug" = "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for debug info flag" >&5 printf %s "checking for debug info flag... " >&6; } if test "x$GXX" = "xyes"; then if test "x$target_mingw32" = "xyes"; then gflag="-gstabs" else gflag="-ggdb3" fi else gflag="-g" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gflag" >&5 printf "%s\n" "$gflag" >&6; } DEBUG_CFLAGS="-O0 -fno-inline-functions -fno-omit-frame-pointer $gflag -Wall" LDFLAGS_saved="$LDFLAGS" LDFLAGS="$LDFLAGS -rdynamic" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -rdynamic" >&5 printf %s "checking whether $CC supports -rdynamic... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_rdynamic=yes else $as_nop ac_cv_rdynamic=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rdynamic" >&5 printf "%s\n" "$ac_cv_rdynamic" >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports -rdynamic" >&5 printf %s "checking whether $CXX supports -rdynamic... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_rdynamic=yes else $as_nop ac_cv_rdynamic=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rdynamic" >&5 printf "%s\n" "$ac_cv_rdynamic" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LDFLAGS="$LDFLAGS_saved" if test "x$ac_cv_rdynamic" = "xyes"; then RDYNAMIC=-rdynamic fi CXXFLAGS="" CFLAGS="$CXXFLAGS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: debugging enabled; overriding CXXFLAGS" >&5 printf "%s\n" "$as_me: debugging enabled; overriding CXXFLAGS" >&6;} if test "x$target_darwin" = "xyes"; then ac_cv_compat_stack=yes printf "%s\n" "#define HAVE_DBG_STACK 1" >>confdefs.h elif test "x$target_mingw32" = "xyes" && test "x$ac_cv_have_bfd" = "xyes"; then ac_cv_compat_stack=yes printf "%s\n" "#define HAVE_DBG_STACK 1" >>confdefs.h else ac_cv_compat_stack=no printf "%s\n" "#define HAVE_DBG_STACK 0" >>confdefs.h fi fi if test "x$ac_cv_debug" = "xyes"; then ENABLE_DEBUG_TRUE= ENABLE_DEBUG_FALSE='#' else ENABLE_DEBUG_TRUE='#' ENABLE_DEBUG_FALSE= fi if test "x$ac_cv_compat_stack" = "xyes"; then COMPAT_STACK_TRUE= COMPAT_STACK_FALSE='#' else COMPAT_STACK_TRUE='#' COMPAT_STACK_FALSE= fi ###### OS support ### OSX # Set ac_cv_mac_universal to yes/no # Set DARWIN Makefile conditional # Substitute MAC_UNIVERSAL_CFLAGS and MAC_UNIVERSAL_LDFLAGS in Makefile case "$target_os" in darwin*) target_darwin="yes" ;; *) target_darwin="no" ;; esac # Check whether --enable-mac-universal was given. if test ${enable_mac_universal+y} then : enableval=$enable_mac_universal; case "${enableval}" in yes|no) ac_cv_mac_universal="${enableval}" ;; *) as_fn_error $? "bad value \"${enableval}\" for --enable-mac-universal" "$LINENO" 5 ;; esac else $as_nop ac_cv_mac_universal=no fi if test "x$target_darwin" = "xyes" && test "x$ac_cv_mac_universal" = "xyes"; then mac_minversion="-mmacosx-version-min=10.4" case "$target_os" in darwin8*) mac_arches="-arch i386 -arch ppc" mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk" ;; darwin9*) mac_arches="-arch i386 -arch ppc -arch x86_64 -arch ppc64" mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk" ;; *) mac_arches="" mac_sysroot="" ;; esac MAC_UNIVERSAL_CFLAGS="$mac_arches $mac_sysroot $mac_minversion" MAC_UNIVERSAL_LDFLAGS="$mac_arches" fi if test "x$target_darwin" = "xyes"; then DARWIN_TRUE= DARWIN_FALSE='#' else DARWIN_TRUE='#' DARWIN_FALSE= fi ### win32 # Set WIN32 Makefile conditional # Set HAVE_WINDRES Makefile conditional # Substitute WINDRES in Makefile case "$target_os" in *mingw*) target_win32="yes" target_mingw32="yes" ;; *cygwin*|*win32*|*w32*) target_win32="yes" ;; *) target_win32="no" ;; esac if test "x$target_win32" = "xyes"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$WINDRES" = "x" ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The windres utility could not be found" >&5 printf "%s\n" "$as_me: WARNING: The windres utility could not be found" >&2;} fi printf "%s\n" "#define __WIN32__ 1" >>confdefs.h printf "%s\n" "#define __MINGW32__ 1" >>confdefs.h printf "%s\n" "#define _WINDOWS 1" >>confdefs.h fi if test "x$target_mingw32" = "xyes"; then # Extract the first word of "makensis", so it can be a program name with args. set dummy makensis; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MAKENSIS+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$MAKENSIS"; then ac_cv_prog_MAKENSIS="$MAKENSIS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MAKENSIS="makensis" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MAKENSIS=$ac_cv_prog_MAKENSIS if test -n "$MAKENSIS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAKENSIS" >&5 printf "%s\n" "$MAKENSIS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test "x$WINDRES" != "x"; then HAVE_WINDRES_TRUE= HAVE_WINDRES_FALSE='#' else HAVE_WINDRES_TRUE='#' HAVE_WINDRES_FALSE= fi if test "x$MAKENSIS" != "x"; then HAVE_NSIS_TRUE= HAVE_NSIS_FALSE='#' else HAVE_NSIS_TRUE='#' HAVE_NSIS_FALSE= fi if test "x$target_win32" = "xyes"; then WIN32_TRUE= WIN32_FALSE='#' else WIN32_TRUE='#' WIN32_FALSE= fi if test "x$target_mingw32" = "xyes"; then MINGW32_TRUE= MINGW32_FALSE='#' else MINGW32_TRUE='#' MINGW32_FALSE= fi # Check whether --with-ptw32 was given. if test ${with_ptw32+y} then : withval=$with_ptw32; ac_cv_want_ptw32="$withval" else $as_nop ac_cv_want_ptw32=no fi if test "x$ac_cv_want_ptw32" != "xno"; then if test "x$ac_cv_want_ptw32" != "xyes"; then # set -I and -L switches ptw32_default_cflags="-I${ac_cv_want_ptw32}/include" ptw32_default_libs="-L${ac_cv_want_ptw32}/lib" fi ptw32_default_libs="$ptw32_default_libs -lpthreadGC2 -lws2_32" # don't override the user-specified vars PTW32_CFLAGS="${PTW32_CFLAGS:-$ptw32_default_cflags}" PTW32_LIBS="${PTW32_LIBS:-$ptw32_default_libs}" ac_cv_want_ptw32="yes" else if test "x$target_mingw32" = "xyes"; then PTW32_LIBS="-lpthread -lwsock32 -lws2_32 -lwinmm" fi fi ### Non-POSIX compatibility (i.e. mingw32) # Sets various Makefile conditionals; see m4/np-compat.m4 if test "x$target_mingw32" = "xyes"; then sem_libs="pthreadGC2" else sem_libs="pthread rt" fi other_libs="" if test "x$ac_cv_want_ptw32" = "xyes"; then CFLAGS_saved="$CFLAGS" LDFLAGS_saved="$LDFLAGS" EXTRA_LIBS_saved="$EXTRA_LIBS" CFLAGS="$CFLAGS $PTW32_CFLAGS" LDFLAGS="$LDFLAGS $PTW32_LIBS" other_libs=-lws2_32 fi LIBS_search_libs_save="$LIBS" LIBS="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 printf %s "checking for library containing dlopen... " >&6; } if test ${ac_cv_search_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF for ac_lib in '' dl do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $other_libs $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_dlopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_dlopen+y} then : break fi done if test ${ac_cv_search_dlopen+y} then : else $as_nop ac_cv_search_dlopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 printf "%s\n" "$ac_cv_search_dlopen" >&6; } ac_res=$ac_cv_search_dlopen if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ac_cv_have_func_dlopen=1 else $as_nop ac_cv_have_func_dlopen=0 fi if test "x$LIBS" != "x"; then echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS" fi printf "%s\n" "#define HAVE_DLOPEN $ac_cv_have_func_dlopen" >>confdefs.h LIBS="$LIBS_search_libs_save" LIBS_search_libs_save="$LIBS" LIBS="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 printf %s "checking for library containing clock_gettime... " >&6; } if test ${ac_cv_search_clock_gettime+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char clock_gettime (); int main (void) { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $other_libs $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_clock_gettime+y} then : break fi done if test ${ac_cv_search_clock_gettime+y} then : else $as_nop ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ac_cv_have_func_clock_gettime=1 else $as_nop ac_cv_have_func_clock_gettime=0 fi if test "x$LIBS" != "x"; then echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS" fi printf "%s\n" "#define HAVE_CLOCK_GETTIME $ac_cv_have_func_clock_gettime" >>confdefs.h LIBS="$LIBS_search_libs_save" LIBS_search_libs_save="$LIBS" LIBS="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sem_unlink" >&5 printf %s "checking for library containing sem_unlink... " >&6; } if test ${ac_cv_search_sem_unlink+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char sem_unlink (); int main (void) { return sem_unlink (); ; return 0; } _ACEOF for ac_lib in '' $sem_libs do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $other_libs $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_sem_unlink=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_sem_unlink+y} then : break fi done if test ${ac_cv_search_sem_unlink+y} then : else $as_nop ac_cv_search_sem_unlink=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_unlink" >&5 printf "%s\n" "$ac_cv_search_sem_unlink" >&6; } ac_res=$ac_cv_search_sem_unlink if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ac_cv_have_func_sem_unlink=1 else $as_nop ac_cv_have_func_sem_unlink=0 fi if test "x$LIBS" != "x"; then echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS" fi printf "%s\n" "#define HAVE_SEM_UNLINK $ac_cv_have_func_sem_unlink" >>confdefs.h LIBS="$LIBS_search_libs_save" LIBS_search_libs_save="$LIBS" LIBS="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sem_timedwait" >&5 printf %s "checking for library containing sem_timedwait... " >&6; } if test ${ac_cv_search_sem_timedwait+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char sem_timedwait (); int main (void) { return sem_timedwait (); ; return 0; } _ACEOF for ac_lib in '' $sem_libs do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $other_libs $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_sem_timedwait=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_sem_timedwait+y} then : break fi done if test ${ac_cv_search_sem_timedwait+y} then : else $as_nop ac_cv_search_sem_timedwait=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_timedwait" >&5 printf "%s\n" "$ac_cv_search_sem_timedwait" >&6; } ac_res=$ac_cv_search_sem_timedwait if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ac_cv_have_func_sem_timedwait=1 else $as_nop ac_cv_have_func_sem_timedwait=0 fi if test "x$LIBS" != "x"; then echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS" fi printf "%s\n" "#define HAVE_SEM_TIMEDWAIT $ac_cv_have_func_sem_timedwait" >>confdefs.h LIBS="$LIBS_search_libs_save" if test "x$ac_cv_want_ptw32" = "xyes"; then CFLAGS="$CFLAGS_saved" LDFLAGS="$LDFLAGS_saved" EXTRA_LIBS="$EXTRA_LIBS_saved" fi if test "x$ac_cv_func_strcasestr" != "xyes"; then COMPAT_STRCASESTR_TRUE= COMPAT_STRCASESTR_FALSE='#' else COMPAT_STRCASESTR_TRUE='#' COMPAT_STRCASESTR_FALSE= fi ### FLTK # Substitute FLTK_CFLAGS and FLTK_LIBS in Makefile # Set FLUID variable # Set HAVE_FLUID Makefile conditional if test "x$FLTK_CFLAGS" = "x" && test "x$FLTK_LIBS" = "x"; then if test "x$FLTK_CONFIG" = "x"; then # Extract the first word of "fltk-config", so it can be a program name with args. set dummy fltk-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_FLTK_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $FLTK_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_FLTK_CONFIG="$FLTK_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_FLTK_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_FLTK_CONFIG" && ac_cv_path_FLTK_CONFIG="no" ;; esac fi FLTK_CONFIG=$ac_cv_path_FLTK_CONFIG if test -n "$FLTK_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FLTK_CONFIG" >&5 printf "%s\n" "$FLTK_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fltk-config" >&5 printf %s "checking for fltk-config... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FLTK_CONFIG" >&5 printf "%s\n" "$FLTK_CONFIG" >&6; } fi if test "$FLTK_CONFIG" = "no"; then as_fn_error $? " *** The fltk-config script could not be found. Please install the development *** headers and libraries for FLTK 1.1.x, or set PATH to the directory that *** contains fltk-config. " "$LINENO" 5 fi HAVE_FLTK_API_VERSION=no FLTK_API_VERSION="`$FLTK_CONFIG --api-version`" if test $? -ne 0; then as_fn_error $? "$FLTK_CONFIG failed" "$LINENO" 5 fi if test "x$FLTK_API_VERSION" = "x1.3" || test "x$FLTK_API_VERSION" = "x1.4"; then HAVE_FLTK_API_VERSION=yes fi FLRIG_FLTK_API_MAJOR=${FLTK_API_VERSION%%.*} FLRIG_FLTK_API_MINOR=${FLTK_API_VERSION#*.}; FLRIG_FLTK_API_MINOR=${FLRIG_FLTK_API_MINOR%%.*} if test "${HAVE_FLTK_API_VERSION}" = "no"; then as_fn_error $? " *** The version of FLTK found on your system provides API version $FLTK_API_VERSION. *** To build $PACKAGE you need a FLTK version that provides API 1.3 or 1.4. " "$LINENO" 5 fi FLTK_CFLAGS=`$FLTK_CONFIG --cxxflags` if test "x$ac_cv_static" != "xyes"; then FLTK_LIBS=`$FLTK_CONFIG --ldflags --use-images` if test "x$target_mingw32" != "xyes"; then if test "x$target_darwin" != "xyes"; then if echo "$FLTK_LIBS" | grep "lX11"; then FLTK_LIBS="$FLTK_LIBS"; else FLTK_LIBS="$FLTK_LIBS -lm -lX11"; fi fi fi else FLTK_LIBS=`$FLTK_CONFIG --ldstaticflags --use-images` fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not checking for FLTK" >&5 printf "%s\n" "$as_me: not checking for FLTK" >&6;} fi cat >>confdefs.h <<_ACEOF #define FLTK_BUILD_VERSION "`$FLTK_CONFIG --version`" _ACEOF printf "%s\n" "#define FLRIG_FLTK_API_MAJOR $FLRIG_FLTK_API_MAJOR" >>confdefs.h printf "%s\n" "#define FLRIG_FLTK_API_MINOR $FLRIG_FLTK_API_MINOR" >>confdefs.h # Extract the first word of "fluid", so it can be a program name with args. set dummy fluid; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FLUID+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FLUID"; then ac_cv_prog_FLUID="$FLUID" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FLUID="fluid" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FLUID=$ac_cv_prog_FLUID if test -n "$FLUID"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FLUID" >&5 printf "%s\n" "$FLUID" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -n "$FLUID"; then HAVE_FLUID_TRUE= HAVE_FLUID_FALSE='#' else HAVE_FLUID_TRUE='#' HAVE_FLUID_FALSE= fi ### X11 # Set ac_cv_x to yes/no # Define USE_X in config.h # Substitute X_CFLAGS and X_LIBS in Makefile if test "x$target_darwin" = "xno" && test "x$target_win32" = "xno"; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi test "x$ac_cv_want_x" = "x" && ac_cv_want_x="check" case "x$ac_cv_want_x" in "xno") ac_cv_x=no ;; "xcheck") pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for x11" >&5 printf %s "checking for x11... " >&6; } if test -n "$X_CFLAGS"; then pkg_cv_X_CFLAGS="$X_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_X_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$X_LIBS"; then pkg_cv_X_LIBS="$X_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_X_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then X_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` else X_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$X_PKG_ERRORS" >&5 ac_cv_x=no elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ac_cv_x=no else X_CFLAGS=$pkg_cv_X_CFLAGS X_LIBS=$pkg_cv_X_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ac_cv_x=yes fi ;; "xyes") pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for x11" >&5 printf %s "checking for x11... " >&6; } if test -n "$X_CFLAGS"; then pkg_cv_X_CFLAGS="$X_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_X_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$X_LIBS"; then pkg_cv_X_LIBS="$X_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_X_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then X_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` else X_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$X_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (x11) were not met: $X_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables X_CFLAGS and X_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables X_CFLAGS and X_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else X_CFLAGS=$pkg_cv_X_CFLAGS X_LIBS=$pkg_cv_X_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # if we get here the test has succeeded ac_cv_x=yes ;; esac if test "x$ac_cv_x" = "xyes"; then printf "%s\n" "#define USE_X 1" >>confdefs.h pkg_x_version=`$PKG_CONFIG --modversion "x11" 2>/dev/null` else printf "%s\n" "#define USE_X 0" >>confdefs.h pkg_x_version="" fi printf "%s\n" "#define X_BUILD_VERSION \"$pkg_x_version\"" >>confdefs.h : fi ### libflxmlrpc # Set ac_cv_flxmlrpc to yes/no # Define USE_FLXMLRPC in config.h # Substitute FLXMLRPC_CFLAGS and FLXMLRPC_LIBS in Makefile # Check whether --with-flxmlrpc was given. if test ${with_flxmlrpc+y} then : withval=$with_flxmlrpc; case "${withval}" in yes|no) ac_cv_want_flxmlrpc="${withval}" ;; *) as_fn_error $? "bad value \"${withval}\" for --with-flxmlrpc" "$LINENO" 5 ;; esac else $as_nop ac_cv_want_flxmlrpc=check fi test "x$ac_cv_want_flxmlrpc" = "x" && ac_cv_want_flxmlrpc="check" case "x$ac_cv_want_flxmlrpc" in "xno") ac_cv_flxmlrpc=no ;; "xcheck") pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flxmlrpc >= 1.0.1" >&5 printf %s "checking for flxmlrpc >= 1.0.1... " >&6; } if test -n "$FLXMLRPC_CFLAGS"; then pkg_cv_FLXMLRPC_CFLAGS="$FLXMLRPC_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flxmlrpc >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "flxmlrpc >= 1.0.1") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FLXMLRPC_CFLAGS=`$PKG_CONFIG --cflags "flxmlrpc >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FLXMLRPC_LIBS"; then pkg_cv_FLXMLRPC_LIBS="$FLXMLRPC_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flxmlrpc >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "flxmlrpc >= 1.0.1") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FLXMLRPC_LIBS=`$PKG_CONFIG --libs "flxmlrpc >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FLXMLRPC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "flxmlrpc >= 1.0.1" 2>&1` else FLXMLRPC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "flxmlrpc >= 1.0.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FLXMLRPC_PKG_ERRORS" >&5 ac_cv_flxmlrpc=no elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ac_cv_flxmlrpc=no else FLXMLRPC_CFLAGS=$pkg_cv_FLXMLRPC_CFLAGS FLXMLRPC_LIBS=$pkg_cv_FLXMLRPC_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ac_cv_flxmlrpc=yes fi ;; "xyes") pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flxmlrpc >= 1.0.1" >&5 printf %s "checking for flxmlrpc >= 1.0.1... " >&6; } if test -n "$FLXMLRPC_CFLAGS"; then pkg_cv_FLXMLRPC_CFLAGS="$FLXMLRPC_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flxmlrpc >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "flxmlrpc >= 1.0.1") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FLXMLRPC_CFLAGS=`$PKG_CONFIG --cflags "flxmlrpc >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FLXMLRPC_LIBS"; then pkg_cv_FLXMLRPC_LIBS="$FLXMLRPC_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flxmlrpc >= 1.0.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "flxmlrpc >= 1.0.1") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FLXMLRPC_LIBS=`$PKG_CONFIG --libs "flxmlrpc >= 1.0.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FLXMLRPC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "flxmlrpc >= 1.0.1" 2>&1` else FLXMLRPC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "flxmlrpc >= 1.0.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FLXMLRPC_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (flxmlrpc >= 1.0.1) were not met: $FLXMLRPC_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FLXMLRPC_CFLAGS and FLXMLRPC_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FLXMLRPC_CFLAGS and FLXMLRPC_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else FLXMLRPC_CFLAGS=$pkg_cv_FLXMLRPC_CFLAGS FLXMLRPC_LIBS=$pkg_cv_FLXMLRPC_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # if we get here the test has succeeded ac_cv_flxmlrpc=yes ;; esac if test "x$ac_cv_flxmlrpc" = "xyes"; then printf "%s\n" "#define USE_FLXMLRPC 1" >>confdefs.h pkg_flxmlrpc_version=`$PKG_CONFIG --modversion "flxmlrpc >= 1.0.1" 2>/dev/null` else printf "%s\n" "#define USE_FLXMLRPC 0" >>confdefs.h pkg_flxmlrpc_version="" fi printf "%s\n" "#define FLXMLRPC_BUILD_VERSION \"$pkg_flxmlrpc_version\"" >>confdefs.h if test "x$ac_cv_flxmlrpc" = "xyes"; then ENABLE_FLXMLRPC_TRUE= ENABLE_FLXMLRPC_FALSE='#' else ENABLE_FLXMLRPC_TRUE='#' ENABLE_FLXMLRPC_FALSE= fi ### build info # Define various build variables in config.h # Define build flags and substitute in Makefile.in # CPPFLAGS FLRIG_BUILD_CPPFLAGS="-I\$(srcdir) -I\$(srcdir)/include" if test "x$ac_cv_flxmlrpc" != "xyes"; then FLRIG_BUILD_CPPFLAGS="$FLRIG_BUILD_CPPFLAGS -I\$(srcdir)/xmlrpcpp" fi if test "x$target_win32" = "xyes"; then FLRIG_BUILD_CPPFLAGS="$FLRIG_BUILD_CPPFLAGS -D_WINDOWS" fi if test "x$target_darwin" = "xyes"; then FLRIG_BUILD_CPPFLAGS="$FLRIG_BUILD_CPPFLAGS -fno-stack-check -mmacosx-version-min=10.11" fi # CXXFLAGS FLRIG_BUILD_CXXFLAGS="$FLTK_CFLAGS -I\$(srcdir) -I\$(srcdir)/include \ $X_CFLAGS -pipe -Wall -fexceptions $OPT_CFLAGS $DEBUG_CFLAGS $PTW32_CFLAGS" if test "x$ac_cv_flxmlrpc" != "xyes"; then FLRIG_BUILD_CXXFLAGS="-I\$(srcdir)/xmlrpcpp $FLRIG_BUILD_CXXFLAGS" fi if test "x$target_mingw32" = "xyes"; then FLRIG_BUILD_CXXFLAGS="-mthreads $FLRIG_BUILD_CXXFLAGS" fi if test "x$target_darwin" = "xyes"; then FLRIG_BUILD_CXXFLAGS="$FLRIG_BUILD_CXXFLAGS -fno-stack-check -mmacosx-version-min=10.11" fi # LDFLAGS FLRIG_BUILD_LDFLAGS= # LDADD FLRIG_BUILD_LDADD="$FLTK_LIBS $X_LIBS $EXTRA_LIBS $PTW32_LIBS $FLXMLRPC_LIBS $LIBUDEV_LIBS" if test "x$ac_cv_debug" = "xyes"; then FLRIG_BUILD_CXXFLAGS="$FLRIG_BUILD_CXXFLAGS -UNDEBUG" FLRIG_BUILD_LDFLAGS="$FLRIG_BUILD_LDFLAGS $RDYNAMIC" else FLRIG_BUILD_CXXFLAGS="$FLRIG_BUILD_CXXFLAGS -DNDEBUG" fi if test "x$target_mingw32" = "xyes"; then FLRIG_BUILD_LDFLAGS="-mthreads $FLRIG_BUILD_LDFLAGS" fi # UDEV SUPPORT if test "x$target_darwin" = "xyes"; then FLRIG_BUILD_LDADD="$FLRIG_BUILD_LDADD -framework IOKit -framework CoreFoundation" else if test "x$target_mingw32" = "xyes"; then FLRIG_BUILD_LDADD="$FLRIG_BUILD_LDADD -lsetupapi -lhid" else FLRIG_BUILD_LDADD="$FLRIG_BUILD_LDADD -ludev" fi fi #define build variables for config.h printf "%s\n" "#define BUILD_BUILD_PLATFORM \"$build\"" >>confdefs.h printf "%s\n" "#define BUILD_HOST_PLATFORM \"$host\"" >>confdefs.h printf "%s\n" "#define BUILD_TARGET_PLATFORM \"$target\"" >>confdefs.h test "x$LC_ALL" != "x" && LC_ALL_saved="$LC_ALL" LC_ALL=C export LC_ALL ac_sh_dq="\"`echo $ac_configure_args | sed 's/"/\\\\"/g'`\"" printf "%s\n" "#define BUILD_CONFIGURE_ARGS $ac_sh_dq" >>confdefs.h # Allow BUILD_DATE, BUILD_USER, BUILD_HOST to be externally overridden by # environment variables. ac_sh_dq="\"$BUILD_DATE\"" test "x$BUILD_DATE" = "x" && ac_sh_dq="\"`date | sed 's/"/\\\\"/g'`\"" printf "%s\n" "#define BUILD_DATE $ac_sh_dq" >>confdefs.h ac_sh_dq="\"$BUILD_USER\"" test "x$BUILD_USER" = "x" && ac_sh_dq="\"`whoami | sed 's/"/\\\\"/g'`\"" printf "%s\n" "#define BUILD_USER $ac_sh_dq" >>confdefs.h ac_sh_dq="\"$BUILD_HOST\"" test "x$BUILD_HOST" = "x" && ac_sh_dq="\"`hostname | sed 's/"/\\\\"/g'`\"" printf "%s\n" "#define BUILD_HOST $ac_sh_dq" >>confdefs.h ac_sh_dq="\"`$CXX -v 2>&1 | tail -1 | sed 's/"/\\\\"/g'`\"" printf "%s\n" "#define BUILD_COMPILER $ac_sh_dq" >>confdefs.h ac_sh_dq="\"`echo $FLRIG_BUILD_CPPFLAGS $FLRIG_BUILD_CXXFLAGS | sed 's/"/\\\\"/g'`\"" printf "%s\n" "#define FLRIG_BUILD_CXXFLAGS $ac_sh_dq" >>confdefs.h ac_sh_dq="\"`echo $FLRIG_BUILD_LDFLAGS $FLRIG_BUILD_LDADD | sed 's/"/\\\\"/g'`\"" printf "%s\n" "#define FLRIG_BUILD_LDFLAGS $ac_sh_dq" >>confdefs.h if test "x$LC_ALL_saved" != "x"; then LC_ALL="$LC_ALL_saved" export LC_ALL fi ac_config_files="$ac_config_files Makefile src/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DEBUG_TRUE}" && test -z "${ENABLE_DEBUG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DEBUG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMPAT_STACK_TRUE}" && test -z "${COMPAT_STACK_FALSE}"; then as_fn_error $? "conditional \"COMPAT_STACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DARWIN_TRUE}" && test -z "${DARWIN_FALSE}"; then as_fn_error $? "conditional \"DARWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_WINDRES_TRUE}" && test -z "${HAVE_WINDRES_FALSE}"; then as_fn_error $? "conditional \"HAVE_WINDRES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_NSIS_TRUE}" && test -z "${HAVE_NSIS_FALSE}"; then as_fn_error $? "conditional \"HAVE_NSIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WIN32_TRUE}" && test -z "${WIN32_FALSE}"; then as_fn_error $? "conditional \"WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MINGW32_TRUE}" && test -z "${MINGW32_FALSE}"; then as_fn_error $? "conditional \"MINGW32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMPAT_STRCASESTR_TRUE}" && test -z "${COMPAT_STRCASESTR_FALSE}"; then as_fn_error $? "conditional \"COMPAT_STRCASESTR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FLUID_TRUE}" && test -z "${HAVE_FLUID_FALSE}"; then as_fn_error $? "conditional \"HAVE_FLUID\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FLXMLRPC_TRUE}" && test -z "${ENABLE_FLXMLRPC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FLXMLRPC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by FLRIG $as_me 2.0.04, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ FLRIG config.status 2.0.04 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ### summary ac_xmlrpc_report="internal lib"; if test "x$ac_cv_flxmlrpc" = "xyes"; then ac_xmlrpc_report="external lib"; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Configuration summary: Version ..................... $VERSION Target OS ................... $target_os Have flxmlrpc library ....... $ac_xmlrpc_report Static linking .............. $ac_cv_static CPU optimizations ........... $ac_cv_opt Debugging ................... $ac_cv_debug " >&5 printf "%s\n" " Configuration summary: Version ..................... $VERSION Target OS ................... $target_os Have flxmlrpc library ....... $ac_xmlrpc_report Static linking .............. $ac_cv_static CPU optimizations ........... $ac_cv_opt Debugging ................... $ac_cv_debug " >&6; } flrig-2.0.04/configure.ac0000664000175000017500000001002314511460515012107 00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. # Generic support for FLTK applications AC_COPYRIGHT([Copyright (C) 2009 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com)]) AC_PREREQ([2.63]) dnl major and minor must be integers; patch may dnl contain other characters or be empty m4_define(FLRIG_MAJOR, [2]) m4_define(FLRIG_MINOR, [0]) m4_define(FLRIG_PATCH, [.04]) AC_INIT([FLRIG], FLRIG_MAJOR.FLRIG_MINOR[]FLRIG_PATCH, [w1hkj AT w1hkj DOT com]) AC_SUBST([FLRIG_VERSION_MAJOR], [FLRIG_MAJOR]) AC_SUBST([FLRIG_VERSION_MINOR], [FLRIG_MINOR]) AC_SUBST([FLRIG_VERSION_PATCH], [FLRIG_PATCH]) AC_SUBST([FLRIG_VERSION], [FLRIG_MAJOR.FLRIG_MINOR[]FLRIG_PATCH]) AC_DEFINE([FLRIG_VERSION_MAJOR], [FLRIG_MAJOR], [major version number]) AC_DEFINE([FLRIG_VERSION_MINOR], [FLRIG_MINOR], [minor version number]) AC_DEFINE([FLRIG_VERSION_PATCH], ["FLRIG_PATCH"], [patch/alpha version string]) AC_DEFINE([FLRIG_VERSION], ["FLRIG_MAJOR.FLRIG_MINOR[]FLRIG_PATCH"], [version string]) AC_SUBST([AC_CONFIG_ARGS], [$ac_configure_args]) AC_CONFIG_AUX_DIR([build-aux]) # define build, build_cpu, build_vendor, build_os AC_CANONICAL_BUILD # define host, host_cpu, host_vendor, host_os AC_CANONICAL_HOST # define target, target_cpu, target_vendor, target_os AC_CANONICAL_TARGET AM_INIT_AUTOMAKE([-Wall -Wno-portability foreign std-options subdir-objects 1.9.6]) #change the next config item for the specific application src's AC_CONFIG_SRCDIR([src/main.cxx]) AC_CONFIG_HEADERS([src/config.h]) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_USE_SYSTEM_EXTENSIONS # Checks for libraries. # Checks for header files. AC_CHECK_HEADERS([stdlib.h string.h]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_TYPE_SIZE_T # Checks for library functions. AC_CHECK_FUNCS([getaddrinfo gethostbyname hstrerror gmtime_r localtime_r memmove memset mkdir select setenv snprintf socket socketpair strcasecmp strcasestr strchr strdup strerror strlcpy strncasecmp strrchr strstr strtol uname unsetenv vsnprintf]) ### static flag # Set ac_cv_static to yes/no # Substitute RTLIB in Makefile AC_FL_STATIC ### optimizations # Set ac_cv_opt to arg # Substitute OPT_FLAGS in Makefile AC_FL_OPT ### debug flag # Set ac_cv_debug to yes/no # Override CXXFLAGS # Set ENABLE_DEBUG Makefile conditional # Substitute RDYNAMIC in Makefile AC_FL_DEBUG ###### OS support ### OSX # Set ac_cv_mac_universal to yes/no # Set DARWIN Makefile conditional # Substitute MAC_UNIVERSAL_CFLAGS and MAC_UNIVERSAL_LDFLAGS in Makefile AC_FL_MACOSX ### win32 # Set WIN32 Makefile conditional # Set HAVE_WINDRES Makefile conditional # Substitute WINDRES in Makefile AC_FL_WIN32 ### Non-POSIX compatibility (i.e. mingw32) # Sets various Makefile conditionals; see m4/np-compat.m4 AC_FLRIG_NP_COMPAT ### FLTK # Substitute FLTK_CFLAGS and FLTK_LIBS in Makefile # Set FLUID variable # Set HAVE_FLUID Makefile conditional AC_CHECK_FLTK ### X11 # Set ac_cv_x to yes/no # Define USE_X in config.h # Substitute X_CFLAGS and X_LIBS in Makefile if test "x$target_darwin" = "xno" && test "x$target_win32" = "xno"; then AC_FLRIG_PKG_CHECK([x], [x11], [no], [yes]) fi ### libflxmlrpc # Set ac_cv_flxmlrpc to yes/no # Define USE_FLXMLRPC in config.h # Substitute FLXMLRPC_CFLAGS and FLXMLRPC_LIBS in Makefile AC_FLRIG_PKG_CHECK([flxmlrpc], [flxmlrpc >= 1.0.1], [yes], [yes], [use external flxmlrpc library @<:@autodetect@:>@], [ENABLE_FLXMLRPC]) ### build info # Define various build variables in config.h AC_FLRIG_BUILD_INFO AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT ### summary ac_xmlrpc_report="internal lib"; if test "x$ac_cv_flxmlrpc" = "xyes"; then ac_xmlrpc_report="external lib"; fi AC_MSG_RESULT([ Configuration summary: Version ..................... $VERSION Target OS ................... $target_os Have flxmlrpc library ....... $ac_xmlrpc_report Static linking .............. $ac_cv_static CPU optimizations ........... $ac_cv_opt Debugging ................... $ac_cv_debug ]) flrig-2.0.04/m4/0000775000175000017500000000000014511461605010226 500000000000000flrig-2.0.04/m4/debug.m40000664000175000017500000000706714475136505011517 00000000000000AC_DEFUN([AC_FL_RDYNAMIC], [ LDFLAGS_saved="$LDFLAGS" LDFLAGS="$LDFLAGS -rdynamic" AC_MSG_CHECKING([whether $CC supports -rdynamic]) AC_TRY_LINK([], [], [ac_cv_rdynamic=yes], [ac_cv_rdynamic=no]) AC_MSG_RESULT([$ac_cv_rdynamic]) AC_LANG_PUSH(C++) AC_MSG_CHECKING([whether $CXX supports -rdynamic]) AC_TRY_LINK([], [], [ac_cv_rdynamic=yes], [ac_cv_rdynamic=no]) AC_MSG_RESULT([$ac_cv_rdynamic]) AC_LANG_POP(C++) LDFLAGS="$LDFLAGS_saved" ]) AC_DEFUN([AC_FL_DEBUG], [ AC_REQUIRE([AC_FL_OPT]) AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug], [turn on debugging]), [case "${enableval}" in yes|no) ac_cv_debug="${enableval}" ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;; esac], [ac_cv_debug=no]) AC_ARG_VAR([BFD_CFLAGS], [C compiler flags for libbfd]) AC_ARG_VAR([BFD_LIBS], [linker flags for libbfd]) AC_ARG_WITH([bfd], AC_HELP_STRING([--with-bfd@<:@=DIR@:>@], [search for libbfd in DIR/include and DIR/lib @<:@mingw32 only@:>@]), [ac_cv_want_bfd="$withval"], [ac_cv_want_bfd=yes]) if test "x$ac_cv_debug" = "xyes" && test "x$ac_cv_want_bfd" != "xno" && \ test "x$target_mingw32" = "xyes"; then if test "x$ac_cv_want_bfd" != "xyes"; then # set -I and -L switches bfd_default_cflags="-I${ac_cv_want_bfd}/include" bfd_default_libs="-L${ac_cv_want_bfd}/lib" fi # don't override the user-specified vars BFD_CFLAGS="${BFD_CFLAGS:-$bfd_default_cflags}" BFD_LIBS="${BFD_LIBS:-$bfd_default_libs}" ac_cv_want_bfd="yes" CPPFLAGS_saved="$CPPFLAGS" LDFLAGS_saved="$LDFLAGS" CPPFLAGS="$CPPFLAGS $BFD_CFLAGS" LDFLAGS="$LDFLAGS $BFD_LIBS" AC_CHECK_HEADER([bfd.h], [ac_cv_have_bfd="yes"], [ac_cv_have_bfd="no"]) if test "x$ac_cv_have_bfd" = "xyes"; then bfd_other_libs="-liberty -lpsapi -limagehlp" AC_CHECK_LIB([bfd], [bfd_set_format], [ac_cv_have_bfd="yes"], [ac_cv_have_bfd="no"], [$bfd_other_libs]) fi CPPFLAGS="$CPPFLAGS_saved" LDFLAGS="$LDFLAGS_saved" if test "x$ac_cv_have_bfd" = "xyes"; then BFD_LIBS="$BFD_LIBS -lbfd $bfd_other_libs" fi fi if test "x$ac_cv_debug" = "xyes"; then AC_MSG_CHECKING([for debug info flag]) if test "x$GXX" = "xyes"; then if test "x$target_mingw32" = "xyes"; then gflag="-gstabs" else gflag="-ggdb3" fi else gflag="-g" fi AC_MSG_RESULT([$gflag]) DEBUG_CFLAGS="-O0 -fno-inline-functions -fno-omit-frame-pointer $gflag -Wall" AC_FL_RDYNAMIC if test "x$ac_cv_rdynamic" = "xyes"; then RDYNAMIC=-rdynamic fi CXXFLAGS="" CFLAGS="$CXXFLAGS" AC_MSG_NOTICE([debugging enabled; overriding CXXFLAGS]) if test "x$target_darwin" = "xyes"; then ac_cv_compat_stack=yes AC_DEFINE([HAVE_DBG_STACK], 1, [Define to 1 if we have dbg::stack]) elif test "x$target_mingw32" = "xyes" && test "x$ac_cv_have_bfd" = "xyes"; then ac_cv_compat_stack=yes AC_DEFINE([HAVE_DBG_STACK], 1, [Define to 1 if we have dbg::stack]) else ac_cv_compat_stack=no AC_DEFINE([HAVE_DBG_STACK], 0, [Define to 0 if not using dbg::stack]) fi fi AM_CONDITIONAL([ENABLE_DEBUG], [test "x$ac_cv_debug" = "xyes"]) AC_SUBST([DEBUG_CFLAGS]) AC_SUBST([RDYNAMIC]) AM_CONDITIONAL([COMPAT_STACK], [test "x$ac_cv_compat_stack" = "xyes"]) ]) flrig-2.0.04/m4/macosx.m40000664000175000017500000000245214475136505011714 00000000000000AC_DEFUN([AC_FL_MACOSX], [ case "$target_os" in darwin*) target_darwin="yes" ;; *) target_darwin="no" ;; esac AC_ARG_ENABLE([mac-universal], AC_HELP_STRING([--enable-mac-universal], [build a universal binary on Mac OS X @<:@no@:>@]), [case "${enableval}" in yes|no) ac_cv_mac_universal="${enableval}" ;; *) AC_MSG_ERROR([bad value "${enableval}" for --enable-mac-universal]) ;; esac], [ac_cv_mac_universal=no]) if test "x$target_darwin" = "xyes" && test "x$ac_cv_mac_universal" = "xyes"; then mac_minversion="-mmacosx-version-min=10.4" case "$target_os" in darwin8*) mac_arches="-arch i386 -arch ppc" mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk" ;; darwin9*) mac_arches="-arch i386 -arch ppc -arch x86_64 -arch ppc64" mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk" ;; *) mac_arches="" mac_sysroot="" ;; esac MAC_UNIVERSAL_CFLAGS="$mac_arches $mac_sysroot $mac_minversion" MAC_UNIVERSAL_LDFLAGS="$mac_arches" fi AC_SUBST([MAC_UNIVERSAL_CFLAGS]) AC_SUBST([MAC_UNIVERSAL_LDFLAGS]) AM_CONDITIONAL([DARWIN], [test "x$target_darwin" = "xyes"]) ]) flrig-2.0.04/m4/build.m40000664000175000017500000000701214475136505011516 00000000000000AC_DEFUN([AC_FLRIG_SH_DQ], [ ac_sh_dq="\"`$1 | sed 's/"/\\\\"/g'`\"" ]) AC_DEFUN([AC_FLRIG_BUILD_INFO], [ # Define build flags and substitute in Makefile.in # CPPFLAGS FLRIG_BUILD_CPPFLAGS="-I\$(srcdir) -I\$(srcdir)/include" if test "x$ac_cv_flxmlrpc" != "xyes"; then FLRIG_BUILD_CPPFLAGS="$FLRIG_BUILD_CPPFLAGS -I\$(srcdir)/xmlrpcpp" fi if test "x$target_win32" = "xyes"; then FLRIG_BUILD_CPPFLAGS="$FLRIG_BUILD_CPPFLAGS -D_WINDOWS" fi if test "x$target_darwin" = "xyes"; then FLRIG_BUILD_CPPFLAGS="$FLRIG_BUILD_CPPFLAGS -fno-stack-check -mmacosx-version-min=10.11" fi # CXXFLAGS FLRIG_BUILD_CXXFLAGS="$FLTK_CFLAGS -I\$(srcdir) -I\$(srcdir)/include \ $X_CFLAGS -pipe -Wall -fexceptions $OPT_CFLAGS $DEBUG_CFLAGS $PTW32_CFLAGS" if test "x$ac_cv_flxmlrpc" != "xyes"; then FLRIG_BUILD_CXXFLAGS="-I\$(srcdir)/xmlrpcpp $FLRIG_BUILD_CXXFLAGS" fi if test "x$target_mingw32" = "xyes"; then FLRIG_BUILD_CXXFLAGS="-mthreads $FLRIG_BUILD_CXXFLAGS" fi if test "x$target_darwin" = "xyes"; then FLRIG_BUILD_CXXFLAGS="$FLRIG_BUILD_CXXFLAGS -fno-stack-check -mmacosx-version-min=10.11" fi # LDFLAGS FLRIG_BUILD_LDFLAGS= # LDADD FLRIG_BUILD_LDADD="$FLTK_LIBS $X_LIBS $EXTRA_LIBS $PTW32_LIBS $FLXMLRPC_LIBS $LIBUDEV_LIBS" if test "x$ac_cv_debug" = "xyes"; then FLRIG_BUILD_CXXFLAGS="$FLRIG_BUILD_CXXFLAGS -UNDEBUG" FLRIG_BUILD_LDFLAGS="$FLRIG_BUILD_LDFLAGS $RDYNAMIC" else FLRIG_BUILD_CXXFLAGS="$FLRIG_BUILD_CXXFLAGS -DNDEBUG" fi if test "x$target_mingw32" = "xyes"; then FLRIG_BUILD_LDFLAGS="-mthreads $FLRIG_BUILD_LDFLAGS" fi # UDEV SUPPORT if test "x$target_darwin" = "xyes"; then FLRIG_BUILD_LDADD="$FLRIG_BUILD_LDADD -framework IOKit -framework CoreFoundation" else if test "x$target_mingw32" = "xyes"; then FLRIG_BUILD_LDADD="$FLRIG_BUILD_LDADD -lsetupapi -lhid" else FLRIG_BUILD_LDADD="$FLRIG_BUILD_LDADD -ludev" fi fi AC_SUBST([FLRIG_BUILD_CPPFLAGS]) AC_SUBST([FLRIG_BUILD_CXXFLAGS]) AC_SUBST([FLRIG_BUILD_LDFLAGS]) AC_SUBST([FLRIG_BUILD_LDADD]) #define build variables for config.h AC_DEFINE_UNQUOTED([BUILD_BUILD_PLATFORM], ["$build"], [Build platform]) AC_DEFINE_UNQUOTED([BUILD_HOST_PLATFORM], ["$host"], [Host platform]) AC_DEFINE_UNQUOTED([BUILD_TARGET_PLATFORM], ["$target"], [Target platform]) test "x$LC_ALL" != "x" && LC_ALL_saved="$LC_ALL" LC_ALL=C export LC_ALL AC_FLRIG_SH_DQ([echo $ac_configure_args]) AC_DEFINE_UNQUOTED([BUILD_CONFIGURE_ARGS], [$ac_sh_dq], [Configure arguments]) # Allow BUILD_DATE, BUILD_USER, BUILD_HOST to be externally overridden by # environment variables. ac_sh_dq="\"$BUILD_DATE\"" test "x$BUILD_DATE" = "x" && AC_FLRIG_SH_DQ([date]) AC_DEFINE_UNQUOTED([BUILD_DATE], [$ac_sh_dq], [Build date]) ac_sh_dq="\"$BUILD_USER\"" test "x$BUILD_USER" = "x" && AC_FLRIG_SH_DQ([whoami]) AC_DEFINE_UNQUOTED([BUILD_USER], [$ac_sh_dq], [Build user]) ac_sh_dq="\"$BUILD_HOST\"" test "x$BUILD_HOST" = "x" && AC_FLRIG_SH_DQ([hostname]) AC_DEFINE_UNQUOTED([BUILD_HOST], [$ac_sh_dq], [Build host]) AC_FLRIG_SH_DQ([$CXX -v 2>&1 | tail -1]) AC_DEFINE_UNQUOTED([BUILD_COMPILER], [$ac_sh_dq], [Compiler]) AC_FLRIG_SH_DQ([echo $FLRIG_BUILD_CPPFLAGS $FLRIG_BUILD_CXXFLAGS]) AC_DEFINE_UNQUOTED([FLRIG_BUILD_CXXFLAGS], [$ac_sh_dq], [FLRIG compiler flags]) AC_FLRIG_SH_DQ([echo $FLRIG_BUILD_LDFLAGS $FLRIG_BUILD_LDADD]) AC_DEFINE_UNQUOTED([FLRIG_BUILD_LDFLAGS], [$ac_sh_dq], [FLRIG linker flags]) if test "x$LC_ALL_saved" != "x"; then LC_ALL="$LC_ALL_saved" export LC_ALL fi ]) flrig-2.0.04/m4/fltk.m40000664000175000017500000000512214475136505011357 00000000000000AC_DEFUN([AC_CHECK_FLTK], [ AC_ARG_VAR([FLTK_CONFIG], [Path to fltk-config utility]) AC_ARG_VAR([FLTK_CFLAGS], [C compiler flags for FLTK, overriding fltk-config]) AC_ARG_VAR([FLTK_LIBS], [linker flags for FLTK, overriding fltk-config]) if test "x$FLTK_CFLAGS" = "x" && test "x$FLTK_LIBS" = "x"; then if test "x$FLTK_CONFIG" = "x"; then AC_PATH_PROG([FLTK_CONFIG], [fltk-config], [no]) else AC_MSG_CHECKING([for fltk-config]) AC_MSG_RESULT([$FLTK_CONFIG]) fi if test "$FLTK_CONFIG" = "no"; then AC_MSG_ERROR([ *** The fltk-config script could not be found. Please install the development *** headers and libraries for FLTK 1.1.x, or set PATH to the directory that *** contains fltk-config. ]) fi HAVE_FLTK_API_VERSION=no FLTK_API_VERSION="`$FLTK_CONFIG --api-version`" if test $? -ne 0; then AC_MSG_ERROR([$FLTK_CONFIG failed]) fi if test "x$FLTK_API_VERSION" = "x1.3" || test "x$FLTK_API_VERSION" = "x1.4"; then HAVE_FLTK_API_VERSION=yes fi FLRIG_FLTK_API_MAJOR=${FLTK_API_VERSION%%.*} FLRIG_FLTK_API_MINOR=${FLTK_API_VERSION#*.}; FLRIG_FLTK_API_MINOR=${FLRIG_FLTK_API_MINOR%%.*} if test "${HAVE_FLTK_API_VERSION}" = "no"; then AC_MSG_ERROR([ *** The version of FLTK found on your system provides API version $FLTK_API_VERSION. *** To build $PACKAGE you need a FLTK version that provides API 1.3 or 1.4. ]) fi FLTK_CFLAGS=`$FLTK_CONFIG --cxxflags` if test "x$ac_cv_static" != "xyes"; then FLTK_LIBS=`$FLTK_CONFIG --ldflags --use-images` if test "x$target_mingw32" != "xyes"; then if test "x$target_darwin" != "xyes"; then if echo "$FLTK_LIBS" | grep "lX11"; then FLTK_LIBS="$FLTK_LIBS"; else FLTK_LIBS="$FLTK_LIBS -lm -lX11"; fi fi fi else FLTK_LIBS=`$FLTK_CONFIG --ldstaticflags --use-images` fi else AC_MSG_NOTICE([not checking for FLTK]) fi AC_SUBST([FLTK_CFLAGS]) AC_SUBST([FLTK_LIBS]) AC_DEFINE_UNQUOTED([FLTK_BUILD_VERSION], ["`$FLTK_CONFIG --version`"], [FLTK version]) AC_DEFINE_UNQUOTED([FLRIG_FLTK_API_MAJOR], [$FLRIG_FLTK_API_MAJOR], [FLTK API major version]) AC_DEFINE_UNQUOTED([FLRIG_FLTK_API_MINOR], [$FLRIG_FLTK_API_MINOR], [FLTK API minor version]) AC_ARG_VAR([FLUID], [Fast Light User-Interface Designer]) AC_CHECK_PROG([FLUID], [fluid], [fluid]) AM_CONDITIONAL([HAVE_FLUID], [test -n "$FLUID"]) ]) flrig-2.0.04/m4/np-compat.m40000664000175000017500000000172114475136505012316 00000000000000AC_DEFUN([AC_FLRIG_NP_COMPAT], [ AC_REQUIRE([AC_FL_MACOSX]) AC_REQUIRE([AC_FL_WIN32]) if test "x$target_mingw32" = "xyes"; then sem_libs="pthreadGC2" else sem_libs="pthread rt" fi other_libs="" if test "x$ac_cv_want_ptw32" = "xyes"; then CFLAGS_saved="$CFLAGS" LDFLAGS_saved="$LDFLAGS" EXTRA_LIBS_saved="$EXTRA_LIBS" CFLAGS="$CFLAGS $PTW32_CFLAGS" LDFLAGS="$LDFLAGS $PTW32_LIBS" other_libs=-lws2_32 fi AC_FLRIG_SEARCH_LIBS([dlopen], [dl], [$other_libs]) AC_FLRIG_SEARCH_LIBS([clock_gettime], [rt], [$other_libs]) AC_FLRIG_SEARCH_LIBS([sem_unlink], [$sem_libs], [$other_libs]) AC_FLRIG_SEARCH_LIBS([sem_timedwait], [$sem_libs], [$other_libs]) if test "x$ac_cv_want_ptw32" = "xyes"; then CFLAGS="$CFLAGS_saved" LDFLAGS="$LDFLAGS_saved" EXTRA_LIBS="$EXTRA_LIBS_saved" fi AC_SUBST([EXTRA_LIBS]) AM_CONDITIONAL([COMPAT_STRCASESTR], [test "x$ac_cv_func_strcasestr" != "xyes"]) ]) flrig-2.0.04/m4/opt.m40000664000175000017500000000516114475136505011224 00000000000000AC_DEFUN([AC_FL_OPT], [ AC_ARG_ENABLE([optimizations], AC_HELP_STRING([--enable-optimizations], [use CPU optimizations (none|sse|sse2|sse3|sse4|i486|i686|avx|avx2|x86-64|rpi1|rpi2|rpi3|rpi4|bbb|cyclone5|nativeARM|native) @<:@none@:>@]), [case "${enableval}" in none|sse|sse2|sse3|sse4|i486|i686|avx|avx2|x86-64|rpi1|rpi2|rpi3|rpi4|bbb|cyclone5|nativeARM|native) ac_cv_opt="${enableval}" ;; *) AC_MSG_WARN([possible values: none|sse|sse2|sse3|sse4|avx|avx2|i486|i686|x86-64|native]) AC_MSG_WARN([possible values: none|rpi1|rpi2|rpi3|rpi4|bbb|cyclone5|nativeARM]) AC_MSG_ERROR([bad value ${enableval} for --enable-optimizations]) ;; esac], [ac_cv_opt=none]) OPT_CFLAGS="-O2" OPT_CFLAGS_X86="-O2 -mno-3dnow" OPT_CFLAGS_ARM="-O2 -mfloat-abi=hard" case "$ac_cv_opt" in sse) OPT_CFLAGS="$OPT_CFLAGS_x86 -mmmx -msse -mfpmath=sse" ;; sse2) OPT_CFLAGS="$OPT_CFLAGS_x86 -mmmx -msse -msse2 -mfpmath=sse" ;; sse3) OPT_CFLAGS="$OPT_CFLAGS_x86 -mmmx -msse -msse2 -msse3 -mfpmath=sse" ;; sse4) OPT_CFLAGS="$OPT_CFLAGS_x86 -mmmx -msse -msse2 -msse3 -msse4 -mfpmath=sse" ;; avx) OPT_CFLAGS="$OPT_CFLAGS_x86 -mavx -mfpmath=sse" ;; avx2) OPT_CFLAGS="$OPT_CFLAGS_x86 -mavx2 -mfpmath=sse" ;; i486) OPT_CFLAGS="$OPT_CFLAGS_x86 -march=i486 -mtune=i486 -mno-mmx -mno-sse -mfpmath=387" ;; i686) OPT_CFLAGS="$OPT_CFLAGS_x86 -march=i686 -mtune=i686 -mmmx -msse -mfpmath=sse" ;; x86-64) OPT_CFLAGS="$OPT_CFLAGS_x86 -march=x86-64 -mtune=k8 -mmmx -msse -msse2 -mfpmath=sse" ;; rpi1) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=arm1176jzf-s -mfpu=vfp" ;; rpi2) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a7 -mfpu=neon-vfpv4" ;; rpi3) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a7 -mfpu=neon-vfpv4" ;; rpi4) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a7 -mfpu=neon-vfpv4" ;; bbb) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a8 -mfpu=neon" ;; cyclone5) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=cortex-a9 -mfpu=neon" ;; nativeARM) OPT_CFLAGS="$OPT_CFLAGS_ARM -mcpu=native -mfpu=auto" # GCC for ARM uses -mcpu only for best-results ;; native) OPT_CFLAGS="$OPT_CFLAGS_X86 -march=native -mtune=native -mfpmath=sse" ;; none) ;; esac AC_SUBST([OPT_CFLAGS]) ]) flrig-2.0.04/m4/funcs.m40000664000175000017500000000076114475136505011541 00000000000000# args: function, search-libs, other-libraries AC_DEFUN([AC_FLRIG_SEARCH_LIBS], [ m4_define([FUNC_NAME_UC], m4_translit([$1], [a-z], [A-Z])) LIBS_search_libs_save="$LIBS" LIBS="" AC_SEARCH_LIBS($1, $2, [ac_cv_have_func_[]$1=1], [ac_cv_have_func_[]$1=0], $3) if test "x$LIBS" != "x"; then echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS" fi AC_DEFINE_UNQUOTED([HAVE_]FUNC_NAME_UC, $ac_cv_have_func_[]$1, [Define to 1 if we have $1]) LIBS="$LIBS_search_libs_save" ]) flrig-2.0.04/m4/pkg-config.m40000664000175000017500000000266414475136505012453 00000000000000# name, version, show-in-help?, optional?, help-text, [am-cond] AC_DEFUN([AC_FLRIG_PKG_CHECK], [ m4_define([PKG_NAME_UC], m4_translit([$1], [a-z], [A-Z])) m4_if([$3], [yes], [ AC_ARG_WITH($1, AC_HELP_STRING([--with-[]$1], [$5]), [case "${withval}" in yes|no) ac_cv_want_[]$1="${withval}" ;; *) AC_MSG_ERROR([bad value "${withval}" for --with-[]$1]) ;; esac], [ac_cv_want_[]$1=check]) ]) m4_if([$4], [no], [ac_cv_want_[]$1=yes]) test "x$ac_cv_want_[]$1" = "x" && ac_cv_want_[]$1="check" case "x$ac_cv_want_[]$1" in "xno") ac_cv_[]$1=no ;; "xcheck") PKG_CHECK_MODULES(PKG_NAME_UC, [$2], [ac_cv_[]$1=yes], [ac_cv_[]$1=no]) ;; "xyes") PKG_CHECK_MODULES(PKG_NAME_UC, [$2]) # if we get here the test has succeeded ac_cv_[]$1=yes ;; esac if test "x$ac_cv_[]$1" = "xyes"; then AC_DEFINE([USE_]PKG_NAME_UC, 1, [Define to 1 if we are using $1]) pkg_[]$1_version=`$PKG_CONFIG --modversion "$2" 2>/dev/null` else AC_DEFINE([USE_]PKG_NAME_UC, 0, [Define to 1 if we are using $1]) pkg_[]$1_version="" fi AC_SUBST(PKG_NAME_UC[_CFLAGS]) AC_SUBST(PKG_NAME_UC[_LIBS]) AC_DEFINE_UNQUOTED(PKG_NAME_UC[_BUILD_VERSION], ["$pkg_[]$1_version"], [$1 version]) m4_ifval([$6], [ AM_CONDITIONAL([$6], [test "x$ac_cv_[]$1" = "xyes"]) ], [:]) ]) flrig-2.0.04/m4/static.m40000664000175000017500000000062014475136505011704 00000000000000AC_DEFUN([AC_FL_STATIC], [ AC_ARG_ENABLE([static], AC_HELP_STRING([--enable-static], [enable static linking for some libraries]), [case "${enableval}" in yes|no) ac_cv_static="${enableval}" ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-static]) ;; esac], [ac_cv_static=no]) ]) flrig-2.0.04/m4/win32.m40000664000175000017500000000413414502041135011344 00000000000000AC_DEFUN([AC_FL_WIN32], [ case "$target_os" in *mingw*) target_win32="yes" target_mingw32="yes" ;; *cygwin*|*win32*|*w32*) target_win32="yes" ;; *) target_win32="no" ;; esac if test "x$target_win32" = "xyes"; then AC_CHECK_PROG([WINDRES], [${ac_tool_prefix}windres], [${ac_tool_prefix}windres]) if [ test "x$WINDRES" = "x" ]; then AC_MSG_WARN([The windres utility could not be found]) fi AC_DEFINE([__WIN32__], 1, [Define to 1 if we are building on mingw]) AC_DEFINE([__MINGW32__], 1, [Define to 1 if we are building on cygwin or mingw]) AC_DEFINE([_WINDOWS], 1, [Define to 1 if we are building on cygwin or mingw]) fi if test "x$target_mingw32" = "xyes"; then AC_CHECK_PROG([MAKENSIS], [makensis], [makensis]) fi AC_SUBST([WINDRES]) AM_CONDITIONAL([HAVE_WINDRES], [test "x$WINDRES" != "x"]) AC_SUBST([MAKENSIS]) AM_CONDITIONAL([HAVE_NSIS], [test "x$MAKENSIS" != "x"]) AM_CONDITIONAL([WIN32], [test "x$target_win32" = "xyes"]) AM_CONDITIONAL([MINGW32], [test "x$target_mingw32" = "xyes"]) AC_ARG_VAR([PTW32_CFLAGS], [C compiler flags for pthreads-w32]) AC_ARG_VAR([PTW32_LIBS], [linker flags for pthreads-w32]) AC_ARG_WITH([ptw32], AC_HELP_STRING([--with-ptw32@<:@=DIR@:>@], [search for pthreads-w32 in DIR/include and DIR/lib @<:@mingw32 only@:>@]), [ac_cv_want_ptw32="$withval"], [ac_cv_want_ptw32=no]) if test "x$ac_cv_want_ptw32" != "xno"; then if test "x$ac_cv_want_ptw32" != "xyes"; then # set -I and -L switches ptw32_default_cflags="-I${ac_cv_want_ptw32}/include" ptw32_default_libs="-L${ac_cv_want_ptw32}/lib" fi ptw32_default_libs="$ptw32_default_libs -lpthreadGC2 -lws2_32" # don't override the user-specified vars PTW32_CFLAGS="${PTW32_CFLAGS:-$ptw32_default_cflags}" PTW32_LIBS="${PTW32_LIBS:-$ptw32_default_libs}" ac_cv_want_ptw32="yes" else if test "x$target_mingw32" = "xyes"; then PTW32_LIBS="-lpthread -lwsock32 -lws2_32 -lwinmm" fi fi AC_SUBST([PTW32_CFLAGS]) AC_SUBST([PTW32_LIBS]) ]) flrig-2.0.04/ChangeLog0000664000175000017500000013321014511460573011403 000000000000002023-10-11 dave-w1hkj cfa7db4e: Version 2.0.04 ff9c111b: FLEX-1500 097c396c: serial-i/o 37324503: rigbase 070fa476: Serial trace 25e61de9: PowerSDR 2d641226: Fix Warnings 5b2d69e7: IC7300 6101988b: Serial read de861af4: Code cleanup fb9ddb2a: FT991 517d0aa4: IC7851 2657970e: PowerSDR 2b5a9bde: Icom Echo 02501d69: Version 2.0.03 9e1797b7: SmartSDR 2023-07-28 Black Michael b6b09633: ALC image 2023-07-27 dave-w1hkj f0f216b7: FTdx10 metering 19b93172: IC9700 3907800f: xmlrpc_rig 72a5a4ba: Version 2.0.02 972d38a1: ic735 bw 0cc40653: KX2 1b3cef6e: ui controls 085a13da: flex 1500 be06a1a9: rigs array 3d78e4bc: QMX f9a83621: xmlrpc alert b92e1973: FTdx3000/9000 02a5de9c: FT991A agc 38ab95ef: sdr2 select 97cb3b83: tci interface ea4735f6: Version 2.0.01 a397e321: DSP-L/DSP-H bws 019f3e5e: K3, KX3, K4 controls 3d35f1e2: QDX has bandwidth 2697ed45: TS990 meters 115e86f8: xmlrpc get bandwidth 78fda2f2: rigbase vectors beb36670: fltk.1.4 mods c2e2d715: Missing FT987D 915d98c5: Version 2.0.0 * Update release 18c37870: xml command button badde39a: button colors ad188cff: string vectors 22e7d265: FT890 update 1c209bb4: X6100 update b401cf13: trusdx seg fault d67bde7b: combo highlight 6d65eec9: TS590S/SG 71609348: Yaesu FT710 2ed6af50: Elecraft BW interface 22553a44: xmlrpc server 91cde455: IC7700 set BW 23644911: Kenwood meter readings 8968415b: FTdx10 bandwidths dcacfc1f: Version 1.4.8 2023-03-10 Harry McGavran e0d968c6: Remove K4 debug lines 2023-03-08 dave-w1hkj fe2bbc5c: Window decoration 1c597f1e: PTT via xmlrpc 823d2cea: FC LEAVE event e257978b: socket address 5897199f: cwiox 08f45bef: thread priority b4fd41b1: Iconify 2023-02-04 Leif Sawyer c26976a8: Rescale dialogs b4c30d05: fltk 1.4 update 2023-02-02 dave-w1hkj 7cf542ae: cwio timing d30e60ca: Warnings 2023-01-29 Black Michael 315c62eb: FreqControl/fltk-1.4 2023-01-29 dave-w1hkj 9a0e49d9: Morse table 17611bfe: xmlrpc cwio ptt c59a4fcb: QDX Version 1.06 484b65c7: K3 BW command 2ec006aa: GCC 13 973d73c3: SunSDR2 5069393e: Icom 705 0548b9f8: TS570 smeter 5fb18d7b: Flex 1500 U/L filter 8e72233e: Yaesu vfo ee9aa3e1: Get/Set preamp/att 2023-01-05 w5pny be02d3d2: Window Decoration Icon 2023-01-03 dave-w1hkj 926830cc: Button logic 11eb15d9: SunSDR2 PBT 2023-01-02 Fred-N8YX cc107890: PCR1000 dsp 2022-12-30 dave-w1hkj 39dd4434: Combo visibility 2022-12-29 Harry McGavran 8e6a1e2c: serial guardlock 2022-12-18 dave-w1hkj f22ed3ff: xmlrpc get vfo 2022-12-16 Fred_N8YX d36f7c3e: Add IC751 ICR71 2022-12-16 dave-w1hkj ed251ec3: PBT 45c7a8d7: Meters 2b0ec8fb: Bandwidth update 93932da1: PBT xmlrpc interface 3716765c: QDX adj fd5980f9: Deactivate Meters a3f2c8b5: Power SDR update f3776cf0: UI - Frequency Control behavior b4dc46fb: Icom pbt controls 342702f2: FTdx1200 write delay 2022-11-25 Dave G0GBX b7e89dda: TS870S 2022-11-24 Black Michael 1a0d1c6e: MinGW warnings 497dc95b: Multiple monitor 2022-11-23 dave-w1hkj 7f5b2a0c: Xmlrpc seg fault 2022-11-23 Black Michael 15b15dde: Meters dialog 2022-11-22 dave-w1hkj 785f8a5a: trusdx d6e6e87f: RHEL 7 build 4b618c05: Xiegu rigs 36426959: FTdx10 FA/FB f8af12e8: FTdx101D power display 2022-11-19 Dave Tillman 7b4f9d9f: Fixes for IC-7610 Extra Controls - Band Tab 29d6d303: Address compiler warning messages 91a0affa: Remove FC focus throws from Elecraft rig UIs 90f71237: ULL Data Type Changes 2022-11-12 dave-w1hkj b5ce7bac: FTdx10 meters 436c2038: QDX 85bd2d8a: FT857 9d9300f8: powersdr 5fffbdd6: icom save upper/lower 2022-10-30 Dave Tillman 98c6ca2d: User Interface - Frequency Control 8ca1ba0b: ICOM IC-7610 PBT Slider fixes 2022-10-26 dave-w1hkj 335221b6: Slider Widget Focus dcd105f2: Lower/Upper display bcff9f6d: Icom swap flag 139b0659: SunSDR Pro/DX 6697533e: BW UI Updates 9ad2763e: serial-mods 9daa203c: KENWOOD 4d169452: byte interval 1e45615d: PowerSDR bug 2fa13a65: pcr1000 mod 5b3a875c: message icon 73f0e34a: Extras e8c71a37: Trace macros 343b3c78: FTdx10 autostart da22b23c: combo 2022-09-12 Dave Tillman 87288b21: User Interface - Combobox fixes 2022-09-09 dave-w1hkj 8c12a060: (tr)uSDX a5668525: ftdx10 notch c7d97c4a: seg fault fix 1a2321a8: Smeter/Freq poll c5704912: FTdx10 11c76b7e: IC7851 2022-08-15 w5pny 13c4be93: Add K4 transceiver 2022-08-06 dave-w1hkj f0056a55: TS 590 S/SG AM data mode f7e797e0: Version 1.4.7 b1387f6b: Missing images 1c28e513: Memory manager eb41b42d: Version 1.4.6 93a25beb: sdr2-win f84403b6: IC9700 satellite support 6422130b: Yaesu microphone gain 5af2552b: Icom mode_type dd0c523e: Yaesu split bba23c7d: SunSDR2 CW bandwidths 2022-07-01 Andrew Hart b6c69cdc: IC7600 mods 2022-05-29 dave-w1hkj f841d124: 7300 FM CW b5555ab1: CW keyer enhancements 0abb7fc8: fsk fixes d19ce45e: QCX+ 3a999275: SunSDR2 tci bandwidth f7fd5260: FTdx10 Power out f14dba5b: Vd / Idd metering 09dae3d7: FT101DxMP voltage scale c281d657: X6100 / G90 65064a3b: SunSDR2 c0a410fc: Serial trace 2022-04-10 Joe Attili (AA2IL) e1321823: FT991A/FTdx3000 mods 2022-04-06 dave-w1hkj f4bd6b94: Compression b5e81e4f: TS570 Split fb320437: pts ports 7a4f1123: FT450/D e0f35f78: FT817 defaults e299604d: Version 1.4.5 2022-03-25 Black Michael 745a55f9: PowerSDR 2022-03-23 dave-w1hkj db77a6c1: cwio xcvr compensation 63ab1da3: FT817 startup 52a1e5a3: trace mod 8d0a23c2: Serial Trace b6ce40b9: TS990 c8b4fbc8: IC F8101 f7bb8b2c: testmode 15d8025d: visible tab 4d7e2f87: Variable PTT cbd1758d: TT566 5744c28f: FT817mod a059301c: RX polling 351a5a5a: FT 857/897/D 8442cb1d: TABS tracking 05ff6c50: freq control 109ddb49: TT Eagle 53183eb5: vfo AB 1df769ad: Xiegu X6100 104a9d6f: traced ff699399: Source structure f78f4b95: Start up values 2b00f166: setthex baee9877: fskio idle e69c257e: Power SDR 1957addc: namespace std d5a45aca: AGC controls 029edeb1: IC705 update 3e2ead62: FT 817 d209e151: 7300 power table 916234ab: CW keydown b85adab7: cwio fskio 3bb8fde3: 10 W Power scale c968af13: FT1000MP-MKV 1e75dcfa: G90 update 757d9e3c: xmlrpc mod vol a85b09d0: VFO in use a7cda5b2: tab visible 2021-12-29 Kenji Rikitake 9ec25e94: FT-891 split 2021-12-28 dave-w1hkj 09d3cef4: FT990/A 906fe833: FTdx10 3adf15ba: TX500 bf399908: Start up failure aac53a14: TS2000 split 1f235a46: FTdx101D split e5da29b4: TX vfo 047aadbd: Version 1.4.4 a7994ad9: TX500 update be98a622: IC7300 response strings c136601f: voltmeter menu item fb3a2bef: Volt meter 4fbd313b: FT 817/100D 7383a942: XmlRpc modify exchange 60f86c60: Initial xcvr selection 46dd5836: ic-7610 4ceec858: tmate2 1b5081f4: UI debug 8e7f3e95: wide ui 209c96ea: IC756 pro fe691c90: embedded/dialog tabs 95a69fa3: Signal Bar db82396f: Documentation 2021-11-29 Brian Waterworth 54ea1c07: FT450D power out 2021-11-28 dave-w1hkj c4c16004: Power Meter Autoscale 536df7b1: fl_alert messages d35abcbc: FreqControl 24eff108: fsk 07806773: cwio-timing 0b77439e: code cleanup 4a1e6432: IC7800 time set 2e02298b: Version 1.4.3 715fc26f: cwio accu_sleep b688d273: A2B freq only 2add8453: g90 cw/power/swr d273ea8b: vfo adjust 3188549f: start/exit set clock 5ef0451c: TX500 615476b3: cw generator 19372d4c: FTdx10 03991093: ftdx101d c9b2914c: FT1000MP d5559bc5: cw invert c5ac441b: elad b0cc398f: Power control 9b52112d: K3 power level 51787304: K3/KX3/KXPA metering ec294b69: Disable Polling 2bacd24c: Transmit meters 678db606: cmedia/serial port 3f320170: KX3 ptt/if-shift a9ebebae: IC7851/9610/9700 af4b4eb5: kx3_options c668f84d: kx3 extras 7940dad8: Version 1.4.2 ff406f02: FT1000MP f1453c97: TS570 3aa0487d: Multiple xmlrpc client conflicts f710230e: Lighted buttons 3ab7defa: PowerSDR/1500 ccf6a3f7: Smeter in dbm 9ef65471: Split set/get b39f49c4: get meter 0ea13616: openSUSE tumbleweed 75615bbb: Images 341830d0: Version 1.4.1 deb5ca89: Vfo A/B be485f43: cmedia ptt 4929722f: G90 update eb873ce9: FLEX1500 75ff0b6b: PowerSDR 85a3435d: ft891 modes again 2021-06-29 Ed KD8YQQ ca065b25: FT991A 2021-06-25 dave-w1hkj 2b286bba: CWIO 2021-06-25 Harry McGavran 805bdfc4: Orion-II 2021-06-22 dave-w1hkj 93079829: FT450/D 33f44f1e: FT891 fa7c02f6: TS440 e226084c: Version 1.4.0 7c9e34b0: FT1000MP 9cec58ab: Widget Labels/Hints ed75a287: Elecraft/Icom/Kenwood 2021-05-27 Mike Black e15fa1ad: PowerSDR Split 2021-05-15 dave-w1hkj aa0fd217: FTdx1200 b68e84b2: cwio bug bf308313: FT857/897 mods 77403f03: IC7300 split 91cfa43c: FT817/818 2021-05-11 Mike Black 6c4ddbe1: PowerSDR 501f2060: Socket i/o 3ccc73ce: XmlRpcClient 2021-05-11 dave-w1hkj 1b38784c: Code cleanup b05c2301: Locked passband tuning 2848ce02: cw-dtr a0950c10: KX3/OS-X serial c95f6436: TS480xx 2fcff9c2: tod monotonicity d6cb2cc1: terminal debug 160a444e: kx3 tests bf9e7966: k2 b7401023: ic7000 9a3fef1d: notch 1c49d1f9: IC serial b12202ed: K2/K3/KX3 d72ffde4: File Organize 35e1900e: paradigm shift 75572d67: serial comms 2021-04-25 Mike Black dc7f959d: PowerSDR update 2021-04-20 dave-w1hkj 24f13e30: Kenwood Xcvr trace 6e160cfc: IC7100/7300 27a32791: Serial Port Timeouts 2e4dce87: xml server fde4188e: Duplicate RTS/DTR buttons 9d48c4f8: Polling Config 7d1afdc6: FT817BB test-mods 9c72109a: Icom Performance 53cd60d0: FT817/8 23749888: CW via xmlrpc command 78dee1b8: Paradigm shift 2021-03-25 Dominik-DB1RUF 99b73865: TMD710 2021-03-18 dave-w1hkj 741a0a1b: Documentation 2021-02-28 David Freese 7214971e: Tx Queue 8baafe3b: FT450/D 9474d18e: macOS Info.plist 7d64b622: K2 update f69953a0: Version 1.3.54 1ce2f82f: PowerSDR 8b81927c: TS2000 c892e431: hcomm INVALID HANDLE VALUE 30868e5f: External close command e59e9b72: Check PTT d727697f: xmlrpc server cbc11b5a: IC7300 3b7c12bb: FT817ND 970c43f8: FT847 cc1d1faa: macOS serial ports ea2e4e8f: BigSur serial ports 290c27e6: Break-in 26451e33: Bands d5c96cb3: IC7300 power table b9030b31: Autostart eaeb7212: Pmax f197ce68: IC7100 auto ON/OFF 6379d97f: Trace/Debug 690e74bd: FT736R update 9529d8b7: xmlrpcpp tracing f3e06222: TOD clock 9bb871cb: Icom sliders 967438a7: Version 1.3.53 99b40176: xmlrpc server 76ca5673: OpenBSD 2020-11-21 Morgan Jones da1eec99: Xiegu G90 etal 2020-11-16 Mike Keitz c4e7d190: FT757GX2 2020-11-12 David Freese d20b35fe: Cmd Buttons 9f5e7549: FTdx101D b0dc76d6: IC705 9d7f7625: FT450D 2090f632: commands 43aa3ebf: Extras dialog 8775b15d: FT-991/A 2020-10-30 Richard Shaw 9107974c: Remove superfluous ceil call in get_rf_gain() as the cast to int truncates it anyway. 4c10a73d: FT450D / TS-480SAT 2020-10-30 David Freese f14bc01b: CPU optimization ccba8018: Font Browser 1933aab2: Version 1.3.52 066021b0: Documentation Update 9d812b37: FT450/D 4fe02df2: FT991A 9b35358f: 24 user buttons c735fb25: fonts 38075780: Xiegu G90 e95333b9: i7 181cc873: IC-705 547a2735: Memory Bank 3c2ee3ae: Memory leaks 2020-10-05 Mike Phipps ed679695: FT736R 2020-10-03 David Freese 3b0406bc: UI wide resize 7d86b0f5: Extras Dialog c046bd5f: gpio PTT 11a01f27: Memory UI 2b469582: FreqControl Update 4bef465c: meter image 2020-09-02 Tim Seed 5c31b379: IC7000 2020-07-12 David Freese 37918b04: regex lib 7f6c96aa: clockid_t 63b1e96d: PTT polling bf1889ea: FT891 bbd47173: Version 1.3.51 64e64bb9: Doc Update b896906e: FT991A power 194069ca: signed / unsigned comparison ebceb326: User configurable CW/PTT ce711e67: Frequency edc0c20d: FT736R 390239a5: check ptt 1028f303: PTT d1ab613b: xml server e47d92ce: IC9700 ec2f097e: CW server 5500fc96: FT450D 07925783: Icom transceivers e97e725c: FTdx101D/mp c7027770: IC9100 5b129a85: CW sideband 7c318526: Xiegu-5105 5b880882: Linux serial devices 733de1b4: m4-fix e9c47f1f: Version 1.3.50 199a41b2: MacOS cu serial ports dff192f4: CW sense 35850889: Icom Manual Notch aa372958: IC7600 trace 4e0bea42: FTdx9000D 21f6fc10: FTdx101MP aa9bca64: xmrpc command strings cd28afce: FTdx101D d2b6c236: Remote shutdown 948e85c6: FT891 IPO 2f07ff85: IC7100 notch d6c8afbf: Poll tuner fc4ed186: Sliders/Auto-on-off ddae8413: User Command Buttons 7a295143: Doc Update becf6406: mat file aging 9f934d90: KX3 bc9bb882: IC7100 2477bad9: mkappbundle 7e25a370: Yaesu tuner 653da1d8: Commands fba244ee: Version 1.3.49 8d825c34: Config 48f0469d: MilliSleep 5426fc7e: FT991A 6a409501: drag-release d91af526: TT566 update cdcb4259: rig.cat_string 1232696c: IC756PROII ad39fdab: scripts ce82f3f0: Unguarded statement 32897fe2: Increase User commands ecad1f9b: IC9700 4c615197: FT857/897 78a01576: Version 1.3.48 6caa13a3: IC 746/756 c3f2d957: FT857D/897D c97a8350: FT450D 398620c7: Version 1.3.47 0f66d98b: IC7600/IC7851 27713b62: FTdx101D bb6598c8: Version 1.3.46 d594e377: KX3 91baa81d: ic7200 test 083cd44a: FTdx101D 99a0fbe3: TS870S 69f8955d: FT-450 / FT-450D 62789e7a: Split Tune button af99f654: auto_on_off ada28215: IC F8101 1ed922e4: support 0b99c651: Read VFO A 2019-06-07 Davide Gerhard 4a3fa638: MacOS high-DPI cbf0eca9: timeops 2019-06-07 Tony Corbett a55ef90b: Fix FT-450 split 2019-06-04 David Freese dc1f20b6: Version 1.3.45 2019-06-04 Douglas de la Torre ff50296c: FT-891 update 2019-06-01 David Freese c3752065: TT-550 b8aff788: sliders 368052d8: scripts e6922988: TS790 b400b1b7: Read initial value df344e6e: Combos cfbd7555: RPC::XML methods b09782b5: CW ops 0fdbb808: Version 1.3.44 5435e3de: IC mode type 3599ca9c: Version 1.3.43 afe22574: Start/Stop Progress f9cd7e45: Trace start/exit 1ecc06f8: New xmlrpc functions 1c2aa3fa: TS890S b7288a4b: Icom filter table b86c587f: Version 1.3.42 855104a3: FT1000 debugging d915248c: FLTK 1.4 test 1f54f123: FTdx3000 ff835b69: Parse -psn d2511b59: Version 1.3.41 dadd32c2: FT991 af73be7a: IC7300 noise blanker ba55a05e: TS-950 9da74e7e: BW inhibit 09cfb608: ts480sat b02db5b6: Yaesu e209b810: has_extras 51a0a72f: XMLRPC debug level fe4a31d8: ts2000 get/set trace 03433282: IC7700 set/get 16850ecf: pbt 07620825: FTdx1200 a976bab2: PCR1000 16a757e6: TT550/TT538 56b5f2a8: FT450D/FTdx5000 0299ff2a: IC7300 65164bc2: k2/k3/kx3 05c70822: TS2000 squelch 9dc6f6f2: Band Select 34f9c42b: Bogus command line parameters 90e147e3: Warnings fixes adb529be: K3 bug fix 5aa7835a: IC7610 f306f89f: TS-940SAT b70bf4eb: OMNI-VI 7d225d7c: Cosmetics 0cd455c4: IC756PRO extra cbc1a6db: IC 9100 a2a5ceef: TAB controls 37ee48fd: xml_io 60af6943: IC7100 b7ad209f: IC735 455614c4: Version 1.3.40 d0e59a3e: FT950 comp 35e4c75c: NONE testing 17bb6928: Yaesu mods 2a8249e3: slider drag 14021417: IC PBT controls bed34f21: KENWOOD vfoA/B split b168de6e: Send Command e9fff86e: tt550 8d515a40: Test Xcvr 991658c0: ICOM transceivers b7eaac24: UI init e4b001fc: modeA modeB d380515e: Documentation 94483a99: xml_server d66b4b6d: trace update 2018-06-08 Sean Sharkey 674134ce: FT1000 update 2018-05-12 David Freese b8512d0b: guard lock f441895c: KENWOOD base e440c241: Trace 07b66214: ts2000 get split d561ca0a: TOD thread 9e050417: PTT on split a3c1f867: TS2000 split 5de0c044: TS series A2B dc0f217e: Send command afe64f4b: ICOM A/B vfo handling 68fa0bf0: xmlrpc split/swap/a2b 55284ebd: fix tod clock 398522be: TS480 137c24a2: PTT queue efadab60: sizeof errors dd5fb97b: XMLRPC Select Vfo 22e27502: xmlrpc server 67d085fa: TS480HX/SAT e62b4a2a: FT891 mods b583d4b2: Conditional trace 5abcd902: Warnings fixes c0549106: FT950 debug 4bf2ac63: Icom updates 2946e477: Vfo-B mode 8526ef2b: Load prefs file 2d42c2f7: Exit processing a4f21906: appbundle 6360f33a: Init no split a00a7a65: xmlrpc method swap 24c48952: altvfo ded9ad8f: FT series vfo f4d5f2e0: Service queues 65fb95f1: replystr mutex 6f770c09: ptt race / debug trace f41e8a1f: xmlrpc a/b vfo a23d9fae: ICbase 8f4a204a: Split operation 2018-03-26 Michael Black 7c88d0fe: TT588 2018-03-24 David Freese bb31cf00: xmlrpc help 60dcf2ed: xmlrpc swap/split f6e55f79: Yaesu ID 47a8dc09: Mode change 18cf8478: Version 1.3.39 fa86d2e6: Memory delete 93e5e532: IC706MKG cfc78d0f: OS X build script 3654db2c: IC7850 bb7ddc3c: civ tests 61f49f2e: restore ab 22b57ebf: TT550 6d4ed307: Version 1.3.38 afe3bbe2: xml server bc0b5dbd: IC7100 / 9100 782310c3: sliders 8facc1a5: Icom Split query d84235d6: Version 1.3.37 318525f3: TS990 / xmlrpc server mods 6ae502c8: IC7200 filter width ab52166e: Rotate log c028b78a: Get PTT 72540db4: Comm timeout 77df05d1: IC7200/7300 notch 15913357: TS990 changes ab76f02f: Remove xmlrpc client d4eba848: UI service paradigm 8e3ed6fc: IC718 d7e240dc: IC7200 7b24e973: Extras drop down panel 96fc5cd8: start-stop e5af6120: FT-991A dbdd8953: OS X race conditions b1c196ed: PTT xmlrpc get 5c2d2a0a: Value by VFO 7f2cd8b7: UI wide power button a16b2c92: Comp Level f79cc3df: Version 1.3.36 fc880845: IC 9100 cc62a5a2: K2 2017-10-18 steve AG7GN ce45cb20: IC7100 2017-10-14 David Freese 62363787: KH6TY 28e3837a: Version 1.3.35 e10e7fee: FTdX5000 mods 5d71f8d5: mingw-mods 07d1a434: xml inhibit c641d68d: Version 1.3.34 a2d2dd4f: doc update e9628ee1: Save/Restore 9213bfc6: flrig shell 2017-07-31 Sean Sharkey 22e70f6b: FT1000 update 2017-07-29 David Freese 34fdb941: IC7300 NR scale fa0cdaf2: IC7200/7300 compile warning 2017-07-23 Steve Magnuson AG7GN 661374fa: IC7100 2017-07-21 David Freese 4a5d4b98: Version 1.3.33 8443bbe5: IC7200 power scale f7ec5394: IC7300 VFO B 1c241bb7: IC7200 small controls 15887f64: ATT control fe6697a9: WIN COMM port aef71c34: Version 1.3.32 2017-06-20 Ernst Schroeder DJ7HS 115f6757: FT900 update 2017-06-16 David Freese 81a98ac4: Power slider 4cb23f29: FT-450D a19a94ac: Break-in Label b3c8c2cf: INSTALL 8d552a0b: aor5k 595c19b6: Version 1.3.31 7f14db7c: Documentation update 9c1a0f3b: IC735 a5a453ad: FT817 CW MODE 4deacd69: FT-891 c3e63719: IC7200 Initial BW 67ed0189: TS850 f9835c3c: Version 1.3.30 fd596a87: FT857/897 base class 490e0e51: Version 1.3.29 8a18cbb6: TS990 update 8f150ffe: FT817 4f4b560d: Xcvr Init 041ce651: k3 kx3 73d3a59c: AGC button b3492e3c: BCD/Decimal conversions 8cd0764b: initial bandwidth fe8571ac: Missing tooltips 6f5c24a4: Polling 2fc88cd0: Exchange-Equalize AB 20ffb3c3: IC7200 mods 4985a5eb: IC7300 update 2017-01-27 Rafael García c8be4d97: TS480SAT update 2017-01-26 David Freese 00627968: FT817 metering 2017-01-23 Dave G0WBX df4e2969: PCR1000 update 2017-01-20 David Freese b05b0018: Version 1.3.28 5add320a: Multiple xmlrpc servers cf1b1bb8: Separate PTT 07bf4b5d: K2 comments c5edf8e5: User defined command buttons 71e5aac2: ic7300 update 5960bd98: IC9100 update 30127838: Version 1.3.27 4d24585e: New controls f86e7d1a: TS480SAT extras c404c8a1: Xmlrpcpp source director efbbc70c: FT100D 2fb8bbc2: IC9100 mode/bw c22d48ab: TS990 TS590SG 5abb5bdc: restore keep rig data 5166fea8: TT 550 Pegasus mods 28f3c346: IC7300 serial defaults 5ba38d22: TS990 ALC/SWR 2016-07-10 Kamal Mostafa d9cc0f67: fix XmlRpc tm_mday comparison typo 2016-07-04 Robert Cunnings a10a7f2f: mxe update 2016-06-27 David Freese c3c68d94: IC756 volume range 765519d6: C11 errors 14889b57: Version 1.3.26 8547731a: IC7200 update 36cd83d2: Version 1.3.25 52a21b60: FT900 update acf388b2: IC7300 50b07b38: FT950 9aaab6bd: IC-7600 mods c5f6adfe: UI small sliders 8b73bbb0: IC7200 update 23604a65: IC7000 exchange vfos db07bd27: key_fldigi 49c6984b: Version 1.3.24 29f82e62: K3 KX3 mods c1645f08: xmlserver update 69ae54af: FTdx9000 295ed35c: FT5000 update 754ba24e: FTdx3000 update e5429b99: RIG ENUMERATION 976d2dff: FT991 1d29d8aa: TS2000 7cb82930: FT900 f511fd9c: IC7100 data mode detect 441a3cc9: Version 1.3.23 424c33ba: FT817 FT857D FT897D 86cc66f5: xmlrpc server b4bd89b8: FT900 b6303c1e: TS590SG 76d12b0f: MXE update 47d053c2: FT990a cd39b311: Set Mode/BW controls f5da410c: restore xml client 9d994e6e: KENWOOD mods 7d4054fc: IC7800 7c41ac6b: fldigi BW interface 2015-06-08 Kamal Mostafa 74450a43: BUILD_{DATE,USER,HOST} 2015-04-24 David Freese 145171f7: Version 1.3.22 f7f87cb4: xmlrpcpp 48a04fb3: xml server e6b132d4: K3/KX3 bandwidth 3600ea8c: Version 1.3.21 b02f0956: KX3 45dc5450: K3 update 1f086c2c: FSF address 67cf68db: Version 1.3.20 399b37b1: TT550 update 6739d81d: fix ab ad9bc7ef: Rig server 3bdebb6e: no xmlrpc_c io 179392e1: ts2000 update 418fe193: FT950 962b96cc: xmlrpc timing a39befe0: Version 1.3.19 08b5c442: xmlrpc error handling 4aad9304: Kenwood transceivers f8f01c85: TS450S d759736c: Transceiver timeout b21600fe: Scripts 998fe5db: Yaesu ef3ee289: Kenwood 967734b8: TS870S 257eca4a: Version 1.3.18 cb03871f: fltk 1.3.3 d488690a: TS2000 83691fce: Docs b85fbff4: subdir objects 696b8248: FT950 Osc adjust ed5a6eac: FT100D bc3fd658: File versus Files c3f008b2: Version 1.3.17 b5721aa2: Documentation update 506125ac: FT450D Notch 1d38b34d: IC-9100 update c634a857: Power meter remote c678b79a: Smeter remote 9f8aeca5: touch panel da7068a4: xml-fix f25bd7cf: FT450D 1cf43880: Freq Control e94924ee: IC 7410 2014-06-12 Robert Stiles 4bf4a58e: doxygen documentation 2014-06-07 David Freese 5c87a331: Version 1.3.16 ca9bbce5: Socket i/o 0e8e450b: FTdx1200 mode 2014-06-04 Kamal Mostafa 67286b3d: RTS/DTR restore 2014-05-31 David Freese cce02f38: wait_char e93a4fbd: virtual-tty-port 41a0e82b: update build scripts a244acf8: rig home dir 4e751e29: Dir reorg fabad100: FL_APPS folder f3a91fc7: TT599 2014-03-28 Arvo Järve b37ce112: FT847 2014-03-26 David Freese f7e0959d: TT550 split 1791191a: Disable meter averaging ac554573: ic7000 again e9d7a8ee: ComboBox/ListBox cfa02f2f: IC756 45efe8ab: License Declaration 46c06f9b: Version 1.3.15 3422195e: 64 bit void pointer fa317c3f: tty search 7732b22b: TT566 6964cb67: TS590S/TS990S/TS2000 controls 5b340a90: FTdx1200 e199a62d: Send cmd debug 718f46f4: TS-990 05898d5b: Sliders c13a20e4: Notch controls 86f1d0b1: 7600 split 9f08704d: Restore debug 93f241b6: Version 1.3.14 7f0b9b7c: IC7100 mods 9b1c856b: Restore read_bandwidth d592682f: Default event log level 224cde7b: vfprintf bug on 64 bit Linux systems 81759f01: Version 1.3.13 a8b451f9: default debug level f8b1bf70: Compile cleanup 8ccb54ee: Debug level switch 34530b16: TS590S init ff26de53: IC7100 00169605: FTdx3000 86dc11bc: FT5000 c53c0a8f: MXE build 899e226d: TT588 VfoB 68bf434b: Version 1.3.12 a50060bf: Build bin 79aa597f: FT-990 3c886856: Serial by-id c6e97483: FT950 f04eed94: TS870 split 64c072e6: Version 1.3.11 6aae7e61: fltk m4 script 5898db1a: Version 1.3.10 5d5e7396: X11 Package check a6d99d42: FT747GX 2012-12-07 Michael Corbin 42a12bbe: PCR1000 2012-12-06 David Freese 753fd8b6: Version 1.3.09 2012-12-03 Dave Freese (none) de5c6222: TS480 data port 2012-10-27 David Freese d0e137b5: NBEMSapps folder d76049e5: IC746Pro NR/Split 77bf1123: Combo box update 8f55d4d6: Version 1.3.08 d7a3b460: IC7600 bw tables 05b1bca0: Version 1.3.07 426c50de: IC746/756 family 46b114db: IC9100 50351e59: IC735 update f5128a6a: Version 1.3.06 13050042: PCR1000 314fe963: Version 1.3.05 b6a1cdb8: FT450 - TS570 97ee8eb8: Version 1.3.04 71f1a09b: PCR1000 ec35a89d: TS570 series 90f45e61: Version 1.3.03 2012-06-04 Terry Embry c68f48f4: Polling loop fixes 2012-06-04 David Freese a2de5bfe: Font Initialization 660e2eb9: Version 1.3.02 2012-05-31 Brian Miezejewski K5HFI 11ad48f1: PCR1000 2012-05-31 Terry Embry f5cd783b: FT950 Band Select 2012-05-07 David Freese 6e5c31de: Kenwood transceivers 24cc8a7c: Version 1.3.01 8aae5bc5: Xcvr setup d9a461b7: FT950 pkt bandwidth 2012-05-02 Terry Embry 9bd9f5e1: FT950/xml_io 2012-05-01 David Freese 5df2691a: FT950 PKT_U/PKT_L e22066c9: Kenwood DSP Hi/Lo e6541060: XMLRPC post to Que e6ce673e: FT950 defaults d474e82d: A/B bypass serial loop 54ce87c1: TS590S d72e2b9f: SWAP A/B 2012-04-19 Terry Embry d408b05f: IC7000 compression 2012-04-19 David Freese b1c794ed: FreqControl 2012-04-19 Terry Embry 704aa658: FT950 compression c58ba5dd: FT950 external tuner 2012-04-16 David Freese e8363f27: New User Interface 2f894b8e: BW control color c2c61e35: Version 1.1.13 20fa6147: TT516 2012-04-11 Terry Embry 1069bf59: FT950 2012-04-06 David Freese 7169864b: VFO paste 2012-04-06 Terry Embry 3b465e5e: FT950 VFO switch 2012-04-01 David Freese feecd1b5: FT950 60m offset c0d355ec: FT960 60m selector 2012-04-01 Terry Embry 15f2c60d: FT950 60 meter 2012-04-01 Andy Hart ad0e0230: IC7600 2012-03-27 David Freese 999eea6a: Version 1.2.12 2012-03-26 Dave (G8KBV) 592e08d8: TS870S 2012-03-25 David Freese e772a4df: xml_io 64 bit compiler f3656a48: Version 1.2.11 3c715ec0: Fix fldigi compatibility 990d2fc4: Version 1.2.10 6c8e5203: FT950 ALC 2012-03-23 Terry Embry 2f280d11: FT950 2012-03-21 David Freese c47dd35d: IC718 9ce61a6e: XML notch 2012-03-14 Terry Embry fd977ac9: FT950/5000 2012-03-07 David Freese d0f6679a: FT950 PKT bandwidth a308e498: TT588 mods 2012-03-06 Terry Embry 73b0aaa4: Code cleanup 2012-03-05 David Freese 830ad599: TT599 split b7bdaf74: FT100 split 7c68269b: TS 480/590S/2000 Split Vfo 344641de: Xmlrpc reset 17f61fd9: Win32 bottom bar 245584d0: TS-870 fix to rig numbering 171e3f90: BW control update 2012-02-25 Terry Embry 4be72504: Read Mode 2012-02-24 David Freese fa1cbee7: TS2000 split query 2012-02-23 Terry Embry 4debc069: serviceAB2 2012-02-23 David Freese 35d23c68: TS870 519f3af0: TS590S split 29a13fc8: FT950 bandwidths 2012-02-22 Terry Embry 610803ea: Service A/B 2012-02-22 David Freese 87c3f709: TS2000 split 2012-02-20 Terry Embry 6599ae2b: Freq List Alpha Tag - About Change 2012-02-20 David Freese 5c6d3e40: Version 1.2.9 0b5bbba1: Freq list alpha tag 808e8646: TS2000 Noise Blanker 2012-02-18 Terry Embry 758be7ad: FT950 PKT/FM Bandwidths 2012-02-17 David Freese 6c3259af: TS2000 SL/SH 2012-02-17 Terry Embry ad07190e: Rigbase value initialization 2012-02-17 David Freese 810c59af: Version 1.2.8 2012-02-17 Terry Embry d6c88cc9: Service A/B 2721d1de: On line test 2012-02-16 David Freese 3fb4a06e: Disabled control bug af5641ad: Debug Level 2012-02-13 Terry Embry 80712bc8: Saved BW 2012-02-04 David Freese d3ad95e2: Version 1.2.7 2012-02-04 Terry Embry db19ce70: FT2000 mic input fbd12d25: FT950 60m 10d4a622: FT950 mods db3f77b4: FT450 mods 5e4f4a5a: Band select 2012-02-01 David Freese 4359fb07: FT950 controls 5498d45e: Redraw fault bc94a327: FLTK version 1013a74e: FT950 / FT450 mods d26af580: TT588 update 3169bfe3: Debug revision 2012-01-03 Terry Embry 9664223c: FT950 defaults 2012-01-03 David Freese 42099227: Desktop generic name 52d3c73e: Version 1.2.6 8e2982ba: Lstep for timing controls 2012-01-02 Terry Embry 2d92636e: FT950 fixes c75cebfc: Init notch from xcvr 21bc4722: Xcvr auto-on-off 2011-12-29 David Freese 3aff8593: FLTK-1.3 mods 2011-12-29 Terry Embry eb7262a3: Poll frequency 2011-12-29 David Freese 17c0ed7b: IC703 - corrections 706b6c06: IC7600 additions 55a4f582: IC703 controls eee8a628: Power meter scales b3fb5613: Version 1.2.5 e8402b8d: Polling intervals 2011-12-20 Terry Embry 6d40a125: FT950 Noise reduction e4b8c48f: FT450 Noise Reduction 2011-12-19 David Freese ef680de1: Extras Tabs 1f91ddde: Meter dialog 2011-12-19 Terry Embry 36d5fb55: FT450/950/2000/5000 a04ea4d3: Volume mute d35a8784: Bandchange race fix 2011-12-17 David Freese 2f7415de: Version 1.2.4 2011-12-17 Terry Embry 2843ca74: FT950 Mic Gain 25a229ce: FT5000 mods 48a2dfb3: FT-450 CW controls 2011-12-16 David Freese 13b7e4f2: Slider size 2011-12-16 Terry Embry df51d9c3: FT950 2011-12-16 Terry Embry (KJ4EED) 1533a56c: Send Command exclusive 2011-12-16 David Freese d970cf39: Meter filters a897030c: FT950 BW 9ebc94b2: Meter mods 54f6b16e: FT1000MP meter scales 20f66e24: Hide controls ddf83b10: BAND selector 2011-12-06 Terry Embry af88aa14: FT950 corrections 2011-12-06 David Freese 45997d92: Vox On Dataport 8bddd77d: Pwr Metering af541df4: Version 1.2.3 9b03699d: UI minimize 8538d05c: TS480 ba3c9ec6: Version 1.2.2 b3ae9638: TS590S 18d51cc9: Version 1.2.1 b8efca57: TS590 SH/SL/IS mod efad166c: TS590S sh/sl 21526e9c: Version 1.2.0AJ 1d06f83c: key fldigi afb57392: Version 1.2.0AI 65f3fbdc: FT5000 84b14a73: Version 1.2.0AH 364c5f82: TS480 center/width 6da4d58a: Version 1.2.0AG 5c173d5c: TS480 fixes 8f7c484a: Version 1.2.0AF d0b764e0: TS480 DataPort select a5bada18: TS480 Mic/RF/Shift 78434b3f: TS590/480 series dbb185db: Version 1.2.0AE 06766bf3: TS480 menu_045 4fdc42cf: Version 1.2.0AD 93aefad7: IC703 2f2d24e8: Version 1.2.0AC 6a1f7e36: TS480 metering 9aca7f2d: Version 1.2.0AB 627beb69: Volume restore 45696b33: IC7000 read notch 0a0c2794: Version 1.2.0AA 4fccae4d: K2 smeter/pout aab7579e: K2 split a38fab1a: Version 1.2.0 c383257a: Version 1.1.3DK 9d02acff: K2 get split 71ebbf3b: Version 1.1.3DJ 29953d76: K2 ptt/vfo-select f34424f4: Version 1.1.3DI 12942c59: K2 low/high power 9114a673: TS2000 swr/po d7d549cd: FT950 manual notch 00caf4b7: Version 1.1.3DH 5367c5dd: TS2000 set volume af9bbbfe: Version 1.1.3DG 66cbe4b9: TS2000 queries, AM 431ca8f8: TS2000 defaults 49ed7a89: Version 1.1.3DF f082550e: Deprecate d3572dc b8ba5d29: Version 1.1.3DE 654f07fe: FT950 Manual Notch d3572dc3: TS2000 BC string d1548f8b: Version 1.1.3DD 2270d84f: T2000 MBC ccbe9381: TS590S SL/SH/FW corrections a971b725: K3 power control 27bf2702: FT950 manual notch b92174dd: Version 1.1.3DC f098dc36: TS2000 fixes e21d24f5: TS480 series ff95d7f6: TS590S 9b9d3ba8: Version 1.1.3DB 455e6508: TS480 series 8913e9ef: TS2000 93d08c60: DSP lo/hi cut controls a57f344b: Version 1.1.3DA 66b3b139: FT450 Notch 7a6b96d6: FT950 Manual Notch dc28189c: TS480 HX/SAT 220729a7: Version 1.1.3CZ e77ff212: K3 power control query aaedcf87: Copyright a7217eae: Version 1.1.3CY 51310a97: K2 A/B 2011-06-10 Rich Newsom 9551b86c: FT857D meters 2011-06-09 David Freese 7253b0b1: FT450/950 0ada8a5b: TT588 RADIO/REMOTE 647f8d18: Version 1.1.3CX 22507e28: FT950 bandwidth 8d70315a: IC7xxx xcvrs c451e677: Version 1.1.3CW 46c3fd13: FT450 extras 9d550ba0: FT847 read freq/mode 41b12511: FT950 extra controls b09df7f1: Serial Port Discovery 7365f303: FT950 AF/RF dff9047c: FT950 split 869dedb1: rig_io DEBUG 713df69f: Version 1.1.3CV ee2ec215: Variable polling e4f81559: FT847 6e98ae02: K3 PTT 24266538: FT950 update cc0d3472: Debug mods 8c0e9961: FT857/897 6a9f177f: Xcvr Extras d592e351: Version 1.1.3CU 33ed8c36: IC746/756 PRO series a8dddc8a: TT550 controls 1b82bc30: Queue mutex 57e08ce1: TT550 initialization 95d455cc: Xml queue 2e02a2f6: User interface 80e7dda0: waitN 4c239f48: TT550 start up df5c74f5: FT100D 6d3cff32: A/B button initialize 29340a59: Poll frequency 0ac0323a: IC746PRO 0046e10f: FT100D parse info b07e66f0: DTR/RTS PTT e44a2d45: FT950 update 2925b806: Connect indicators cacaee58: Version 1.1.3CT 56daafa2: K3 rfgain limits 8c30bdb1: FT100D 1f23cf3b: TT588 get data eb1c5d22: K3 Fine tune test ccd8d0da: TT588 two vfos e143e58b: FT100D get info 15690a56: XMLRPC address/port ccabe29c: ICbase WARN 5e378a45: Version 1.1.3CS c7dd9b44: K3 if-shift / mic gain 78fc39d0: TS570 duplicate statement 86362f95: Version 1.1.3CR 3fb4cf7a: Initialize Notch/IF_shift 3c6bfc3b: FT950 update 654171a6: TT588 Orion-II 4b9f92f4: TT566 update 22ac11c4: Version 1.1.3CQ a3a26185: FT100D update a7c16ec9: TT588 update c5c09e54: Version 1.1.3CP 9ae9a2af: IC756PRO3 split 974d78c6: FT100D bug fix b1c536ed: TT588 if shift range 713969e2: Version 1.1.3CO e1438284: K3 read options a47b8926: IC7000 aa77fff5: IC756PRO3 284a765f: Memory List 09a75de5: Version 1.1.3CN 27eb3d18: TT588 additions d51a394b: PTT for Voice 60bad67b: TS480HX events 00bd636d: IC706MKIIG set mode/bandwidth d3c9e8e7: IC7000 bug fixes 38cacbdd: Version 1.1.3CM 5fae4735: FT100D event levels befcb950: Polling bug e4c0edf9: TT550 events fd9d7a37: Version 1.1.3CL bf34ec10: IC756 A2B 90a32a6f: K3 revert 2e691f09: Version 1.1.3CK 2a68d6fc: IC718 split a8fdef64: IC7000 missing controls 32f31545: IC756 Series 7aeffd8c: Version 1.1.3CJ 7c52305e: Yaeusu series d5a3a0af: IC series 9fb9fe8d: K3 command query b4f2298a: K3 OM fix f003d7d6: K3 alt_vfo 5958e0ca: TT550 A/B a695ac36: IC7000 erroneous code bug 491e2ce1: Version 1.1.3CI ba798967: TT550 control panel a70a812e: TS570 IF shift 78253b35: IC746PRO 807ad160: K3 controls bf04b821: Debugging 065b0e4d: Version 1.1.3CH 67240d96: Alt Vfo Adjust 8a7e5824: K3 delayed response 755a91f2: FT920 2cf30248: Version 1.1.3CG c5be00bc: IC746 series 4da3ed0e: Version 1.1.3CF bbd87b76: Xcvr DEAD 344433a0: Poll split 50b81010: K3 get split cb6c3e52: KENWOOD split 109c9119: K3 initialization 3b39099c: TS450S vfoB e160173e: Version 1.1.3CE 5c75da9f: TS590s showresp e97c2a6e: IC7000 notch calibration 02d1ed56: Icom Notch conversion 0fcc4f0f: Version 1.1.3CD e15db3c1: TS590S vol control 45818630: Split 68f35a1b: IC7200 mic gain 66f3cb46: TT599 shutdown 8d79846c: TS570 metering 611c6097: Version 1.1.3CC 81864044: IC7000 Notch/IF shift cbce8e93: Control polling 3fec9744: TT599 get power 079e27f1: Version 1.1.3CB 1c3053af: TS570 bug fixes 00ef8a56: IC7000 bug fixes bdfcca02: Get power control 54a9d12c: Version 1.1.3CA 63277a44: ICOM response bb40e213: TT599 Pwr-Swr 03238774: Freq List 78e77607: IC718 4ccce7e9: Version 1.1.3C9 dfa146b0: FT920 980ad5eb: IC7000 bug fix 4a74378a: IC xcvr family 7f2ae933: IC7000 4406d396: TT599 2011-04-24 David Kjellquist e1748e53: TS570 2011-04-23 David Freese 35409404: Version 1.1.3C8 170a5a7c: Polling abf4489e: TS480HX d77da927: IC7000 361e4376: IC7200 5b2e35ed: IC718 095d202e: Version 1.1.3C7 57ace2fa: IC7000 3ddd26de: Event Log bc487a97: K3 split a2dcfe8b: IC7200 metering d061f7f7: Version 1.1.3C6 baf9feac: Keep - Restore ad5116af: K3 bandwidth control ab173446: Color Dialog 3221cdbd: A-B Select force display value 10e4b230: Compile Warning d6fe486b: Version 1.1.3C5 bd5755f1: K3 0f224508: Select A/B c5dba58b: Version 1.1.3C4 fd99d188: Select A/B b11057ed: RAY152 c7dff8d6: TS480HX/SAT 29f68841: IC7200 44566d0f: K3 35ec1685: FT857D s-meter 26d8185a: TS480XH power control 70bd622b: TT588 RF gain 9df14fb4: Serial Stream Parsing 68ac858a: Colors-Scheme 2fbec07c: TT599 927db3d6: TS2000 13619050: TT538 code clean up 7e55bda3: System colors 65dc4b1f: Meter colors f9204b60: TT588 5ff58ace: TT550 Auto Notch ef7b1ce8: TT550 smeter e93110a6: Version 1.1.3 7fad31fe: IC7200 Vfo B adfb0914: TT550 0c7b089e: IC7600 RTTY fault 71649a4e: Adjust bandwidth ffd29d74: IC7200 7600 TT550 c0c38211: FT100D ABA init c38b844a: TS590S s/pwr meter 5ce6d56a: Version 1.1.2 b54df4aa: TS480HX/SAT update 3444ca3c: TT550 noise reduction 4465b454: Meters / Colors 4c5b9467: Serial thread timing 95ca6ce3: TS590S smeter 60ea6d28: Version 1.1.1 145649f9: TS590S update 37538146: Version 1.1.0 82580861: TT550 update 0a5bdc13: TT538 vfob 2c5ade44: TS590S vfo read-write 2b915d60: TT550 remote ef29ed73: A-B startup race 7e075405: TT550 keypad 95d95bc7: FT847 bcab820c: TS590 ptt 493b6950: TS2000 update 277941bd: FT1000MP Tuner 6abfdd28: TS570 compile error 25946efb: IC7000 auto notch b4708a37: FT100D d814bc82: FT1000MP def bw 5f1fbcd2: IC series split 4d207629: Default BW c53afcea: IC7600 A/B mods c541e1ae: FT1000MP swr/alc 6abdb0c4: RAY 152 smeter 21b23109: FT1000MP power scale bb21b625: IC7600 update c01be687: FT1000MP Bandwidth b1fe8c61: Button A/B 268f4fb8: ICOM select race 867f0d01: RAY152 - vfo b32168f9: Version 1.0.1.1 80633b64: FT1000MP vfo precision 78c36974: TT516 update beaff060: Raytheon 152 de3bebda: TS590S fbf17df2: FT1000MP mods 7432862c: IC746 family 07d47893: Version 1.0.1 f960a7d8: TT599 cleanup b47dbc2c: Version 1.0.0bY 2011-01-31 Terry Embry, KJ4EED d33ef332: FT950 update 2011-01-26 David Freese d3a2af4f: Que management ae0347bd: IC7600 IC746 FT450 9cb6b9d1: Orion-II smeter d2a5697a: Eagle CWU-smeter 5ea9cc0b: Version 1.0.0bX e78c7fb8: Orion-II Smeter 0f1eea49: Exception handling c10115c6: TS450S init e0c0bbf9: Version 1.0.0bW 01d6148a: Orion-II 72b812de: Eagle split 55d653bb: Eagle-Orion-II ff67b97d: Eagle-Orion getBW fix a9ab74c3: Home Dir a6de27e0: Version 1.0.0bV 346c3c01: ft450 tests 04c86fdb: Que processing 9549dd49: Version 1.0.0bU 43e4eadb: 64 bit recast 535ba2f6: TT566-TT599 correction 27812acb: Version 1.0.0bT 61b6ebaf: Orion-II TT566 997229c0: TT599-Eagle 0a8342ea: Version 1.0.0bS e3a31247: TT 535 Delta-II 9ef17a00: TT516 dual vfo 397984aa: A B vfo select c12a4bfc: Version 1.0.0bR ffebee96: IC706 mode type 8a07b426: IC7200 digi mode 1d9c27fa: Version 1.0.0bQ 4e7d1f36: H/W PTT control 4022e579: ICOM dual vfo 4ec4702f: Parse Args a34205b3: Version 1.0.0bQ 92d90b9b: Dual VFO mod 950b1647: Version 1.0.0bP 61ea3d2b: VFO A-B 3d64fc01: K2 Update 322a3cc4: Version 1.0.0bO 68ae4e4f: Rig Ordering d28cacc9: Version 1.0.0bN 699c4203: IC703 626d3b09: Config Dir f7a1e489: Version 1.0.0bM c1027a81: TS480 HX/SAT 9b8479be: Combo Widget 58e4d8bd: Version 1.0.0bL bc9b4c32: TS480 HX/SAT 054e92ad: TS450 update 9d72cd8f: Version 1.0.0bK 2010-07-30 Frank Tomesh, AB2ZO f1a4670f: IC703 seg fault fix 2010-07-17 David Freese 08f48daf: Version 1.0.0bJ 6e82feff: Echo suppression db0834c9: Version 1.0.0bI d57238d6: IC703 bug fixes 895a85b5: Version 1.0.0bH 9a6e9c4e: IC703-CIV ff679907: Version 1.0.0bG 1d5dc71a: IC7200 update 7b3adae3: IC718 update 7cacc8ad: TT550 Auto Tuner 66541812: RTS-DTR ptt 80911629: TT-538 Po/SWR 8a68ac91: Version 1.0.0bF 66f7861d: Menu update 77baab65: Version 1.0.0bE b567f0f4: Restore Xcvr a58d4f60: FT817 mods eda4e7ec: Fluid source 8654ddb1: Read Stream 2010-04-30 Jason Turning, N6WBL 2594d0a4: IC718 Auto Notch 2010-04-29 David Freese b97848d0: ICgeneric split 500628b9: IC703 Compression 739a7b4f: IC703 / TS450S 2010-04-29 Jason Turning, N6WBL 32492ac1: IC718 additions 2010-04-27 David Freese 3f5e11e3: IC718 rf gain 52f8e178: Added rigpanel.fl 33b77d63: Version 1.0.0bD 04ef71f5: IC7200 Data mode cf066d30: IC718 corrections c67a7971: Version 1.0.0bC 5df3c55f: ICOM update b0b0afc6: Freq Control Widget 9d9864bc: IC7200 changes 195fcd9d: IC718 526150bd: K3 mode d5a86492: Version 1.0.0bB a2a004da: IC7200 70f138e4: K3 bug fixes 05cd9742: Version 1.0.0bA 8ff9611a: Build static distribution 90250eea: K3 mods 3f7ac252: Exec during config 52de9938: Version 1.0.0b9 5c111ded: SWR enable b36ef3c6: Power - 7600 102278bf: Version 1.0.0b8 2010-04-13 Andrew Hart, VE3NVK 96005f5d: IC7600 update 2010-03-29 David Freese 3fbeee1a: FT1000 series 1e93a0c7: Version 1.0.0b7 fa215e25: OS X serial device e2a1ff09: FT1000 FT1000MV update fe2bc28d: TT550 AM mod 80799331: DLL dependency 462bc397: IC7000 mods bcf84994: Version 1.0.0b6 e087a07d: TT550 bug fixes 713b0a77: TT-538 gain table c324e279: IC746 / Pro Disassociation 204b6d8c: Version 1.0.0b5 37f96601: FT1000MV 018b3446: FT1000 5c232a5c: FT450 Volume range e53f04cd: FT2000 debug strings a59c478c: TS2000 Mic Gain b2400476: IC-746 BW 20c32530: Split Operation 97221f43: Version 1.0.0b4 5b17be26: TT-550 update 7f401314: Version 1.0.0b3 f8b355b9: K2 serial baud rate 8ee433c8: Pegasus TT550 mic gain 003bb0cc: Version 1.0.0b2 2792b742: On Line Help link 9b365454: Version 1.0.0b1 03144154: Version 0.9.99R 3c372e6b: Omni-VII TT588 568ff590: Jupiter-TT538 update a6820847: Version 0.9.99Q ae6a40a8: TS570 update ae2ccbdb: FT450 update 13bf35f1: Version 0.9.99P 5a807eda: Jupiter update 01c4434d: Version 0.9.99O 800af3a4: Jupiter-TT538 update 0fdeef54: Version 1.0.0b01 20047a63: Version 0.9.99N ecbe0a55: TT550 Vfo Adjust 164433ed: Version 0.9.99M c018a65e: TT550 new mode bf8edef2: Version 0.9.99L 4d56b12b: XMLRPC sync delay 85aa859a: Version 0.9.99K 881c3ed2: OS X missing include cfcda3ff: Version 0.9.99J f7dbe5df: WIN32 build fix 3a332876: Version 0.9.99I 61f1e714: Status File Change 06744614: Version 0.9.99H 13291947: Serial Port Discovery 33730965: TT-570 update 8a0f254c: TT-538 update 2010-02-04 André - M0JEK 9f0d0bca: OS X exit on start 2010-02-04 Chris Sylvain ee6911a7: TS-570 S-meter scale adjusted 4341cabc: Add initial Kenwood TS-570 support 35e8af57: Use modulo arithmetic on loopcount in serial loop c581acc6: TS570 bandwidth control and basic metering 2010-01-17 David Freese cb73ffe6: Version 0.9.99G 4e275fe1: Use defaults fix 658c4621: TS2000 fix b9279df9: Version 0.9.99F d5170940: Use rig data 1b13be12: TT550 noise blanker addition f723ca6f: Version 0.9.99E 02a60779: TT538 / TT550 additional controls edc73ce1: TT538 / TT550 a6d7eb1e: Version 0.9.99D 8ecf733a: FT450 Preamp Read 5ff0ca1a: TT550 work 1728d0b6: Version 0.9.99C c9a92062: Jupiter-Pegasus DTR line ca14ecdb: FT767 transceiver f2df2ba7: Version 0.9.99B 88db85e4: XML_IO Race Condition 8b336f51: FT100D fix 98fc2e9d: XMLRPC mod b1a1061e: Version 0.9.99A 681d3cae: Mode-Bandwidth Annunciation bdbc63ab: FT-857D update 8b7687c3: Version 0.9.98 84f04dda: FT-857D get_mode correction e1377830: Version 0.9.97 2a4f12a1: Socket not available checks 8ccc07d2: Version 0.9.96 8017748c: Improve transceiver response 848b9807: Exception handler 5c49dea6: Version 0.9.95 2009-12-05 Stelios Bounanos 40c37974: Use XML-RPC 2009-12-01 David Freese ab5c7e5c: Thread conflict fix f0acfb47: Socket allocation a5f326a9: Mem Leak Fix 9e9795d2: Version 0.9.94 0b301f0e: FT857D mod b5ef8e31: Window Decoration 09ec7ef5: OSX Build mods 4fd62cf6: Version 0.9.93 2009-11-27 Stelios Bounanos 0a75d3d1: Disable win32 snprintf workaround 2009-11-26 David Freese ebd8568a: Version 0.9.92 e126caa4: No Curl Mod be23b2f2: Version 0.9.91 f902afcb: Dependencies bd30e7a6: Build fixes 2009-11-23 Stelios Bounanos 59a7b99b: Fix OS X compilation 7cb8e32e: Fix resource include 818bb9d6: Add pthreads-w32 build flags 2009-11-23 David Freese 90ee9b1e: Version 0.9.9 flrig-2.0.04/COPYING0000664000175000017500000004313314475136505010674 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.