kopia lustrzana https://github.com/jamescoxon/dl-fldigi
XmlRpc client update
* Corrected passing hi/lo cutoff values for supported transceivers such as the TS2000. * Added macro tags <RIGLO:nnnn> <RIGHI:nnnn> which make flrig requests to respectively set the lo-cut and hi-cut transceiver DSP filter settings. * Added get_sideband xmlrpc call to modified flrigpull/4/head
rodzic
2652387036
commit
94f83626f9
|
@ -80,24 +80,8 @@ extern std::string modeString(rmode_t m);
|
|||
extern bool connected_to_flrig;
|
||||
extern void xmlrpc_rig_set_qsy(long long rfc);
|
||||
|
||||
using namespace XmlRpc;
|
||||
using namespace std;
|
||||
|
||||
extern bool bws_posted;
|
||||
extern bool FLRIG_bw_posted;
|
||||
extern bool FLRIG_mode_posted;
|
||||
extern bool modes_posted;
|
||||
extern bool FLRIG_freq_posted;
|
||||
|
||||
extern long int FLRIG_xcvr_freq;
|
||||
extern string xcvr_name;
|
||||
extern string posted_mode;
|
||||
extern string posted_bw1;
|
||||
extern string posted_bw2;
|
||||
|
||||
extern XmlRpcValue modes_result;
|
||||
extern XmlRpcValue bws_result;
|
||||
extern XmlRpcValue FLRIG_bw_result;
|
||||
//using namespace XmlRpc;
|
||||
//using namespace std;
|
||||
|
||||
extern void FLRIG_start_flrig_thread();
|
||||
extern void stop_flrig_thread();
|
||||
|
@ -107,6 +91,7 @@ extern void set_flrig_freq(long int fr);
|
|||
extern void set_flrig_mode(const char *md);
|
||||
extern void set_flrig_bw(int bw1, int bw2 = 0);
|
||||
extern void set_flrig_notch();
|
||||
extern bool xmlrpc_USB();
|
||||
extern void FLRIG_set_flrig_ab(int n);
|
||||
|
||||
|
||||
|
|
|
@ -150,6 +150,8 @@ void loadBrowser(Fl_Widget *widget) {
|
|||
w->add(_("<QSY+:+/-n.nnn>\tincr/decr xcvr freq"));
|
||||
w->add(_("<RIGMODE:mode>\tvalid xcvr mode"));
|
||||
w->add(_("<FILWID:width>\tvalid xcvr filter width"));
|
||||
w->add(_("<RIGLO:lowcut>\tvalid xcvr low cutoff filter"));
|
||||
w->add(_("<RIGHI:hicut>\tvalid xcvr hi cutoff filter"));
|
||||
w->add(_("<FOCUS>\trig freq has kbd focus"));
|
||||
|
||||
w->add(LINE_SEP);
|
||||
|
|
|
@ -2549,13 +2549,55 @@ static void pTxQueQSY(std::string &s, size_t &i, size_t endbracket)
|
|||
s.replace(i, endbracket - i + 1, "^!");
|
||||
}
|
||||
|
||||
float waitFILWID = 0.0;
|
||||
float wait_after_mode_change = 0.0;
|
||||
static string sFILWID;
|
||||
static void delayedFILWID(void *)
|
||||
{
|
||||
qso_opBW->value(sFILWID.c_str());
|
||||
cb_qso_opBW();
|
||||
waitFILWID = 0.0;
|
||||
wait_after_mode_change = 0.0;
|
||||
}
|
||||
|
||||
static void pFILWID(std::string& s, size_t& i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
std::string sWidth = s.substr(i+8, endbracket - i - 8);
|
||||
sFILWID = sWidth;
|
||||
Fl::add_timeout(wait_after_mode_change, delayedFILWID);
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
}
|
||||
|
||||
static void doFILWID(std::string s)
|
||||
{
|
||||
std::string sWID = s.substr(9, s.length() - 10);
|
||||
qso_opBW->value(sWID.c_str());
|
||||
cb_qso_opBW();
|
||||
que_ok = true;
|
||||
}
|
||||
|
||||
static void pTxQueFILWID(std::string &s, size_t &i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
struct CMDS cmd = { s.substr(i, endbracket - i + 1), doFILWID };
|
||||
push_txcmd(cmd);
|
||||
s.replace(i, endbracket - i + 1, "^!");
|
||||
}
|
||||
|
||||
static void pRxQueFILWID(std::string &s, size_t &i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
struct CMDS cmd = { s.substr(i, endbracket - i + 1), doFILWID };
|
||||
push_rxcmd(cmd);
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
}
|
||||
|
||||
static void pRIGMODE(std::string& s, size_t& i, size_t endbracket)
|
||||
|
@ -2568,8 +2610,12 @@ static void pRIGMODE(std::string& s, size_t& i, size_t endbracket)
|
|||
qso_opMODE->value(sMode.c_str());
|
||||
cb_qso_opMODE();
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
if (s.find("FILWID") != string::npos)
|
||||
waitFILWID = progdefaults.mbw;
|
||||
if ((s.find("FILWID") != string::npos) ||
|
||||
(s.find("RIGLO") != string::npos) ||
|
||||
(s.find("RIGHI") != string::npos) )
|
||||
wait_after_mode_change = progdefaults.mbw;
|
||||
else
|
||||
wait_after_mode_change = 0;
|
||||
}
|
||||
|
||||
static void doRIGMODE(std::string s)
|
||||
|
@ -2602,46 +2648,114 @@ static void pRxQueRIGMODE(std::string &s, size_t &i, size_t endbracket)
|
|||
s.replace(i, endbracket - i + 1, "");
|
||||
}
|
||||
|
||||
static void pFILWID(std::string& s, size_t& i, size_t endbracket)
|
||||
static string sRIGLO;
|
||||
|
||||
static void delayedRIGLO(void *)
|
||||
{
|
||||
qso_opBW2->value(sRIGLO.c_str());
|
||||
cb_qso_opBW2();
|
||||
wait_after_mode_change = 0.0;
|
||||
}
|
||||
|
||||
static void pRIGLO(std::string& s, size_t& i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
std::string sWidth = s.substr(i+8, endbracket - i - 8);
|
||||
// qso_opBW->value(sWidth.c_str());
|
||||
// cb_qso_opBW();
|
||||
sFILWID = sWidth;
|
||||
Fl::add_timeout(waitFILWID, delayedFILWID);
|
||||
std::string sLO = s.substr(i+7, endbracket - i - 7);
|
||||
sRIGLO = sLO;
|
||||
if (wait_after_mode_change)
|
||||
Fl::add_timeout(wait_after_mode_change, delayedRIGLO);
|
||||
else {
|
||||
qso_opBW2->value(sLO.c_str());
|
||||
cb_qso_opBW2();
|
||||
}
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
}
|
||||
|
||||
static void doFILWID(std::string s)
|
||||
static void doRIGLO(std::string s)
|
||||
{
|
||||
std::string sWID = s.substr(9, s.length() - 10);
|
||||
qso_opBW->value(sWID.c_str());
|
||||
cb_qso_opBW();
|
||||
std::string sLO = s.substr(8, s.length() - 9);
|
||||
qso_opBW2->value(sLO.c_str());
|
||||
cb_qso_opBW2();
|
||||
que_ok = true;
|
||||
}
|
||||
|
||||
static void pTxQueFILWID(std::string &s, size_t &i, size_t endbracket)
|
||||
static void pTxQueRIGLO(std::string &s, size_t &i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
struct CMDS cmd = { s.substr(i, endbracket - i + 1), doFILWID };
|
||||
struct CMDS cmd = { s.substr(i, endbracket - i + 1), doRIGLO };
|
||||
push_txcmd(cmd);
|
||||
s.replace(i, endbracket - i + 1, "^!");
|
||||
}
|
||||
|
||||
static void pRxQueFILWID(std::string &s, size_t &i, size_t endbracket)
|
||||
static void pRxQueRIGLO(std::string &s, size_t &i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
struct CMDS cmd = { s.substr(i, endbracket - i + 1), doFILWID };
|
||||
struct CMDS cmd = { s.substr(i, endbracket - i + 1), doRIGLO };
|
||||
push_rxcmd(cmd);
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
}
|
||||
|
||||
static string sRIGHI;
|
||||
|
||||
static void delayedRIGHI(void *)
|
||||
{
|
||||
qso_opBW1->value(sRIGHI.c_str());
|
||||
cb_qso_opBW1();
|
||||
wait_after_mode_change = 0.0;
|
||||
}
|
||||
|
||||
static void pRIGHI(std::string& s, size_t& i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
std::string sHI = s.substr(i+7, endbracket - i - 7);
|
||||
sRIGHI = sHI;
|
||||
if (wait_after_mode_change)
|
||||
Fl::add_timeout(wait_after_mode_change, delayedRIGHI);
|
||||
else {
|
||||
qso_opBW1->value(sHI.c_str());
|
||||
cb_qso_opBW1();
|
||||
}
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
}
|
||||
|
||||
static void doRIGHI(std::string s)
|
||||
{
|
||||
std::string sHI = s.substr(8, s.length() - 9);
|
||||
qso_opBW1->value(sHI.c_str());
|
||||
cb_qso_opBW1();
|
||||
que_ok = true;
|
||||
}
|
||||
|
||||
static void pTxQueRIGHI(std::string &s, size_t &i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
struct CMDS cmd = { s.substr(i, endbracket - i + 1), doRIGHI };
|
||||
push_txcmd(cmd);
|
||||
s.replace(i, endbracket - i + 1, "^!");
|
||||
}
|
||||
|
||||
static void pRxQueRIGHI(std::string &s, size_t &i, size_t endbracket)
|
||||
{
|
||||
if (within_exec) {
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
return;
|
||||
}
|
||||
struct CMDS cmd = { s.substr(i, endbracket - i + 1), doRIGHI };
|
||||
push_rxcmd(cmd);
|
||||
s.replace(i, endbracket - i + 1, "");
|
||||
}
|
||||
|
@ -3230,6 +3344,8 @@ static const MTAGS mtags[] = {
|
|||
{"<QSYFM>", pQSYFM},
|
||||
{"<RIGMODE:", pRIGMODE},
|
||||
{"<FILWID:", pFILWID},
|
||||
{"<RIGHI:", pRIGHI},
|
||||
{"<RIGLO:", pRIGLO},
|
||||
{"<MAPIT:", pMAPIT},
|
||||
{"<MAPIT>", pMAPIT},
|
||||
{"<REPEAT>", pREPEAT},
|
||||
|
@ -3255,6 +3371,8 @@ static const MTAGS mtags[] = {
|
|||
{"<!MODEM:", pTxQueMODEM},
|
||||
{"<!RIGMODE:", pTxQueRIGMODE},
|
||||
{"<!FILWID:", pTxQueFILWID},
|
||||
{"<!RIGHI:", pTxQueRIGHI},
|
||||
{"<!RIGLO:", pTxQueRIGLO},
|
||||
{"<!TXATTEN:", pTxQueTXATTEN},
|
||||
{"<!RIGCAT:", pTxQueRIGCAT},
|
||||
// Rx After action
|
||||
|
@ -3264,6 +3382,8 @@ static const MTAGS mtags[] = {
|
|||
{"<@GOHOME>", pRxQueGOHOME},
|
||||
{"<@RIGMODE:", pRxQueRIGMODE},
|
||||
{"<@FILWID:", pRxQueFILWID},
|
||||
{"<@RIGHI:", pRxQueRIGHI},
|
||||
{"<@RIGLO:", pRxQueRIGLO},
|
||||
{"<@TXRSID:", pRxQueTXRSID},
|
||||
{"<@WAIT:", pRxQueWAIT},
|
||||
|
||||
|
|
|
@ -1284,6 +1284,8 @@ void rigCAT_set_qsy(long long f)
|
|||
|
||||
bool ModeIsLSB(string s)
|
||||
{
|
||||
if (connected_to_flrig) return !xmlrpc_USB();
|
||||
|
||||
list<string>::iterator pM = LSBmodes.begin();
|
||||
while (pM != LSBmodes.end() ) {
|
||||
if (*pM == s)
|
||||
|
|
|
@ -359,12 +359,14 @@ int cb_qso_btnBW2()
|
|||
|
||||
int cb_qso_opBW1()
|
||||
{
|
||||
//printf("opBW1 %d:%s\n", qso_opBW1->index(), qso_opBW1->value());
|
||||
set_flrig_bw(qso_opBW2->index(), qso_opBW1->index());
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cb_qso_opBW2()
|
||||
{
|
||||
//printf("opBW2 %d:%s\n", qso_opBW2->index(), qso_opBW2->value());
|
||||
set_flrig_bw(qso_opBW2->index(), qso_opBW1->index());
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ LOG_FILE_SOURCE(debug::debug::LOG_XMLRPC_RIG);
|
|||
using namespace XmlRpc;
|
||||
using namespace std;
|
||||
|
||||
int xmlrpc_verbosity = 0;
|
||||
static int xmlrpc_verbosity = 0;
|
||||
|
||||
//======================================================================
|
||||
// flrig xmlrpc client
|
||||
|
@ -84,21 +84,24 @@ void connect_to_flrig();
|
|||
|
||||
XmlRpcClient *flrig_client = (XmlRpcClient *)0;
|
||||
|
||||
bool bws_posted = false;
|
||||
bool bw_posted = false;
|
||||
bool mode_posted = false;
|
||||
bool modes_posted = false;
|
||||
bool freq_posted = true;
|
||||
|
||||
string xcvr_name;
|
||||
string str_freq;
|
||||
string mode_result;
|
||||
XmlRpcValue modes_result;
|
||||
XmlRpcValue bws_result;
|
||||
XmlRpcValue bw_result;
|
||||
XmlRpcValue notch_result;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// declared as extern in rigsupport.h
|
||||
//----------------------------------------------------------------------
|
||||
bool connected_to_flrig = false;
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
static bool bws_posted = false;
|
||||
static bool modes_posted = false;
|
||||
static bool freq_posted = true;
|
||||
|
||||
static string xcvr_name;
|
||||
static string str_freq;
|
||||
static string mode_result;
|
||||
static XmlRpcValue modes_result;
|
||||
static XmlRpcValue bws_result;
|
||||
static XmlRpcValue bw_result;
|
||||
static XmlRpcValue notch_result;
|
||||
|
||||
static double timeout = 2.0;
|
||||
//======================================================================
|
||||
|
||||
|
@ -118,11 +121,11 @@ void xmlrpc_rig_set_qsy(long long rfc)
|
|||
//----------------------------------------------------------------------
|
||||
// push to talk
|
||||
//----------------------------------------------------------------------
|
||||
bool wait_ptt = false; // wait for transceiver to respond
|
||||
int wait_ptt_timeout = 5; // 5 polls and then disable wait
|
||||
int ptt_state = 0;
|
||||
static bool wait_ptt = false; // wait for transceiver to respond
|
||||
static int wait_ptt_timeout = 5; // 5 polls and then disable wait
|
||||
static int ptt_state = 0;
|
||||
|
||||
int new_ptt = -1;
|
||||
static int new_ptt = -1;
|
||||
|
||||
void exec_flrig_ptt() {
|
||||
if (!connected_to_flrig) {
|
||||
|
@ -212,9 +215,9 @@ void flrig_get_ptt()
|
|||
// transceiver radio frequency
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
bool wait_freq = false; // wait for transceiver to respond
|
||||
int wait_freq_timeout = 5; // 5 polls and then disable wait
|
||||
long int xcvr_freq = 0;
|
||||
static bool wait_freq = false; // wait for transceiver to respond
|
||||
static int wait_freq_timeout = 5; // 5 polls and then disable wait
|
||||
static long int xcvr_freq = 0;
|
||||
|
||||
pthread_mutex_t mutex_flrig_freq = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
|
@ -283,15 +286,16 @@ void flrig_get_frequency()
|
|||
// transceiver get modes (mode table)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
bool wait_mode = false; // wait for transceiver to respond
|
||||
int wait_mode_timeout = 5; // 5 polls and then disable wait
|
||||
string posted_mode = "";
|
||||
static bool wait_mode = false; // wait for transceiver to respond
|
||||
static int wait_mode_timeout = 5; // 5 polls and then disable wait
|
||||
static string posted_mode = "";
|
||||
|
||||
bool wait_bw = false; // wait for transceiver to respond
|
||||
int wait_bw_timeout = 5; // 5 polls and then disable wait
|
||||
string posted_bw = "";
|
||||
string posted_bw1 = "";
|
||||
string posted_bw2 = "";
|
||||
static bool wait_bw = false; // wait for transceiver to respond
|
||||
static int wait_bw_timeout = 5; // 5 polls and then disable wait
|
||||
static bool need_sideband = false;
|
||||
static string posted_bw = "";
|
||||
static string posted_bw1 = "";
|
||||
static string posted_bw2 = "";
|
||||
|
||||
void set_flrig_mode(const char *md)
|
||||
{
|
||||
|
@ -307,6 +311,7 @@ void set_flrig_mode(const char *md)
|
|||
wait_mode_timeout = 5;
|
||||
} else {
|
||||
posted_mode = md;
|
||||
need_sideband = true;
|
||||
bws_posted = false;
|
||||
wait_mode = true;
|
||||
wait_mode_timeout = 5;
|
||||
|
@ -315,6 +320,13 @@ void set_flrig_mode(const char *md)
|
|||
}
|
||||
|
||||
pthread_mutex_t mutex_flrig_mode = PTHREAD_MUTEX_INITIALIZER;
|
||||
static bool xml_USB = true;
|
||||
|
||||
bool xmlrpc_USB()
|
||||
{
|
||||
return xml_USB;
|
||||
}
|
||||
|
||||
void xmlrpc_rig_post_mode(void *data)
|
||||
{
|
||||
guard_lock flrig_lock(&mutex_flrig_mode);
|
||||
|
@ -322,6 +334,7 @@ void xmlrpc_rig_post_mode(void *data)
|
|||
string *s = reinterpret_cast<string *>(data);
|
||||
qso_opMODE->value(s->c_str());
|
||||
bws_posted = false;
|
||||
need_sideband = false;
|
||||
}
|
||||
|
||||
void flrig_get_mode()
|
||||
|
@ -332,11 +345,18 @@ void flrig_get_mode()
|
|||
static string md;
|
||||
md = string(res);
|
||||
bool posted = (md == posted_mode);
|
||||
if (!wait_mode && !posted) {
|
||||
if (!wait_mode && (!posted || need_sideband)) {
|
||||
posted_mode = md;
|
||||
guard_lock flrig_lock(&mutex_flrig_mode);
|
||||
guard_lock flrig_modelock(&mutex_flrig_mode);
|
||||
if (flrig_client->execute("rig.get_sideband", XmlRpcValue(), res, timeout) ) {
|
||||
static string sb;
|
||||
sb = string(res);
|
||||
xml_USB = (sb[0] == 'U');
|
||||
} else {
|
||||
xml_USB = true;
|
||||
}
|
||||
Fl::awake(xmlrpc_rig_post_mode, reinterpret_cast<void*>(&md));
|
||||
LOG_INFO("get mode: %s", md.c_str());
|
||||
LOG_INFO("get mode: %s:%s", md.c_str(), xml_USB ? "USB" : "LSB");
|
||||
} else if (wait_mode && posted) {
|
||||
wait_mode = false;
|
||||
wait_mode_timeout = 0;
|
||||
|
@ -411,7 +431,7 @@ void set_flrig_bw(int bw2, int bw1)
|
|||
|
||||
XmlRpcValue val, result;
|
||||
int ival = bw2;
|
||||
if (bw1 > 0) ival = 256*(bw1+128) + bw2;
|
||||
if (bw1 > -1) ival = 256*(bw1+128) + bw2;
|
||||
val = ival;
|
||||
|
||||
guard_lock flrig_lock(&mutex_flrig);
|
||||
|
@ -676,9 +696,9 @@ void flrig_get_vfo()
|
|||
//==============================================================================
|
||||
// transceiver set / get notch
|
||||
//==============================================================================
|
||||
bool wait_notch = false; // wait for transceiver to respond
|
||||
int wait_notch_timeout = 5; // 5 polls and then disable wait
|
||||
int xcvr_notch = 0;
|
||||
static bool wait_notch = false; // wait for transceiver to respond
|
||||
static int wait_notch_timeout = 5; // 5 polls and then disable wait
|
||||
static int xcvr_notch = 0;
|
||||
|
||||
void set_flrig_notch()
|
||||
{
|
||||
|
@ -832,8 +852,8 @@ bool flrig_get_xcvr()
|
|||
//======================================================================
|
||||
// xmlrpc read polling thread
|
||||
//======================================================================
|
||||
bool run_flrig_thread = true;
|
||||
int poll_interval = 1000; // 100 // milliseconds
|
||||
static bool run_flrig_thread = true;
|
||||
static int poll_interval = 1000; // 100 // milliseconds
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Set QSY to true if xmlrpc client connection is OK
|
||||
|
|
Ładowanie…
Reference in New Issue