merge upstream

This commit is contained in:
Sebastian Denz 2018-12-26 13:38:06 +01:00
commit f730933b12
26 changed files with 673 additions and 157 deletions

2
.gitignore vendored
View File

@ -53,3 +53,5 @@ tests/rigsmtr
tests/rigswr tests/rigswr
tests/rotctl tests/rotctl
tests/rotctld tests/rotctld
build/

View File

@ -916,7 +916,7 @@ static int flrig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
return -RIG_EINVAL; return -RIG_EINVAL;
} }
if (priv->ptt) { if (priv->ptt) {
rig_debug(RIG_DEBUG_ERR,"%s call not made as PTT=1\n",__FUNCTION__); rig_debug(RIG_DEBUG_WARN,"%s call not made as PTT=1\n",__FUNCTION__);
return RIG_OK; // just return OK and ignore this return RIG_OK; // just return OK and ignore this
} }
@ -1035,13 +1035,12 @@ static int flrig_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
if (priv->ptt) { if (priv->ptt) {
if (vfo == RIG_VFO_A) *mode = priv->curr_modeA; if (vfo == RIG_VFO_A) *mode = priv->curr_modeA;
else *mode = priv->curr_modeB; else *mode = priv->curr_modeB;
rig_debug(RIG_DEBUG_ERR,"%s call not made as PTT=1\n",__FUNCTION__); rig_debug(RIG_DEBUG_WARN,"%s call not made as PTT=1\n",__FUNCTION__);
return RIG_OK; // just return OK and ignore this return RIG_OK; // just return OK and ignore this
} }
// Switch to VFOB if appropriate // Switch to VFOB if appropriate
int vfoSwitched=0; int vfoSwitched=0;
rig_debug(RIG_DEBUG_ERR,"%s has_get_modeA=%d\n",__FUNCTION__,priv->has_get_modeA);
if (priv->has_get_modeA == 0 && vfo == RIG_VFO_B && curr_vfo != RIG_VFO_B) { if (priv->has_get_modeA == 0 && vfo == RIG_VFO_B && curr_vfo != RIG_VFO_B) {
vfoSwitched = 1; vfoSwitched = 1;
} }
@ -1320,8 +1319,7 @@ static int flrig_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
if (retval != RIG_OK) return retval; if (retval != RIG_OK) return retval;
if (split == qsplit) return RIG_OK; if (split == qsplit) return RIG_OK;
if (priv->ptt) { if (priv->ptt) {
priv->ptt = 1; rig_debug(RIG_DEBUG_WARN,"%s call not made as PTT=1\n",__FUNCTION__);
rig_debug(RIG_DEBUG_ERR,"%s call not made as PTT=1\n",__FUNCTION__);
return RIG_OK; // just return OK and ignore this return RIG_OK; // just return OK and ignore this
} }
@ -1387,7 +1385,7 @@ static int flrig_set_split_freq_mode(RIG *rig, vfo_t vfo, freq_t freq, rmode_t m
return -RIG_ENTARGET; return -RIG_ENTARGET;
if (priv->ptt) { if (priv->ptt) {
rig_debug(RIG_DEBUG_ERR,"%s call not made as PTT=1\n",__FUNCTION__); rig_debug(RIG_DEBUG_WARN,"%s call not made as PTT=1\n",__FUNCTION__);
return RIG_OK; // just return OK and ignore this return RIG_OK; // just return OK and ignore this
} }

View File

@ -113,7 +113,7 @@ static int netrigctl_open(RIG *rig)
if (ret <= 0) if (ret <= 0)
return (ret < 0) ? ret : -RIG_EPROTO; return (ret < 0) ? ret : -RIG_EPROTO;
ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%x%d%d%x%x", ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%"SCNXll"%d%d%x%x",
&rs->rx_range_list[i].start, &rs->rx_range_list[i].start,
&rs->rx_range_list[i].end, &rs->rx_range_list[i].end,
&rs->rx_range_list[i].modes, &rs->rx_range_list[i].modes,
@ -132,7 +132,7 @@ static int netrigctl_open(RIG *rig)
if (ret <= 0) if (ret <= 0)
return (ret < 0) ? ret : -RIG_EPROTO; return (ret < 0) ? ret : -RIG_EPROTO;
ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%x%d%d%x%x", ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%"SCNXll"%d%d%x%x",
&rs->tx_range_list[i].start, &rs->tx_range_list[i].start,
&rs->tx_range_list[i].end, &rs->tx_range_list[i].end,
&rs->tx_range_list[i].modes, &rs->tx_range_list[i].modes,
@ -151,7 +151,7 @@ static int netrigctl_open(RIG *rig)
if (ret <= 0) if (ret <= 0)
return (ret < 0) ? ret : -RIG_EPROTO; return (ret < 0) ? ret : -RIG_EPROTO;
ret = sscanf(buf, "%x%ld", ret = sscanf(buf, "%"SCNXll"%ld",
&rs->tuning_steps[i].modes, &rs->tuning_steps[i].modes,
&rs->tuning_steps[i].ts); &rs->tuning_steps[i].ts);
if (ret != 2) if (ret != 2)
@ -165,7 +165,7 @@ static int netrigctl_open(RIG *rig)
if (ret <= 0) if (ret <= 0)
return (ret < 0) ? ret : -RIG_EPROTO; return (ret < 0) ? ret : -RIG_EPROTO;
ret = sscanf(buf, "%x%ld", ret = sscanf(buf, "%"SCNXll"%ld",
&rs->filters[i].modes, &rs->filters[i].modes,
&rs->filters[i].width); &rs->filters[i].width);
if (ret != 2) if (ret != 2)

View File

@ -4,7 +4,7 @@ ICOMSRC = ic706.c icr8500.c ic735.c ic775.c ic756.c \
os535.c os456.c omni.c delta2.c ic92d.c \ os535.c os456.c omni.c delta2.c ic92d.c \
ic736.c ic738.c ic7410.c ic746.c ic703.c ic726.c ic271.c \ ic736.c ic738.c ic7410.c ic746.c ic703.c ic726.c ic271.c \
ic765.c ic781.c ic471.c icr9000.c icr9500.c \ ic765.c ic781.c ic471.c icr9000.c icr9500.c \
icr10.c icr20.c icr6.c icr71.c icr72.c icr75.c icrx7.c icr8600.c \ icr10.c icr20.c icr30.c icr6.c icr71.c icr72.c icr75.c icrx7.c icr8600.c \
id1.c id5100.c perseus.c ic2730.c \ id1.c id5100.c perseus.c ic2730.c \
ic707.c ic728.c ic751.c ic761.c \ ic707.c ic728.c ic751.c ic761.c \
ic78.c ic7800.c ic785x.c \ ic78.c ic7800.c ic785x.c \

View File

@ -326,6 +326,7 @@ int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width,
switch (mode) { switch (mode) {
case RIG_MODE_AM: icmode = S_AM; break; case RIG_MODE_AM: icmode = S_AM; break;
case RIG_MODE_AMN: icmode = S_AMN; break;
case RIG_MODE_AMS: icmode = S_AMS; break; case RIG_MODE_AMS: icmode = S_AMS; break;
case RIG_MODE_CW: icmode = S_CW; break; case RIG_MODE_CW: icmode = S_CW; break;
case RIG_MODE_CWR: icmode = S_CWR; break; case RIG_MODE_CWR: icmode = S_CWR; break;
@ -335,6 +336,12 @@ int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width,
case RIG_MODE_RTTYR: icmode = S_RTTYR; break; case RIG_MODE_RTTYR: icmode = S_RTTYR; break;
case RIG_MODE_FM: icmode = S_FM; break; case RIG_MODE_FM: icmode = S_FM; break;
case RIG_MODE_WFM: icmode = S_WFM; break; case RIG_MODE_WFM: icmode = S_WFM; break;
case RIG_MODE_P25: icmode = S_P25; break;
case RIG_MODE_DSTAR: icmode = S_DSTAR; break;
case RIG_MODE_DPMR: icmode = S_DPMR; break;
case RIG_MODE_NXDNVN: icmode = S_NXDNVN; break;
case RIG_MODE_NXDN_N: icmode = S_NXDN_N; break;
case RIG_MODE_DCR: icmode = S_DCR; break;
default: default:
rig_debug(RIG_DEBUG_ERR,"icom: Unsupported Hamlib mode %d\n",mode); rig_debug(RIG_DEBUG_ERR,"icom: Unsupported Hamlib mode %d\n",mode);
return -RIG_EINVAL; return -RIG_EINVAL;

View File

@ -176,6 +176,7 @@ const struct rig_caps ic706_caps = {
.max_xit = Hz(0), .max_xit = Hz(0),
.max_ifshift = Hz(0), .max_ifshift = Hz(0),
.targetable_vfo = 0, .targetable_vfo = 0,
.vfo_ops = IC706_VFO_OPS,
.transceive = RIG_TRN_RIG, .transceive = RIG_TRN_RIG,
.bank_qty = 0, .bank_qty = 0,
.chan_desc_sz = 0, .chan_desc_sz = 0,
@ -309,6 +310,7 @@ const struct rig_caps ic706mkii_caps = {
.max_xit = Hz(0), .max_xit = Hz(0),
.max_ifshift = Hz(0), .max_ifshift = Hz(0),
.targetable_vfo = 0, .targetable_vfo = 0,
.vfo_ops = IC706_VFO_OPS,
.transceive = RIG_TRN_RIG, .transceive = RIG_TRN_RIG,
.bank_qty = 0, .bank_qty = 0,
.chan_desc_sz = 0, .chan_desc_sz = 0,

View File

@ -379,6 +379,7 @@ static const struct icom_addr icom_addr_list[] = {
{ RIG_MODEL_PERSEUS, 0xE1 }, { RIG_MODEL_PERSEUS, 0xE1 },
{ RIG_MODEL_X108G, 0x70 }, { RIG_MODEL_X108G, 0x70 },
{ RIG_MODEL_ICR8600, 0x96 }, { RIG_MODEL_ICR8600, 0x96 },
{ RIG_MODEL_ICR30, 0x9c },
{ RIG_MODEL_NONE, 0 }, { RIG_MODEL_NONE, 0 },
}; };
@ -742,7 +743,7 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
unsigned char icmode; unsigned char icmode;
signed char icmode_ext; signed char icmode_ext;
int ack_len=sizeof(ackbuf), retval, err; int ack_len=sizeof(ackbuf), retval, err;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
rs = &rig->state; rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv; priv = (struct icom_priv_data*)rs->priv;
@ -2472,6 +2473,14 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
fct_sc = status ? S_SCAN_RSMON : S_SCAN_RSMOFF; fct_sc = status ? S_SCAN_RSMON : S_SCAN_RSMOFF;
fct_len = 0; fct_len = 0;
break; break;
case RIG_FUNC_DSQL:
fct_cn = C_CTL_FUNC;
fct_sc = S_FUNC_DSQL;
break;
case RIG_FUNC_AFLT:
fct_cn = C_CTL_MEM;
fct_sc = S_MEM_AFLT;
break;
case RIG_FUNC_AIP: /* IC-R8600 IP+ function, misusing AIP since RIG_FUNC_ word is full (32 bit) */ case RIG_FUNC_AIP: /* IC-R8600 IP+ function, misusing AIP since RIG_FUNC_ word is full (32 bit) */
fct_cn = C_CTL_MEM; /* 1a */ fct_cn = C_CTL_MEM; /* 1a */
fct_sc = S_FUNC_IPPLUS; fct_sc = S_FUNC_IPPLUS;
@ -2585,6 +2594,14 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
fct_cn = C_CTL_MEM; /* 1a */ fct_cn = C_CTL_MEM; /* 1a */
fct_sc = S_FUNC_IPPLUS; fct_sc = S_FUNC_IPPLUS;
break; break;
case RIG_FUNC_DSQL:
fct_cn = C_CTL_FUNC;
fct_sc = S_FUNC_DSQL;
break;
case RIG_FUNC_AFLT:
fct_cn = C_CTL_MEM;
fct_sc = S_MEM_AFLT;
break;
default: default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get_func %d", func); rig_debug(RIG_DEBUG_ERR,"Unsupported get_func %d", func);
return -RIG_EINVAL; return -RIG_EINVAL;
@ -2959,7 +2976,7 @@ int icom_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone)
caps = rig->caps; caps = rig->caps;
if (caps->ctcss_list) { if (caps->ctcss_list) {
for (i = 0; caps->ctcss_list[i] != 0 && i<52; i++) { for (i = 0; caps->ctcss_list[i] != 0 && i<FULL_CTCSS_LIST_COUNT; i++) {
if (caps->ctcss_list[i] == tone) if (caps->ctcss_list[i] == tone)
break; break;
} }
@ -3018,7 +3035,7 @@ int icom_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone)
if (!caps->ctcss_list) return RIG_OK; if (!caps->ctcss_list) return RIG_OK;
/* check this tone exists. That's better than nothing. */ /* check this tone exists. That's better than nothing. */
for (i = 0; caps->ctcss_list[i] != 0 && i<52; i++) { for (i = 0; caps->ctcss_list[i] != 0 && i<FULL_CTCSS_LIST_COUNT; i++) {
if (caps->ctcss_list[i] == *tone) if (caps->ctcss_list[i] == *tone)
return RIG_OK; return RIG_OK;
} }
@ -3042,7 +3059,7 @@ int icom_set_ctcss_sql(RIG *rig, vfo_t vfo, tone_t tone)
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
caps = rig->caps; caps = rig->caps;
for (i = 0; caps->ctcss_list[i] != 0 && i<52; i++) { for (i = 0; caps->ctcss_list[i] != 0 && i<FULL_CTCSS_LIST_COUNT; i++) {
if (caps->ctcss_list[i] == tone) if (caps->ctcss_list[i] == tone)
break; break;
} }
@ -3097,7 +3114,7 @@ int icom_get_ctcss_sql(RIG *rig, vfo_t vfo, tone_t *tone)
*tone = from_bcd_be(tonebuf+2, tone_len*2); *tone = from_bcd_be(tonebuf+2, tone_len*2);
/* check this tone exists. That's better than nothing. */ /* check this tone exists. That's better than nothing. */
for (i = 0; caps->ctcss_list[i] != 0 && i<52; i++) { for (i = 0; caps->ctcss_list[i] != 0 && i<FULL_CTCSS_LIST_COUNT; i++) {
if (caps->ctcss_list[i] == *tone) if (caps->ctcss_list[i] == *tone)
return RIG_OK; return RIG_OK;
} }
@ -3121,13 +3138,14 @@ int icom_set_dcs_code(RIG *rig, vfo_t vfo, tone_t code)
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
caps = rig->caps; caps = rig->caps;
for (i = 0; caps->dcs_list[i] != 0 && i<104; i++) { for (i = 0; caps->dcs_list[i] != 0 && i<COMMON_DCS_LIST_COUNT; i++) {
if (caps->dcs_list[i] == code) if (caps->dcs_list[i] == code)
break; break;
} }
if (caps->dcs_list[i] != code) if (caps->dcs_list[i] != code)
return -RIG_EINVAL; return -RIG_EINVAL;
/* DCS Polarity ignored, by setting code_len to 3 it's forced to 0 (= Tx:norm, Rx:norm). */
code_len = 3; code_len = 3;
to_bcd_be(codebuf, code, code_len*2); to_bcd_be(codebuf, code, code_len*2);
@ -3171,11 +3189,15 @@ int icom_get_dcs_code(RIG *rig, vfo_t vfo, tone_t *code)
return -RIG_ERJCTED; return -RIG_ERJCTED;
} }
code_len -= 2; /* buf is cn,sc, polarity, code_lo, code_hi, so code bytes start at 3, len is 2
*code = from_bcd_be(codebuf+2, code_len*2); polarity is not decoded yet, hard to do without breaking ABI
*/
code_len -= 3;
*code = from_bcd_be(codebuf+3, code_len*2);
/* check this code exists. That's better than nothing. */ /* check this code exists. That's better than nothing. */
for (i = 0; caps->dcs_list[i] != 0 && i<104; i++) { for (i = 0; caps->dcs_list[i] != 0 && i<COMMON_DCS_LIST_COUNT; i++) {
if (caps->dcs_list[i] == *code) if (caps->dcs_list[i] == *code)
return RIG_OK; return RIG_OK;
} }
@ -3353,7 +3375,7 @@ int icom_set_ant(RIG * rig, vfo_t vfo, ant_t ant)
} }
antarg = 0; antarg = 0;
ant_len = ((rig->caps->rig_model == RIG_MODEL_ICR75) || (rig->caps->rig_model == RIG_MODEL_ICR8600))? 0 : 1; ant_len = ((rig->caps->rig_model == RIG_MODEL_ICR75) || (rig->caps->rig_model == RIG_MODEL_ICR8600) || (rig->caps->rig_model == RIG_MODEL_ICR6))? 0 : 1;
retval = icom_transaction (rig, C_CTL_ANT, i_ant, retval = icom_transaction (rig, C_CTL_ANT, i_ant,
&antarg, ant_len, ackbuf, &ack_len); &antarg, ant_len, ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
@ -3925,6 +3947,7 @@ DECLARE_INITRIG_BACKEND(icom)
rig_register(&icr6_caps); rig_register(&icr6_caps);
rig_register(&icr10_caps); rig_register(&icr10_caps);
rig_register(&icr20_caps); rig_register(&icr20_caps);
rig_register(&icr30_caps);
rig_register(&icr71_caps); rig_register(&icr71_caps);
rig_register(&icr72_caps); rig_register(&icr72_caps);
rig_register(&icr75_caps); rig_register(&icr75_caps);

View File

@ -282,5 +282,6 @@ extern const struct rig_caps perseus_caps;
extern const struct rig_caps x108g_caps; extern const struct rig_caps x108g_caps;
extern const struct rig_caps icr8600_caps; extern const struct rig_caps icr8600_caps;
extern const struct rig_caps icr30_caps;
#endif /* _ICOM_H */ #endif /* _ICOM_H */

View File

@ -106,6 +106,7 @@
#define S_LSB 0x00 /* Set to LSB */ #define S_LSB 0x00 /* Set to LSB */
#define S_USB 0x01 /* Set to USB */ #define S_USB 0x01 /* Set to USB */
#define S_AM 0x02 /* Set to AM */ #define S_AM 0x02 /* Set to AM */
#define S_AMN 0x02 /* Set to AM-N */
#define S_CW 0x03 /* Set to CW */ #define S_CW 0x03 /* Set to CW */
#define S_RTTY 0x04 /* Set to RTTY */ #define S_RTTY 0x04 /* Set to RTTY */
#define S_FM 0x05 /* Set to FM */ #define S_FM 0x05 /* Set to FM */
@ -115,6 +116,14 @@
#define S_AMS 0x11 /* Set to AMS */ #define S_AMS 0x11 /* Set to AMS */
#define S_PSK 0x12 /* 7800 PSK USB */ #define S_PSK 0x12 /* 7800 PSK USB */
#define S_PSKR 0x13 /* 7800 PSK LSB */ #define S_PSKR 0x13 /* 7800 PSK LSB */
#define S_SAML 0x14 /* Set to AMS-L */
#define S_SAMU 0x15 /* Set to AMS-U */
#define S_P25 0x16 /* Set to P25 */
#define S_DSTAR 0x17 /* Set to D-STAR */
#define S_DPMR 0x18 /* Set to dPMR */
#define S_NXDNVN 0x19 /* Set to NXDN_VN */
#define S_NXDN_N 0x20 /* Set to NXDN-N */
#define S_DCR 0x21 /* Set to DCR */
#define S_R7000_SSB 0x05 /* Set to SSB on R-7000 */ #define S_R7000_SSB 0x05 /* Set to SSB on R-7000 */
@ -283,7 +292,7 @@
#define S_FUNC_MN 0x48 /* Manual notch setting */ #define S_FUNC_MN 0x48 /* Manual notch setting */
#define S_FUNC_RF 0x49 /* RTTY Filter setting */ #define S_FUNC_RF 0x49 /* RTTY Filter setting */
#define S_FUNC_AFC 0x4A /* Auto Frequency Control (AFC) setting */ #define S_FUNC_AFC 0x4A /* Auto Frequency Control (AFC) setting */
#define S_FUNC_DTCS 0x4B /*DTCS tone code squelch setting*/ #define S_FUNC_DSQL 0x4B /*DTCS tone code squelch setting*/
#define S_FUNC_VSC 0x4C /* voice squelch control useful for scanning*/ #define S_FUNC_VSC 0x4C /* voice squelch control useful for scanning*/
#define S_FUNC_MANAGC 0x4D /* manual AGC */ #define S_FUNC_MANAGC 0x4D /* manual AGC */
#define S_FUNC_DIGISEL 0x4E /* DIGI-SEL */ #define S_FUNC_DIGISEL 0x4E /* DIGI-SEL */
@ -343,6 +352,8 @@
#define S_MEM_TSTEP_ON 0x01 #define S_MEM_TSTEP_ON 0x01
#define S_FUNC_IPPLUS 0x07 /* IP+ subcommand 0x1a 0x07 */ #define S_FUNC_IPPLUS 0x07 /* IP+ subcommand 0x1a 0x07 */
/* IC-R6 */
#define S_MEM_AFLT 0x00 /* AF LPF Off/On */
/* /*
* Tone control (C_SET_TONE) subcommands * Tone control (C_SET_TONE) subcommands

172
icom/icr30.c Normal file
View File

@ -0,0 +1,172 @@
/*
* Hamlib CI-V backend - description of IC-R30
* Copyright (c) 2018 Malcolm Herring
*
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include "hamlib/rig.h"
#include "icom.h"
#include "idx_builtin.h"
#define ICR30_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_AM|RIG_MODE_AMN|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_WFM|RIG_MODE_CWR|\
RIG_MODE_RTTYR|RIG_MODE_SAM|RIG_MODE_SAL|RIG_MODE_SAH|RIG_MODE_P25|RIG_MODE_DSTAR|RIG_MODE_DPMR|RIG_MODE_NXDNVN|RIG_MODE_NXDN_N|RIG_MODE_DCR)
#define ICR30_FUNC_ALL (RIG_FUNC_TSQL|RIG_FUNC_VSC)
#define ICR30_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH)
#define ICR30_VFO_ALL (RIG_VFO_A)
#define ICR30_VFO_OPS (RIG_OP_NONE)
#define ICR30_SCAN_OPS (RIG_SCAN_NONE)
#define ICR30_STR_CAL { 2, \
{ \
{ 0, -60 }, /* S0 */ \
{ 255, 60 } /* +60 */ \
} }
static const struct icom_priv_caps icr30_priv_caps = {
0x9c, /* default address */
0, /* 731 mode */
0, /* no XCHG */
r8500_ts_sc_list /* wrong, but don't have set_ts anyway */
};
const struct rig_caps icr30_caps = {
.rig_model = RIG_MODEL_ICR30,
.model_name = "IC-R30",
.mfg_name = "Icom",
.version = BACKEND_VER,
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_RECEIVER|RIG_FLAG_HANDHELD,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 300,
.serial_rate_max = 19200,
.serial_data_bits = 8,
.serial_stop_bits = 1,
.serial_parity = RIG_PARITY_NONE,
.serial_handshake = RIG_HANDSHAKE_NONE,
.write_delay = 0,
.post_write_delay = 0,
.timeout = 1000,
.retry = 3,
.has_get_func = ICR30_FUNC_ALL,
.has_set_func = ICR30_FUNC_ALL,
.has_get_level = ICR30_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(ICR30_LEVEL_ALL),
.has_get_parm = RIG_PARM_NONE,
.has_set_parm = RIG_PARM_NONE, /* FIXME: parms */
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
},
.parm_gran = {},
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { RIG_DBLST_END, },
.attenuator = { RIG_DBLST_END, },
.max_rit = Hz(0),
.max_xit = Hz(0),
.max_ifshift = Hz(0),
.targetable_vfo = 0,
.vfo_ops = ICR30_VFO_OPS,
.scan_ops = ICR30_SCAN_OPS,
.transceive = RIG_TRN_RIG,
.bank_qty = 0,
.chan_desc_sz = 0,
.chan_list = {
{ 1, 999, RIG_MTYPE_MEM }, /* TBC */
{ 1000, 1199, RIG_MTYPE_MEM }, /* auto-write */
{ 1200, 1299, RIG_MTYPE_EDGE }, /* two by two */
RIG_CHAN_END,
},
.rx_range_list1 = { /* Other countries but France */
{kHz(100),GHz(3.3049999),ICR30_MODES,-1,-1,ICR30_VFO_ALL},
RIG_FRNG_END, },
.tx_range_list1 = { RIG_FRNG_END, },
.rx_range_list2 = { /* USA */
{kHz(100),MHz(821.995),ICR30_MODES,-1,-1,ICR30_VFO_ALL},
{MHz(851),MHz(866.995),ICR30_MODES,-1,-1,ICR30_VFO_ALL},
{MHz(896),GHz(3.3049999),ICR30_MODES,-1,-1,ICR30_VFO_ALL},
RIG_FRNG_END, },
.tx_range_list2 = { RIG_FRNG_END, },
.tuning_steps = {
{ICR30_MODES,Hz(5000)},
{ICR30_MODES,Hz(6250)},
{ICR30_MODES,Hz(10000)},
{ICR30_MODES,Hz(12500)},
{ICR30_MODES,kHz(15)},
{ICR30_MODES,kHz(20)},
{ICR30_MODES,kHz(25)},
{ICR30_MODES,kHz(30)},
{ICR30_MODES,kHz(50)},
{ICR30_MODES,kHz(100)},
/* Air band only */
{ICR30_MODES,Hz(8330)},
/* AM broadcast band only */
{ICR30_MODES,Hz(9000)},
RIG_TS_END,
},
/* mode/filter list, remember: order matters! */
.filters = {
{RIG_MODE_AM|RIG_MODE_FM, kHz(12)},
{RIG_MODE_WFM, kHz(150)},
RIG_FLT_END,
},
.str_cal = ICR30_STR_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
.get_conf = icom_get_conf,
.priv = (void*)&icr30_priv_caps,
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = NULL,
.rig_close = NULL,
.set_freq = icom_set_freq,
.get_freq = icom_get_freq,
.set_mode = icom_set_mode,
.get_mode = icom_get_mode,
.set_ant = icom_set_ant,
.get_ant = icom_get_ant,
.decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.get_dcd = icom_get_dcd,
.set_ctcss_sql = icom_set_ctcss_sql,
.get_ctcss_sql = icom_get_ctcss_sql,
.set_dcs_code = icom_set_dcs_code,
.get_dcs_code = icom_get_dcs_code,
};

