K3 specific set_rit, set_xit

Added support for the K3's ability to set RIT/XIT offset frequency
directly.
Coding style changes.

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@3056 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.13
Nate Bargmann, N0NB 2011-02-18 02:04:05 +00:00
rodzic 55736a7427
commit 1a4d075490
1 zmienionych plików z 235 dodań i 113 usunięć

Wyświetl plik

@ -64,6 +64,12 @@ int k3_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);
int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
int k3_set_vfo(RIG *rig, vfo_t vfo); int k3_set_vfo(RIG *rig, vfo_t vfo);
int k3_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val); int k3_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val);
int k3_set_rit(RIG * rig, vfo_t vfo, shortfreq_t rit);
int k3_set_xit(RIG * rig, vfo_t vfo, shortfreq_t rit);
/* Private helper functions */
int set_rit_xit(RIG * rig, char *func, shortfreq_t rit);
/* /*
@ -184,9 +190,9 @@ const struct rig_caps k3_caps = {
.get_vfo = kenwood_get_vfo_if, .get_vfo = kenwood_get_vfo_if,
.set_split_vfo = kenwood_set_split_vfo, .set_split_vfo = kenwood_set_split_vfo,
.get_split_vfo = kenwood_get_split_vfo_if, .get_split_vfo = kenwood_get_split_vfo_if,
.set_rit = kenwood_set_rit, .set_rit = k3_set_rit,
.get_rit = kenwood_get_rit, .get_rit = kenwood_get_rit,
.set_xit = kenwood_set_xit, .set_xit = k3_set_xit,
.get_xit = kenwood_get_xit, .get_xit = kenwood_get_xit,
.get_ptt = kenwood_get_ptt, .get_ptt = kenwood_get_ptt,
.set_ptt = kenwood_set_ptt, .set_ptt = kenwood_set_ptt,
@ -240,7 +246,8 @@ int k3_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
if (temp_m == RIG_MODE_RTTY) { if (temp_m == RIG_MODE_RTTY) {
err = kenwood_safe_transaction(rig, "DT", buf, KENWOOD_MAX_BUF_LEN, 4); err = kenwood_safe_transaction(rig, "DT", buf, KENWOOD_MAX_BUF_LEN, 4);
if (err != RIG_OK) { if (err != RIG_OK) {
rig_debug(RIG_DEBUG_ERR, "%s: Cannot read K3 DT value\n", __func__); rig_debug(RIG_DEBUG_ERR, "%s: Cannot read K3 DT value\n",
__func__);
return err; return err;
} }
switch(atoi(&buf[2])) { switch(atoi(&buf[2])) {
@ -251,13 +258,15 @@ int k3_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
*mode = RIG_MODE_RTTY; *mode = RIG_MODE_RTTY;
break; break;
default: default:
rig_debug(RIG_DEBUG_ERR, "%s: unsupported data sub-mode %c\n", __func__, buf[2]); rig_debug(RIG_DEBUG_ERR, "%s: unsupported data sub-mode %c\n",
__func__, buf[2]);
return -RIG_EINVAL; return -RIG_EINVAL;
} }
} else if (temp_m == RIG_MODE_RTTYR) { } else if (temp_m == RIG_MODE_RTTYR) {
err = kenwood_safe_transaction(rig, "DT", buf, KENWOOD_MAX_BUF_LEN, 4); err = kenwood_safe_transaction(rig, "DT", buf, KENWOOD_MAX_BUF_LEN, 4);
if (err != RIG_OK) { if (err != RIG_OK) {
rig_debug(RIG_DEBUG_ERR, "%s: Cannot read K3 DT value\n", __func__); rig_debug(RIG_DEBUG_ERR, "%s: Cannot read K3 DT value\n",
__func__);
return err; return err;
} }
switch(atoi(&buf[2])) { switch(atoi(&buf[2])) {
@ -268,11 +277,13 @@ int k3_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
*mode = RIG_MODE_RTTYR; *mode = RIG_MODE_RTTYR;
break; break;
default: default:
rig_debug(RIG_DEBUG_ERR, "%s: unsupported data sub-mode %c\n", __func__, buf[2]); rig_debug(RIG_DEBUG_ERR, "%s: unsupported data sub-mode %c\n",
__func__, buf[2]);
return -RIG_EINVAL; return -RIG_EINVAL;
} }
} else } else {
*mode = temp_m; *mode = temp_m;
}
/* The K3 is not limited to specific filter widths so we can query /* The K3 is not limited to specific filter widths so we can query
* the actual bandwidth using the BW command * the actual bandwidth using the BW command
@ -378,6 +389,7 @@ int k3_set_vfo(RIG *rig, vfo_t vfo)
default: default:
break; break;
} }
return RIG_OK; return RIG_OK;
} }
@ -440,3 +452,113 @@ int k3_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val)
return RIG_OK; return RIG_OK;
} }
/*
* k3_set_rit() -- Differs from from generic Kenwood function as K3 can set
* RIT to an arbitrary offset. When rit == 0, the RIT offset is cleared and
* the RIT is turned on when given a value other than 0.
*/
int k3_set_rit(RIG * rig, vfo_t vfo, shortfreq_t rit)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
int err;
char func[16];
if (!rig)
return -RIG_EINVAL;
if (rit == 0)
snprintf(&func, 4, "RT0");
else
snprintf(&func, 4, "RT1");
err = set_rit_xit(rig, &func, rit);
if (err != RIG_OK)
return err;
return RIG_OK;
}
/*
* k3_set_xit() -- Differs from from generic Kenwood function as K3 can set
* XIT to an arbitrary offset. When rit == 0, the XIT offset is cleared and
* the XIT is turned on when given a value other than 0.
*/
int k3_set_xit(RIG * rig, vfo_t vfo, shortfreq_t rit)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
int err;
char func[16];
if (!rig)
return -RIG_EINVAL;
if (rit == 0)
snprintf(&func, 4, "XT0");
else
snprintf(&func, 4, "XT1");
err = set_rit_xit(rig, &func, rit);
if (err != RIG_OK)
return err;
return RIG_OK;
}
/* Private K3 helper functions */
/*
* set_rit_xit() -- Differs from from generic Kenwood function as K3 can set
* RIT/XIT to an arbitrary offset. When rit == 0, the RIT/XIT offset is
* cleared and the RIT/XIT is turned on when given a value other than 0.
*/
int set_rit_xit(RIG * rig, char *func, shortfreq_t rit)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
int err;
char offs;
char cmd[16];
if (!rig)
return -RIG_EINVAL;
if (rit == 0) {
// snprintf(&cmd, 4, "%s0", func);
/* K3 RIT Off command */
err = kenwood_simple_cmd(rig, func);
if (err != RIG_OK)
return err;
/* Clear offset */
err = kenwood_simple_cmd(rig, "RC");
if (err != RIG_OK)
return err;
return RIG_OK;
}
/* Set offset and turn on RIT */
if (rit <= 9999 && rit >= -9999) {
offs = (rit < 0) ? '-' : '+';
snprintf(&cmd, 8, "RO%c%04d", offs, abs((int)rit));
err = kenwood_simple_cmd(rig, cmd);
if (err != RIG_OK)
return err;
/* K3 RIT ON command */
// snprintf(&cmd, 4, "%s1", func);
err = kenwood_simple_cmd(rig, func);
if (err != RIG_OK)
return err;
} else {
return -RIG_EINVAL;
}
return RIG_OK;
}