Fix rig_set_lock_mode and rig_get_lock_mode

https://github.com/Hamlib/Hamlib/issues/1044
pull/1068/head
Mike Black W9MDB 2022-06-06 22:54:10 -05:00
rodzic c17bcaa343
commit ad2f5047e0
4 zmienionych plików z 64 dodań i 12 usunięć

Wyświetl plik

@ -2649,19 +2649,35 @@ int netrigctl_password(RIG *rig, const char *key1)
RETURNFUNC(retval); RETURNFUNC(retval);
} }
int lock_mode; int netrigctl_set_lock_mode(RIG *rig, int lock)
int netrigctl_set_lock_mode(RIG *rig, int mode)
{ {
//rig->state.lock_mode = mode; char cmdbuf[256];
lock_mode = mode; char buf[BUF_MAX];
int ret;
SNPRINTF(cmdbuf, sizeof(cmdbuf), "\\set_lock_mode %d\n", lock);
ret = netrigctl_transaction(rig, cmdbuf, strlen(cmdbuf), buf);
if (ret > 0)
{
return -RIG_EPROTO;
}
return (RIG_OK); return (RIG_OK);
} }
int netrigctl_get_lock_mode(RIG *rig, int *mode) int netrigctl_get_lock_mode(RIG *rig, int *lock)
{ {
//*mode = rig->state.lock_mode; char cmdbuf[256];
*mode = lock_mode; char buf[BUF_MAX];
int ret;
SNPRINTF(cmdbuf, sizeof(cmdbuf), "\\get_lock_mode\n");
ret = netrigctl_transaction(rig, cmdbuf, strlen(cmdbuf), buf);
if (ret == 0)
{
return -RIG_EPROTO;
}
sscanf(buf,"%d", lock);
return (RIG_OK); return (RIG_OK);
} }
@ -2674,7 +2690,7 @@ struct rig_caps netrigctl_caps =
RIG_MODEL(RIG_MODEL_NETRIGCTL), RIG_MODEL(RIG_MODEL_NETRIGCTL),
.model_name = "NET rigctl", .model_name = "NET rigctl",
.mfg_name = "Hamlib", .mfg_name = "Hamlib",
.version = "20211123.0", .version = "20220606.0",
.copyright = "LGPL", .copyright = "LGPL",
.status = RIG_STATUS_STABLE, .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_OTHER, .rig_type = RIG_TYPE_OTHER,

Wyświetl plik

@ -93,6 +93,7 @@ const char *hamlib_license = "LGPL";
const char hamlib_version[21] = "Hamlib " PACKAGE_VERSION; const char hamlib_version[21] = "Hamlib " PACKAGE_VERSION;
const char *hamlib_version2 = "Hamlib " PACKAGE_VERSION " " HAMLIBDATETIME; const char *hamlib_version2 = "Hamlib " PACKAGE_VERSION " " HAMLIBDATETIME;
HAMLIB_EXPORT_VAR(int) cookie_use; HAMLIB_EXPORT_VAR(int) cookie_use;
int lock_mode; // for use by rigctld
//! @endcond //! @endcond
struct rig_caps caps_test; struct rig_caps caps_test;
@ -2153,6 +2154,7 @@ int HAMLIB_API rig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{ {
const struct rig_caps *caps; const struct rig_caps *caps;
int retcode; int retcode;
int locked_mode;
ELAPSED1; ELAPSED1;
@ -2161,12 +2163,14 @@ int HAMLIB_API rig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
rig_strvfo(vfo), rig_strrmode(mode), (int)width, rig_strvfo(vfo), rig_strrmode(mode), (int)width,
rig_strvfo(rig->state.current_vfo)); rig_strvfo(rig->state.current_vfo));
if (rig->state.lock_mode) { return(RIG_OK); }
if (CHECK_RIG_ARG(rig)) if (CHECK_RIG_ARG(rig))
{ {
RETURNFUNC2(-RIG_EINVAL); RETURNFUNC2(-RIG_EINVAL);
} }
rig_get_lock_mode(rig, &locked_mode);
if (locked_mode) { return(RIG_OK); }
// do not mess with mode while PTT is on // do not mess with mode while PTT is on
if (rig->state.cache.ptt) if (rig->state.cache.ptt)
{ {

Wyświetl plik

@ -99,6 +99,8 @@ static int chk_vfo_executed;
char rigctld_password[64]; char rigctld_password[64];
int is_passwordOK; int is_passwordOK;
int is_rigctld; int is_rigctld;
extern int lock_mode; // used by rigctld
/* variables for readline support */ /* variables for readline support */
@ -2166,6 +2168,8 @@ declare_proto_rig(set_mode)
ENTERFUNC; ENTERFUNC;
if (rig->state.lock_mode || lock_mode) { RETURNFUNC(RIG_OK); }
if (!strcmp(arg1, "?")) if (!strcmp(arg1, "?"))
{ {
char s[SPRINTF_MAX_SIZE]; char s[SPRINTF_MAX_SIZE];
@ -5222,8 +5226,23 @@ declare_proto_rig(get_separator)
declare_proto_rig(set_lock_mode) declare_proto_rig(set_lock_mode)
{ {
int lock; int lock;
int retval;
rig_debug(RIG_DEBUG_TRACE, "%s:\n", __func__);
CHKSCN1ARG(sscanf(arg1, "%d", &lock)); CHKSCN1ARG(sscanf(arg1, "%d", &lock));
return (rig_set_lock_mode(rig, lock));
if (is_rigctld)
{
rig_debug(RIG_DEBUG_ERR, "%s: rigctld lock\n", __func__);
lock_mode = lock;
retval = RIG_OK;
}
else
{
rig_debug(RIG_DEBUG_ERR, "%s: rig lock\n", __func__);
retval = rig_set_lock_mode(rig, lock);
}
return retval;
} }
/* '0xa3' */ /* '0xa3' */
@ -5232,12 +5251,24 @@ declare_proto_rig(get_lock_mode)
int retval; int retval;
int lock; int lock;
rig_debug(RIG_DEBUG_TRACE, "%s:\n", __func__);
if ((interactive && prompt) || (interactive && !prompt && ext_resp)) if ((interactive && prompt) || (interactive && !prompt && ext_resp))
{ {
fprintf(fout, "%s: ", cmd->arg1); fprintf(fout, "%s: ", cmd->arg1);
} }
retval = rig_get_lock_mode(rig, &lock); if (is_rigctld)
{
rig_debug(RIG_DEBUG_ERR, "%s: rigctld lock\n", __func__);
lock = lock_mode;
retval = RIG_OK;
}
else
{
rig_debug(RIG_DEBUG_ERR, "%s: rig lock\n", __func__);
retval = rig_get_lock_mode(rig, &lock);
}
if (retval != RIG_OK) if (retval != RIG_OK)
{ {

Wyświetl plik

@ -152,6 +152,7 @@ const char *multicast_addr = "0.0.0.0";
int multicast_port = 4532; int multicast_port = 4532;
extern char rigctld_password[65]; extern char rigctld_password[65];
char resp_sep = '\n'; char resp_sep = '\n';
extern int lock_mode;
#define MAXCONFLEN 1024 #define MAXCONFLEN 1024