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 flrig
pull/4/head
David Freese 2016-01-02 07:24:09 -06:00
rodzic 2652387036
commit 94f83626f9
6 zmienionych plików z 206 dodań i 75 usunięć

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);

Wyświetl plik

@ -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},

Wyświetl plik

@ -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)

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -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