View File

@ -31,9 +31,9 @@
#define ICR6_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) #define ICR6_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM)
#define ICR6_FUNC_ALL (RIG_FUNC_NONE) #define ICR6_FUNC_ALL (RIG_FUNC_TSQL|RIG_FUNC_VSC|RIG_FUNC_DSQL|RIG_FUNC_AFLT)
#define ICR6_LEVEL_ALL (RIG_LEVEL_RAWSTR) #define ICR6_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH)
#define ICR6_VFO_ALL (RIG_VFO_A) #define ICR6_VFO_ALL (RIG_VFO_A)
@ -59,7 +59,7 @@ const struct rig_caps icr6_caps = {
.mfg_name = "Icom", .mfg_name = "Icom",
.version = BACKEND_VER, .version = BACKEND_VER,
.copyright = "LGPL", .copyright = "LGPL",
.status = RIG_STATUS_ALPHA, .status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER|RIG_FLAG_HANDHELD, .rig_type = RIG_TYPE_RECEIVER|RIG_FLAG_HANDHELD,
.ptt_type = RIG_PTT_NONE, .ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG, .dcd_type = RIG_DCD_RIG,
@ -79,13 +79,13 @@ const struct rig_caps icr6_caps = {
.has_get_level = ICR6_LEVEL_ALL, .has_get_level = ICR6_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(ICR6_LEVEL_ALL), .has_set_level = RIG_LEVEL_SET(ICR6_LEVEL_ALL),
.has_get_parm = RIG_PARM_NONE, .has_get_parm = RIG_PARM_NONE,
.has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ .has_set_parm = RIG_PARM_NONE,
.level_gran = { .level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
}, },
.parm_gran = {}, .parm_gran = {},
.ctcss_list = NULL, .ctcss_list = common_ctcss_list,
.dcs_list = NULL, .dcs_list = common_dcs_list,
.preamp = { RIG_DBLST_END, }, .preamp = { RIG_DBLST_END, },
.attenuator = { RIG_DBLST_END, }, .attenuator = { RIG_DBLST_END, },
.max_rit = Hz(0), .max_rit = Hz(0),
@ -98,13 +98,7 @@ const struct rig_caps icr6_caps = {
.bank_qty = 0, .bank_qty = 0,
.chan_desc_sz = 0, .chan_desc_sz = 0,
/* Only through cloning mode OPC-1382 */ .chan_list = {RIG_CHAN_END,},
.chan_list = {
{ 1, 999, RIG_MTYPE_MEM }, /* TBC */
{ 1000, 1199, RIG_MTYPE_MEM }, /* auto-write */
{ 1200, 1299, RIG_MTYPE_EDGE }, /* two by two */
RIG_CHAN_END,
},
.rx_range_list1 = { /* Other countries but France */ .rx_range_list1 = { /* Other countries but France */
{kHz(100),GHz(1.309995),ICR6_MODES,-1,-1,ICR6_VFO_ALL}, {kHz(100),GHz(1.309995),ICR6_MODES,-1,-1,ICR6_VFO_ALL},
@ -119,22 +113,25 @@ const struct rig_caps icr6_caps = {
.tx_range_list2 = { RIG_FRNG_END, }, .tx_range_list2 = { RIG_FRNG_END, },
.tuning_steps = { .tuning_steps = {
{ICR6_MODES,Hz(5000)}, {ICR6_MODES,Hz(5000)},
{ICR6_MODES,Hz(6250)}, {ICR6_MODES,Hz(6250)},
{ICR6_MODES,Hz(10000)}, {ICR6_MODES,Hz(10000)},
{ICR6_MODES,Hz(12500)}, {ICR6_MODES,Hz(12500)},
{ICR6_MODES,kHz(15)}, {ICR6_MODES,kHz(15)},
{ICR6_MODES,kHz(20)}, {ICR6_MODES,kHz(20)},
{ICR6_MODES,kHz(25)}, {ICR6_MODES,kHz(25)},
{ICR6_MODES,kHz(30)}, {ICR6_MODES,kHz(30)},
{ICR6_MODES,kHz(50)}, {ICR6_MODES,kHz(50)},
{ICR6_MODES,kHz(100)}, {ICR6_MODES,kHz(100)},
{ICR6_MODES,kHz(125)},
{ICR6_MODES,kHz(200)},
/* Air band only */ /* Air band only */
{ICR6_MODES,Hz(8330)}, {ICR6_MODES,Hz(8330)},
/* AM broadcast band only */ /* AM broadcast band only */
{ICR6_MODES,Hz(9000)}, {ICR6_MODES,Hz(9000)},
RIG_TS_END, RIG_TS_END,
}, },
/* mode/filter list, remember: order matters! */ /* mode/filter list, remember: order matters! */
.filters = { .filters = {
{RIG_MODE_AM|RIG_MODE_FM, kHz(12)}, {RIG_MODE_AM|RIG_MODE_FM, kHz(12)},
@ -155,14 +152,18 @@ const struct rig_caps icr6_caps = {
.set_freq = icom_set_freq, .set_freq = icom_set_freq,
.get_freq = icom_get_freq, .get_freq = icom_get_freq,
.set_mode = icom_set_mode, /* TODO: do not pass bandwidth data */ .set_mode = icom_set_mode,
.get_mode = icom_get_mode, .get_mode = icom_get_mode,
/* .set_vfo = icom_set_vfo, */ .set_ant = icom_set_ant,
.get_ant = icom_get_ant,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level, .get_level = icom_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.get_dcd = icom_get_dcd, .get_dcd = icom_get_dcd,
.set_ctcss_sql = icom_set_ctcss_sql,
.get_ctcss_sql = icom_get_ctcss_sql,
.set_dcs_code = icom_set_dcs_code,
.get_dcs_code = icom_get_dcs_code,
}; };

View File

@ -265,6 +265,8 @@ const struct rig_caps icr8600_caps = {
.get_powerstat = icom_get_powerstat, .get_powerstat = icom_get_powerstat,
.set_ctcss_sql = icom_set_ctcss_sql, .set_ctcss_sql = icom_set_ctcss_sql,
.get_ctcss_sql = icom_get_ctcss_sql, .get_ctcss_sql = icom_get_ctcss_sql,
.set_dcs_sql = icom_set_dcs_code,
.get_dcs_sql = icom_get_dcs_code,
.set_channel = icr8600_set_channel, .set_channel = icr8600_set_channel,
.get_channel = icr8600_get_channel, .get_channel = icr8600_get_channel,

View File

@ -26,6 +26,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
#include <inttypes.h>
/* Rig list is in a separate file so as not to mess up w/ this one */ /* Rig list is in a separate file so as not to mess up w/ this one */
#include <hamlib/riglist.h> #include <hamlib/riglist.h>
@ -760,7 +761,7 @@ enum rig_parm_e {
* This can be a func, a level or a parm. * This can be a func, a level or a parm.
* Each bit designates one of them. * Each bit designates one of them.
*/ */
typedef unsigned long setting_t; typedef uint64_t setting_t;
/** /**
* \brief Tranceive mode * \brief Tranceive mode
@ -790,39 +791,71 @@ typedef unsigned long setting_t;
* initialize the func_str.func members. TNX KA6MAL, AC6SL. - N0NB * initialize the func_str.func members. TNX KA6MAL, AC6SL. - N0NB
*/ */
#define RIG_FUNC_NONE 0 /*!< '' -- No Function */ #define RIG_FUNC_NONE 0 /*!< '' -- No Function */
#define RIG_FUNC_FAGC (1UL<<0) /*!< \c FAGC -- Fast AGC */ #define RIG_FUNC_FAGC (1ULL<<0) /*!< \c FAGC -- Fast AGC */
#define RIG_FUNC_NB (1UL<<1) /*!< \c NB -- Noise Blanker */ #define RIG_FUNC_NB (1ULL<<1) /*!< \c NB -- Noise Blanker */
#define RIG_FUNC_COMP (1UL<<2) /*!< \c COMP -- Speech Compression */ #define RIG_FUNC_COMP (1ULL<<2) /*!< \c COMP -- Speech Compression */
#define RIG_FUNC_VOX (1UL<<3) /*!< \c VOX -- Voice Operated Relay */ #define RIG_FUNC_VOX (1ULL<<3) /*!< \c VOX -- Voice Operated Relay */
#define RIG_FUNC_TONE (1UL<<4) /*!< \c TONE -- CTCSS Tone */ #define RIG_FUNC_TONE (1ULL<<4) /*!< \c TONE -- CTCSS Tone */
#define RIG_FUNC_TSQL (1UL<<5) /*!< \c TSQL -- CTCSS Activate/De-activate */ #define RIG_FUNC_TSQL (1ULL<<5) /*!< \c TSQL -- CTCSS Activate/De-activate */
#define RIG_FUNC_SBKIN (1UL<<6) /*!< \c SBKIN -- Semi Break-in (CW mode) */ #define RIG_FUNC_SBKIN (1ULL<<6) /*!< \c SBKIN -- Semi Break-in (CW mode) */
#define RIG_FUNC_FBKIN (1UL<<7) /*!< \c FBKIN -- Full Break-in (CW mode) */ #define RIG_FUNC_FBKIN (1ULL<<7) /*!< \c FBKIN -- Full Break-in (CW mode) */
#define RIG_FUNC_ANF (1UL<<8) /*!< \c ANF -- Automatic Notch Filter (DSP) */ #define RIG_FUNC_ANF (1ULL<<8) /*!< \c ANF -- Automatic Notch Filter (DSP) */
#define RIG_FUNC_NR (1UL<<9) /*!< \c NR -- Noise Reduction (DSP) */ #define RIG_FUNC_NR (1ULL<<9) /*!< \c NR -- Noise Reduction (DSP) */
#define RIG_FUNC_AIP (1UL<<10) /*!< \c AIP -- RF pre-amp (AIP on Kenwood, IPO on Yaesu, etc.) */ #define RIG_FUNC_AIP (1ULL<<10) /*!< \c AIP -- RF pre-amp (AIP on Kenwood, IPO on Yaesu, etc.) */
#define RIG_FUNC_APF (1UL<<11) /*!< \c APF -- Auto Passband/Audio Peak Filter */ #define RIG_FUNC_APF (1ULL<<11) /*!< \c APF -- Auto Passband/Audio Peak Filter */
#define RIG_FUNC_MON (1UL<<12) /*!< \c MON -- Monitor transmitted signal */ #define RIG_FUNC_MON (1ULL<<12) /*!< \c MON -- Monitor transmitted signal */
#define RIG_FUNC_MN (1UL<<13) /*!< \c MN -- Manual Notch */ #define RIG_FUNC_MN (1ULL<<13) /*!< \c MN -- Manual Notch */
#define RIG_FUNC_RF (1UL<<14) /*!< \c RF -- RTTY Filter */ #define RIG_FUNC_RF (1ULL<<14) /*!< \c RF -- RTTY Filter */
#define RIG_FUNC_ARO (1UL<<15) /*!< \c ARO -- Auto Repeater Offset */ #define RIG_FUNC_ARO (1ULL<<15) /*!< \c ARO -- Auto Repeater Offset */
#define RIG_FUNC_LOCK (1UL<<16) /*!< \c LOCK -- Lock */ #define RIG_FUNC_LOCK (1ULL<<16) /*!< \c LOCK -- Lock */
#define RIG_FUNC_MUTE (1UL<<17) /*!< \c MUTE -- Mute */ #define RIG_FUNC_MUTE (1ULL<<17) /*!< \c MUTE -- Mute */
#define RIG_FUNC_VSC (1UL<<18) /*!< \c VSC -- Voice Scan Control */ #define RIG_FUNC_VSC (1ULL<<18) /*!< \c VSC -- Voice Scan Control */
#define RIG_FUNC_REV (1UL<<19) /*!< \c REV -- Reverse transmit and receive frequencies */ #define RIG_FUNC_REV (1ULL<<19) /*!< \c REV -- Reverse transmit and receive frequencies */
#define RIG_FUNC_SQL (1UL<<20) /*!< \c SQL -- Turn Squelch Monitor on/off */ #define RIG_FUNC_SQL (1ULL<<20) /*!< \c SQL -- Turn Squelch Monitor on/off */
#define RIG_FUNC_ABM (1UL<<21) /*!< \c ABM -- Auto Band Mode */ #define RIG_FUNC_ABM (1ULL<<21) /*!< \c ABM -- Auto Band Mode */
#define RIG_FUNC_BC (1UL<<22) /*!< \c BC -- Beat Canceller */ #define RIG_FUNC_BC (1ULL<<22) /*!< \c BC -- Beat Canceller */
#define RIG_FUNC_MBC (1UL<<23) /*!< \c MBC -- Manual Beat Canceller */ #define RIG_FUNC_MBC (1ULL<<23) /*!< \c MBC -- Manual Beat Canceller */
#define RIG_FUNC_RIT (1UL<<24) /*!< \c RIT -- Receiver Incremental Tuning */ #define RIG_FUNC_RIT (1ULL<<24) /*!< \c RIT -- Receiver Incremental Tuning */
#define RIG_FUNC_AFC (1UL<<25) /*!< \c AFC -- Auto Frequency Control ON/OFF */ #define RIG_FUNC_AFC (1ULL<<25) /*!< \c AFC -- Auto Frequency Control ON/OFF */
#define RIG_FUNC_SATMODE (1UL<<26) /*!< \c SATMODE -- Satellite mode ON/OFF */ #define RIG_FUNC_SATMODE (1ULL<<26) /*!< \c SATMODE -- Satellite mode ON/OFF */
#define RIG_FUNC_SCOPE (1UL<<27) /*!< \c SCOPE -- Simple bandscope ON/OFF */ #define RIG_FUNC_SCOPE (1ULL<<27) /*!< \c SCOPE -- Simple bandscope ON/OFF */
#define RIG_FUNC_RESUME (1UL<<28) /*!< \c RESUME -- Scan auto-resume */ #define RIG_FUNC_RESUME (1ULL<<28) /*!< \c RESUME -- Scan auto-resume */
#define RIG_FUNC_TBURST (1UL<<29) /*!< \c TBURST -- 1750 Hz tone burst */ #define RIG_FUNC_TBURST (1ULL<<29) /*!< \c TBURST -- 1750 Hz tone burst */
#define RIG_FUNC_TUNER (1UL<<30) /*!< \c TUNER -- Enable automatic tuner */ #define RIG_FUNC_TUNER (1ULL<<30) /*!< \c TUNER -- Enable automatic tuner */
#define RIG_FUNC_XIT (1UL<<31) /*!< \c XIT -- Transmitter Incremental Tuning */ #define RIG_FUNC_XIT (1ULL<<31) /*!< \c XIT -- Transmitter Incremental Tuning */
#define RIG_FUNC_NB2 (1ULL<<32) /*!< \c NB2 -- 2nd Noise Blanker */
#define RIG_FUNC_DSQL (1ULL<<33) /* DSQL -- DCS Squelch setting */
#define RIG_FUNC_AFLT (1ULL<<34) /* AFLT -- AF Filter setting */
#define RIG_FUNC_BIT35 (1ULL<<35) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT36 (1ULL<<36) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT37 (1ULL<<37) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT38 (1ULL<<38) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT39 (1ULL<<39) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT40 (1ULL<<40) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT41 (1ULL<<41) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT42 (1ULL<<42) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT43 (1ULL<<43) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT44 (1ULL<<44) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT45 (1ULL<<45) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT46 (1ULL<<46) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT47 (1ULL<<47) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT48 (1ULL<<48) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT49 (1ULL<<49) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT50 (1ULL<<50) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT51 (1ULL<<51) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT52 (1ULL<<52) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT53 (1ULL<<53) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT54 (1ULL<<54) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT55 (1ULL<<55) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT56 (1ULL<<56) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT57 (1ULL<<57) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT58 (1ULL<<58) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT59 (1ULL<<59) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT60 (1ULL<<60) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT61 (1ULL<<61) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT62 (1ULL<<62) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT63 (1ULL<<63) /* available for future RIG_FUNC items */
/* 63 is this highest bit number that can be used */
/** /**
* \brief power unit macros * \brief power unit macros
@ -845,39 +878,73 @@ typedef unsigned long setting_t;
* \sa rig_parse_mode(), rig_strrmode() * \sa rig_parse_mode(), rig_strrmode()
* TODO: Add new 8600 modes to rig2icom_mode() and icom2rig_mode() in frame.c * TODO: Add new 8600 modes to rig2icom_mode() and icom2rig_mode() in frame.c
*/ */
typedef enum { #define ULL (uint64_t)
RIG_MODE_NONE = 0, /*!< '' -- None */ typedef uint64_t rmode_t;
RIG_MODE_AM = (1 << 0), /*!< \c AM -- Amplitude Modulation */
RIG_MODE_CW = (1 << 1), /*!< \c CW -- CW "normal" sideband */
RIG_MODE_USB = (1 << 2), /*!< \c USB -- Upper Side Band */
RIG_MODE_LSB = (1 << 3), /*!< \c LSB -- Lower Side Band */
RIG_MODE_RTTY = (1 << 4), /*!< \c RTTY -- Radio Teletype */
RIG_MODE_FM = (1 << 5), /*!< \c FM -- "narrow" band FM */
RIG_MODE_WFM = (1 << 6), /*!< \c WFM -- broadcast wide FM */
RIG_MODE_CWR = (1 << 7), /*!< \c CWR -- CW "reverse" sideband */
RIG_MODE_RTTYR = (1 << 8), /*!< \c RTTYR -- RTTY "reverse" sideband */
RIG_MODE_AMS = (1 << 9), /*!< \c AMS -- Amplitude Modulation Synchronous */
RIG_MODE_PKTLSB = (1 << 10), /*!< \c PKTLSB -- Packet/Digital LSB mode (dedicated port) */
RIG_MODE_PKTUSB = (1 << 11), /*!< \c PKTUSB -- Packet/Digital USB mode (dedicated port) */
RIG_MODE_PKTFM = (1 << 12), /*!< \c PKTFM -- Packet/Digital FM mode (dedicated port) */
RIG_MODE_ECSSUSB = (1 << 13), /*!< \c ECSSUSB -- Exalted Carrier Single Sideband USB */
RIG_MODE_ECSSLSB = (1 << 14), /*!< \c ECSSLSB -- Exalted Carrier Single Sideband LSB */
RIG_MODE_FAX = (1 << 15), /*!< \c FAX -- Facsimile Mode */
RIG_MODE_SAM = (1 << 16), /*!< \c SAM -- Synchronous AM double sideband */
RIG_MODE_SAL = (1 << 17), /*!< \c SAL -- Synchronous AM lower sideband */
RIG_MODE_SAH = (1 << 18), /*!< \c SAH -- Synchronous AM upper (higher) sideband */
RIG_MODE_DSB = (1 << 19), /*!< \c DSB -- Double sideband suppressed carrier */
RIG_MODE_FMN = (1 << 21), /*!< \c FMN -- FM Narrow Kenwood ts990s */
RIG_MODE_PKTAM = (1 << 22), /*!< \c PKTAM -- Packet/Digital AM mode e.g. IC7300 */
RIG_MODE_P25 = (1 << 23), /*!< \c P25 -- APCO/P25 VHF,UHF digital mode IC-R8600 */
RIG_MODE_DSTAR = (1 << 24), /*!< \c D-Star -- VHF,UHF digital mode IC-R8600 */
RIG_MODE_DPMR = (1 << 25), /*!< \c dPMR -- digital PMR, VHF,UHF digital mode IC-R8600 */
RIG_MODE_NXDNVN = (1 << 26), /*!< \c NXDN-VN -- VHF,UHF digital mode IC-R8600 */
RIG_MODE_NXDN_N = (1 << 27), /*!< \c NXDN-N -- VHF,UHF digital mode IC-R8600 */
RIG_MODE_DCR = (1 << 28), /*!< \c DCR -- VHF,UHF digital mode IC-R8600 */
RIG_MODE_TESTS_MAX /*!< \c MUST ALWAYS BE LAST, Max Count for dumpcaps.c */
} rmode_t;
#define RIG_MODE_NONE 0 /*!< '' -- None */
#define RIG_MODE_AM (1ULL << 0) /*!< \c AM -- Amplitude Modulation */
#define RIG_MODE_CW (1ULL << 1) /*!< \c CW -- CW "normal" sideband */
#define RIG_MODE_USB (1ULL << 2) /*!< \c USB -- Upper Side Band */
#define RIG_MODE_LSB (1ULL << 3) /*!< \c LSB -- Lower Side Band */
#define RIG_MODE_RTTY (1ULL << 4) /*!< \c RTTY -- Radio Teletype */
#define RIG_MODE_FM (1ULL << 5) /*!< \c FM -- "narrow" band FM */
#define RIG_MODE_WFM (1ULL << 6) /*!< \c WFM -- broadcast wide FM */
#define RIG_MODE_CWR (1ULL << 7) /*!< \c CWR -- CW "reverse" sideband */
#define RIG_MODE_RTTYR (1ULL << 8) /*!< \c RTTYR -- RTTY "reverse" sideband */
#define RIG_MODE_AMS (1ULL << 9) /*!< \c AMS -- Amplitude Modulation Synchronous */
#define RIG_MODE_PKTLSB (1ULL << 10) /*!< \c PKTLSB -- Packet/Digital LSB mode (dedicated port) */
#define RIG_MODE_PKTUSB (1ULL << 11) /*!< \c PKTUSB -- Packet/Digital USB mode (dedicated port) */
#define RIG_MODE_PKTFM (1ULL << 12) /*!< \c PKTFM -- Packet/Digital FM mode (dedicated port) */
#define RIG_MODE_ECSSUSB (1ULL << 13) /*!< \c ECSSUSB -- Exalted Carrier Single Sideband USB */
#define RIG_MODE_ECSSLSB (1ULL << 14) /*!< \c ECSSLSB -- Exalted Carrier Single Sideband LSB */
#define RIG_MODE_FAX (1ULL << 15) /*!< \c FAX -- Facsimile Mode */
#define RIG_MODE_SAM (1ULL << 16) /*!< \c SAM -- Synchronous AM double sideband */
#define RIG_MODE_SAL (1ULL << 17) /*!< \c SAL -- Synchronous AM lower sideband */
#define RIG_MODE_SAH (1ULL << 18) /*!< \c SAH -- Synchronous AM upper (higher) sideband */
#define RIG_MODE_DSB (1ULL << 19) /*!< \c DSB -- Double sideband suppressed carrier */
#define RIG_MODE_FMN (1ULL << 21) /*!< \c FMN -- FM Narrow Kenwood ts990s */
#define RIG_MODE_PKTAM (1ULL << 22) /*!< \c PKTAM -- Packet/Digital AM mode e.g. IC7300 */
#define RIG_MODE_P25 (1ULL << 23) /*!< \c P25 -- APCO/P25 VHF,UHF digital mode IC-R8600 */
#define RIG_MODE_DSTAR (1ULL << 24) /*!< \c D-Star -- VHF,UHF digital mode IC-R8600 */
#define RIG_MODE_DPMR (1ULL << 25) /*!< \c dPMR -- digital PMR, VHF,UHF digital mode IC-R8600 */
#define RIG_MODE_NXDNVN (1ULL << 26) /*!< \c NXDN-VN -- VHF,UHF digital mode IC-R8600 */
#define RIG_MODE_NXDN_N (1ULL << 27) /*!< \c NXDN-N -- VHF,UHF digital mode IC-R8600 */
#define RIG_MODE_DCR (1ULL << 28) /*!< \c DCR -- VHF,UHF digital mode IC-R8600 */
#define RIG_MODE_AMN (1ULL << 29) /*!< \c AM-N -- Narrow band AM mode IC-R30 */
#define RIG_MODE_PSK (1ULL << 30) /* PSK - Kenwood PSK and others */
#define RIG_MODE_PSKR (1ULL << 31) /* PSKR - Kenwood PSKR and others */
#define RIG_MODE_BIT32 (1ULL << 32) /* reserved for future expansion */
#define RIG_MODE_BIT33 (1ULL << 33) /* reserved for future expansion */
#define RIG_MODE_BIT34 (1ULL << 34) /* reserved for future expansion */
#define RIG_MODE_BIT35 (1ULL << 35) /* reserved for future expansion */
#define RIG_MODE_BIT36 (1ULL << 36) /* reserved for future expansion */
#define RIG_MODE_BIT37 (1ULL << 37) /* reserved for future expansion */
#define RIG_MODE_BIT38 (1ULL << 38) /* reserved for future expansion */
#define RIG_MODE_BIT39 (1ULL << 39) /* reserved for future expansion */
#define RIG_MODE_BIT40 (1ULL << 40) /* reserved for future expansion */
#define RIG_MODE_BIT41 (1ULL << 41) /* reserved for future expansion */
#define RIG_MODE_BIT42 (1ULL << 42) /* reserved for future expansion */
#define RIG_MODE_BIT43 (1ULL << 43) /* reserved for future expansion */
#define RIG_MODE_BIT44 (1ULL << 44) /* reserved for future expansion */
#define RIG_MODE_BIT45 (1ULL << 45) /* reserved for future expansion */
#define RIG_MODE_BIT46 (1ULL << 46) /* reserved for future expansion */
#define RIG_MODE_BIT47 (1ULL << 47) /* reserved for future expansion */
#define RIG_MODE_BIT48 (1ULL << 48) /* reserved for future expansion */
#define RIG_MODE_BIT49 (1ULL << 49) /* reserved for future expansion */
#define RIG_MODE_BIT50 (1ULL << 50) /* reserved for future expansion */
#define RIG_MODE_BIT51 (1ULL << 51) /* reserved for future expansion */
#define RIG_MODE_BIT52 (1ULL << 52) /* reserved for future expansion */
#define RIG_MODE_BIT53 (1ULL << 53) /* reserved for future expansion */
#define RIG_MODE_BIT54 (1ULL << 54) /* reserved for future expansion */
#define RIG_MODE_BIT55 (1ULL << 55) /* reserved for future expansion */
#define RIG_MODE_BIT56 (1ULL << 56) /* reserved for future expansion */
#define RIG_MODE_BIT57 (1ULL << 57) /* reserved for future expansion */
#define RIG_MODE_BIT58 (1ULL << 58) /* reserved for future expansion */
#define RIG_MODE_BIT59 (1ULL << 59) /* reserved for future expansion */
#define RIG_MODE_BIT60 (1ULL << 60) /* reserved for future expansion */
#define RIG_MODE_BIT61 (1ULL << 61) /* reserved for future expansion */
#define RIG_MODE_BIT62 (1ULL << 62) /* reserved for future expansion */
#define RIG_MODE_TESTS_MAX (1ULL << 63) /*!< \c last bit available for 64-bit enum MUST ALWAYS BE LAST, Max Count for dumpcaps.c */
/** /**
* \brief macro for backends, not to be used by rig_set_mode et al. * \brief macro for backends, not to be used by rig_set_mode et al.
@ -2186,7 +2253,7 @@ rigerror HAMLIB_PARAMS((int errnum));
extern HAMLIB_EXPORT(int) extern HAMLIB_EXPORT(int)
rig_setting2idx HAMLIB_PARAMS((setting_t s)); rig_setting2idx HAMLIB_PARAMS((setting_t s));
#define rig_idx2setting(i) (1UL<<(i)) #define rig_idx2setting(i) (1ULL<<(i))
/* /*
* Even if these functions are prefixed with "rig_", they are not rig specific * Even if these functions are prefixed with "rig_", they are not rig specific

View File

@ -153,7 +153,8 @@
#define RIG_MODEL_XG3 RIG_MAKE_MODEL(RIG_KENWOOD, 38) /* Elecraft XG-3 signal generator */ #define RIG_MODEL_XG3 RIG_MAKE_MODEL(RIG_KENWOOD, 38) /* Elecraft XG-3 signal generator */
#define RIG_MODEL_TS990S RIG_MAKE_MODEL(RIG_KENWOOD, 39) #define RIG_MODEL_TS990S RIG_MAKE_MODEL(RIG_KENWOOD, 39)
#define RIG_MODEL_HPSDR RIG_MAKE_MODEL(RIG_KENWOOD, 40) /* OpenHPSDR, PiHPSDR */ #define RIG_MODEL_HPSDR RIG_MAKE_MODEL(RIG_KENWOOD, 40) /* OpenHPSDR, PiHPSDR */
#define RIG_MODEL_THD74 RIG_MAKE_MODEL(RIG_KENWOOD, 41) #define RIG_MODEL_TS890S RIG_MAKE_MODEL(RIG_KENWOOD, 41)
#define RIG_MODEL_THD74 RIG_MAKE_MODEL(RIG_KENWOOD, 42)
/* /*
@ -232,7 +233,8 @@
#define RIG_MODEL_ICR6 RIG_MAKE_MODEL(RIG_ICOM, 77) #define RIG_MODEL_ICR6 RIG_MAKE_MODEL(RIG_ICOM, 77)
#define RIG_MODEL_IC7610 RIG_MAKE_MODEL(RIG_ICOM, 78) #define RIG_MODEL_IC7610 RIG_MAKE_MODEL(RIG_ICOM, 78)
#define RIG_MODEL_ICR8600 RIG_MAKE_MODEL(RIG_ICOM, 79) #define RIG_MODEL_ICR8600 RIG_MAKE_MODEL(RIG_ICOM, 79)
/* next one is 80 */ #define RIG_MODEL_ICR30 RIG_MAKE_MODEL(RIG_ICOM, 80)
/* next one is 81 */
/* /*

View File

@ -86,6 +86,7 @@ static const struct kenwood_id kenwood_id_list[] = {
{ RIG_MODEL_TS590S, 21 }, { RIG_MODEL_TS590S, 21 },
{ RIG_MODEL_TS990S, 22 }, { RIG_MODEL_TS990S, 22 },
{ RIG_MODEL_TS590SG, 23 }, { RIG_MODEL_TS590SG, 23 },
{ RIG_MODEL_TS890S, 24 },
{ RIG_MODEL_NONE, UNKNOWN_ID }, /* end marker */ { RIG_MODEL_NONE, UNKNOWN_ID }, /* end marker */
}; };
@ -133,7 +134,13 @@ rmode_t kenwood_mode_table[KENWOOD_MODE_TABLE_MAX] = {
[6] = RIG_MODE_RTTY, [6] = RIG_MODE_RTTY,
[7] = RIG_MODE_CWR, [7] = RIG_MODE_CWR,
[8] = RIG_MODE_NONE, /* TUNE mode */ [8] = RIG_MODE_NONE, /* TUNE mode */
[9] = RIG_MODE_RTTYR [9] = RIG_MODE_RTTYR,
[10] = RIG_MODE_PSK,
[11] = RIG_MODE_PSKR,
[12] = RIG_MODE_PKTLSB,
[13] = RIG_MODE_PKTUSB,
[14] = RIG_MODE_PKTFM,
[15] = RIG_MODE_PKTAM
}; };
/* /*
@ -1443,6 +1450,16 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
return -RIG_EINVAL; return -RIG_EINVAL;
} }
char c;
if (kmode <= 9)
{
c = '0' + kmode;
}
else
{
c = 'A' + kmode - 10;
}
if (RIG_MODEL_TS990S == rig->caps->rig_model) if (RIG_MODEL_TS990S == rig->caps->rig_model)
{ {
/* The TS990s has targetable read mode but can only set the mode /* The TS990s has targetable read mode but can only set the mode
@ -1451,18 +1468,9 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
setting caps.targetable_vfo to not include setting caps.targetable_vfo to not include
RIG_TARGETABLE_MODE since the toggle is not required for RIG_TARGETABLE_MODE since the toggle is not required for
reading the mode. */ reading the mode. */
char c;
vfo_t curr_vfo; vfo_t curr_vfo;
err = kenwood_get_vfo_main_sub (rig, &curr_vfo); err = kenwood_get_vfo_main_sub (rig, &curr_vfo);
if (err != RIG_OK) return err; if (err != RIG_OK) return err;
if (kmode <= 9)
{
c = '0' + kmode;
}
else
{
c = 'A' + kmode - 10;
}
if (vfo != RIG_VFO_CURR && vfo != curr_vfo) if (vfo != RIG_VFO_CURR && vfo != curr_vfo)
{ {
err = kenwood_set_vfo_main_sub (rig, vfo); err = kenwood_set_vfo_main_sub (rig, vfo);
@ -1478,7 +1486,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
} }
else else
{ {
snprintf(buf, sizeof (buf), "MD%c", '0' + kmode); snprintf(buf, sizeof (buf), "MD%c", c);
err = kenwood_transaction(rig, buf, NULL, 0); err = kenwood_transaction(rig, buf, NULL, 0);
} }
if (err != RIG_OK) return err; if (err != RIG_OK) return err;
@ -2020,11 +2028,28 @@ int kenwood_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
if (!rig) if (!rig)
return -RIG_EINVAL; return -RIG_EINVAL;
char buf[6]; /* longest cmd is GTxxx */ char buf[10]; /* longest cmd is GTxxx */
switch (func) { switch (func) {
case RIG_FUNC_NB: case RIG_FUNC_NB:
snprintf(buf, sizeof (buf), "NB%c", (status == 0) ? '0' : '1'); case RIG_FUNC_NB2:
/* newer Kenwoods have a second noise blanker */
if (RIG_MODEL_TS890S == rig->caps->rig_model) {
switch(func) {
case RIG_FUNC_NB:
snprintf(buf, sizeof (buf), "NB1%c", (status == 0) ? '0' : '1');
break;
case RIG_FUNC_NB2:
snprintf(buf, sizeof (buf), "NB2%c", (status == 0) ? '0' : '1');
break;
default:
rig_debug(RIG_DEBUG_ERR, "%s: expected 0,1, or 2 and got %d\n", __func__, status);
return -RIG_EINVAL;
}
}
else {
snprintf(buf, sizeof (buf), "NB%c", (status == 0) ? '0' : '1');
}
return kenwood_transaction(rig, buf, NULL, 0); return kenwood_transaction(rig, buf, NULL, 0);
case RIG_FUNC_ABM: case RIG_FUNC_ABM:
@ -2135,6 +2160,9 @@ int kenwood_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
case RIG_FUNC_NB: case RIG_FUNC_NB:
return get_kenwood_func(rig, "NB", status); return get_kenwood_func(rig, "NB", status);
case RIG_FUNC_NB2:
return get_kenwood_func(rig, "NB2", status);
case RIG_FUNC_ABM: case RIG_FUNC_ABM:
return get_kenwood_func(rig, "AM", status); return get_kenwood_func(rig, "AM", status);
@ -3448,6 +3476,7 @@ DECLARE_INITRIG_BACKEND(kenwood)
rig_register(&f6k_caps); rig_register(&f6k_caps);
rig_register(&pihpsdr_caps); rig_register(&pihpsdr_caps);
rig_register(&ts890s_caps);
return RIG_OK; return RIG_OK;
} }

View File

@ -27,7 +27,7 @@
#include <string.h> #include <string.h>
#include "token.h" #include "token.h"
#define BACKEND_VER "1.0" #define BACKEND_VER "1.1"
#define EOM_KEN ';' #define EOM_KEN ';'
#define EOM_TH '\r' #define EOM_TH '\r'
@ -204,6 +204,7 @@ extern const struct rig_caps transfox_caps;
extern const struct rig_caps f6k_caps; extern const struct rig_caps f6k_caps;
extern const struct rig_caps pihpsdr_caps; extern const struct rig_caps pihpsdr_caps;
extern const struct rig_caps ts890s_caps;
/* use when not interested in the answer, but want to check its len */ /* use when not interested in the answer, but want to check its len */
static int inline kenwood_simple_transaction(RIG *rig, const char *cmd, size_t expected) static int inline kenwood_simple_transaction(RIG *rig, const char *cmd, size_t expected)

View File

@ -1,5 +1,6 @@
/* /*
* Hamlib Kenwood backend - TS480 description * Hamlib Kenwood backend - TS480 description
* Hamlib Kenwood backend - TS890s description
* Copyright (c) 2000-2004 by Stephane Fillod and Juergen Rinas * Copyright (c) 2000-2004 by Stephane Fillod and Juergen Rinas
* *
* *
@ -31,6 +32,8 @@
#include "kenwood.h" #include "kenwood.h"
#define TS480_ALL_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR) #define TS480_ALL_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR)
#define TS890_ALL_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_CW|RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_RTTY|RIG_MODE_CWR|RIG_MODE_RTTYR|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM)
#define TS480_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) #define TS480_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY)
#define TS480_AM_TX_MODES RIG_MODE_AM #define TS480_AM_TX_MODES RIG_MODE_AM
#define TS480_VFO (RIG_VFO_A|RIG_VFO_B) #define TS480_VFO (RIG_VFO_A|RIG_VFO_B)
@ -252,6 +255,10 @@ static struct kenwood_priv_caps ts480_priv_caps = {
.cmdtrm = EOM_KEN, .cmdtrm = EOM_KEN,
}; };
static struct kenwood_priv_caps ts890s_priv_caps = {
.cmdtrm = EOM_KEN,
};
/* /*
* ts480 rig capabilities. * ts480 rig capabilities.
@ -405,6 +412,160 @@ const struct rig_caps ts480_caps = {
.get_func = kenwood_get_func, .get_func = kenwood_get_func,
}; };
/*
* ts890s rig capabilities.
* Copied from ts480_caps
* Where you see TS480 in this the values have not been verified
* Notice that some rigs share the same functions.
* Also this struct is READONLY!
*/
const struct rig_caps ts890s_caps = {
.rig_model = RIG_MODEL_TS890S,
.model_name = "TS-890S",
.mfg_name = "Kenwood",
.version = BACKEND_VER ".2",
.copyright = "LGPL",
.status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG_MICDATA,
.dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 4800,
.serial_rate_max = 115200,
.serial_data_bits = 8,
.serial_stop_bits = 1,
.serial_parity = RIG_PARITY_NONE,
.serial_handshake = RIG_HANDSHAKE_NONE,
.write_delay = 0,
.post_write_delay = 0,
.timeout = 200,
.retry = 10,
.preamp = {12, RIG_DBLST_END,},
.attenuator = {12, RIG_DBLST_END,},
.max_rit = kHz (9.99),
.max_xit = kHz (9.99),
.max_ifshift = Hz (0),
.targetable_vfo = RIG_TARGETABLE_FREQ,
.transceive = RIG_TRN_RIG,
.rx_range_list1 = {
{kHz(100), Hz(59999999), TS890_ALL_MODES, -1, -1, TS480_VFO},
RIG_FRNG_END,
}, /*!< Receive frequency range list for ITU region 1 */
.tx_range_list1 = {
{kHz(1810), kHz(1850), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */
{kHz(1810), kHz(1850), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */
{kHz(3500), kHz(3800), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(3500), kHz(3800), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(7), kHz(7200), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(7), kHz(7200), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
RIG_FRNG_END,
}, /*!< Transmit frequency range list for ITU region 1 */
.rx_range_list2 = {
{kHz(100), Hz(59999999), TS890_ALL_MODES, -1, -1, TS480_VFO},
RIG_FRNG_END,
}, /*!< Receive frequency range list for ITU region 2 */
.tx_range_list2 = {
{kHz(1800), MHz(2) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */
{kHz(1800), MHz(2) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */
{kHz(3500), MHz(4) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(3500), MHz(4) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{kHz(5250), kHz(5450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(5250), kHz(5450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(7), kHz(7300), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(7), kHz(7300), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
{MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO},
{MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO},
RIG_FRNG_END,
}, /*!< Transmit frequency range list for ITU region 2 */
.tuning_steps = {
{TS890_ALL_MODES,kHz(1)},
{TS890_ALL_MODES,Hz(2500)},
{TS890_ALL_MODES,kHz(5)},
{TS890_ALL_MODES,Hz(6250)},
{TS890_ALL_MODES,kHz(10)},
{TS890_ALL_MODES,Hz(12500)},
{TS890_ALL_MODES,kHz(15)},
{TS890_ALL_MODES,kHz(20)},
{TS890_ALL_MODES,kHz(25)},
{TS890_ALL_MODES,kHz(30)},
{TS890_ALL_MODES,kHz(100)},
{TS890_ALL_MODES,kHz(500)},
{TS890_ALL_MODES,MHz(1)},
{TS890_ALL_MODES,0}, /* any tuning step */
RIG_TS_END,
},
/* mode/filter list, remember: order matters! */
.filters = {
{RIG_MODE_SSB, kHz(2.4)},
{RIG_MODE_CW, Hz(200)},
{RIG_MODE_RTTY, Hz(500)},
{RIG_MODE_AM, kHz(9)},
{RIG_MODE_FM, kHz(14)},
RIG_FLT_END,
},
.priv = (void *) &ts890s_priv_caps,
.rig_init = kenwood_init,
.rig_cleanup = kenwood_cleanup,
.set_freq = kenwood_set_freq,
.get_freq = kenwood_get_freq,
.set_rit = kenwood_set_rit, /* FIXME should this switch to rit mode or just set the frequency? */
.get_rit = kenwood_get_rit,
.set_xit = kenwood_set_xit, /* FIXME should this switch to xit mode or just set the frequency? */
.get_xit = kenwood_get_xit,
.set_mode = kenwood_set_mode,
.get_mode = kenwood_get_mode,
.set_vfo = kenwood_set_vfo,
.get_vfo = kenwood_get_vfo_if,
.set_split_vfo = kenwood_set_split_vfo,
.get_split_vfo = kenwood_get_split_vfo_if,
.get_ptt = kenwood_get_ptt,
.set_ptt = kenwood_set_ptt,
.get_dcd = kenwood_get_dcd,
.set_powerstat = kenwood_set_powerstat,
.get_powerstat = kenwood_get_powerstat,
.get_info = kenwood_ts480_get_info,
.reset = kenwood_reset,
.set_ant = kenwood_set_ant,
.get_ant = kenwood_get_ant,
.scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */
.has_set_level = TS480_LEVEL_ALL,
.has_get_level = TS480_LEVEL_ALL,
.set_level = kenwood_ts480_set_level,
.get_level = kenwood_ts480_get_level,
.has_get_func = TS480_FUNC_ALL,
.has_set_func = TS480_FUNC_ALL,
.set_func = kenwood_set_func,
.get_func = kenwood_get_func,
};
/* /*
* my notes: * my notes:

View File

@ -319,7 +319,6 @@ static struct
{ RIG_MODE_LSB, "LSB" }, { RIG_MODE_LSB, "LSB" },
{ RIG_MODE_RTTY, "RTTY" }, { RIG_MODE_RTTY, "RTTY" },
{ RIG_MODE_FM, "FM" }, { RIG_MODE_FM, "FM" },
{ RIG_MODE_FMN, "FMN" },
{ RIG_MODE_WFM, "WFM" }, { RIG_MODE_WFM, "WFM" },
{ RIG_MODE_CWR, "CWR" }, { RIG_MODE_CWR, "CWR" },
{ RIG_MODE_RTTYR, "RTTYR" }, { RIG_MODE_RTTYR, "RTTYR" },
@ -334,6 +333,17 @@ static struct
{ RIG_MODE_SAL, "SAL" }, { RIG_MODE_SAL, "SAL" },
{ RIG_MODE_SAH, "SAH" }, { RIG_MODE_SAH, "SAH" },
{ RIG_MODE_DSB, "DSB"}, { RIG_MODE_DSB, "DSB"},
{ RIG_MODE_FMN, "FMN" },
{ RIG_MODE_PKTAM, "PKTAM"},
{ RIG_MODE_P25, "P25"},
{ RIG_MODE_DSTAR, "D-STAR"},
{ RIG_MODE_DPMR, "DPMR"},
{ RIG_MODE_NXDNVN, "NXDN-VN"},
{ RIG_MODE_NXDN_N, "NXDN-N"},
{ RIG_MODE_DCR, "DCR"},
{ RIG_MODE_AMN, "AMN"},
{ RIG_MODE_PSK, "PSK"},
{ RIG_MODE_PSKR, "PSKR"},
{ RIG_MODE_NONE, "" }, { RIG_MODE_NONE, "" },
}; };
@ -374,7 +384,7 @@ const char * HAMLIB_API rig_strrmode(rmode_t mode)
{ {
int i; int i;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called mode=0x%"PRXll"\n", __func__, mode);
if (mode == RIG_MODE_NONE) if (mode == RIG_MODE_NONE)
{ {
@ -506,6 +516,8 @@ static struct
{ RIG_FUNC_TBURST, "TBURST" }, { RIG_FUNC_TBURST, "TBURST" },
{ RIG_FUNC_TUNER, "TUNER" }, { RIG_FUNC_TUNER, "TUNER" },
{ RIG_FUNC_XIT, "XIT" }, { RIG_FUNC_XIT, "XIT" },
{ RIG_FUNC_DSQL, "DSQL" },
{ RIG_FUNC_AFLT, "AFLT" },
{ RIG_FUNC_NONE, "" }, { RIG_FUNC_NONE, "" },
}; };

View File

@ -100,22 +100,28 @@ extern HAMLIB_EXPORT(void) rig_force_cache_timeout(struct timeval *tv);
#ifdef PRId64 #ifdef PRId64
/** \brief printf(3) format to be used for long long (64bits) type */ /** \brief printf(3) format to be used for long long (64bits) type */
# define PRIll PRId64 # define PRIll PRId64
# define PRXll PRIx64
#else #else
# ifdef FBSD4 # ifdef FBSD4
# define PRIll "qd" # define PRIll "qd"
# define PRXll "qx"
# else # else
# define PRIll "lld" # define PRIll "lld"
# define PRXll "lld"
# endif # endif
#endif #endif
#ifdef SCNd64 #ifdef SCNd64
/** \brief scanf(3) format to be used for long long (64bits) type */ /** \brief scanf(3) format to be used for long long (64bits) type */
# define SCNll SCNd64 # define SCNll SCNd64
# define SCNXll SCNx64
#else #else
# ifdef FBSD4 # ifdef FBSD4
# define SCNll "qd" # define SCNll "qd"
# define SCNXll "qx"
# else # else
# define SCNll "lld" # define SCNll "lld"
# define SCNXll "llx"
# endif # endif
#endif #endif

View File

@ -42,6 +42,8 @@ static const tone_t static_full_ctcss_list[] =
FULL_CTCSS_LIST FULL_CTCSS_LIST
}; };
#define FULL_CTCSS_LIST_COUNT 52
/* /*
* 50 CTCSS sub-audible tones, from 67.0Hz to 254.1Hz * 50 CTCSS sub-audible tones, from 67.0Hz to 254.1Hz
@ -63,6 +65,8 @@ static const tone_t static_common_ctcss_list[] =
COMMON_CTCSS_LIST COMMON_CTCSS_LIST
}; };
#define COMMON_CTCSS_LIST_COUNT 50
/* /*
* 104 DCS codes * 104 DCS codes
@ -84,6 +88,7 @@ static const tone_t static_common_dcs_list[] =
COMMON_DCS_LIST COMMON_DCS_LIST
}; };
#define COMMON_DCS_LIST_COUNT 104
/* /*
* 106 DCS codes * 106 DCS codes
@ -105,6 +110,7 @@ static const tone_t static_full_dcs_list[] =
FULL_DCS_LIST FULL_DCS_LIST
}; };
#define FULL_DCS_LIST_COUNT 106
/* /*
* These arrays cannot be shared on Win32 systems, * These arrays cannot be shared on Win32 systems,

View File

@ -669,7 +669,7 @@ int dump_csv_chan(RIG *rig,
if (mem_caps->funcs) if (mem_caps->funcs)
{ {
fprintf(f, "%lx%c", chan.funcs, csv_sep); fprintf(f, "%"PRXll"%c", chan.funcs, csv_sep);
} }
if (mem_caps->ctcss_tone) if (mem_caps->ctcss_tone)
@ -940,7 +940,7 @@ int set_channel_data(RIG *rig,
if (i >= 0) if (i >= 0)
{ {
sscanf(line_data_list[i], "%lx", &chan->funcs); sscanf(line_data_list[i], "%"SCNXll, &chan->funcs);
} }
} }

View File

@ -3788,7 +3788,7 @@ declare_proto_rig(dump_state)
for (i = 0; i < FRQRANGESIZ && !RIG_IS_FRNG_END(rs->rx_range_list[i]); i++) for (i = 0; i < FRQRANGESIZ && !RIG_IS_FRNG_END(rs->rx_range_list[i]); i++)
{ {
fprintf(fout, fprintf(fout,
"%"FREQFMT" %"FREQFMT" 0x%x %d %d 0x%x 0x%x\n", "%"FREQFMT" %"FREQFMT" 0x%"PRXll" %d %d 0x%x 0x%x\n",
rs->rx_range_list[i].start, rs->rx_range_list[i].start,
rs->rx_range_list[i].end, rs->rx_range_list[i].end,
rs->rx_range_list[i].modes, rs->rx_range_list[i].modes,
@ -3803,7 +3803,7 @@ declare_proto_rig(dump_state)
for (i = 0; i < FRQRANGESIZ && !RIG_IS_FRNG_END(rs->tx_range_list[i]); i++) for (i = 0; i < FRQRANGESIZ && !RIG_IS_FRNG_END(rs->tx_range_list[i]); i++)
{ {
fprintf(fout, fprintf(fout,
"%"FREQFMT" %"FREQFMT" 0x%x %d %d 0x%x 0x%x\n", "%"FREQFMT" %"FREQFMT" 0x%"PRXll" %d %d 0x%x 0x%x\n",
rs->tx_range_list[i].start, rs->tx_range_list[i].start,
rs->tx_range_list[i].end, rs->tx_range_list[i].end,
rs->tx_range_list[i].modes, rs->tx_range_list[i].modes,
@ -3818,7 +3818,7 @@ declare_proto_rig(dump_state)
for (i = 0; i < TSLSTSIZ && !RIG_IS_TS_END(rs->tuning_steps[i]); i++) for (i = 0; i < TSLSTSIZ && !RIG_IS_TS_END(rs->tuning_steps[i]); i++)
{ {
fprintf(fout, fprintf(fout,
"0x%x %ld\n", "0x%"PRXll" %ld\n",
rs->tuning_steps[i].modes, rs->tuning_steps[i].modes,
rs->tuning_steps[i].ts); rs->tuning_steps[i].ts);
} }
@ -3828,7 +3828,7 @@ declare_proto_rig(dump_state)
for (i = 0; i < FLTLSTSIZ && !RIG_IS_FLT_END(rs->filters[i]); i++) for (i = 0; i < FLTLSTSIZ && !RIG_IS_FLT_END(rs->filters[i]); i++)
{ {
fprintf(fout, fprintf(fout,
"0x%x %ld\n", "0x%"PRXll" %ld\n",
rs->filters[i].modes, rs->filters[i].modes,
rs->filters[i].width); rs->filters[i].width);
} }
@ -3858,12 +3858,12 @@ declare_proto_rig(dump_state)
fprintf(fout, "\n"); fprintf(fout, "\n");
fprintf(fout, "0x%lx\n", rs->has_get_func); fprintf(fout, "0x%"PRXll"\n", rs->has_get_func);
fprintf(fout, "0x%lx\n", rs->has_set_func); fprintf(fout, "0x%"PRXll"\n", rs->has_set_func);
fprintf(fout, "0x%lx\n", rs->has_get_level); fprintf(fout, "0x%"PRXll"\n", rs->has_get_level);
fprintf(fout, "0x%lx\n", rs->has_set_level); fprintf(fout, "0x%"PRXll"\n", rs->has_set_level);
fprintf(fout, "0x%lx\n", rs->has_get_parm); fprintf(fout, "0x%"PRXll"\n", rs->has_get_parm);
fprintf(fout, "0x%lx\n", rs->has_set_parm); fprintf(fout, "0x%"PRXll"\n", rs->has_set_parm);
#if 0 #if 0
gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */ gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */

View File

@ -103,7 +103,7 @@ int sprintf_vfo(char *str, vfo_t vfo)
int sprintf_mode(char *str, rmode_t mode) int sprintf_mode(char *str, rmode_t mode)
{ {
int i, len = 0; uint64_t i, len = 0;
*str = '\0'; *str = '\0';
@ -112,9 +112,9 @@ int sprintf_mode(char *str, rmode_t mode)
return 0; return 0;
} }
for (i = 0; i < 30; i++) for (i = 0; i < 63; i++)
{ {
const char *ms = rig_strrmode(mode & (1UL << i)); const char *ms = rig_strrmode(mode & (1ULL << i));
if (!ms || !ms[0]) if (!ms || !ms[0])
{ {
@ -132,7 +132,7 @@ int sprintf_mode(char *str, rmode_t mode)
int sprintf_func(char *str, setting_t func) int sprintf_func(char *str, setting_t func)
{ {
int i, len = 0; uint64_t i, len = 0;
*str = '\0'; *str = '\0';

View File

@ -9,6 +9,8 @@
#include <hamlib/rig.h> #include <hamlib/rig.h>
#include "misc.h"
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
# include "config.h" # include "config.h"
#endif #endif
@ -401,7 +403,7 @@ int main(int argc, char *argv[])
if (retcode == RIG_OK) if (retcode == RIG_OK)
{ {
printf("rig_get_mode: mode = %i \n", rmode); printf("rig_get_mode: mode = %"PRIll"\n", rmode);
} }
else else
{ {

View File

@ -501,19 +501,28 @@ int g313_get_conf(RIG *rig, token_t token, char *val)
static void g313_audio_callback(short* buffer, int count, void* arg) static void g313_audio_callback(short* buffer, int count, void* arg)
{ {
struct g313_priv_data *priv = (struct g313_priv_data*)arg; struct g313_priv_data *priv = (struct g313_priv_data*)arg;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
write(priv->audio_buf.fd, buffer, count*sizeof(short)); write(priv->audio_buf.fd, buffer, count*sizeof(short));
#pragma GCC diagnostic pop
} }
static void g313_if_callback(short* buffer, int count, void* arg) static void g313_if_callback(short* buffer, int count, void* arg)
{ {
struct g313_priv_data *priv = (struct g313_priv_data*)arg; struct g313_priv_data *priv = (struct g313_priv_data*)arg;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
write(priv->if_buf.fd, buffer, count*sizeof(short)); write(priv->if_buf.fd, buffer, count*sizeof(short));
#pragma GCC diagnostic pop
} }
static void g313_spectrum_callback(float* buffer, int count, void* arg) static void g313_spectrum_callback(float* buffer, int count, void* arg)
{ {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
struct g313_priv_data *priv = (struct g313_priv_data*)arg; struct g313_priv_data *priv = (struct g313_priv_data*)arg;
write(priv->spectrum_buf.fd, buffer, count*sizeof(float)); write(priv->spectrum_buf.fd, buffer, count*sizeof(float));
#pragma GCC diagnostic pop
} }
const struct rig_caps g313_caps = const struct rig_caps g313_caps =

4
yaesu/ft857.c Normal file → Executable file
View File

@ -678,7 +678,9 @@ static int ft857_get_smeter_level(RIG *rig, value_t *val)
if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_RX_STATUS)) < 0) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_RX_STATUS)) < 0)
return n; return n;
val->i = n = (p->rx_status & 0x0F) * 6 - 20; // Convert S level to dB n = (p->rx_status & 0x0F); // S level returned
if (n >= 9) val->i = (n-9)*10;
else val->i = n*6-54;
return RIG_OK; return RIG_OK;
} }