Fix data sub-modes on Elecraft K3.

The K3 supports AFSK & FSK sub-modes and for the D versions it also
has an internal RTTY and PSK31 decoder. The decoder sub-modes are
reported as FSK (RTTY) and the AFSK sub-modes are reported as PKT(USB
& LSB). LSB modes are assumed to be RTTY and USB modes are assumed to
be PKT(PSK, WS modes etc.).

For mode set the data sub-modes are set as follows:

RTTY -> FSK D normal (LSB) VFO shows MARK QRG
RTTYR -> FSK D reversed (USB) VFO shows MARK QRG
PKTUSB -> DATA A normal (USB) VFO shows suppressed carrier QRG
PKTLSB -> AFSK A normal (LSB) optimised for RTTY VFO shows MARK QRG

Not all data sub-mode combinations are possible but the above mapping
seems most likely to cover the user requirements.
Hamlib-3.0
Bill Somerville 2013-11-02 14:02:05 +00:00
rodzic 6e57454b06
commit 09373ede8f
1 zmienionych plików z 118 dodań i 86 usunięć

Wyświetl plik

@ -255,45 +255,56 @@ int k3_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
if (err != RIG_OK) if (err != RIG_OK)
return err; return err;
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_VERBOSE, "%s: Cannot read K3 DT value\n", rig_debug(RIG_DEBUG_VERBOSE, "%s: Cannot read K3 DT value\n",
__func__); __func__);
return err; return err;
} }
switch(atoi(&buf[2])) { switch(atoi(&buf[2]))
{
case K3_MODE_DATA_A: case K3_MODE_DATA_A:
case K3_MODE_PSK_D:
*mode = RIG_MODE_PKTUSB; *mode = RIG_MODE_PKTUSB;
break; break;
case K3_MODE_AFSK_A: case K3_MODE_AFSK_A:
*mode = RIG_MODE_RTTY; *mode = RIG_MODE_PKTLSB;
break; break;
default: default:
rig_debug(RIG_DEBUG_VERBOSE, "%s: unsupported data sub-mode %c\n", *mode = temp_m;
__func__, buf[2]); break;
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_VERBOSE, "%s: Cannot read K3 DT value\n", rig_debug(RIG_DEBUG_VERBOSE, "%s: Cannot read K3 DT value\n",
__func__); __func__);
return err; return err;
} }
switch(atoi(&buf[2])) { switch(atoi(&buf[2]))
{
case K3_MODE_DATA_A: case K3_MODE_DATA_A:
case K3_MODE_PSK_D:
*mode = RIG_MODE_PKTLSB; *mode = RIG_MODE_PKTLSB;
break; break;
case K3_MODE_AFSK_A: case K3_MODE_AFSK_A:
*mode = RIG_MODE_RTTYR; *mode = RIG_MODE_PKTUSB;
break;
case K3_MODE_FSK_D:
break; break;
default: default:
rig_debug(RIG_DEBUG_VERBOSE, "%s: unsupported data sub-mode %c\n", *mode = temp_m;
__func__, buf[2]); break;
return -RIG_EINVAL;
} }
} else { }
else
{
*mode = temp_m; *mode = temp_m;
} }
@ -313,8 +324,24 @@ int k3_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
/* k3_set_mode() /* k3_set_mode()
* *
* As with k3_get_mode(), the K3 can also set the data submodes which allows * As with k3_get_mode(), the K3 can also set the data sub-modes which
* use of RIG_MODE_PKTUSB and RIG_MODE_PKLSB. * allows use of RIG_MODE_PKTUSB and RIG_MODE_PKTLSB.
*
* The K3 supports AFSK & FSK sub-modes and for the D versions it also
* has an internal RTTY and PSK31 decoder. The decoder sub-modes are
* reported as FSK (RTTY) and the AFSK sub-modes are reported as
* PKT(USB & LSB). LSB modes are assumed to be RTTY and USB modes are
* assumed to be PKT(PSK, WS modes etc.).
*
* For mode set the data sub-modes are set as follows:
*
* RTTY -> FSK D normal (LSB) VFO shows MARK QRG
* RTTYR -> FSK D reversed (USB) VFO shows MARK QRG
* PKTUSB -> DATA A normal (USB) VFO shows suppressed carrier QRG
* PKTLSB -> AFSK A normal (LSB) optimised for RTTY VFO shows MARK QRG
* Not all data sub-mode combinations are possible but the above
* mapping seems most likely to cover the user requirements.
*/ */
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)
@ -329,16 +356,16 @@ int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
switch (mode) { switch (mode) {
case RIG_MODE_PKTLSB: case RIG_MODE_PKTLSB:
mode = RIG_MODE_RTTYR; mode = RIG_MODE_RTTY;
strncpy(cmd_s, "DT0", 5); strncpy(cmd_s, "DT1", 5); /* AFSK A mode - AFSK on LSB optimised for RTTY, VFO dial is MARK */
break; break;
case RIG_MODE_PKTUSB: case RIG_MODE_PKTUSB:
mode = RIG_MODE_RTTY; mode = RIG_MODE_RTTY;
strncpy(cmd_s, "DT0", 5); strncpy(cmd_s, "DT0", 5); /* DATA A mode - AFSK on USB general, VFO dial is suppressed carrier QRG */
break; break;
case RIG_MODE_RTTY: case RIG_MODE_RTTY:
case RIG_MODE_RTTYR: case RIG_MODE_RTTYR:
strncpy(cmd_s, "DT1", 5); strncpy(cmd_s, "DT2", 5); /* FSK D mode - direct FSK keying, LSB is "normal", VFO dial is MARK */
break; break;
default: default:
break; break;
@ -575,18 +602,19 @@ int k3_set_split_mode(RIG * rig, vfo_t vfo, rmode_t tx_mode, pbwidth_t tx_width)
int err; int err;
char cmd_s[16]; char cmd_s[16];
switch (tx_mode) { switch (tx_mode)
{
case RIG_MODE_PKTLSB: case RIG_MODE_PKTLSB:
tx_mode = RIG_MODE_RTTYR; tx_mode = RIG_MODE_RTTY;
strncpy(cmd_s, "DT0", 5); strncpy(cmd_s, "DT1", 5); /* AFSK A mode - AFSK on LSB optimised for RTTY, VFO dial is MARK */
break; break;
case RIG_MODE_PKTUSB: case RIG_MODE_PKTUSB:
tx_mode = RIG_MODE_RTTY; tx_mode = RIG_MODE_RTTY;
strncpy(cmd_s, "DT0", 5); strncpy(cmd_s, "DT0", 5); /* DATA A mode - AFSK on USB general, VFO dial is suppressed carrier QRG */
break; break;
case RIG_MODE_RTTY: case RIG_MODE_RTTY:
case RIG_MODE_RTTYR: case RIG_MODE_RTTYR:
strncpy(cmd_s, "DT1", 5); strncpy(cmd_s, "DT2", 5); /* FSK D mode - direct FSK keying, LSB is "normal", VFO dial is MARK */
break; break;
default: default:
break; break;
@ -679,17 +707,18 @@ int k3_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, pbwidth_t *tx_width
__func__); __func__);
return err; return err;
} }
switch(atoi(&buf[2])) { switch(atoi(&buf[2]))
{
case K3_MODE_DATA_A: case K3_MODE_DATA_A:
case K3_MODE_PSK_D:
*tx_mode = RIG_MODE_PKTUSB; *tx_mode = RIG_MODE_PKTUSB;
break; break;
case K3_MODE_AFSK_A: case K3_MODE_AFSK_A:
*tx_mode = RIG_MODE_RTTY; *tx_mode = RIG_MODE_PKTLSB;
break; break;
default: default:
rig_debug(RIG_DEBUG_VERBOSE, "%s: unsupported data sub-mode %c\n", *tx_mode = temp_m;
__func__, buf[2]); break;
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);
@ -698,17 +727,20 @@ int k3_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, pbwidth_t *tx_width
__func__); __func__);
return err; return err;
} }
switch(atoi(&buf[2])) { switch(atoi(&buf[2]))
{
case K3_MODE_DATA_A: case K3_MODE_DATA_A:
case K3_MODE_PSK_D:
*tx_mode = RIG_MODE_PKTLSB; *tx_mode = RIG_MODE_PKTLSB;
break; break;
case K3_MODE_AFSK_A: case K3_MODE_AFSK_A:
*tx_mode = RIG_MODE_RTTYR; *tx_mode = RIG_MODE_PKTUSB;
break;
case K3_MODE_FSK_D:
break; break;
default: default:
rig_debug(RIG_DEBUG_VERBOSE, "%s: unsupported data sub-mode %c\n", *tx_mode = temp_m;
__func__, buf[2]); break;
return -RIG_EINVAL;
} }
} else { } else {
*tx_mode = temp_m; *tx_mode = temp_m;