mirror of
https://github.com/Hamlib/Hamlib.git
synced 2024-09-21 02:17:21 +00:00
Add RFPOWER_METER_WATTS and SWR for Elecraft K4
This commit is contained in:
parent
4170953aa0
commit
137231cb7b
@ -171,6 +171,29 @@ int k3_set_nb_level(RIG *rig, float dsp_nb, float if_nb);
|
||||
int k3_get_nb_level(RIG *rig, float *dsp_nb, float *if_nb);
|
||||
int k3_get_bar_graph_level(RIG *rig, float *smeter, float *pwr, float *alc,
|
||||
int *mode_tx);
|
||||
int k4_get_bar_graph_level(RIG *rig, float *swr, float *pwr, float *alc,
|
||||
int *mode_tx);
|
||||
int kx3_get_bar_graph_level(RIG *rig, float *level);
|
||||
int k3_send_voice_mem(RIG *rig, vfo_t vfo, int ch);
|
||||
int k3_stop_voice_mem(RIG *rig, vfo_t vfo);
|
||||
int k3_stop_morse(RIG *rig, vfo_t vfo);
|
||||
|
||||
/* K4 functions */
|
||||
int k4_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt);
|
||||
int k4_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt);
|
||||
int k4_send_voice_mem(RIG *rig, vfo_t vfo, int ch);
|
||||
int k4_stop_voice_mem(RIG *rig, vfo_t vfo);
|
||||
int k4_stop_morse(RIG *rig, vfo_t vfo);
|
||||
|
||||
/*
|
||||
* K3 rig capabilities.
|
||||
* This kit can recognize a large subset of TS-570/K2 commands and has many
|
||||
* extensions of its own. Extension backend functions to standard Kenwood
|
||||
* command are defined in elecraft.c (shared with K2) and in this file.
|
||||
*
|
||||
* Part of info comes from http://www.elecraft.com/K2_Manual_Download_Page.htm#K3
|
||||
* look for K3 Programmer's Reference PDF
|
||||
*/
|
||||
int kx3_get_bar_graph_level(RIG *rig, float *level);
|
||||
int k3_send_voice_mem(RIG *rig, vfo_t vfo, int ch);
|
||||
int k3_stop_voice_mem(RIG *rig, vfo_t vfo);
|
||||
@ -519,7 +542,7 @@ struct rig_caps k4_caps =
|
||||
RIG_MODEL(RIG_MODEL_K4),
|
||||
.model_name = "K4",
|
||||
.mfg_name = "Elecraft",
|
||||
.version = BACKEND_VER ".31",
|
||||
.version = BACKEND_VER ".32",
|
||||
.copyright = "LGPL",
|
||||
.status = RIG_STATUS_STABLE,
|
||||
.rig_type = RIG_TYPE_TRANSCEIVER,
|
||||
@ -2086,7 +2109,15 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
||||
int tx_mode;
|
||||
float alc;
|
||||
|
||||
retval = k3_get_bar_graph_level(rig, NULL, NULL, &alc, &tx_mode);
|
||||
if (RIG_IS_K4)
|
||||
{
|
||||
retval = k4_get_bar_graph_level(rig, NULL, NULL, &alc, &tx_mode);
|
||||
tx_mode = 1; // Assume ALC is zero when in Tx so we don't care about ptt status
|
||||
}
|
||||
else
|
||||
{
|
||||
retval = k3_get_bar_graph_level(rig, NULL, NULL, &alc, &tx_mode);
|
||||
}
|
||||
|
||||
if (retval != RIG_OK)
|
||||
{
|
||||
@ -2114,7 +2145,15 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
||||
int tx_mode;
|
||||
float pwr;
|
||||
|
||||
retval = k3_get_bar_graph_level(rig, NULL, &pwr, NULL, &tx_mode);
|
||||
if (RIG_IS_K4)
|
||||
{
|
||||
retval = k4_get_bar_graph_level(rig, NULL, &pwr, NULL, &tx_mode);
|
||||
tx_mode = 1; // Does K4 return pwr=0 when in Rx? Hope so.
|
||||
}
|
||||
else
|
||||
{
|
||||
retval = k3_get_bar_graph_level(rig, NULL, &pwr, NULL, &tx_mode);
|
||||
}
|
||||
|
||||
if (retval != RIG_OK)
|
||||
{
|
||||
@ -2319,14 +2358,22 @@ int k3_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
||||
break;
|
||||
|
||||
case RIG_LEVEL_SWR:
|
||||
retval = kenwood_safe_transaction(rig, "SW", levelbuf, sizeof(levelbuf), 5);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
if (RIG_IS_K4)
|
||||
{
|
||||
return retval;
|
||||
retval = k4_get_bar_graph_level(rig, &val->f, NULL, NULL, NULL);
|
||||
return RIG_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
retval = kenwood_safe_transaction(rig, "SW", levelbuf, sizeof(levelbuf), 5);
|
||||
|
||||
sscanf(levelbuf + 2, "%d", &val->i);
|
||||
if (retval != RIG_OK)
|
||||
{
|
||||
return retval;
|
||||
}
|
||||
|
||||
sscanf(levelbuf + 2, "%d", &val->i);
|
||||
}
|
||||
val->f = (float) val->i / 10.0f;
|
||||
break;
|
||||
|
||||
@ -2694,6 +2741,29 @@ int k3_get_nb_level(RIG *rig, float *dsp_nb, float *if_nb)
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
int k4_get_bar_graph_level(RIG *rig, float *swr, float *pwr, float *alc,
|
||||
int *mode_tx)
|
||||
{
|
||||
int retval;
|
||||
int ialc,icmp,ifwd,iswr;
|
||||
char levelbuf[16];
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
retval = kenwood_safe_transaction(rig, "TM", levelbuf, sizeof(levelbuf), 14);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
{
|
||||
return retval;
|
||||
}
|
||||
|
||||
sscanf(levelbuf, "TM%03d%03d%03d%03d", &ialc, &icmp, &ifwd, &iswr);
|
||||
if (swr) *swr = iswr/10.0;
|
||||
if (pwr) *pwr = ifwd/100.0; // pwr is returned in 0-1 sscale
|
||||
if (alc) *alc = ialc;
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
int k3_get_bar_graph_level(RIG *rig, float *smeter, float *pwr, float *alc,
|
||||
int *mode_tx)
|
||||
{
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "token.h"
|
||||
#include "idx_builtin.h"
|
||||
|
||||
#define BACKEND_VER "20240818"
|
||||
#define BACKEND_VER "20240819"
|
||||
|
||||
#define EOM_KEN ';'
|
||||
#define EOM_TH '\r'
|
||||
@ -89,6 +89,7 @@ extern struct confparams kenwood_cfg_params[];
|
||||
#define RIG_IS_K3S (rig->caps->rig_model == RIG_MODEL_K3S)
|
||||
#define RIG_IS_KX2 (rig->caps->rig_model == RIG_MODEL_KX2)
|
||||
#define RIG_IS_KX3 (rig->caps->rig_model == RIG_MODEL_KX3)
|
||||
#define RIG_IS_K4 (rig->caps->rig_model == RIG_MODEL_K4)
|
||||
#define RIG_IS_THD7A (rig->caps->rig_model == RIG_MODEL_THD7A)
|
||||
#define RIG_IS_THD74 (rig->caps->rig_model == RIG_MODEL_THD74)
|
||||
#define RIG_IS_TMD700 (rig->caps->rig_model == RIG_MODEL_TMD700)
|
||||
|
@ -37,6 +37,7 @@ int ai = 0;
|
||||
int dt = 0;
|
||||
int modeA = 2;
|
||||
int modeB = 2;
|
||||
int ptt = 0;
|
||||
// int freqa = 14074000, freqb = 14073500;
|
||||
|
||||
// ID 0310 == 310, Must drop leading zero
|
||||
@ -312,7 +313,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
WRITE(fd, "K30;", 4);
|
||||
}
|
||||
else if (strcmp(buf, "RVM;") == 0)
|
||||
else if (strncmp(buf, "RV", 2) == 0)
|
||||
{
|
||||
WRITE(fd, "RV02.37;", 8);
|
||||
}
|
||||
@ -375,7 +376,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
else if (strncmp(buf, "TQ;", 3) == 0)
|
||||
{
|
||||
SNPRINTF(buf, sizeof(buf), "TQ0;");
|
||||
SNPRINTF(buf, sizeof(buf), "TQ%d;", ptt);
|
||||
WRITE(fd, buf, strlen(buf));
|
||||
}
|
||||
else if (strncmp(buf, "PC;", 3) == 0)
|
||||
@ -430,6 +431,19 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
printf("Morse: %s\n", buf);
|
||||
}
|
||||
else if (strncmp(buf, "TM", 2) == 0)
|
||||
{
|
||||
SNPRINTF(buf, sizeof(buf), "TM001002003004;");
|
||||
WRITE(fd, buf, strlen(buf));
|
||||
}
|
||||
else if (strncmp(buf, "TX", 2) == 0)
|
||||
{
|
||||
ptt = 1;
|
||||
}
|
||||
else if (strncmp(buf, "RX", 2) == 0)
|
||||
{
|
||||
ptt = 0;
|
||||
}
|
||||
else if (strlen(buf) > 0)
|
||||
{
|
||||
fprintf(stderr, "Unknown command: %s\n", buf);
|
||||
|
Loading…
Reference in New Issue
Block a user