kopia lustrzana https://github.com/Hamlib/Hamlib
ft991 changes to work with gpredict
rodzic
a66f6069e1
commit
a7b28a63d4
|
@ -188,6 +188,8 @@ const struct rig_caps ft991_caps =
|
|||
.get_ptt = newcat_get_ptt,
|
||||
.set_split_vfo = newcat_set_split_vfo,
|
||||
.get_split_vfo = newcat_get_split_vfo,
|
||||
.set_split_freq = ft991_set_split_freq,
|
||||
.get_split_freq = ft991_get_split_freq,
|
||||
.get_split_mode = ft991_get_split_mode,
|
||||
.set_split_mode = ft991_set_split_mode,
|
||||
.set_rit = newcat_set_rit,
|
||||
|
@ -223,6 +225,104 @@ const struct rig_caps ft991_caps =
|
|||
|
||||
};
|
||||
|
||||
|
||||
static int
|
||||
ft991_get_tx_split(RIG *rig, split_t *in_split)
|
||||
{
|
||||
vfo_t cur_tx_vfo;
|
||||
int rval;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
if (!rig || !in_split)
|
||||
{
|
||||
return (-RIG_EINVAL);
|
||||
}
|
||||
|
||||
rval = newcat_get_tx_vfo(rig, &cur_tx_vfo);
|
||||
|
||||
if (rval != RIG_OK)
|
||||
{
|
||||
return (rval);
|
||||
}
|
||||
|
||||
if (cur_tx_vfo == RIG_VFO_B || cur_tx_vfo == RIG_VFO_MEM)
|
||||
{
|
||||
*in_split = RIG_SPLIT_ON;
|
||||
}
|
||||
else if (cur_tx_vfo == RIG_VFO_A)
|
||||
{
|
||||
*in_split = RIG_SPLIT_OFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (-RIG_EINVAL);
|
||||
}
|
||||
|
||||
return (rval);
|
||||
}
|
||||
|
||||
int
|
||||
ft991_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
|
||||
{
|
||||
int rval;
|
||||
split_t is_split;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
rval = ft991_get_tx_split(rig, &is_split);
|
||||
|
||||
if (rval != RIG_OK)
|
||||
{
|
||||
return (rval);
|
||||
}
|
||||
|
||||
if (is_split == RIG_SPLIT_OFF)
|
||||
{
|
||||
rval = newcat_set_tx_vfo(rig, RIG_VFO_B);
|
||||
|
||||
if (rval != RIG_OK)
|
||||
{
|
||||
return (rval);
|
||||
}
|
||||
}
|
||||
|
||||
rval = newcat_set_freq(rig, RIG_VFO_B, tx_freq);
|
||||
rig_debug(RIG_DEBUG_VERBOSE,
|
||||
"%s newcat_set_freq() rval = %d freq = %f\n",
|
||||
__func__, rval, tx_freq);
|
||||
return (rval);
|
||||
}
|
||||
|
||||
int
|
||||
ft991_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq)
|
||||
{
|
||||
int rval;
|
||||
split_t is_split;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
rval = ft991_get_tx_split(rig, &is_split);
|
||||
|
||||
if (rval != RIG_OK)
|
||||
{
|
||||
return (rval);
|
||||
}
|
||||
|
||||
if (is_split == RIG_SPLIT_OFF)
|
||||
{
|
||||
*tx_freq = 0.0;
|
||||
return (rval);
|
||||
}
|
||||
|
||||
rval = newcat_get_freq(rig, RIG_VFO_B, tx_freq);
|
||||
rig_debug(RIG_DEBUG_VERBOSE,
|
||||
"%s newcat_get_freq() rval = %d freq = %f\n",
|
||||
__func__, rval, *tx_freq);
|
||||
|
||||
return (rval);
|
||||
}
|
||||
|
||||
/*
|
||||
* rig_get_split_mode*
|
||||
*
|
||||
|
@ -250,6 +350,7 @@ int ft991_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode,
|
|||
{
|
||||
struct newcat_priv_data *priv;
|
||||
int err;
|
||||
ft991info *rdata;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
|
@ -259,6 +360,7 @@ int ft991_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode,
|
|||
}
|
||||
|
||||
priv = (struct newcat_priv_data *)rig->state.priv;
|
||||
rdata = (ft991info *)priv->ret_data;
|
||||
|
||||
snprintf(priv->cmd_str, sizeof(priv->cmd_str), "OI;");
|
||||
|
||||
|
@ -267,12 +369,46 @@ int ft991_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode,
|
|||
return err;
|
||||
}
|
||||
|
||||
*tx_mode = priv->ret_data[22];
|
||||
debug_ft991info_data(rdata);
|
||||
|
||||
*tx_mode = newcat_rmode(rdata->mode);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s opposite mode %s\n", __func__,
|
||||
rig_strrmode(*tx_mode));
|
||||
*tx_width = RIG_PASSBAND_NORMAL;
|
||||
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
static void debug_ft991info_data(const ft991info *rdata)
|
||||
{
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s command %2.2s\n",
|
||||
__func__, rdata->command);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s memory_ch %3.3s\n",
|
||||
__func__, rdata->memory_ch);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s vfo_freq %9.9s\n",
|
||||
__func__, rdata->vfo_freq);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s clarifier %5.5s\n",
|
||||
__func__, rdata->clarifier);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s rx_clarifier %c\n",
|
||||
__func__, rdata->rx_clarifier);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s tx_clarifier %c\n",
|
||||
__func__, rdata->tx_clarifier);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s mode %c\n",
|
||||
__func__, rdata->mode);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s vfo_memory %c\n",
|
||||
__func__, rdata->vfo_memory);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s tone_mode %c\n",
|
||||
__func__, rdata->tone_mode);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s fixed %2.2s\n",
|
||||
__func__, rdata->fixed);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s repeater_offset %c\n",
|
||||
__func__, rdata->repeater_offset);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s terminator %c\n",
|
||||
__func__, rdata->terminator);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* rig_set_split_mode
|
||||
*
|
||||
|
@ -302,6 +438,7 @@ int ft991_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode,
|
|||
struct rig_state *state;
|
||||
int err;
|
||||
char restore_commands[NEWCAT_DATA_LEN];
|
||||
split_t is_split;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
|
@ -310,6 +447,24 @@ int ft991_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode,
|
|||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
err = ft991_get_tx_split(rig, &is_split);
|
||||
|
||||
if (err != RIG_OK)
|
||||
{
|
||||
return (err);
|
||||
}
|
||||
|
||||
if (is_split == RIG_SPLIT_OFF)
|
||||
{
|
||||
err = newcat_set_tx_vfo(rig, RIG_VFO_B);
|
||||
|
||||
if (err != RIG_OK)
|
||||
{
|
||||
return (err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state = &rig->state;
|
||||
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: passed vfo = %s\n", __func__, rig_strvfo(vfo));
|
||||
|
|
|
@ -38,10 +38,10 @@
|
|||
/* Receiver caps */
|
||||
|
||||
#define FT991_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|\
|
||||
RIG_MODE_C4FM)
|
||||
#define FT991_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB)
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB)
|
||||
#define FT991_AM_RX_MODES (RIG_MODE_AM)
|
||||
#define FT991_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_C4FM)
|
||||
#define FT991_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR)
|
||||
|
@ -73,24 +73,24 @@
|
|||
|
||||
/* TBC */
|
||||
#define FT991_STR_CAL { 16, \
|
||||
{ \
|
||||
{ 0, -54 }, /* S0 */ \
|
||||
{ 12, -48 }, /* S1 */ \
|
||||
{ 27, -42 }, /* S2 */ \
|
||||
{ 40, -36 }, /* S3 */ \
|
||||
{ 55, -30 }, /* S4 */ \
|
||||
{ 65, -24 }, /* S5 */ \
|
||||
{ 80, -18 }, /* S6 */ \
|
||||
{ 95, -12 }, /* S7 */ \
|
||||
{ 112, -6 }, /* S8 */ \
|
||||
{ 130, 0 }, /* S9 */ \
|
||||
{ 150, 10 }, /* +10 */ \
|
||||
{ 172, 20 }, /* +20 */ \
|
||||
{ 190, 30 }, /* +30 */ \
|
||||
{ 220, 40 }, /* +40 */ \
|
||||
{ 240, 50 }, /* +50 */ \
|
||||
{ 255, 60 }, /* +60 */ \
|
||||
} }
|
||||
{ \
|
||||
{ 0, -54 }, /* S0 */ \
|
||||
{ 12, -48 }, /* S1 */ \
|
||||
{ 27, -42 }, /* S2 */ \
|
||||
{ 40, -36 }, /* S3 */ \
|
||||
{ 55, -30 }, /* S4 */ \
|
||||
{ 65, -24 }, /* S5 */ \
|
||||
{ 80, -18 }, /* S6 */ \
|
||||
{ 95, -12 }, /* S7 */ \
|
||||
{ 112, -6 }, /* S8 */ \
|
||||
{ 130, 0 }, /* S9 */ \
|
||||
{ 150, 10 }, /* +10 */ \
|
||||
{ 172, 20 }, /* +20 */ \
|
||||
{ 190, 30 }, /* +30 */ \
|
||||
{ 220, 40 }, /* +40 */ \
|
||||
{ 240, 50 }, /* +50 */ \
|
||||
{ 255, 60 }, /* +60 */ \
|
||||
} }
|
||||
|
||||
|
||||
/*
|
||||
|
@ -123,9 +123,34 @@
|
|||
|
||||
#define FT991_POST_WRITE_DELAY 50
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char command[2]; /* depends on command "IF", "MR", "MW" "OI" */
|
||||
char memory_ch[3]; /* 001 -> 117 */
|
||||
char vfo_freq[9]; /* 9 digit value in Hz */
|
||||
char clarifier[5]; /* '+' | '-', 0000 -> 9999 Hz */
|
||||
char rx_clarifier; /* '0' = off, '1' = on */
|
||||
char tx_clarifier; /* '0' = off, '1' = on */
|
||||
char mode; /* '1'=LSB, '2'=USB, '3'=CW, '4'=FM, '5'=AM, */
|
||||
/* '6'=RTTY-LSB, '7'=CW-R, '8'=DATA-LSB, */
|
||||
/* '9'=RTTY-USB,'A'=DATA-FM, 'B'=FM-N, */
|
||||
/* 'C'=DATA-USB, 'D'=AM-N, 'E'=C4FM */
|
||||
char vfo_memory; /* '0'=VFO, '1'=Memory, '2'=Memory Tune, */
|
||||
/* '3'=Quick Memory Bank, '4'=QMB-MT, '5'=PMS, '6'=HOME */
|
||||
char tone_mode; /* '0' = off, CTCSS '1' ENC, '2' ENC/DEC, */
|
||||
/* '3' = DCS ENC/DEC, '4' = ENC */
|
||||
char fixed[2]; /* Always '0', '0' */
|
||||
char repeater_offset; /* '0' = Simplex, '1' Plus, '2' minus */
|
||||
char terminator; /* ';' */
|
||||
} ft991info;
|
||||
|
||||
/* Prototypes */
|
||||
static int ft991_init(RIG *rig);
|
||||
static int ft991_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, pbwidth_t *tx_width);
|
||||
static int ft991_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, pbwidth_t tx_width);
|
||||
|
||||
static int ft991_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode,
|
||||
pbwidth_t *tx_width);
|
||||
static int ft991_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode,
|
||||
pbwidth_t tx_width);
|
||||
static int ft991_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq);
|
||||
static int ft991_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq);
|
||||
static void debug_ft991info_data(const ft991info *rdata);
|
||||
#endif /* _FT991_H */
|
||||
|
|
|
@ -250,8 +250,6 @@ const struct confparams newcat_cfg_params[] =
|
|||
|
||||
/* NewCAT Internal Functions */
|
||||
static ncboolean newcat_is_rig(RIG *rig, rig_model_t model);
|
||||
static int newcat_get_tx_vfo(RIG *rig, vfo_t *tx_vfo);
|
||||
static int newcat_set_tx_vfo(RIG *rig, vfo_t tx_vfo);
|
||||
|
||||
static int newcat_set_vfo_from_alias(RIG *rig, vfo_t *vfo);
|
||||
static int newcat_scale_float(int scale, float fval);
|
||||
|
@ -515,6 +513,11 @@ int newcat_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
|
|||
return -RIG_ENAVAIL;
|
||||
}
|
||||
|
||||
if (!newcat_valid_command(rig, "FB"))
|
||||
{
|
||||
return -RIG_ENAVAIL;
|
||||
}
|
||||
|
||||
priv = (struct newcat_priv_data *)rig->state.priv;
|
||||
caps = rig->caps;
|
||||
|
||||
|
@ -655,6 +658,11 @@ int newcat_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
|
|||
return -RIG_ENAVAIL;
|
||||
}
|
||||
|
||||
if (!newcat_valid_command(rig, "FB"))
|
||||
{
|
||||
return -RIG_ENAVAIL;
|
||||
}
|
||||
|
||||
err = newcat_set_vfo_from_alias(rig, &vfo);
|
||||
|
||||
if (err < 0)
|
||||
|
@ -744,65 +752,10 @@ int newcat_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
rig_debug(RIG_DEBUG_VERBOSE, "%s: generic mode = %s \n",
|
||||
__func__, rig_strrmode(mode));
|
||||
|
||||
switch (mode)
|
||||
|
||||
priv->cmd_str[3] = newcat_modechar(mode);
|
||||
if (priv->cmd_str[3] == '0')
|
||||
{
|
||||
case RIG_MODE_LSB:
|
||||
priv->cmd_str[3] = '1';
|
||||
break;
|
||||
|
||||
case RIG_MODE_USB:
|
||||
priv->cmd_str[3] = '2';
|
||||
break;
|
||||
|
||||
case RIG_MODE_CW:
|
||||
priv->cmd_str[3] = '3';
|
||||
break;
|
||||
|
||||
case RIG_MODE_FM:
|
||||
priv->cmd_str[3] = '4';
|
||||
break;
|
||||
|
||||
case RIG_MODE_AM:
|
||||
priv->cmd_str[3] = '5';
|
||||
break;
|
||||
|
||||
case RIG_MODE_RTTY:
|
||||
priv->cmd_str[3] = '6';
|
||||
break;
|
||||
|
||||
case RIG_MODE_CWR:
|
||||
priv->cmd_str[3] = '7';
|
||||
break;
|
||||
|
||||
case RIG_MODE_PKTLSB: /* FT450 USER-L */
|
||||
priv->cmd_str[3] = '8';
|
||||
break;
|
||||
|
||||
case RIG_MODE_RTTYR:
|
||||
priv->cmd_str[3] = '9';
|
||||
break;
|
||||
|
||||
case RIG_MODE_PKTFM:
|
||||
priv->cmd_str[3] = 'A';
|
||||
break;
|
||||
|
||||
case RIG_MODE_FMN:
|
||||
priv->cmd_str[3] = 'B';
|
||||
break;
|
||||
|
||||
case RIG_MODE_PKTUSB: /* FT450 USER-U */
|
||||
priv->cmd_str[3] = 'C';
|
||||
break;
|
||||
|
||||
case RIG_MODE_AMN:
|
||||
priv->cmd_str[3] = 'D';
|
||||
break;
|
||||
|
||||
case RIG_MODE_C4FM:
|
||||
priv->cmd_str[3] = 'E';
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
|
@ -832,7 +785,6 @@ int newcat_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
|||
struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv;
|
||||
char c;
|
||||
int err;
|
||||
ncboolean narrow;
|
||||
char main_sub_vfo = '0';
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
@ -877,101 +829,10 @@ int newcat_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
|||
/* default, unless set otherwise */
|
||||
*width = RIG_PASSBAND_NORMAL;
|
||||
|
||||
switch (c)
|
||||
*mode = newcat_rmode_width(rig, vfo, c, width);
|
||||
|
||||
if (*mode == '0')
|
||||
{
|
||||
case '1':
|
||||
*mode = RIG_MODE_LSB;
|
||||
break;
|
||||
|
||||
case '2':
|
||||
*mode = RIG_MODE_USB;
|
||||
break;
|
||||
|
||||
case '3':
|
||||
*mode = RIG_MODE_CW;
|
||||
break;
|
||||
|
||||
case '4':
|
||||
*mode = RIG_MODE_FM;
|
||||
err = newcat_get_narrow(rig, vfo, &narrow);
|
||||
|
||||
if (narrow == TRUE)
|
||||
{
|
||||
*width = rig_passband_narrow(rig, *mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
*width = rig_passband_normal(rig, *mode);
|
||||
}
|
||||
|
||||
return err;
|
||||
|
||||
case '5':
|
||||
*mode = RIG_MODE_AM;
|
||||
err = newcat_get_narrow(rig, vfo, &narrow);
|
||||
|
||||
if (narrow == TRUE)
|
||||
{
|
||||
*width = rig_passband_narrow(rig, *mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
*width = rig_passband_normal(rig, *mode);
|
||||
}
|
||||
|
||||
return err;
|
||||
|
||||
case '6':
|
||||
*mode = RIG_MODE_RTTY;
|
||||
break;
|
||||
|
||||
case '7':
|
||||
*mode = RIG_MODE_CWR;
|
||||
break;
|
||||
|
||||
case '8':
|
||||
*mode = RIG_MODE_PKTLSB; /* FT450 USER-L */
|
||||
break;
|
||||
|
||||
case '9':
|
||||
*mode = RIG_MODE_RTTYR;
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
*mode = RIG_MODE_PKTFM;
|
||||
err = newcat_get_narrow(rig, vfo, &narrow);
|
||||
|
||||
if (narrow == TRUE)
|
||||
{
|
||||
*width = rig_passband_narrow(rig, *mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
*width = rig_passband_normal(rig, *mode);
|
||||
}
|
||||
|
||||
return err;
|
||||
|
||||
case 'B':
|
||||
*mode = RIG_MODE_FMN; /* narrow */
|
||||
*width = rig_passband_narrow(rig, *mode);
|
||||
return RIG_OK;
|
||||
|
||||
case 'C':
|
||||
*mode = RIG_MODE_PKTUSB; /* FT450 USER-U */
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
*mode = RIG_MODE_AM; /* narrow, FT950 */
|
||||
*width = rig_passband_narrow(rig, *mode);
|
||||
return RIG_OK;
|
||||
|
||||
case 'E':
|
||||
*mode = RIG_MODE_C4FM; /* narrow, FT950 */
|
||||
*width = rig_passband_narrow(rig, *mode);
|
||||
return RIG_OK;
|
||||
|
||||
default:
|
||||
return -RIG_EPROTO;
|
||||
}
|
||||
|
||||
|
@ -4356,38 +4217,7 @@ int newcat_set_channel(RIG *rig, const channel_t *chan)
|
|||
}
|
||||
|
||||
/* MODE */
|
||||
switch (chan->mode)
|
||||
{
|
||||
case RIG_MODE_LSB: c_mode = '1'; break;
|
||||
|
||||
case RIG_MODE_USB: c_mode = '2'; break;
|
||||
|
||||
case RIG_MODE_CW: c_mode = '3'; break;
|
||||
|
||||
case RIG_MODE_FM: c_mode = '4'; break;
|
||||
|
||||
case RIG_MODE_AM: c_mode = '5'; break;
|
||||
|
||||
case RIG_MODE_RTTY: c_mode = '6'; break;
|
||||
|
||||
case RIG_MODE_CWR: c_mode = '7'; break;
|
||||
|
||||
case RIG_MODE_PKTLSB: c_mode = '8'; break;
|
||||
|
||||
case RIG_MODE_RTTYR: c_mode = '9'; break;
|
||||
|
||||
case RIG_MODE_PKTFM: c_mode = 'A'; break;
|
||||
|
||||
case RIG_MODE_FMN: c_mode = 'B'; break;
|
||||
|
||||
case RIG_MODE_PKTUSB: c_mode = 'C'; break;
|
||||
|
||||
case RIG_MODE_AMN: c_mode = 'D'; break;
|
||||
|
||||
case RIG_MODE_C4FM: c_mode = 'E'; break;
|
||||
|
||||
default: c_mode = '1'; break;
|
||||
}
|
||||
c_mode = newcat_modechar(chan->mode);
|
||||
|
||||
/* VFO Fixed */
|
||||
c_vfo = '0';
|
||||
|
@ -4571,38 +4401,10 @@ int newcat_get_channel(RIG *rig, channel_t *chan)
|
|||
chan->width = 0;
|
||||
|
||||
retval = priv->ret_data + 20;
|
||||
chan->mode = newcat_rmode(*retval);
|
||||
|
||||
switch (*retval)
|
||||
if (chan->mode == RIG_MODE_NONE)
|
||||
{
|
||||
case '1': chan->mode = RIG_MODE_LSB; break;
|
||||
|
||||
case '2': chan->mode = RIG_MODE_USB; break;
|
||||
|
||||
case '3': chan->mode = RIG_MODE_CW; break;
|
||||
|
||||
case '4': chan->mode = RIG_MODE_FM; break;
|
||||
|
||||
case '5': chan->mode = RIG_MODE_AM; break;
|
||||
|
||||
case '6': chan->mode = RIG_MODE_RTTY; break;
|
||||
|
||||
case '7': chan->mode = RIG_MODE_CWR; break;
|
||||
|
||||
case '8': chan->mode = RIG_MODE_PKTLSB; break;
|
||||
|
||||
case '9': chan->mode = RIG_MODE_RTTYR; break;
|
||||
|
||||
case 'A': chan->mode = RIG_MODE_PKTFM; break;
|
||||
|
||||
case 'B': chan->mode = RIG_MODE_FM; break;
|
||||
|
||||
case 'C': chan->mode = RIG_MODE_PKTUSB; break;
|
||||
|
||||
case 'D': chan->mode = RIG_MODE_AM; break;
|
||||
|
||||
case 'E': chan->mode = RIG_MODE_C4FM; break;
|
||||
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR, "%s: unknown mode=%c\n", __func__, *retval);
|
||||
chan->mode = RIG_MODE_LSB;
|
||||
}
|
||||
|
@ -6057,7 +5859,7 @@ int newcat_get_vfo_mode(RIG *rig, vfo_t *vfo_mode)
|
|||
return -RIG_EPROTO;
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: offset=%d, width_frequeny=%d\n", __func__,
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: offset=%d, width_frequency=%d\n", __func__,
|
||||
offset, priv->width_frequency);
|
||||
|
||||
switch (priv->ret_data[offset])
|
||||
|
@ -6073,7 +5875,7 @@ int newcat_get_vfo_mode(RIG *rig, vfo_t *vfo_mode)
|
|||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: vfo mode = %s\n", __func__,
|
||||
rig_strrmode(*vfo_mode));
|
||||
rig_strvfo(*vfo_mode));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -6349,3 +6151,95 @@ int newcat_set_cmd(RIG *rig)
|
|||
|
||||
return rc;
|
||||
}
|
||||
|
||||
struct {
|
||||
rmode_t mode;
|
||||
char modechar;
|
||||
ncboolean chk_width;
|
||||
} static const newcat_mode_conv[] =
|
||||
{
|
||||
{ RIG_MODE_LSB, '1', FALSE },
|
||||
{ RIG_MODE_USB, '2', FALSE },
|
||||
{ RIG_MODE_CW, '3', FALSE },
|
||||
{ RIG_MODE_FM, '4', TRUE },
|
||||
{ RIG_MODE_AM, '5', TRUE },
|
||||
{ RIG_MODE_RTTY, '6', FALSE },
|
||||
{ RIG_MODE_CWR, '7', FALSE },
|
||||
{ RIG_MODE_PKTLSB, '8', FALSE },
|
||||
{ RIG_MODE_RTTYR, '9', FALSE },
|
||||
{ RIG_MODE_PKTFM, 'A', TRUE },
|
||||
{ RIG_MODE_FMN, 'B', TRUE },
|
||||
{ RIG_MODE_PKTUSB, 'C', FALSE },
|
||||
{ RIG_MODE_AMN, 'D', TRUE },
|
||||
{ RIG_MODE_C4FM, 'E', TRUE }
|
||||
};
|
||||
|
||||
rmode_t newcat_rmode(char mode)
|
||||
{
|
||||
int i;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
for (i = 0; i < sizeof(newcat_mode_conv) / sizeof(newcat_mode_conv[0]); i++)
|
||||
{
|
||||
if (newcat_mode_conv[i].modechar == mode)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: %s for %c\n", __func__,
|
||||
rig_strrmode(newcat_mode_conv[i].mode), mode);
|
||||
return (newcat_mode_conv[i].mode);
|
||||
}
|
||||
}
|
||||
|
||||
return (RIG_MODE_NONE);
|
||||
}
|
||||
|
||||
char newcat_modechar(rmode_t rmode)
|
||||
{
|
||||
int i;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
for (i = 0; i < sizeof(newcat_mode_conv) / sizeof(newcat_mode_conv[0]); i++)
|
||||
{
|
||||
if (newcat_mode_conv[i].mode == rmode)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: return %c for %s\n", __func__,
|
||||
newcat_mode_conv[i].modechar, rig_strrmode(rmode));
|
||||
return (newcat_mode_conv[i].modechar);
|
||||
}
|
||||
}
|
||||
|
||||
return ('0');
|
||||
}
|
||||
|
||||
rmode_t newcat_rmode_width(RIG *rig, vfo_t vfo, char mode, pbwidth_t *width)
|
||||
{
|
||||
ncboolean narrow;
|
||||
int i;
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
if(width != NULL)
|
||||
*width = RIG_PASSBAND_NORMAL;
|
||||
|
||||
for (i = 0; i < sizeof(newcat_mode_conv) / sizeof(newcat_mode_conv[0]); i++)
|
||||
{
|
||||
if (newcat_mode_conv[i].modechar == mode)
|
||||
{
|
||||
if (newcat_mode_conv[i].chk_width == TRUE && width != NULL)
|
||||
{
|
||||
if(newcat_get_narrow(rig, vfo, &narrow) != RIG_OK)
|
||||
return (newcat_mode_conv[i].mode);
|
||||
if (narrow == TRUE)
|
||||
*width = rig_passband_narrow(rig, mode);
|
||||
else
|
||||
*width = rig_passband_normal(rig, mode);
|
||||
}
|
||||
return (newcat_mode_conv[i].mode);
|
||||
}
|
||||
}
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s fell out the bottom %c %s\n", __func__,
|
||||
mode, rig_strrmode(mode));
|
||||
|
||||
return ('0');
|
||||
}
|
||||
|
|
|
@ -60,13 +60,13 @@ typedef char ncboolean;
|
|||
|
||||
|
||||
#define NEWCAT_MEM_CAP { \
|
||||
.freq = 1, \
|
||||
.mode = 1, \
|
||||
.rit = 1, \
|
||||
.xit = 1, \
|
||||
.rptr_shift = 1, \
|
||||
.ctcss_tone = 1,\
|
||||
.ctcss_sql = 1,\
|
||||
.freq = 1, \
|
||||
.mode = 1, \
|
||||
.rit = 1, \
|
||||
.xit = 1, \
|
||||
.rptr_shift = 1, \
|
||||
.ctcss_tone = 1,\
|
||||
.ctcss_sql = 1,\
|
||||
}
|
||||
|
||||
extern const struct confparams newcat_cfg_params[];
|
||||
|
@ -78,15 +78,20 @@ extern const struct confparams newcat_cfg_params[];
|
|||
* rig_caps.priv? I'm guessing not since it's private to the backend. -N0NB
|
||||
*/
|
||||
|
||||
struct newcat_priv_data {
|
||||
unsigned int read_update_delay; /* depends on pacing value */
|
||||
struct newcat_priv_data
|
||||
{
|
||||
unsigned int
|
||||
read_update_delay; /* depends on pacing value */
|
||||
// vfo_t current_vfo; /* active VFO from last cmd */
|
||||
char cmd_str[NEWCAT_DATA_LEN]; /* command string buffer */
|
||||
char ret_data[NEWCAT_DATA_LEN]; /* returned data--max value, most are less */
|
||||
int current_mem; /* private memory channel number */
|
||||
int rig_id; /* rig id from CAT Command ID; */
|
||||
char
|
||||
ret_data[NEWCAT_DATA_LEN]; /* returned data--max value, most are less */
|
||||
int
|
||||
current_mem; /* private memory channel number */
|
||||
int
|
||||
rig_id; /* rig id from CAT Command ID; */
|
||||
int trn_state; /* AI state found at startup */
|
||||
int fast_set_commands; /* do not check for ACK/NAK; needed for high throughput > 100 commands/s */
|
||||
int fast_set_commands; /* do not check for ACK/NAK; needed for high throughput > 100 commands/s */
|
||||
int width_frequency; /* found at startup */
|
||||
};
|
||||
|
||||
|
@ -123,8 +128,8 @@ struct newcat_priv_data {
|
|||
*
|
||||
*/
|
||||
|
||||
int newcat_get_cmd(RIG * rig);
|
||||
int newcat_set_cmd (RIG *rig);
|
||||
int newcat_get_cmd(RIG *rig);
|
||||
int newcat_set_cmd(RIG *rig);
|
||||
|
||||
int newcat_init(RIG *rig);
|
||||
int newcat_cleanup(RIG *rig);
|
||||
|
@ -140,43 +145,53 @@ int newcat_get_freq(RIG *rig, vfo_t vfo, freq_t *freq);
|
|||
int newcat_set_vfo(RIG *rig, vfo_t vfo);
|
||||
int newcat_get_vfo(RIG *rig, vfo_t *vfo);
|
||||
|
||||
int newcat_set_tx_vfo(RIG *rig, vfo_t tx_vfo);
|
||||
int newcat_get_tx_vfo(RIG *rig, vfo_t *tx_vfo);
|
||||
|
||||
int newcat_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
|
||||
int newcat_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);
|
||||
|
||||
int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt);
|
||||
int newcat_get_ptt(RIG * rig, vfo_t vfo, ptt_t * ptt);
|
||||
int newcat_set_ant(RIG * rig, vfo_t vfo, ant_t ant, value_t option);
|
||||
int newcat_get_ant(RIG * rig, vfo_t vfo, ant_t dummy, value_t * option, ant_t * ant_curr, ant_t * ant_tx, ant_t *ant_rx);
|
||||
int newcat_set_level(RIG * rig, vfo_t vfo, setting_t level, value_t val);
|
||||
int newcat_get_level(RIG * rig, vfo_t vfo, setting_t level, value_t * val);
|
||||
int newcat_set_func(RIG * rig, vfo_t vfo, setting_t func, int status);
|
||||
int newcat_get_func(RIG * rig, vfo_t vfo, setting_t func, int *status);
|
||||
int newcat_set_mem(RIG * rig, vfo_t vfo, int ch);
|
||||
int newcat_get_mem(RIG * rig, vfo_t vfo, int *ch);
|
||||
int newcat_vfo_op(RIG * rig, vfo_t vfo, vfo_op_t op);
|
||||
const char *newcat_get_info(RIG * rig);
|
||||
int newcat_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt);
|
||||
int newcat_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option);
|
||||
int newcat_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option,
|
||||
ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx);
|
||||
int newcat_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
|
||||
int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
|
||||
int newcat_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
|
||||
int newcat_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
|
||||
int newcat_set_mem(RIG *rig, vfo_t vfo, int ch);
|
||||
int newcat_get_mem(RIG *rig, vfo_t vfo, int *ch);
|
||||
int newcat_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op);
|
||||
const char *newcat_get_info(RIG *rig);
|
||||
|
||||
int newcat_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit);
|
||||
int newcat_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit);
|
||||
int newcat_get_xit(RIG *rig, vfo_t vfo, shortfreq_t *xit);
|
||||
int newcat_set_xit(RIG *rig, vfo_t vfo, shortfreq_t xit);
|
||||
int newcat_power2mW(RIG *rig, unsigned int *mwpower, float power, freq_t freq,
|
||||
rmode_t mode);
|
||||
int newcat_mW2power(RIG *rig, float *power, unsigned int mwpower, freq_t freq,
|
||||
rmode_t mode);
|
||||
int newcat_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo);
|
||||
int newcat_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo);
|
||||
int newcat_set_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t rptr_shift);
|
||||
int newcat_get_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t *rptr_shift);
|
||||
int newcat_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone);
|
||||
int newcat_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone);
|
||||
int newcat_set_ctcss_sql(RIG *rig, vfo_t vfo, tone_t tone);
|
||||
int newcat_get_ctcss_sql(RIG *rig, vfo_t vfo, tone_t *tone);
|
||||
int newcat_set_powerstat(RIG *rig, powerstat_t status);
|
||||
int newcat_get_powerstat(RIG *rig, powerstat_t *status);
|
||||
int newcat_set_ts(RIG *rig, vfo_t vfo, shortfreq_t ts);
|
||||
int newcat_get_ts(RIG *rig, vfo_t vfo, shortfreq_t *ts);
|
||||
int newcat_set_trn(RIG *rig, int trn);
|
||||
int newcat_get_trn(RIG *rig, int *trn);
|
||||
int newcat_set_channel(RIG *rig, const channel_t *chan);
|
||||
int newcat_get_channel(RIG *rig, channel_t *chan);
|
||||
rmode_t newcat_rmode(char mode);
|
||||
char newcat_modechar(rmode_t rmode);
|
||||
rmode_t newcat_rmode_width(RIG *rig, vfo_t vfo, char mode, pbwidth_t *width);
|
||||
|
||||
int newcat_get_rit(RIG * rig, vfo_t vfo, shortfreq_t * rit);
|
||||
int newcat_set_rit(RIG * rig, vfo_t vfo, shortfreq_t rit);
|
||||
int newcat_get_xit(RIG * rig, vfo_t vfo, shortfreq_t * xit);
|
||||
int newcat_set_xit(RIG * rig, vfo_t vfo, shortfreq_t xit);
|
||||
int newcat_power2mW(RIG * rig, unsigned int *mwpower, float power, freq_t freq, rmode_t mode);
|
||||
int newcat_mW2power(RIG * rig, float *power, unsigned int mwpower, freq_t freq, rmode_t mode);
|
||||
int newcat_set_split_vfo(RIG * rig, vfo_t vfo, split_t split, vfo_t tx_vfo);
|
||||
int newcat_get_split_vfo(RIG * rig, vfo_t vfo, split_t * split, vfo_t *tx_vfo);
|
||||
int newcat_set_rptr_shift(RIG * rig, vfo_t vfo, rptr_shift_t rptr_shift);
|
||||
int newcat_get_rptr_shift(RIG * rig, vfo_t vfo, rptr_shift_t * rptr_shift);
|
||||
int newcat_set_ctcss_tone(RIG * rig, vfo_t vfo, tone_t tone);
|
||||
int newcat_get_ctcss_tone(RIG * rig, vfo_t vfo, tone_t * tone);
|
||||
int newcat_set_ctcss_sql(RIG * rig, vfo_t vfo, tone_t tone);
|
||||
int newcat_get_ctcss_sql(RIG * rig, vfo_t vfo, tone_t * tone);
|
||||
int newcat_set_powerstat(RIG * rig, powerstat_t status);
|
||||
int newcat_get_powerstat(RIG * rig, powerstat_t * status);
|
||||
int newcat_set_ts(RIG * rig, vfo_t vfo, shortfreq_t ts);
|
||||
int newcat_get_ts(RIG * rig, vfo_t vfo, shortfreq_t * ts);
|
||||
int newcat_set_trn(RIG * rig, int trn);
|
||||
int newcat_get_trn(RIG * rig, int *trn);
|
||||
int newcat_set_channel(RIG * rig, const channel_t * chan);
|
||||
int newcat_get_channel(RIG * rig, channel_t * chan);
|
||||
|
||||
#endif /* _NEWCAT_H */
|
||||
|
|
Ładowanie…
Reference in New Issue