IC-R75 patch from Mark J. Fine

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1817 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.2
Stéphane Fillod, F8CFE 2004-08-21 23:53:39 +00:00
rodzic 7cfb48768b
commit 7a3f304db9
5 zmienionych plików z 332 dodań i 29 usunięć

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib CI-V backend - low level communication routines
* Copyright (c) 2000-2003 by Stephane Fillod
*
* $Id: frame.c,v 1.23 2003-08-17 22:39:07 fillods Exp $
* $Id: frame.c,v 1.24 2004-08-21 23:53:38 fillods Exp $
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
@ -293,10 +293,13 @@ int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width,
switch (mode) {
case RIG_MODE_AM: icmode = S_AM; break;
case RIG_MODE_AMS: icmode = S_AMS; break;
case RIG_MODE_CW: icmode = S_CW; break;
case RIG_MODE_CWR: icmode = S_CWR; break;
case RIG_MODE_USB: icmode = S_USB; break;
case RIG_MODE_LSB: icmode = S_LSB; break;
case RIG_MODE_RTTY: icmode = S_RTTY; break;
case RIG_MODE_RTTYR:icmode = S_RTTYR; break;
case RIG_MODE_FM: icmode = S_FM; break;
case RIG_MODE_WFM: icmode = S_WFM; break;
default:
@ -335,7 +338,9 @@ void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, pbwidth_t
switch (md) {
case S_AM: *mode = RIG_MODE_AM; break;
case S_AMS: *mode = RIG_MODE_AMS; break;
case S_CW: *mode = RIG_MODE_CW; break;
case S_CWR: *mode = RIG_MODE_CWR; break;
case S_FM: if (rig->caps->rig_model == RIG_MODEL_ICR7000
&& pd == 0x00) {
*mode = RIG_MODE_USB;
@ -348,6 +353,7 @@ void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, pbwidth_t
case S_USB: *mode = RIG_MODE_USB; break;
case S_LSB: *mode = RIG_MODE_LSB; break;
case S_RTTY: *mode = RIG_MODE_RTTY; break;
case S_RTTYR: *mode = RIG_MODE_RTTYR; break;
case 0xff: *mode = RIG_MODE_NONE; break; /* blank mem channel */
default:
@ -355,6 +361,11 @@ void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, pbwidth_t
md);
*mode = RIG_MODE_NONE;
}
/* IC-R75 returns passband indexes 1-wide, 2-normal,3-narrow */
if (rig->caps->rig_model == RIG_MODEL_ICR75)
pd = 3-pd;
switch (pd) {
case 0x00: *width = rig_passband_narrow(rig, *mode); break;
case 0x01: *width = rig_passband_normal(rig, *mode); break;

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib CI-V backend - main file
* Copyright (c) 2000-2004 by Stephane Fillod
*
* $Id: icom.c,v 1.86 2004-05-18 06:55:05 fillods Exp $
* $Id: icom.c,v 1.87 2004-08-21 23:53:39 fillods Exp $
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
@ -608,6 +608,26 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
else
icom_val = val.i;
/* convert values to 0 .. 255 range */
if (rig->caps->rig_model == RIG_MODEL_ICR75) {
switch (level) {
case RIG_LEVEL_NR:
icom_val = val.f * 240;
break;
case RIG_LEVEL_CWPITCH:
icom_val = ((float)val.i - 300.0) / 600.0 * 255;
break;
case RIG_LEVEL_PBT_IN:
case RIG_LEVEL_PBT_OUT:
icom_val = (val.f / 10.0) + 128;
if (icom_val > 255)
icom_val = 255;
break;
default:
break;
}
}
/*
* Most of the time, the data field is a 3 digit BCD,
* but in *big endian* order: 0000..0255
@ -704,6 +724,10 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
case RIG_LEVEL_AGC:
lvl_cn = C_CTL_FUNC;
lvl_sc = S_FUNC_AGC;
if (rig->caps->rig_model == RIG_MODEL_ICR75) {
lvl_len = 1;
lvlbuf[0] = val.i;
}
break;
case RIG_LEVEL_BKINDL:
lvl_cn = C_CTL_LVL;
@ -767,6 +791,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
* sort the switch cases with the most frequent first
*/
switch (level) {
case RIG_LEVEL_STRENGTH:
case RIG_LEVEL_RAWSTR:
lvl_cn = C_RD_SQSM;
lvl_sc = S_SML;
@ -775,7 +800,6 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
lvl_cn = C_RD_SQSM;
lvl_sc = S_SQL;
break;
case RIG_LEVEL_PREAMP:
lvl_cn = C_CTL_FUNC;
lvl_sc = S_FUNC_PAMP;
@ -892,18 +916,19 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
*/
icom_val = from_bcd_be(lvlbuf+cmdhead, lvl_len*2);
switch (level) {
case RIG_LEVEL_RAWSTR:
val->i = icom_val;
break;
case RIG_LEVEL_STRENGTH:
val->i = (int)rig_raw2val(icom_val,&rig->caps->str_cal);
break;
case RIG_LEVEL_SQLSTAT:
/*
* 0x00=sql closed, 0x01=sql open
*/
val->i = icom_val;
break;
case RIG_LEVEL_PREAMP:
if (icom_val == 0) {
val->i = 0;
@ -924,6 +949,27 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
val->i = icom_val;
}
/* convert values from 0 .. 255 range */
if (rig->caps->rig_model == RIG_MODEL_ICR75) {
switch (level) {
case RIG_LEVEL_NR:
val->f = (float)icom_val / 240;
break;
case RIG_LEVEL_CWPITCH:
val->i = ((float)icom_val / 255.0 * 600.0) + 300.0;
break;
case RIG_LEVEL_PBT_IN:
case RIG_LEVEL_PBT_OUT:
if (icom_val == 255)
val->f = 1280.0;
else
val->f = (float)(icom_val - 128) * 10.0;
break;
default:
break;
}
}
rig_debug(RIG_DEBUG_TRACE,"icom_get_level: %d %d %d %f\n", lvl_len,
icom_val, val->i, val->f);
@ -1837,6 +1883,185 @@ int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
return RIG_OK;
}
/*
* icom_set_parm
* Assumes rig!=NULL
*/
int icom_set_parm(RIG *rig, setting_t parm, value_t val)
{
unsigned char prmbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN];
int ack_len, prm_len;
int prm_cn, prm_sc;
int icom_val;
int retval;
int min,hr,sec;
switch (parm) {
case RIG_PARM_ANN:
if ((val.i == RIG_ANN_FREQ) || (val.i == RIG_ANN_RXMODE)) {
prm_cn = C_CTL_ANN;
prm_sc = val.i;
prm_len = 0;
}
else {
if ((val.i == RIG_ANN_ENG)||(val.i == RIG_ANN_JAP)) {
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
prm_len = 2;
prmbuf[0] = S_PRM_LANG;
prmbuf[1] = (val.i == RIG_ANN_ENG ? 0 : 1);
}
else {
rig_debug(RIG_DEBUG_ERR,"Unsupported set_parm_ann %d\n", val.i);
return -RIG_EINVAL;
}
}
break;
case RIG_PARM_APO:
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
hr = (float)val.i/60.0;
min = val.i - (hr*60);
prm_len = 3;
prmbuf[0] = S_PRM_SLPTM;
to_bcd_be(prmbuf+1, (long long)hr, 2);
to_bcd_be(prmbuf+2, (long long)min, 2);
break;
case RIG_PARM_BACKLIGHT:
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
icom_val = val.f * 255;
prm_len = 3;
prmbuf[0] = S_PRM_BACKLT;
to_bcd_be(prmbuf+1, (long long)icom_val, (prm_len-1)*2);
break;
case RIG_PARM_BEEP:
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
prm_len = 2;
prmbuf[0] = S_PRM_BEEP;
prmbuf[1] = val.i;
break;
case RIG_PARM_TIME:
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
hr = (float)val.i/3600.0;
min = (float)(val.i - (hr*3600))/60.0;
sec = (val.i - (hr*3600) - (min*60));
prm_len = 4;
prmbuf[0] = S_PRM_TIME;
to_bcd_be(prmbuf+1, (long long)hr, 2);
to_bcd_be(prmbuf+2, (long long)min, 2);
to_bcd_be(prmbuf+3, (long long)sec, 2);
break;
default:
rig_debug(RIG_DEBUG_ERR,"Unsupported set_parm %d\n", parm);
return -RIG_EINVAL;
}
retval = icom_transaction(rig, prm_cn, prm_sc, prmbuf, prm_len,
ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
if (ack_len != 1) {
rig_debug(RIG_DEBUG_ERR,"icom_set_parm: wrong frame len=%d\n",
ack_len);
return -RIG_EPROTO;
}
return RIG_OK;
}
/*
* icom_get_parm
* Assumes rig!=NULL
*/
int icom_get_parm(RIG *rig, setting_t parm, value_t *val)
{
unsigned char prmbuf[MAXFRAMELEN], resbuf[MAXFRAMELEN];
int prm_len, res_len;
int prm_cn, prm_sc;
int icom_val;
int cmdhead;
int retval;
int min,hr,sec;
switch (parm) {
case RIG_PARM_APO:
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
prm_len = 1;
prmbuf[0] = S_PRM_SLPTM;
break;
case RIG_PARM_BACKLIGHT:
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
prm_len = 1;
prmbuf[0] = S_PRM_BACKLT;
break;
case RIG_PARM_BEEP:
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
prm_len = 1;
prmbuf[0] = S_PRM_BEEP;
break;
case RIG_PARM_TIME:
prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
prm_len = 1;
prmbuf[0] = S_PRM_TIME;
break;
default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get_parm %d", parm);
return -RIG_EINVAL;
}
retval = icom_transaction (rig, prm_cn, prm_sc, prmbuf, prm_len,
resbuf, &res_len);
if (retval != RIG_OK)
return retval;
/*
* strbuf should contain Cn,Sc,[pn],Data area
*/
cmdhead = (prm_sc == -1) ? 1:3;
res_len -= cmdhead;
if (resbuf[0] != ACK && resbuf[0] != prm_cn) {
rig_debug(RIG_DEBUG_ERR,"icom_get_level: ack NG (%#.2x), "
"len=%d\n", resbuf[0],res_len);
return -RIG_ERJCTED;
}
switch (parm) {
case RIG_PARM_APO:
hr = from_bcd_be(resbuf+cmdhead, 2);
min = from_bcd_be(resbuf+cmdhead+1, 2);
icom_val = (hr*60)+min;
val->i = icom_val;
break;
case RIG_PARM_TIME:
hr = from_bcd_be(resbuf+cmdhead, 2);
min = from_bcd_be(resbuf+cmdhead+1, 2);
sec = from_bcd_be(resbuf+cmdhead+2, 2);
icom_val = (hr*3600)+(min*60)+sec;
val->i = icom_val;
break;
default:
icom_val = from_bcd_be(resbuf+cmdhead, res_len*2);
if (RIG_PARM_IS_FLOAT(parm))
val->f = (float)icom_val/255;
else
val->i = icom_val;
}
rig_debug(RIG_DEBUG_TRACE,"icom_get_parm: %d %d %d %f\n", res_len,
icom_val, val->i, val->f);
return RIG_OK;
}
/*
* icom_set_ctcss_tone
* Assumes rig!=NULL, rig->state.priv!=NULL
@ -2054,6 +2279,19 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
unsigned char ackbuf[MAXFRAMELEN];
int ack_len, retval;
/* r75 has no way to get power status, so fake it */
if (rig->caps->rig_model == RIG_MODEL_ICR75) {
retval = icom_transaction(rig, C_RD_MODE, -1, NULL, 0,
ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
*status = ((ack_len == 3)&&(ackbuf[0] == C_RD_MODE)) ?
RIG_POWER_ON : RIG_POWER_OFF;
return RIG_OK;
}
retval = icom_transaction(rig, C_SET_PWR, -1, NULL, 0,
ackbuf, &ack_len);
if (retval != RIG_OK)
@ -2144,6 +2382,7 @@ int icom_set_ant(RIG * rig, vfo_t vfo, ant_t ant)
unsigned char antarg;
unsigned char ackbuf[MAXFRAMELEN];
int ack_len, retval, i_ant;
int ant_len;
rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
@ -2154,8 +2393,9 @@ int icom_set_ant(RIG * rig, vfo_t vfo, ant_t ant)
i_ant = ant == RIG_ANT_1 ? 0: 1;
antarg = 0;
ant_len = (rig->caps->rig_model == RIG_MODEL_ICR75) ? 0 : 1;
retval = icom_transaction (rig, C_CTL_ANT, i_ant,
&antarg, 1, ackbuf, &ack_len);
&antarg, ant_len, ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
@ -2182,6 +2422,14 @@ int icom_get_ant(RIG *rig, vfo_t vfo, ant_t *ant)
if (retval != RIG_OK)
return retval;
if (rig->caps->rig_model == RIG_MODEL_ICR75) {
if (ack_len != 2 || ackbuf[0] != C_CTL_ANT) {
rig_debug(RIG_DEBUG_ERR,"icom_get_ant: ack NG (%#.2x), "
"len=%d\n", ackbuf[0],ack_len);
return -RIG_ERJCTED;
}
}
else
if (ack_len != 1 || ackbuf[0] != ACK) {
rig_debug(RIG_DEBUG_ERR,"icom_get_ant: ack NG (%#.2x), "
"len=%d\n", ackbuf[0],ack_len);

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib CI-V backend - main header
* Copyright (c) 2000-2004 by Stephane Fillod
*
* $Id: icom.h,v 1.67 2004-08-16 20:57:37 fillods Exp $
* $Id: icom.h,v 1.68 2004-08-21 23:53:39 fillods Exp $
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
@ -147,6 +147,8 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
int icom_set_parm(RIG *rig, setting_t parm, value_t val);
int icom_get_parm(RIG *rig, setting_t parm, value_t *val);
int icom_set_conf(RIG *rig, token_t token, const char *val);
int icom_get_conf(RIG *rig, token_t token, char *val);
int icom_set_powerstat(RIG *rig, powerstat_t status);

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib CI-V backend - defines for the ICOM "CI-V" interface.
* Copyright (c) 2000-2002 by Stephane Fillod
*
* $Id: icom_defs.h,v 1.14 2002-03-10 23:39:35 fillods Exp $
* $Id: icom_defs.h,v 1.15 2004-08-21 23:53:39 fillods Exp $
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
@ -102,6 +102,9 @@
#define S_RTTY 0x04 /* Set to RTTY */
#define S_FM 0x05 /* Set to FM */
#define S_WFM 0x06 /* Set to Wide FM */
#define S_CWR 0x07 /* Set to CW Reverse */
#define S_RTTYR 0x08 /* Set to RTTY Reverse */
#define S_AMS 0x11 /* Set to AMS */
#define S_R7000_SSB 0x05 /* Set to SSB on R-7000 */
#define PD_WIDE 0x01 /* Wide */
@ -141,6 +144,8 @@
#define S_SCAN_SLCTN 0x23 /* Selected number memory scan */
#define S_SCAN_SLCTM 0x24 /* Selected mode memory scan */
#define S_SCAN_PRIO 0x42 /* Priority / window scan */
#define S_SCAN_NSLCT 0xB0 /* Set as non select channel */
#define S_SCAN_SLCT 0xB1 /* Set as select channel */
#define S_SCAN_RSMOFF 0xD0 /* Set scan resume OFF */
#define S_SCAN_RSMON 0xD3 /* Set scan resume ON */
@ -260,6 +265,8 @@
*/
#define S_MEM_CNTNT 0x00
#define S_MEM_CNTNT_SLCT 0x01
#define S_MEM_FILT_SLCT 0x01
#define S_MEM_MODE_SLCT 0x02
/* For IC-910H rig. */
#define S_MEM_RDWR_MEM 0x00 /* Read/write memory channel */
#define S_MEM_SATMEM 0x01 /* Satellite memory */
@ -302,4 +309,14 @@
#define S_OPTO_SCON 0x0f
#define S_OPTO_SCOFF 0x10
/*
* C_CTL_MODE Misc CI-V Mode settings
*/
#define S_PRM_BEEP 0x02
#define S_PRM_LANG 0x15
#define S_PRM_BACKLT 0x21
#define S_PRM_SLEEP 0x32
#define S_PRM_SLPTM 0x33
#define S_PRM_TIME 0x27
#endif /* _ICOM_DEFS_H */

Wyświetl plik

@ -1,8 +1,8 @@
/*
* Hamlib CI-V backend - description of IC-R75
* Copyright (c) 2000-2003 by Stephane Fillod
* Copyright (c) 2000-2004 by Stephane Fillod
*
* $Id: icr75.c,v 1.2 2003-12-08 08:33:58 fillods Exp $
* $Id: icr75.c,v 1.3 2004-08-21 23:53:39 fillods Exp $
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
@ -44,26 +44,39 @@
* - set_parm, set_trn, IF filter setting, etc.
*/
#define ICR75_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_AMS)
#define ICR75_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_AMS)
#define ICR75_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_ANF|RIG_FUNC_APF)
#define ICR75_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_ANF|RIG_FUNC_NR)
#define ICR75_LEVEL_ALL (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR)
#define ICR75_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_PREAMP|RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH)
#define ICR75_VFO_ALL (RIG_VFO_A)
#define ICR75_PARM_ALL (RIG_PARM_ANN|RIG_PARM_APO|RIG_PARM_BACKLIGHT|RIG_PARM_BEEP|RIG_PARM_TIME)
#define ICR75_VFO_ALL (RIG_VFO_VFO|RIG_VFO_MEM)
#define ICR75_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL)
#define ICR75_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO)
#define ICR75_ANTS (RIG_ANT_1|RIG_ANT_2)
/*
* FIXME: S-meter measurement
*/
#define ICR75_STR_CAL { 2, \
{ \
{ 0, -60 }, /* S0 */ \
{ 255, 60 } /* +60 */ \
#define ICR75_STR_CAL { 17, { \
{ 0, -60 }, \
{ 37, -54 }, \
{ 52, -48 }, \
{ 61, -42 }, \
{ 72, -36 }, \
{ 86, -30 }, \
{ 95, -24 }, \
{ 109, -18 }, \
{ 124, -12 }, \
{ 128, -6 }, \
{ 146, 0 }, \
{ 166, 10 }, \
{ 186, 20 }, \
{ 199, 30 }, \
{ 225, 40 }, \
{ 233, 50 }, \
{ 255, 60 }, \
} }
/*
@ -92,9 +105,9 @@ const struct rig_caps icr75_caps = {
.rig_model = RIG_MODEL_ICR75,
.model_name = "IC-R75",
.mfg_name = "Icom",
.version = "0.2",
.version = "0.3",
.copyright = "LGPL",
.status = RIG_STATUS_UNTESTED,
.status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_RECEIVER,
.ptt_type = RIG_PTT_NONE,
.dcd_type = RIG_DCD_RIG,
@ -106,19 +119,25 @@ const struct rig_caps icr75_caps = {
.serial_parity = RIG_PARITY_NONE,
.serial_handshake = RIG_HANDSHAKE_NONE,
.write_delay = 0,
.post_write_delay = 0,
.post_write_delay = 1,
.timeout = 200,
.retry = 3,
.has_get_func = ICR75_FUNC_ALL,
.has_set_func = ICR75_FUNC_ALL,
.has_get_level = ICR75_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(ICR75_LEVEL_ALL),
.has_get_parm = RIG_PARM_ANN,
.has_set_parm = RIG_PARM_ANN, /* FIXME: parms */
.has_get_parm = ICR75_PARM_ALL,
.has_set_parm = RIG_PARM_SET(ICR75_PARM_ALL),
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_PBT_IN] = { .min = { .f = -1280 }, .max = { .f = +1280 } },
[LVL_PBT_OUT] = { .min = { .f = -1280 }, .max = { .f = +1280 } },
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 } },
},
.parm_gran = {
[PARM_APO] = { .min = { .i = 1 }, .max = { .i = 1439} },
[PARM_TIME] = { .min = { .i = 0 }, .max = { .i = 86399} },
},
.parm_gran = {},
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { 20, RIG_DBLST_END, }, /* TBC */
@ -166,8 +185,12 @@ const struct rig_caps icr75_caps = {
},
/* mode/filter list, remember: order matters! */
.filters = {
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_RTTY, kHz(2.4)},
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, kHz(2.4)},
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, kHz(1.9)},
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, kHz(6)},
{RIG_MODE_AM|RIG_MODE_AMS, kHz(6)},
{RIG_MODE_AM|RIG_MODE_AMS, kHz(2.4)},
{RIG_MODE_AM|RIG_MODE_AMS, kHz(15)},
{RIG_MODE_FM, kHz(15)},
RIG_FLT_END,
},
@ -196,12 +219,14 @@ const struct rig_caps icr75_caps = {
.get_func = icom_get_func,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.get_dcd = icom_get_dcd,
.set_mem = icom_set_mem,
.vfo_op = icom_vfo_op,
.scan = icom_scan,
.set_ts = icom_set_ts,
.get_ts = icom_get_ts,
/*.get_ts = icom_get_ts,*/
.set_powerstat = icom_set_powerstat,
.get_powerstat = icom_get_powerstat,