Fix Elecraft K4 set_mode to work with VFOB

https://github.com/Hamlib/Hamlib/issues/825
pull/846/head
Mike Black W9MDB 2021-10-15 12:05:46 -05:00
rodzic 891ca6ed75
commit 50512b4bf9
1 zmienionych plików z 16 dodań i 8 usunięć

Wyświetl plik

@ -484,7 +484,7 @@ const struct rig_caps k4_caps =
RIG_MODEL(RIG_MODEL_K4), RIG_MODEL(RIG_MODEL_K4),
.model_name = "K4", .model_name = "K4",
.mfg_name = "Elecraft", .mfg_name = "Elecraft",
.version = BACKEND_VER ".14", .version = BACKEND_VER ".15",
.copyright = "LGPL", .copyright = "LGPL",
.status = RIG_STATUS_STABLE, .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER, .rig_type = RIG_TYPE_TRANSCEIVER,
@ -1088,9 +1088,11 @@ 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 err; int err;
char cmd_m[4]; char cmd_m[5];
char buf[KENWOOD_MAX_BUF_LEN]; char buf[KENWOOD_MAX_BUF_LEN];
char *dtcmd;
struct kenwood_priv_caps *caps = kenwood_caps(rig); struct kenwood_priv_caps *caps = kenwood_caps(rig);
struct kenwood_priv_data *priv = rig->state.priv;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
@ -1112,40 +1114,46 @@ int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
else else
{ {
rig_debug(RIG_DEBUG_TRACE, rig_debug(RIG_DEBUG_TRACE,
"%s(%d): changing mode=%s, oldmode=%s, width=%ld, oldwidth=%ld\n", __FILE__, "%s(%d): changing oldmode=%s, to mode=%s, oldwidth=%ld, to width=%ld\n", __FILE__,
__LINE__, rig_strrmode(tmode), rig_strrmode(mode), twidth, width); __LINE__, rig_strrmode(tmode), rig_strrmode(mode), twidth, width);
} }
dtcmd = "DT";
if ((priv->is_k4 || priv->is_k4d || priv->is_k4hd) && vfo == RIG_VFO_B)
{
dtcmd = "DT$";
}
switch (mode) switch (mode)
{ {
case RIG_MODE_PKTLSB: case RIG_MODE_PKTLSB:
mode = RIG_MODE_RTTYR; // in "DT0" Subband RIG_MODE_RTTYR = USB and RIG_MODE_RTTY = LSB mode = RIG_MODE_RTTYR; // in "DT0" Subband RIG_MODE_RTTYR = USB and RIG_MODE_RTTY = LSB
snprintf(cmd_m, sizeof(cmd_m), snprintf(cmd_m, sizeof(cmd_m),
"DT0"); /* DATA A mode - DATA (REV) on LSB optimized for HF Packet, VFO dial is suppressed carrier QRG */ "%s0", dtcmd); /* DATA A mode - DATA (REV) on LSB optimized for HF Packet, VFO dial is suppressed carrier QRG */
break; break;
case RIG_MODE_PKTUSB: case RIG_MODE_PKTUSB:
mode = RIG_MODE_RTTY; // in "DT0" Subband RIG_MODE_RTTYR = USB and RIG_MODE_RTTY = LSB mode = RIG_MODE_RTTY; // in "DT0" Subband RIG_MODE_RTTYR = USB and RIG_MODE_RTTY = LSB
snprintf(cmd_m, sizeof(cmd_m), snprintf(cmd_m, sizeof(cmd_m),
"DT0"); /* DATA A mode - DATA on USB general, VFO dial is suppressed carrier QRG */ "%s0", dtcmd); /* DATA A mode - DATA on USB general, VFO dial is suppressed carrier QRG */
break; break;
case RIG_MODE_RTTY: case RIG_MODE_RTTY:
mode = RIG_MODE_RTTY; // in "DT1" Subband RIG_MODE_RTTY = LSB and RIG_MODE_RTTYR = USB mode = RIG_MODE_RTTY; // in "DT1" Subband RIG_MODE_RTTY = LSB and RIG_MODE_RTTYR = USB
snprintf(cmd_m, sizeof(cmd_m), snprintf(cmd_m, sizeof(cmd_m),
"DT2"); /* FSK D mode - direct FSK on LSB optimized for RTTY, VFO dial is MARK */ "%s2", dtcmd); /* FSK D mode - direct FSK on LSB optimized for RTTY, VFO dial is MARK */
break; break;
case RIG_MODE_RTTYR: case RIG_MODE_RTTYR:
mode = RIG_MODE_RTTYR; // in "DT2" Subband RIG_MODE_RTTY = LSB and RIG_MODE_RTTYR = USB mode = RIG_MODE_RTTYR; // in "DT2" Subband RIG_MODE_RTTY = LSB and RIG_MODE_RTTYR = USB
snprintf(cmd_m, sizeof(cmd_m), snprintf(cmd_m, sizeof(cmd_m),
"DT1"); /* FSK D mode - direct FSK keying, LSB is "normal", VFO dial is MARK */ "%s1", dtcmd); /* FSK D mode - direct FSK keying, LSB is "normal", VFO dial is MARK */
break; break;
case RIG_MODE_PSK: case RIG_MODE_PSK:
mode = RIG_MODE_PSK; // in "DT3" subband RIG_MODE_PSK = USB # kenwood.c mode but may need kenwwod.c mode table review. mode = RIG_MODE_PSK; // in "DT3" subband RIG_MODE_PSK = USB # kenwood.c mode but may need kenwwod.c mode table review.
snprintf(cmd_m, sizeof(cmd_m), snprintf(cmd_m, sizeof(cmd_m),
"DT3"); /* PSK D Mode - direct PSK keying, USB is "normal", VFO dial is MARK */ "%s3", dtcmd); /* PSK D Mode - direct PSK keying, USB is "normal", VFO dial is MARK */
break; break;
default: default: