Add new levels: RFPOWER_METER, COMP_METER, VD_METER and ID_METER, supported at least by most of recent Icom rigs. Add level NOTCHF_RAW for manual notch frequency without specified unit for Icom rigs. Add level MONITOR_GAIN. Add functions DUAL_WATCH and DIVERSITY, supported now by K3/K3S. Fix VOXDELAY level commands for many Icom rigs. Add MONITOR_GAIN level for Icom rigs. Fix and add many K3 commands and add specific rig models for K3S, KX2 and KX3 -- they are very similar to K3, but have slight differences. Extend dump_caps output for rigctl: add complete details of ext levels and frequency ranges. Tests have been performed on IC-7000, IC-756ProIII, IC-7300, IC-7600 and K3.

pull/112/head
Mikael Nousiainen 2019-05-30 09:37:49 +03:00
rodzic 57c16d20f2
commit 3dbbe02b78
38 zmienionych plików z 2881 dodań i 553 usunięć

8
.editorconfig 100644
Wyświetl plik

@ -0,0 +1,8 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

1
.gitignore vendored
Wyświetl plik

@ -9,6 +9,7 @@
*.la
*.orig
*.swp
$depbase.Tpo
Makefile
Makefile.in
aclocal.m4

Wyświetl plik

@ -76,6 +76,9 @@ static const struct confparams dummy_ext_levels[] = {
{ TOK_EL_MAGICOP, "MGO", "Magic Op", "Magic Op, as an example",
NULL, RIG_CONF_BUTTON
},
{ TOK_EL_MAGICCOMBO, "MGC", "Magic combo", "Magic combo, as an example",
"VALUE1", RIG_CONF_COMBO, { .c = { .combostr = { "VALUE1", "VALUE2", "NONE", NULL } } }
},
{ RIG_CONF_END, NULL, }
};
@ -92,7 +95,7 @@ static const struct confparams dummy_cfg_params[] = {
{ TOK_CFG_MAGICCONF, "mcfg", "Magic conf", "Magic parameter, as an example",
"DX", RIG_CONF_STRING, { }
},
{ TOK_CFG_STATIC_DATA, "static_data", "Static data", "Output only static data, no randomization of S-meter values",
{ TOK_CFG_STATIC_DATA, "static_data", "Static data", "Output only static data, no randomization of meter values",
"0", RIG_CONF_CHECKBUTTON, { }
},
{ RIG_CONF_END, NULL, }
@ -815,23 +818,54 @@ static int dummy_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (idx >= RIG_SETTING_MAX)
return -RIG_EINVAL;
if (level == RIG_LEVEL_STRENGTH || level == RIG_LEVEL_RAWSTR) {
if (priv->static_data) {
curr->levels[idx].i = -12;
} else {
/* make S-Meter jiggle */
int qrm = -56;
if (curr->freq < MHz(7))
switch (level) {
case RIG_LEVEL_STRENGTH:
case RIG_LEVEL_RAWSTR:
if (priv->static_data) {
curr->levels[idx].i = -12;
} else {
/* make S-Meter jiggle */
int qrm = -56;
if (curr->freq < MHz(7))
qrm = -20;
else if (curr->freq < MHz(21))
else if (curr->freq < MHz(21))
qrm = -30;
else if (curr->freq < MHz(50))
else if (curr->freq < MHz(50))
qrm = -50;
curr->levels[idx].i = qrm + time(NULL)%32 + rand()%4
- curr->levels[LVL_ATT].i
+ curr->levels[LVL_PREAMP].i;
}
curr->levels[idx].i = qrm + time(NULL)%32 + rand()%4
- curr->levels[LVL_ATT].i
+ curr->levels[LVL_PREAMP].i;
}
break;
case RIG_LEVEL_RFPOWER_METER:
if (priv->static_data) {
curr->levels[idx].f = 0.5f;
} else {
curr->levels[idx].f = (float) (time(NULL) % 32) / 64.0f + (float) (rand() % 4) / 8.0f;
}
break;
case RIG_LEVEL_COMP_METER:
if (priv->static_data) {
curr->levels[idx].f = 3.5f;
} else {
curr->levels[idx].f = 0.5f + (float) (time(NULL) % 32) / 16.0f + (float) (rand() % 200) / 20.0f;
}
break;
case RIG_LEVEL_VD_METER:
if (priv->static_data) {
curr->levels[idx].f = 13.82f;
} else {
curr->levels[idx].f = 13.82f + (float) (time(NULL) % 10) / 50.0f - (float) (rand() % 10) / 40.0f;
}
break;
case RIG_LEVEL_ID_METER:
if (priv->static_data) {
curr->levels[idx].f = 0.85f;
} else {
curr->levels[idx].f = 2.0f + (float) (time(NULL) % 320) / 16.0f - (float) (rand() % 40) / 20.0f;
}
break;
}
*val = curr->levels[idx];
@ -857,6 +891,7 @@ static int dummy_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val)
case TOK_EL_MAGICLEVEL:
case TOK_EL_MAGICFUNC:
case TOK_EL_MAGICOP:
case TOK_EL_MAGICCOMBO:
break;
default:
@ -910,6 +945,7 @@ static int dummy_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val)
case TOK_EL_MAGICLEVEL:
case TOK_EL_MAGICFUNC:
case TOK_EL_MAGICOP:
case TOK_EL_MAGICCOMBO:
break;
default:
@ -1445,9 +1481,9 @@ static int dummy_mW2power(RIG * rig, float *power, unsigned int mwpower,
* The following macros set bitmasks for the various funcs, levels, parms,
* etc. This dummy backend claims support for almost all of them.
*/
#define DUMMY_FUNC ((setting_t)-1UL) /* All possible functions */
#define DUMMY_LEVEL (((setting_t)-1UL)&~(1UL<<27)) /* All levels except SQLSTAT */
#define DUMMY_PARM ((setting_t)-1UL) /* All possible parms */
#define DUMMY_FUNC ((setting_t)-1ULL) /* All possible functions */
#define DUMMY_LEVEL (((setting_t)-1ULL)&~(1ULL<<27)) /* All levels except SQLSTAT */
#define DUMMY_PARM ((setting_t)-1ULL) /* All possible parms */
#define DUMMY_VFO_OP 0x7ffffffUL /* All possible VFO OPs */
#define DUMMY_SCAN 0x7ffffffUL /* All possible scan OPs */
@ -1521,21 +1557,34 @@ const struct rig_caps dummy_caps = {
.rx_range_list1 = { {.start=kHz(150),.end=MHz(1500),.modes=DUMMY_MODES,
.low_power=-1,.high_power=-1,DUMMY_VFOS, RIG_ANT_1|RIG_ANT_2},
RIG_FRNG_END, },
.tx_range_list1 = { RIG_FRNG_END, },
.tx_range_list1 = { {.start=kHz(150),.end=MHz(1500),.modes=DUMMY_MODES,
.low_power=W(5),.high_power=W(100),DUMMY_VFOS, RIG_ANT_1|RIG_ANT_2},
RIG_FRNG_END, },
.rx_range_list2 = { {.start=kHz(150),.end=MHz(1500),.modes=DUMMY_MODES,
.low_power=-1,.high_power=-1,DUMMY_VFOS, RIG_ANT_1|RIG_ANT_2},
RIG_FRNG_END, },
.tx_range_list2 = { RIG_FRNG_END, },
.tuning_steps = { {DUMMY_MODES,1}, {DUMMY_MODES,RIG_TS_ANY}, RIG_TS_END, },
.filters = {
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_RTTY, kHz(2.4)},
{RIG_MODE_CW, Hz(500)},
{RIG_MODE_AM, kHz(8)},
{RIG_MODE_AM, kHz(2.4)},
{RIG_MODE_FM, kHz(15)},
{RIG_MODE_FM, kHz(8)},
{RIG_MODE_WFM, kHz(230)},
RIG_FLT_END,
{RIG_MODE_SSB, kHz(2.4)},
{RIG_MODE_SSB, kHz(1.8)},
{RIG_MODE_SSB, kHz(3.0)},
{RIG_MODE_SSB, RIG_FLT_ANY},
{RIG_MODE_CW, Hz(500)},
{RIG_MODE_CW, kHz(2.4)},
{RIG_MODE_CW, Hz(50)},
{RIG_MODE_CW, RIG_FLT_ANY},
{RIG_MODE_RTTY, Hz(300)},
{RIG_MODE_RTTY, kHz(2.4)},
{RIG_MODE_RTTY, Hz(50)},
{RIG_MODE_RTTY, RIG_FLT_ANY},
{RIG_MODE_AM, kHz(8)},
{RIG_MODE_AM, kHz(2.4)},
{RIG_MODE_AM, kHz(10)},
{RIG_MODE_FM, kHz(15)},
{RIG_MODE_FM, kHz(8)},
{RIG_MODE_WFM, kHz(230)},
RIG_FLT_END,
},
.max_rit = 9990,
.max_xit = 9990,

Wyświetl plik

@ -35,6 +35,7 @@
#define TOK_EL_MAGICFUNC TOKEN_BACKEND(2)
#define TOK_EL_MAGICOP TOKEN_BACKEND(3)
#define TOK_EP_MAGICPARM TOKEN_BACKEND(4)
#define TOK_EL_MAGICCOMBO TOKEN_BACKEND(5)
extern const struct rig_caps dummy_caps;

Wyświetl plik

@ -334,6 +334,8 @@ int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width,
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_PSK: icmode = S_PSK; break;
case RIG_MODE_PSKR: icmode = S_PSKR; break;
case RIG_MODE_FM: icmode = S_FM; break;
case RIG_MODE_FMN: icmode = S_FMN; break;
case RIG_MODE_WFM: icmode = S_WFM; break;
@ -404,8 +406,8 @@ void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, pbwidth_t
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 S_PSK: *mode = RIG_MODE_PKTUSB; break; /* IC-7800 */
case S_PSKR: *mode = RIG_MODE_PKTLSB; break;
case S_PSK: *mode = RIG_MODE_PSK; break;
case S_PSKR: *mode = RIG_MODE_PSKR; break;
case S_DSTAR: *mode = RIG_MODE_DSTAR; break;
case S_P25: *mode = RIG_MODE_P25; break;
case S_DPMR: *mode = RIG_MODE_DPMR; break;

Wyświetl plik

@ -46,7 +46,7 @@
#define IC7000_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO)
#define IC7000_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define IC7000_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_MONITOR_GAIN)
#define IC7000_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7000_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP)
@ -80,6 +80,35 @@
{ 255, 63 } \
} }
#define IC7000_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7000_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7000_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC7000_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
/*
*
* IC7000 channel caps.
@ -101,6 +130,8 @@
}
int ic7000_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op);
int ic7000_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
* IC-7000 rig capabilities.
@ -144,6 +175,7 @@ const struct rig_caps ic7000_caps = {
.has_set_parm = RIG_PARM_SET(IC7000_PARMS),
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -229,6 +261,10 @@ const struct rig_caps ic7000_caps = {
},
.str_cal = IC7000_STR_CAL,
.swr_cal = IC7000_SWR_CAL,
.alc_cal = IC7000_ALC_CAL,
.rfpower_meter_cal = IC7000_RFPOWER_METER_CAL,
.comp_meter_cal = IC7000_COMP_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -248,11 +284,9 @@ const struct rig_caps ic7000_caps = {
.set_ant = NULL, /*automatically set by rig depending band */
.get_ant = NULL,
.set_rit = icom_set_rit,
.decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_level = ic7000_set_level,
.get_level = ic7000_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_parm = NULL,
@ -317,3 +351,35 @@ int ic7000_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
return RIG_OK;
}
int ic7000_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x17;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x17;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -82,16 +82,78 @@
RIG_LEVEL_AGC| \
RIG_LEVEL_PBT_IN| \
RIG_LEVEL_PBT_OUT| \
RIG_LEVEL_NOTCHF| \
RIG_LEVEL_NOTCHF_RAW| \
RIG_LEVEL_ATT| \
RIG_LEVEL_PREAMP)
RIG_LEVEL_PREAMP| \
RIG_LEVEL_RAWSTR| \
RIG_LEVEL_STRENGTH| \
RIG_LEVEL_SWR| \
RIG_LEVEL_ALC| \
RIG_LEVEL_RFPOWER_METER| \
RIG_LEVEL_COMP_METER| \
RIG_LEVEL_VD_METER| \
RIG_LEVEL_ID_METER| \
RIG_LEVEL_MONITOR_GAIN)
#define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
#define IC7100_STR_CAL UNKNOWN_IC_STR_CAL /* FIXME */
// IC-7100 S-meter calibration data based on manual
#define IC7100_STR_CAL { 14, \
{ \
{ 0, -54 }, \
{ 120, 0 }, \
{ 241, 60 } \
} }
#define IC7100_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7100_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7100_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC7100_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
#define IC7100_VD_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 13, 10.0f }, \
{ 241, 16.0f } \
} }
#define IC7100_ID_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 97, 10.0f }, \
{ 146, 15.0f }, \
{ 241, 25.0f } \
} }
#define IC7100_HF_ANTS (RIG_ANT_1|RIG_ANT_2)
int ic7100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
*/
static const struct icom_priv_caps ic7100_priv_caps = {
@ -125,12 +187,13 @@ const struct rig_caps ic7100_caps = {
.retry = 3,
.has_get_func = IC7100_FUNC_ALL,
.has_set_func = IC7100_FUNC_ALL | RIG_FUNC_RESUME,
.has_get_level = IC7100_LEVEL_ALL | RIG_LEVEL_RAWSTR| RIG_LEVEL_SWR,
.has_set_level = IC7100_LEVEL_ALL,
.has_get_level = IC7100_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(IC7100_LEVEL_ALL),
.has_get_parm = IC7100_PARM_ALL,
.has_set_parm = IC7100_PARM_ALL,
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -210,6 +273,12 @@ const struct rig_caps ic7100_caps = {
{RIG_MODE_FM|RIG_MODE_AM, kHz(6)}, /* builtin */
RIG_FLT_END, },
.str_cal = IC7100_STR_CAL,
.swr_cal = IC7100_SWR_CAL,
.alc_cal = IC7100_ALC_CAL,
.rfpower_meter_cal = IC7100_RFPOWER_METER_CAL,
.comp_meter_cal = IC7100_COMP_METER_CAL,
.vd_meter_cal = IC7100_VD_METER_CAL,
.id_meter_cal = IC7100_ID_METER_CAL,
.priv = (void*)&ic7100_priv_caps,
.rig_init = icom_init,
@ -235,8 +304,8 @@ const struct rig_caps ic7100_caps = {
.set_ts = icom_set_ts,
.get_func = icom_get_func,
.set_func = icom_set_func,
.get_level = icom_get_level,
.set_level = icom_set_level,
.get_level = ic7100_get_level,
.set_level = ic7100_set_level,
.set_ptt = icom_set_ptt,
.get_ptt = icom_get_ptt,
@ -271,4 +340,34 @@ const struct rig_caps ic7100_caps = {
.send_morse = icom_send_morse
};
/* end of file */
int ic7100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x65;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x65;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -52,7 +52,7 @@
#define IC7200_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO)
#define IC7200_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define IC7200_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER)
#define IC7200_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7200_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP)
@ -62,15 +62,38 @@
#define IC7200_ANTS (RIG_ANT_1) /* ant-1 is Hf-6m */
/*
* FIXME: This is a guess real measures please!
*/
#define IC7200_STR_CAL { 2, \
#define IC7200_STR_CAL { 3, \
{ \
{ 0, -60 }, \
{ 255, 60 } \
{ 0, -54 }, \
{ 120, 0 }, \
{ 241, 60 } \
} }
#define IC7200_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7200_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7200_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
int ic7200_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7200_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
* IC-7200 rig capabilities.
*
@ -115,6 +138,7 @@ const struct rig_caps ic7200_caps = {
.has_set_parm = RIG_PARM_SET(IC7200_PARMS),
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = NULL,
@ -180,6 +204,9 @@ const struct rig_caps ic7200_caps = {
},
.str_cal = IC7200_STR_CAL,
.swr_cal = IC7200_SWR_CAL,
.alc_cal = IC7200_ALC_CAL,
.rfpower_meter_cal = IC7200_RFPOWER_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -199,11 +226,9 @@ const struct rig_caps ic7200_caps = {
.set_ant = NULL, /*automatically set by rig depending band */
.get_ant = NULL,
.set_rit = icom_set_rit,
.decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_level = ic7200_set_level,
.get_level = ic7200_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_parm = NULL,
@ -216,10 +241,10 @@ const struct rig_caps ic7200_caps = {
.get_dcd = icom_get_dcd,
.set_ts = icom_set_ts,
.get_ts = NULL,
.set_rptr_shift = icom_set_rptr_shift,
.set_rptr_shift = NULL,
.get_rptr_shift = NULL,
.set_rptr_offs = icom_set_rptr_offs,
.get_rptr_offs = icom_get_rptr_offs,
.set_rptr_offs = NULL,
.get_rptr_offs = NULL,
.set_ctcss_tone = icom_set_ctcss_tone,
.get_ctcss_tone = icom_get_ctcss_tone,
.set_ctcss_sql = icom_set_ctcss_sql,
@ -232,3 +257,33 @@ const struct rig_caps ic7200_caps = {
.get_split_vfo = NULL,
};
int ic7200_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x55;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x03, 1, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7200_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x55;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x03, 1, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -38,7 +38,6 @@
#include "bandplan.h"
#include "tones.h"
/* AM Data mode needs adding - this would require one more mode 'RIG_MODE_PKTAM' to rig.h */
#define IC7300_ALL_RX_MODES (RIG_MODE_FM|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_PKTAM)
#define IC7300_1HZ_TS_MODES (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_PKTAM)
#define IC7300_NOT_TS_MODES (IC7300_ALL_RX_MODES &~IC7300_1HZ_TS_MODES)
@ -48,10 +47,7 @@
#define IC7300_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_SCOPE|RIG_FUNC_TUNER)
#define IC7300_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
// Not implemented yet
//#define IC7300_EXT_LEVELS (TOK_LEVEL_MONITOR)
#define IC7300_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN)
#define IC7300_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7300_PARMS (RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP)
@ -75,6 +71,50 @@
{ 241, 64 } \
} }
#define IC7300_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7300_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7300_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC7300_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
#define IC7300_VD_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 13, 10.0f }, \
{ 241, 16.0f } \
} }
#define IC7300_ID_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 97, 10.0f }, \
{ 146, 15.0f }, \
{ 241, 25.0f } \
} }
#define IC7300_AGC_OFF 0x00
#define IC7300_AGC_FAST 0x01
#define IC7300_AGC_MID 0x02
@ -87,6 +127,60 @@
#define IC9700_ALL_TX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR|RIG_MODE_DD)
#define IC9700_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR|RIG_MODE_DD)
#define IC9700_STR_CAL { 7, \
{ \
{ 0, -54 }, \
{ 10, -48 }, \
{ 30, -36 }, \
{ 60, -24 }, \
{ 90, -12 }, \
{ 120, 0 }, \
{ 241, 64 } \
} }
#define IC9700_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC9700_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC9700_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC9700_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 210, 25.5f } \
} }
#define IC9700_VD_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 13, 10.0f }, \
{ 241, 16.0f } \
} }
#define IC9700_ID_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 121, 10.0f }, \
{ 241, 20.0f } \
} }
/*
* IC-7300 rig capabilities.
*
@ -109,19 +203,6 @@ static const struct icom_priv_caps IC9700_priv_caps = {
.serial_USB_echo_check = 1 /* USB CI-V may not echo */
};
/* Private IC7300 extra levels definitions
*
* Token definitions for .cfgparams in rig_caps
* See enum rig_conf_e and struct confparams in rig.h
*/
const struct confparams ic7300_ext_levels[] = {
{ TOK_LEVEL_MONITOR, "MONITORGAIN", "Monitor gain", "Monitor gain",
NULL, RIG_CONF_NUMERIC, { .n = { 0, 1, 0 } }
},
{ RIG_CONF_END, NULL, }
};
int ic7300_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *ts);
int ic7300_set_rit(RIG *rig, vfo_t vfo, shortfreq_t ts);
int ic7300_set_xit(RIG *rig, vfo_t vfo, shortfreq_t ts);
@ -129,6 +210,8 @@ int ic7300_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
int ic7300_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
int ic7300_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7300_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
int ic9700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic9700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
const struct rig_caps ic7300_caps = {
.rig_model = RIG_MODEL_IC7300,
@ -158,14 +241,15 @@ const struct rig_caps ic7300_caps = {
.has_get_parm = IC7300_PARMS,
.has_set_parm = RIG_PARM_SET(IC7300_PARMS),
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.extlevels = ic7300_ext_levels,
.extlevels = NULL,
.ctcss_list = full_ctcss_list,
.dcs_list = NULL,
.preamp = { 1, 2, RIG_DBLST_END, },
.attenuator = { 1, RIG_DBLST_END, }, /* value taken from p.45 of manual*/
.attenuator = { 20, RIG_DBLST_END, },
.max_rit = Hz(9999),
.max_xit = Hz(9999),
.max_ifshift = Hz(0),
@ -235,6 +319,12 @@ const struct rig_caps ic7300_caps = {
},
.str_cal = IC7300_STR_CAL,
.swr_cal = IC7300_SWR_CAL,
.alc_cal = IC7300_ALC_CAL,
.rfpower_meter_cal = IC7300_RFPOWER_METER_CAL,
.comp_meter_cal = IC7300_COMP_METER_CAL,
.vd_meter_cal = IC7300_VD_METER_CAL,
.id_meter_cal = IC7300_ID_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -330,13 +420,14 @@ const struct rig_caps ic9700_caps = {
.has_set_parm = RIG_PARM_SET(IC7300_PARMS),
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.extlevels = ic7300_ext_levels,
.extlevels = NULL,
.ctcss_list = full_ctcss_list,
.dcs_list = NULL,
.preamp = { 1, 2, RIG_DBLST_END, },
.attenuator = { 1, RIG_DBLST_END, }, /* value taken from p.45 of manual*/
.preamp = { 1, 2, 3, RIG_DBLST_END, },
.attenuator = { 10, RIG_DBLST_END, },
.max_rit = Hz(9999),
.max_xit = Hz(9999),
.max_ifshift = Hz(0),
@ -402,7 +493,13 @@ const struct rig_caps ic9700_caps = {
RIG_FLT_END,
},
.str_cal = IC7300_STR_CAL,
.str_cal = IC9700_STR_CAL,
.swr_cal = IC9700_SWR_CAL,
.alc_cal = IC9700_ALC_CAL,
.rfpower_meter_cal = IC9700_RFPOWER_METER_CAL,
.comp_meter_cal = IC9700_COMP_METER_CAL,
.vd_meter_cal = IC9700_VD_METER_CAL,
.id_meter_cal = IC9700_ID_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -432,8 +529,8 @@ const struct rig_caps ic9700_caps = {
.set_xit = ic7300_set_xit,
.decode_event = icom_decode_event,
.set_level = ic7300_set_level,
.get_level = ic7300_get_level,
.set_level = ic9700_set_level,
.get_level = ic9700_get_level,
.set_ext_level = icom_set_ext_level,
.get_ext_level = icom_get_ext_level,
.set_func = ic7300_set_func,
@ -537,200 +634,188 @@ int ic7300_set_xit(RIG *rig, vfo_t vfo, shortfreq_t ts)
int ic7300_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
{
unsigned char ackbuf[16];
int ack_len;
int retval;
unsigned char ackbuf[16];
int ack_len;
int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (!rig || !status)
return -RIG_EINVAL;
if (!rig || !status)
return -RIG_EINVAL;
switch (func) {
case RIG_FUNC_RIT:
retval = icom_transaction(rig, 0x21, 0x01, NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK) return retval;
if (ack_len != 3) {
return RIG_BUSERROR;
}
*status = ackbuf[2];
break;
switch (func) {
case RIG_FUNC_RIT:
retval = icom_transaction(rig, 0x21, 0x01, NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK) return retval;
if (ack_len != 3) {
return RIG_BUSERROR;
}
*status = ackbuf[2];
break;
case RIG_FUNC_XIT:
retval = icom_transaction(rig, 0x21, 0x02, NULL, 0, ackbuf, &ack_len);
if (ack_len != 3) {
return RIG_BUSERROR;
}
*status = ackbuf[2];
break;
case RIG_FUNC_TUNER:
retval = icom_transaction (rig, 0x1C, 0x01, NULL, 0, ackbuf, &ack_len);
if (ack_len == 3)
{
*status = ackbuf[2]; // 0x01 = enabled, 0x00 = disabled, 0x02 = tuning in progress
} else {
return RIG_BUSERROR;
}
break;
default:
return icom_get_func(rig, vfo, func, status);
}
return retval;
case RIG_FUNC_XIT:
retval = icom_transaction(rig, 0x21, 0x02, NULL, 0, ackbuf, &ack_len);
if (ack_len != 3) {
return RIG_BUSERROR;
}
*status = ackbuf[2];
break;
case RIG_FUNC_TUNER:
retval = icom_transaction(rig, 0x1C, 0x01, NULL, 0, ackbuf, &ack_len);
if (ack_len == 3) {
*status = ackbuf[2]; // 0x01 = enabled, 0x00 = disabled, 0x02 = tuning in progress
} else {
return RIG_BUSERROR;
}
break;
default:
return icom_get_func(rig, vfo, func, status);
}
return retval;
}
int ic7300_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
{
unsigned char ts_buf[4];
unsigned char ackbuf[8];
int ack_len;
unsigned char ts_buf[4];
unsigned char ackbuf[8];
int ack_len;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (!rig)
return -RIG_EINVAL;
if (!rig)
return -RIG_EINVAL;
switch (func) {
case RIG_FUNC_RIT:
ts_buf[0] = status;
return icom_transaction (rig, 0x21, 0x01, ts_buf, 1, ackbuf, &ack_len);
switch (func) {
case RIG_FUNC_RIT:
ts_buf[0] = status;
return icom_transaction(rig, 0x21, 0x01, ts_buf, 1, ackbuf, &ack_len);
case RIG_FUNC_XIT:
ts_buf[0] = status;
return icom_transaction (rig, 0x21, 0x02, ts_buf, 1, ackbuf, &ack_len);
case RIG_FUNC_TUNER:
if(status==0 || status==1 || status==2)
{ // 0=off, 1 = on, 2 = begin tuning
ts_buf[0] = status;
return icom_transaction (rig, 0x1C, 0x01, ts_buf, 1, ackbuf, &ack_len);
} else {
return -1; // perhaps some other reply would be more informative
}
default:
return icom_set_func(rig, vfo, func, status);
}
case RIG_FUNC_XIT:
ts_buf[0] = status;
return icom_transaction(rig, 0x21, 0x02, ts_buf, 1, ackbuf, &ack_len);
case RIG_FUNC_TUNER:
if (status == 0 || status == 1 || status == 2) { // 0=off, 1 = on, 2 = begin tuning
ts_buf[0] = status;
return icom_transaction(rig, 0x1C, 0x01, ts_buf, 1, ackbuf, &ack_len);
} else {
return -1; // perhaps some other reply would be more informative
}
default:
return icom_set_func(rig, vfo, func, status);
}
}
int ic7300_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char lvlbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN];
int ack_len=sizeof(ackbuf), lvl_len;
int lvl_cn, lvl_sc; /* Command Number, Subcommand */
int retval;
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_AGC:
lvl_cn = C_CTL_FUNC;
lvl_sc = S_FUNC_AGC;
lvl_len = 1;
unsigned char agc_value;
switch (val.i) {
case RIG_AGC_OFF:
agc_value = IC7300_AGC_OFF;
break;
case RIG_AGC_SLOW:
agc_value = IC7300_AGC_SLOW;
break;
case RIG_AGC_MEDIUM:
agc_value = IC7300_AGC_MID;
break;
case RIG_AGC_FAST:
agc_value = IC7300_AGC_FAST;
break;
default:
rig_debug(RIG_DEBUG_ERR,"Unsupported LEVEL_AGC %d", val.i);
return -RIG_EINVAL;
}
lvlbuf[0] = agc_value;
break;
default:
return icom_set_level(rig, vfo, level, val);
}
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvlbuf, lvl_len,
ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
if (ack_len != 1 || ackbuf[0] != ACK) {
rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, ackbuf[0], ack_len);
return -RIG_ERJCTED;
}
return RIG_OK;
switch (level) {
case RIG_LEVEL_AGC:
switch (val.i) {
case RIG_AGC_OFF:
val.i = IC7300_AGC_OFF;
break;
case RIG_AGC_SLOW:
val.i = IC7300_AGC_SLOW;
break;
case RIG_AGC_MEDIUM:
val.i = IC7300_AGC_MID;
break;
case RIG_AGC_FAST:
val.i = IC7300_AGC_FAST;
break;
default:
rig_debug(RIG_DEBUG_ERR, "Unsupported LEVEL_AGC %d", val.i);
return -RIG_EINVAL;
}
return icom_set_level_raw(rig, level, C_CTL_FUNC, S_FUNC_AGC, 0, NULL, 1, val);
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x91;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7300_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char lvlbuf[MAXFRAMELEN], lvl2buf[MAXFRAMELEN];
int lvl_len, lvl2_len;
int lvl_cn, lvl_sc; /* Command Number, Subcommand */
int icom_val;
int cmdhead;
int retval;
unsigned char cmdbuf[MAXFRAMELEN];
value_t temp_val;
int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
lvl2_len = 0;
switch (level) {
case RIG_LEVEL_AGC:
retval = icom_get_level_raw(rig, level, C_CTL_FUNC, S_FUNC_AGC, 0, NULL, &temp_val);
if (retval != RIG_OK) {
return retval;
}
switch (level) {
case RIG_LEVEL_AGC:
lvl_cn = C_CTL_FUNC;
lvl_sc = S_FUNC_AGC;
break;
default:
return icom_get_level(rig, vfo, level, val);
}
switch (temp_val.i) {
case IC7300_AGC_OFF:
val->i = RIG_AGC_OFF;
break;
case IC7300_AGC_SLOW:
val->i = RIG_AGC_SLOW;
break;
case IC7300_AGC_MID:
val->i = RIG_AGC_MEDIUM;
break;
case IC7300_AGC_FAST:
val->i = RIG_AGC_FAST;
break;
default:
rig_debug(RIG_DEBUG_ERR, "Unexpected Icom AGC value 0x%02x", temp_val.i);
return -RIG_EPROTO;
}
break;
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x91;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvl2buf, lvl2_len,
lvlbuf, &lvl_len);
if (retval != RIG_OK)
return retval;
cmdhead = 2;
lvl_len -= cmdhead;
if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) {
rig_debug(RIG_DEBUG_ERR,"%s: ack NG (%#.2x), len=%d\n", __func__, lvlbuf[0], lvl_len);
return -RIG_ERJCTED;
}
/*
* The result is a 3 digit BCD, but in *big endian* order: 0000..0255
* (from_bcd is little endian)
*/
icom_val = from_bcd_be(lvlbuf + cmdhead, lvl_len * 2);
switch (level) {
case RIG_LEVEL_AGC:
switch (icom_val) {
case IC7300_AGC_OFF:
val->i = RIG_AGC_OFF;
break;
case IC7300_AGC_SLOW:
val->i = RIG_AGC_SLOW;
break;
case IC7300_AGC_MID:
val->i = RIG_AGC_MEDIUM;
break;
case IC7300_AGC_FAST:
val->i = RIG_AGC_FAST;
break;
default:
rig_debug(RIG_DEBUG_ERR,"Unexpected AGC 0x%02x", icom_val);
return -RIG_EPROTO;
}
break;
}
rig_debug(RIG_DEBUG_TRACE ,"%s: %d %d %d %f\n", __func__, lvl_len, icom_val, val->i, val->f);
return RIG_OK;
return RIG_OK;
}
int ic9700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x03;
cmdbuf[1] = 0x30;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return ic7300_set_level(rig, vfo, level, val);
}
}
int ic9700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x03;
cmdbuf[1] = 0x30;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return ic7300_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -43,7 +43,7 @@
#define IC7410_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK)
#define IC7410_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define IC7410_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER)
#define IC7410_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7410_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -63,6 +63,30 @@
{ 246, 60 } /* S9+60dB */ \
} }
#define IC7410_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7410_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7410_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
int ic7410_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7410_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
* IC-7410 rig capabilities.
@ -106,6 +130,7 @@ const struct rig_caps ic7410_caps = {
.has_set_parm = RIG_PARM_SET(IC7410_PARMS), /* FIXME: parms */
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -176,6 +201,9 @@ const struct rig_caps ic7410_caps = {
RIG_FLT_END,
},
.str_cal = IC7410_STR_CAL,
.swr_cal = IC7410_SWR_CAL,
.alc_cal = IC7410_ALC_CAL,
.rfpower_meter_cal = IC7410_RFPOWER_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -198,8 +226,8 @@ const struct rig_caps ic7410_caps = {
.set_rit = icom_set_rit,
.decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_level = ic7410_set_level,
.get_level = ic7410_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_parm = icom_set_parm,
@ -229,3 +257,32 @@ const struct rig_caps ic7410_caps = {
};
int ic7410_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x75;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7410_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x75;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -60,7 +60,7 @@
#define IC746_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_RF|RIG_FUNC_ANF|RIG_FUNC_APF|RIG_FUNC_VSC|RIG_FUNC_RESUME|RIG_FUNC_ARO)
#define IC746_LEVEL_ALL (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR)
#define IC746_LEVEL_ALL (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR)
#define IC746_GET_PARM (RIG_PARM_BACKLIGHT|RIG_PARM_BEEP)
#define IC746_SET_PARM (RIG_PARM_BACKLIGHT|RIG_PARM_BEEP|RIG_PARM_ANN)

Wyświetl plik

@ -48,7 +48,7 @@
#define IC756PRO_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_RF|RIG_FUNC_ANF)
#define IC756PRO_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE)
#define IC756PRO_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE)
/* Note that RIG_LEVEL_VOXGAIN and RIG_LEVEL_ANTIVOX are incorrectly handled in icom.c for
* this model.
@ -81,6 +81,9 @@
{ 247 ,60 } \
} }
int ic756pro2_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic756pro2_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
* This function deals with the older type radios with only 2 filter widths
* (0 - normal, 1 - narrow)
@ -251,7 +254,7 @@ const struct rig_caps ic756_caps = {
/*
* ic756pro rig capabilities.
* TODO: check every paramters,
* TODO: check every parameter,
* add antenna capabilities
*/
static const struct icom_priv_caps ic756pro_priv_caps = {
@ -401,7 +404,7 @@ const struct rig_caps ic756pro_caps = {
/*
* ic756proII rig capabilities.
* TODO: check every paramters,
* TODO: check every parameter,
* add antenna capabilities
*/
static const struct icom_priv_caps ic756pro2_priv_caps = {
@ -467,6 +470,7 @@ static int ic756pro2_get_ext_parm(RIG *rig, token_t token, value_t *val);
#define IC756PROII_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC756PROII_AM_TX_MODES (RIG_MODE_AM)
#define IC756PROII_LEVEL_ALL (IC756PRO_LEVEL_ALL|RIG_LEVEL_VOXDELAY)
const struct rig_caps ic756pro2_caps = {
.rig_model = RIG_MODEL_IC756PROII,
@ -491,12 +495,13 @@ const struct rig_caps ic756pro2_caps = {
.retry = 3,
.has_get_func = IC756PRO_FUNC_ALL,
.has_set_func = IC756PRO_FUNC_ALL,
.has_get_level = IC756PRO_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(IC756PRO_LEVEL_ALL),
.has_get_level = IC756PROII_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(IC756PROII_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 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.extparms = ic756pro2_ext_parms,
@ -577,8 +582,8 @@ const struct rig_caps ic756pro2_caps = {
.get_ant = icom_get_ant,
.decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_level = ic756pro2_set_level,
.get_level = ic756pro2_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_mem = icom_set_mem,
@ -762,7 +767,7 @@ static int ic756pro2_get_ext_parm(RIG *rig, token_t token, value_t *val)
/*
* ic756proIII rig capabilities.
*
* TODO: check every paramters,
* TODO: check every parameter,
* add antenna capabilities
*/
static const struct icom_priv_caps ic756pro3_priv_caps = {
@ -778,7 +783,8 @@ static const struct icom_priv_caps ic756pro3_priv_caps = {
#define IC756PROIII_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC756PROIII_AM_TX_MODES (RIG_MODE_AM)
#define IC756PROIII_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP)
#define IC756PROIII_LEVEL_ALL (IC756PROII_LEVEL_ALL|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_MONITOR_GAIN)
#define IC756PROIII_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME)
/*
@ -802,6 +808,35 @@ static const struct icom_priv_caps ic756pro3_priv_caps = {
.levels = RIG_LEVEL_SET(IC756PRO_LEVEL_ALL), \
}
#define IC756PROIII_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC756PROIII_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC756PROIII_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC756PROIII_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
const struct rig_caps ic756pro3_caps = {
.rig_model = RIG_MODEL_IC756PROIII,
.model_name = "IC-756PROIII",
@ -825,12 +860,13 @@ const struct rig_caps ic756pro3_caps = {
.retry = 3,
.has_get_func = IC756PRO_FUNC_ALL,
.has_set_func = IC756PRO_FUNC_ALL,
.has_get_level = IC756PRO_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(IC756PRO_LEVEL_ALL),
.has_get_level = IC756PROIII_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(IC756PROIII_LEVEL_ALL),
.has_get_parm = IC756PROIII_PARMS,
.has_set_parm = RIG_PARM_SET(IC756PROIII_PARMS),
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.extparms = ic756pro2_ext_parms,
@ -898,6 +934,10 @@ const struct rig_caps ic756pro3_caps = {
RIG_FLT_END,
},
.str_cal = IC756PRO_STR_CAL,
.swr_cal = IC756PROIII_SWR_CAL,
.alc_cal = IC756PROIII_ALC_CAL,
.rfpower_meter_cal = IC756PROIII_RFPOWER_METER_CAL,
.comp_meter_cal = IC756PROIII_COMP_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -920,8 +960,8 @@ const struct rig_caps ic756pro3_caps = {
.decode_event = icom_decode_event,
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_level = ic756pro2_set_level,
.get_level = ic756pro2_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_mem = icom_set_mem,
@ -948,4 +988,32 @@ const struct rig_caps ic756pro3_caps = {
.get_ext_parm = ic756pro2_get_ext_parm,
};
int ic756pro2_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x60;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic756pro2_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x60;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -36,17 +36,14 @@
#include "misc.h"
#include "bandplan.h"
/*
* TODO: PSK and PSKR
*/
#define IC7600_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC7600_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC7600_1HZ_TS_MODES IC7600_ALL_RX_MODES
#define IC7600_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC7600_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC7600_AM_TX_MODES (RIG_MODE_AM)
#define IC7600_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK)
#define IC7600_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define IC7600_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN)
#define IC7600_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
#define IC7600_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -79,6 +76,52 @@
{ 246, 60 } /* S9+60dB */ \
} }
#define IC7600_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7600_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7600_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC7600_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
#define IC7600_VD_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 152, 10.0f }, \
{ 181, 13.0f }, \
{ 212, 16.0f } \
} }
#define IC7600_ID_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 97, 10.0f }, \
{ 241, 25.0f } \
} }
int ic7600_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7600_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
* IC-7600 rig capabilities.
@ -123,6 +166,7 @@ const struct rig_caps ic7600_caps = {
.has_set_parm = RIG_PARM_SET(IC7600_PARMS), /* FIXME: parms */
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -193,6 +237,12 @@ const struct rig_caps ic7600_caps = {
RIG_FLT_END,
},
.str_cal = IC7600_STR_CAL,
.swr_cal = IC7600_SWR_CAL,
.alc_cal = IC7600_ALC_CAL,
.rfpower_meter_cal = IC7600_RFPOWER_METER_CAL,
.comp_meter_cal = IC7600_COMP_METER_CAL,
.vd_meter_cal = IC7600_VD_METER_CAL,
.id_meter_cal = IC7600_ID_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -215,8 +265,8 @@ const struct rig_caps ic7600_caps = {
.set_rit = icom_set_rit,
.decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_level = ic7600_set_level,
.get_level = ic7600_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_parm = icom_set_parm,
@ -246,3 +296,34 @@ const struct rig_caps ic7600_caps = {
.send_morse = icom_send_morse
};
int ic7600_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x67;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7600_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x67;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -1,6 +1,6 @@
/*
* Hamlib CI-V backend - description of IC-7610
* Stolen from ic7600.c by Michael Black W9MDB
* Stolen from IC7610.c by Michael Black W9MDB
* Copyright (c) 2010 by Stephane Fillod
*
*
@ -37,17 +37,14 @@
#include "misc.h"
#include "bandplan.h"
/*
* TODO: PSK and PSKR
*/
#define IC7610_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC7610_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC7610_1HZ_TS_MODES IC7610_ALL_RX_MODES
#define IC7610_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC7610_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC7610_AM_TX_MODES (RIG_MODE_AM)
#define IC7610_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK)
#define IC7610_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define IC7610_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN)
#define IC7610_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
#define IC7610_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -80,6 +77,52 @@
{ 246, 60 } /* S9+60dB */ \
} }
#define IC7610_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7610_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7610_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 212, 1.0f } \
} }
#define IC7610_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
#define IC7610_VD_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 151, 10.0f }, \
{ 211, 16.0f } \
} }
#define IC7610_ID_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 77, 10.0f }, \
{ 165, 20.0f }, \
{ 241, 30.0f } \
} }
int ic7610_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7610_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
* IC-7610 rig capabilities.
@ -124,6 +167,7 @@ const struct rig_caps ic7610_caps = {
.has_set_parm = RIG_PARM_SET(IC7610_PARMS), /* FIXME: parms */
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -194,6 +238,12 @@ const struct rig_caps ic7610_caps = {
RIG_FLT_END,
},
.str_cal = IC7610_STR_CAL,
.swr_cal = IC7610_SWR_CAL,
.alc_cal = IC7610_ALC_CAL,
.rfpower_meter_cal = IC7610_RFPOWER_METER_CAL,
.comp_meter_cal = IC7610_COMP_METER_CAL,
.vd_meter_cal = IC7610_VD_METER_CAL,
.id_meter_cal = IC7610_ID_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -216,8 +266,8 @@ const struct rig_caps ic7610_caps = {
.set_rit = icom_set_rit,
.decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_level = ic7610_set_level,
.get_level = ic7610_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_parm = icom_set_parm,
@ -247,3 +297,34 @@ const struct rig_caps ic7610_caps = {
.send_morse = icom_send_morse
};
int ic7610_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x02;
cmdbuf[1] = 0x92;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7610_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x02;
cmdbuf[1] = 0x92;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -15,7 +15,7 @@
*
* 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
* Foundation, Inc., 51 Franklin Stre<et, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
@ -36,14 +36,14 @@
#include "misc.h"
#include "bandplan.h"
#define IC7700_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM)
#define IC7700_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC7700_AM_TX_MODES (RIG_MODE_AM)
#define IC7700_ALL_RX_MODES IC7700_OTHER_TX_MODES | IC7700_AM_TX_MODES
#define IC7700_1HZ_TS_MODES IC7700_ALL_RX_MODES
#define IC7700_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK)
#define IC7700_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define IC7700_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN)
#define IC7700_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7700_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -53,9 +53,7 @@
#define IC7700_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
/*
* FIXME: real measures!
*/
// IC-7700 S-meter calibration data based on manual
#define IC7700_STR_CAL { 3, \
{ \
{ 0,-54 }, \
@ -63,6 +61,52 @@
{ 241, 60 } \
} }
#define IC7700_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7700_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7700_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC7700_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
#define IC7700_VD_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 151, 44.0f }, \
{ 180, 48.0f }, \
{ 211, 52.0f } \
} }
#define IC7700_ID_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 165, 10.0f }, \
{ 241, 15.0f } \
} }
int ic7700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
* IC-7700 rig capabilities.
@ -106,6 +150,7 @@ const struct rig_caps ic7700_caps = {
.has_set_parm = RIG_PARM_SET(IC7700_PARMS), /* FIXME: parms */
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -177,6 +222,12 @@ const struct rig_caps ic7700_caps = {
RIG_FLT_END,
},
.str_cal = IC7700_STR_CAL,
.swr_cal = IC7700_SWR_CAL,
.alc_cal = IC7700_ALC_CAL,
.rfpower_meter_cal = IC7700_RFPOWER_METER_CAL,
.comp_meter_cal = IC7700_COMP_METER_CAL,
.vd_meter_cal = IC7700_VD_METER_CAL,
.id_meter_cal = IC7700_ID_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -199,8 +250,8 @@ const struct rig_caps ic7700_caps = {
.set_rit = icom_set_rit,
.decode_event = icom_decode_event,
.set_level = icom_set_level,
.get_level = icom_get_level,
.set_level = ic7700_set_level,
.get_level = ic7700_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_parm = icom_set_parm,
@ -230,3 +281,34 @@ const struct rig_caps ic7700_caps = {
};
int ic7700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x82;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x82;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -36,17 +36,14 @@
#include "misc.h"
#include "bandplan.h"
/*
* TODO: PSK and PSKR
*/
#define IC7800_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC7800_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC7800_1HZ_TS_MODES IC7800_ALL_RX_MODES
#define IC7800_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC7800_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC7800_AM_TX_MODES (RIG_MODE_AM)
#define IC7800_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK)
#define IC7800_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define IC7800_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN)
#define IC7800_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
#define IC7800_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -56,9 +53,7 @@
#define IC7800_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
/*
* FIXME: real measures!
*/
// IC-7800 S-meter calibration data based on manual
#define IC7800_STR_CAL { 3, \
{ \
{ 0, -54 }, /* S0 */ \
@ -66,6 +61,49 @@
{ 241, 60 } /* S9+60 */ \
} }
#define IC7800_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC7800_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC7800_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC7800_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
#define IC7800_VD_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 151, 44.0f }, \
{ 180, 48.0f }, \
{ 211, 52.0f } \
} }
#define IC7800_ID_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 165, 10.0f }, \
{ 241, 15.0f } \
} }
int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
@ -112,6 +150,7 @@ const struct rig_caps ic7800_caps = {
.has_set_parm = RIG_PARM_SET(IC7800_PARMS), /* FIXME: parms */
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -181,6 +220,12 @@ const struct rig_caps ic7800_caps = {
RIG_FLT_END,
},
.str_cal = IC7800_STR_CAL,
.swr_cal = IC7800_SWR_CAL,
.alc_cal = IC7800_ALC_CAL,
.rfpower_meter_cal = IC7800_RFPOWER_METER_CAL,
.comp_meter_cal = IC7800_COMP_METER_CAL,
.vd_meter_cal = IC7800_VD_METER_CAL,
.id_meter_cal = IC7800_ID_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -234,7 +279,6 @@ const struct rig_caps ic7800_caps = {
};
/*
* IC-7800 has 0x11 command using index instead of backend's real dB value
*
@ -242,20 +286,31 @@ const struct rig_caps ic7800_caps = {
*/
int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
int i;
unsigned char cmdbuf[MAXFRAMELEN];
int i;
if (level == RIG_LEVEL_ATT && val.i != 0) {
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_ATT:
if (val.i != 0) {
/* Convert dB to index */
for (i=0; i < 7; i++) {
if (val.i == rig->state.attenuator[i]) {
val.i = i+1;
break;
}
for (i = 0; i < 7; i++) {
if (val.i == rig->state.attenuator[i]) {
val.i = i + 1;
break;
}
}
/* TODO: Should fail when not found? */
}
return icom_set_level(rig, vfo, level, val);
}
return icom_set_level(rig, vfo, level, val);
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x83;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
/*
@ -263,18 +318,32 @@ int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
*/
int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
int ret;
unsigned char cmdbuf[MAXFRAMELEN];
int retval;
ret = icom_get_level(rig, vfo, level, val);
if (ret != RIG_OK)
return ret;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
/* Convert index to dB
* Rem: ATT index 0 means attenuator Off
*/
if (level == RIG_LEVEL_ATT && val->i > 0 && val->i <= 7)
switch (level) {
case RIG_LEVEL_ATT:
retval = icom_get_level(rig, vfo, level, val);
if (retval != RIG_OK) {
return retval;
}
/* Convert index to dB
* Rem: ATT index 0 means attenuator Off
*/
if (val->i > 0 && val->i <= 7) {
val->i = rig->state.attenuator[val->i - 1];
}
break;
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x83;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
return RIG_OK;
return RIG_OK;
}

Wyświetl plik

@ -37,17 +37,14 @@
#include "misc.h"
#include "bandplan.h"
/*
* TODO: PSK and PSKR
*/
#define IC785x_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC785x_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC785x_1HZ_TS_MODES IC785x_ALL_RX_MODES
#define IC785x_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM)
#define IC785x_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR)
#define IC785x_AM_TX_MODES (RIG_MODE_AM)
#define IC785x_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK)
#define IC785x_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define IC785x_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN)
#define IC785x_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
#define IC785x_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -57,9 +54,7 @@
#define IC785x_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
/*
* FIXME: real measures!
*/
// IC-785x S-meter calibration data based on manual
#define IC785x_STR_CAL { 3, \
{ \
{ 0, -54 }, /* S0 */ \
@ -67,10 +62,57 @@
{ 241, 60 } /* S9+60 */ \
} }
#define IC785x_SWR_CAL { 5, \
{ \
{ 0, 1.0f }, \
{ 48, 1.5f }, \
{ 80, 2.0f }, \
{ 120, 3.0f }, \
{ 240, 6.0f } \
} }
#define IC785x_ALC_CAL { 2, \
{ \
{ 0, 0.0f }, \
{ 120, 1.0f } \
} }
#define IC785x_RFPOWER_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 143, 0.5f }, \
{ 213, 1.0f } \
} }
#define IC785x_COMP_METER_CAL { 3, \
{ \
{ 0, 0.0f }, \
{ 130, 15.0f }, \
{ 241, 30.0f } \
} }
#define IC785x_VD_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 151, 44.0f }, \
{ 180, 48.0f }, \
{ 211, 52.0f } \
} }
#define IC785x_ID_METER_CAL { 4, \
{ \
{ 0, 0.0f }, \
{ 97, 10.0f }, \
{ 146, 15.0f }, \
{ 241, 25.0f } \
} }
extern int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
extern int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
int ic785x_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int ic785x_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
/*
* IC-785x rig capabilities.
*
@ -113,6 +155,7 @@ const struct rig_caps ic785x_caps = {
.has_set_parm = RIG_PARM_SET(IC785x_PARMS), /* FIXME: parms */
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -182,6 +225,12 @@ const struct rig_caps ic785x_caps = {
RIG_FLT_END,
},
.str_cal = IC785x_STR_CAL,
.swr_cal = IC785x_SWR_CAL,
.alc_cal = IC785x_ALC_CAL,
.rfpower_meter_cal = IC785x_RFPOWER_METER_CAL,
.comp_meter_cal = IC785x_COMP_METER_CAL,
.vd_meter_cal = IC785x_VD_METER_CAL,
.id_meter_cal = IC785x_ID_METER_CAL,
.cfgparams = icom_cfg_params,
.set_conf = icom_set_conf,
@ -204,8 +253,8 @@ const struct rig_caps ic785x_caps = {
.set_rit = icom_set_rit,
.decode_event = icom_decode_event,
.set_level = ic7800_set_level,
.get_level = ic7800_get_level,
.set_level = ic785x_set_level,
.get_level = ic785x_get_level,
.set_func = icom_set_func,
.get_func = icom_get_func,
.set_parm = icom_set_parm,
@ -236,3 +285,35 @@ const struct rig_caps ic785x_caps = {
.get_powerstat = icom_get_powerstat,
};
int ic785x_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x03;
cmdbuf[1] = 0x09;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return ic7800_set_level(rig, vfo, level, val);
}
}
int ic785x_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x03;
cmdbuf[1] = 0x09;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return ic7800_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -1,6 +1,6 @@
/*
* Hamlib CI-V backend - description of IC-910 (VHF/UHF All-Mode
* Tranceiver) Contributed by Francois Retief <fgretief@sun.ac.za>
* Hamlib CI-V backend - description of IC-910 (VHF/UHF All-Mode Transceiver)
* Contributed by Francois Retief <fgretief@sun.ac.za>
* Copyright (c) 2000-2010 by Stephane Fillod
*
*
@ -27,6 +27,7 @@
#include <stdlib.h>
#include <hamlib/rig.h>
#include "misc.h"
#include "icom.h"
#include "icom_defs.h"
#include "frame.h"
@ -332,6 +333,30 @@ static const struct icom_priv_caps ic910_priv_caps = {
.r2i_mode = ic910_r2i_mode
};
int ic910_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
return icom_set_level_raw(rig, level, C_CTL_MEM, S_MEM_VOXDELAY, 0, NULL, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic910_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
return icom_get_level_raw(rig, level, C_CTL_MEM, S_MEM_VOXDELAY, 0, NULL, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}
const struct rig_caps ic910_caps = {
.rig_model = RIG_MODEL_IC910,
.model_name = "IC-910",
@ -361,6 +386,7 @@ const struct rig_caps ic910_caps = {
.has_set_parm = RIG_PARM_NONE,
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = NULL,
@ -459,8 +485,8 @@ const struct rig_caps ic910_caps = {
.set_ts = icom_set_ts,
.get_func = icom_get_func,
.set_func = icom_set_func,
.get_level = icom_get_level,
.set_level = icom_set_level,
.get_level = ic910_get_level,
.set_level = ic910_set_level,
.set_mem = icom_set_mem,
.vfo_op = icom_vfo_op,
@ -475,5 +501,3 @@ const struct rig_caps ic910_caps = {
.set_split_freq_mode = icom_set_split_freq_mode,
.get_split_freq_mode = icom_get_split_freq_mode,
};
/* end of file */

Wyświetl plik

@ -82,9 +82,10 @@
RIG_LEVEL_AGC| \
RIG_LEVEL_PBT_IN| \
RIG_LEVEL_PBT_OUT| \
RIG_LEVEL_NOTCHF| \
RIG_LEVEL_NOTCHF_RAW| \
RIG_LEVEL_ATT| \
RIG_LEVEL_PREAMP)
RIG_LEVEL_PREAMP| \
RIG_LEVEL_MONITOR_GAIN)
#define IC9100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -130,6 +131,7 @@ const struct rig_caps ic9100_caps = {
.has_set_parm = IC9100_PARM_ALL,
.level_gran = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
[LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } },
},
.parm_gran = {},
.ctcss_list = common_ctcss_list,
@ -270,4 +272,34 @@ const struct rig_caps ic9100_caps = {
};
/* end of file */
int ic9100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x27;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic9100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x27;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -39,6 +39,62 @@
#include "icom_defs.h"
#include "frame.h"
const cal_table_float_t icom_default_swr_cal = {
5,
{
{ 0, 1.0f },
{ 48, 1.5f },
{ 80, 2.0f },
{ 120, 3.0f },
{ 240, 6.0f }
}
};
const cal_table_float_t icom_default_alc_cal = {
2,
{
{ 0, 0.0f },
{ 120, 1.0f }
}
};
const cal_table_float_t icom_default_rfpower_meter_cal = {
3,
{
{ 0, 0.0f },
{ 143, 0.5f },
{ 213, 1.0f }
}
};
const cal_table_float_t icom_default_comp_meter_cal = {
3,
{
{ 0, 0.0f },
{ 130, 15.0f },
{ 241, 30.0f }
}
};
const cal_table_float_t icom_default_vd_meter_cal = {
3,
{
{ 0, 0.0f },
{ 13, 10.0f },
{ 241, 16.0f }
}
};
const cal_table_float_t icom_default_id_meter_cal = {
4,
{
{ 0, 0.0f },
{ 97, 10.0f },
{ 146, 15.0f },
{ 241, 25.0f }
}
};
const struct ts_sc_list r8500_ts_sc_list[] = {
{ 10, 0x00 },
{ 50, 0x01 },
@ -1149,6 +1205,19 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
}
}
switch (level) {
case RIG_LEVEL_CWPITCH:
if (val.i < 300) {
icom_val = 300;
} else if (val.i >= 900) {
icom_val = 900;
}
icom_val = (icom_val - 300) * (255.0f / 600.0f);
break;
default:
break;
}
/*
* Most of the time, the data field is a 3 digit BCD,
* but in *big endian* order: 0000..0255
@ -1239,7 +1308,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_KEYSPD;
break;
case RIG_LEVEL_NOTCHF:
case RIG_LEVEL_NOTCHF_RAW:
lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_NOTCHF;
break;
@ -1279,19 +1348,6 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
lvl_sc = S_LVL_VOXGAIN;
}
break;
case RIG_LEVEL_VOXDELAY:
if (priv->civ_version == 1) {
lvl_cn = C_CTL_MEM;
lvl_sc = 0x05; // plus 0191 and value 0-20 = 0-2 secs
lvl_len = 2;
lvlbuf[0] = 0x01;
lvlbuf[1] = 0x91;
}
else { /* IC-910H */
lvl_cn = C_CTL_MEM;
lvl_sc = S_MEM_VOXDELAY;
}
break;
case RIG_LEVEL_ANTIVOX:
if (rig->caps->rig_model == RIG_MODEL_IC910) {
/* IC-910H */
@ -1302,19 +1358,21 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
lvl_sc = S_LVL_ANTIVOX;
}
break;
case RIG_LEVEL_MONITOR_GAIN:
lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_MON;
break;
default:
rig_debug(RIG_DEBUG_ERR,"Unsupported set_level %d", level);
return -RIG_EINVAL;
}
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvlbuf, lvl_len,
ackbuf, &ack_len);
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvlbuf, lvl_len, ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
if (ack_len != 1 || ackbuf[0] != ACK) {
rig_debug(RIG_DEBUG_ERR,"icom_set_level: ack NG (%#.2x), "
"len=%d\n", ackbuf[0], ack_len);
rig_debug(RIG_DEBUG_ERR,"icom_set_level: ack NG (%#.2x), len=%d\n", ackbuf[0], ack_len);
return -RIG_ERJCTED;
}
@ -1325,11 +1383,6 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
* icom_get_level
* Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL
*
* TODO (missing RIG_LEVEL):
* - S_RiML: Read real RFpower-meter level
* - S_CMP: Read COMP-meter level
* - S_VD : Read Vd-meter level
* - S_ID : Read Id-meter level
*/
int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
@ -1362,6 +1415,22 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
lvl_cn = C_RD_SQSM;
lvl_sc = S_SWR;
break;
case RIG_LEVEL_RFPOWER_METER:
lvl_cn = C_RD_SQSM;
lvl_sc = S_RFML;
break;
case RIG_LEVEL_COMP_METER:
lvl_cn = C_RD_SQSM;
lvl_sc = S_CMP;
break;
case RIG_LEVEL_VD_METER:
lvl_cn = C_RD_SQSM;
lvl_sc = S_VD;
break;
case RIG_LEVEL_ID_METER:
lvl_cn = C_RD_SQSM;
lvl_sc = S_ID;
break;
case RIG_LEVEL_PREAMP:
lvl_cn = C_CTL_FUNC;
lvl_sc = S_FUNC_PAMP;
@ -1425,7 +1494,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_KEYSPD;
break;
case RIG_LEVEL_NOTCHF:
case RIG_LEVEL_NOTCHF_RAW:
lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_NOTCHF;
break;
@ -1455,10 +1524,6 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
lvl_sc = S_LVL_VOXGAIN;
}
break;
case RIG_LEVEL_VOXDELAY: /* IC-910H */
lvl_cn = C_CTL_MEM;
lvl_sc = S_MEM_VOXDELAY;
break;
case RIG_LEVEL_ANTIVOX:
if (rig->caps->rig_model == RIG_MODEL_IC910) {
/* IC-910H */
@ -1469,21 +1534,17 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
lvl_sc = S_LVL_ANTIVOX;
}
break;
/* Not implemented yet
case TOK_LEVEL_MONITOR:
lvl_cn = C_CTL_MEM;
lvl_sc = S_MEM_MONITOR;
break;
*/
case RIG_LEVEL_MONITOR_GAIN:
lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_MON;
break;
default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get_level %d", level);
return -RIG_EINVAL;
}
/* use lvl2buf and lvl2_len for 'set mode' subcommand */
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvl2buf, lvl2_len,
lvlbuf, &lvl_len);
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvl2buf, lvl2_len, lvlbuf, &lvl_len);
if (retval != RIG_OK)
return retval;
@ -1499,8 +1560,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
}
if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) {
rig_debug(RIG_DEBUG_ERR,"icom_get_level: ack NG (%#.2x), "
"len=%d\n", lvlbuf[0],lvl_len);
rig_debug(RIG_DEBUG_ERR,"icom_get_level: ack NG (%#.2x), len=%d\n", lvlbuf[0],lvl_len);
return -RIG_ERJCTED;
}
@ -1529,14 +1589,51 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return -RIG_EPROTO;
}
break;
case RIG_LEVEL_ALC:
/* 120 max on IC-7600 */
val->f = (float)icom_val/120;
break;
case RIG_LEVEL_SWR:
/* {0->1, 48->1.5, 80->2} on IC-7600 */
val->f = 1. + (float)icom_val/80;
break;
case RIG_LEVEL_ALC:
if (rig->caps->alc_cal.size == 0) {
val->f = rig_raw2val_float(icom_val, &icom_default_alc_cal);
} else {
val->f = rig_raw2val_float(icom_val, &rig->caps->alc_cal);
}
break;
case RIG_LEVEL_SWR:
if (rig->caps->swr_cal.size == 0) {
val->f = rig_raw2val_float(icom_val, &icom_default_swr_cal);
} else {
val->f = rig_raw2val_float(icom_val, &rig->caps->swr_cal);
}
break;
case RIG_LEVEL_RFPOWER_METER:
if (rig->caps->rfpower_meter_cal.size == 0) {
val->f = rig_raw2val_float(icom_val, &icom_default_rfpower_meter_cal);
} else {
val->f = rig_raw2val_float(icom_val, &rig->caps->rfpower_meter_cal);
}
break;
case RIG_LEVEL_COMP_METER:
if (rig->caps->comp_meter_cal.size == 0) {
val->f = rig_raw2val_float(icom_val, &icom_default_comp_meter_cal);
} else {
val->f = rig_raw2val_float(icom_val, &rig->caps->comp_meter_cal);
}
break;
case RIG_LEVEL_VD_METER:
if (rig->caps->vd_meter_cal.size == 0) {
val->f = rig_raw2val_float(icom_val, &icom_default_vd_meter_cal);
} else {
val->f = rig_raw2val_float(icom_val, &rig->caps->vd_meter_cal);
}
break;
case RIG_LEVEL_ID_METER:
if (rig->caps->id_meter_cal.size == 0) {
val->f = rig_raw2val_float(icom_val, &icom_default_id_meter_cal);
} else {
val->f = rig_raw2val_float(icom_val, &rig->caps->id_meter_cal);
}
break;
case RIG_LEVEL_CWPITCH:
val->i = 300 + (icom_val * 600.0f / 255.0f);
break;
case RIG_LEVEL_PREAMP:
if (icom_val == 0) {
val->i = 0;
@ -1597,9 +1694,6 @@ int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (token) {
case TOK_LEVEL_MONITOR:
rig_debug(RIG_DEBUG_VERBOSE, "TOK_LEVEL_MONITOR\n", __func__);
break;
default: return -RIG_EINVAL;
}
return RIG_OK;
@ -1614,15 +1708,89 @@ int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (token) {
case TOK_LEVEL_MONITOR:
rig_debug(RIG_DEBUG_VERBOSE, "TOK_LEVEL_MONITOR\n", __func__);
break;
default: return -RIG_EINVAL;
}
return RIG_OK;
}
int icom_set_level_raw(RIG *rig, setting_t level, int cmd, int subcmd, int len, unsigned char *buf, int val_bytes, value_t val)
{
unsigned char lvlbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN];
int ack_len = sizeof(ackbuf);
int lvl_len = len;
int icom_val;
int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (RIG_LEVEL_IS_FLOAT(level)) {
icom_val = val.f * 255;
} else {
icom_val = val.i;
}
if (len > 0) {
if (buf == NULL) {
return -RIG_EINTERNAL;
}
memcpy(lvlbuf, buf, len);
}
to_bcd_be(lvlbuf + len, (long long) icom_val, val_bytes * 2);
lvl_len += val_bytes;
retval = icom_transaction(rig, cmd, subcmd, lvlbuf, lvl_len, ackbuf, &ack_len);
if (retval != RIG_OK) {
return retval;
}
if (ack_len != 1 || ackbuf[0] != ACK) {
rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, ackbuf[0], ack_len);
return -RIG_ERJCTED;
}
return RIG_OK;
}
int icom_get_level_raw(RIG *rig, setting_t level, int cmd, int subcmd, int len, unsigned char *buf, value_t *val)
{
unsigned char lvlbuf[MAXFRAMELEN];
int lvl_len;
int icom_val;
int cmdhead = len;
int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
retval = icom_transaction(rig, cmd, subcmd, buf, len, lvlbuf, &lvl_len);
if (retval != RIG_OK) {
return retval;
}
cmdhead += (subcmd == -1) ? 1 : 2;
lvl_len -= cmdhead;
if (lvlbuf[0] != ACK && lvlbuf[0] != cmd) {
rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, lvlbuf[0], lvl_len);
return -RIG_ERJCTED;
}
icom_val = from_bcd_be(lvlbuf + cmdhead, lvl_len * 2);
if (RIG_LEVEL_IS_FLOAT(level)) {
val->f = (float) icom_val / 255;
} else {
val->i = icom_val;
}
rig_debug(RIG_DEBUG_TRACE, "%s: %d %d %d %f\n", __func__, lvl_len, icom_val, val->i, val->f);
return RIG_OK;
}
/*
* Assumes rig!=NULL, rig->state.priv!=NULL
*/
@ -1848,7 +2016,7 @@ int icom_get_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t *rptr_shift)
*rptr_shift = RIG_RPT_SHIFT_NONE; /* Simplex mode */
break;
case S_DUP_M:
*rptr_shift = RIG_RPT_SHIFT_MINUS; /* Duples - mode */
*rptr_shift = RIG_RPT_SHIFT_MINUS; /* Duplex - mode */
break;
case S_DUP_P:
*rptr_shift = RIG_RPT_SHIFT_PLUS; /* Duplex + mode */

Wyświetl plik

@ -194,6 +194,10 @@ 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_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val);
int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val);
int icom_set_level_raw(RIG *rig, setting_t level, int cmd, int subcmd,
int len, unsigned char *buf, int val_bytes, value_t val);
int icom_get_level_raw(RIG *rig, setting_t level, int cmd, int subcmd,
int len, unsigned char *buf, 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);

Wyświetl plik

@ -50,10 +50,10 @@
* Cn controller commands
*
Most radios have 2 or 3 recieve passbands available. Where only 2 are available they
Most radios have 2 or 3 receive passbands available. Where only 2 are available they
are selected by 01 for wide and 02 for narrow Actual bandwidth is determined by the filters
installed. With the newer DSP rigs there are 3 presets 01 = wide 02 = middle and 03 = narrow.
Acutally you can set change any of these presets to any thing you want.
Actually, you can set change any of these presets to any thing you want.
* Notes:
* The following only applies to IC-706.
@ -63,8 +63,8 @@
* 2. Memory channel number 1A=0100/1b=0101, 2A=0102/2b=0103,
* 3A=0104/3b=0105, C1=0106, C2=0107
*/
#define C_SND_FREQ 0x00 /* Send frequency data trancieve mode does not ack*/
#define C_SND_MODE 0x01 /* Send mode data, Sc for trancieve mode does not ack */
#define C_SND_FREQ 0x00 /* Send frequency data transceive mode does not ack*/
#define C_SND_MODE 0x01 /* Send mode data, Sc for transceive mode does not ack */
#define C_RD_BAND 0x02 /* Read band edge frequencies */
#define C_RD_FREQ 0x03 /* Read display frequency */
#define C_RD_MODE 0x04 /* Read display mode */
@ -487,7 +487,5 @@
#define TOK_RTTY_FLTR TOKEN_BACKEND(100)
#define TOK_SSBBASS TOKEN_BACKEND(101)
#define TOK_SQLCTRL TOKEN_BACKEND(102)
#define TOK_LEVEL_MONITOR TOKEN_BACKEND(103)
#endif /* _ICOM_DEFS_H */

Wyświetl plik

@ -42,7 +42,7 @@
#define ICR9500_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL)
#define ICR9500_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_TSQL|RIG_FUNC_NR|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK)
#define ICR9500_LEVELS (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|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF)
#define ICR9500_LEVELS (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_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF)
#define ICR9500_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
#define ICR9500_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_SLCT|RIG_SCAN_PRIO) /* TBC */

Wyświetl plik

@ -55,7 +55,7 @@
#define X108G_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO)
#define X108G_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define X108G_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
#define X108G_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define X108G_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP)

Wyświetl plik

@ -637,6 +637,8 @@ typedef int ant_t;
#define RIG_ANT_4 RIG_ANT_N(3)
#define RIG_ANT_5 RIG_ANT_N(4)
#define RIG_ANT_MAX 32
/**
* \brief AGC delay settings
@ -724,13 +726,20 @@ enum rig_level_e {
RIG_LEVEL_SQLSTAT = (1 << 27), /*!< \c SQLSTAT -- SQL status, arg int (open=1/closed=0). Deprecated, use get_dcd instead */
RIG_LEVEL_SWR = (1 << 28), /*!< \c SWR -- SWR, arg float [0.0 ... infinite] */
RIG_LEVEL_ALC = (1 << 29), /*!< \c ALC -- ALC, arg float */
RIG_LEVEL_STRENGTH = (1 << 30) /*!< \c STRENGTH -- Effective (calibrated) signal strength relative to S9, arg int (dB) */
RIG_LEVEL_STRENGTH = (1 << 30), /*!< \c STRENGTH -- Effective (calibrated) signal strength relative to S9, arg int (dB) */
/* RIG_LEVEL_BWC = (1<<31) */ /*!< Bandwidth Control, arg int (Hz) */
RIG_LEVEL_RFPOWER_METER = CONSTANT_64BIT_FLAG(32), /*!< \c RFPOWER_METER -- RF power output meter, arg float [0.0 ... 1.0] (percentage of maximum power) */
RIG_LEVEL_COMP_METER = CONSTANT_64BIT_FLAG(33), /*!< \c COMP_METER -- Audio output level compression meter, arg float (dB) */
RIG_LEVEL_VD_METER = CONSTANT_64BIT_FLAG(34), /*!< \c VD_METER -- Input voltage level meter, arg float (V, volts) */
RIG_LEVEL_ID_METER = CONSTANT_64BIT_FLAG(35), /*!< \c ID_METER -- Current draw meter, arg float (A, amperes) */
RIG_LEVEL_NOTCHF_RAW = CONSTANT_64BIT_FLAG(36), /*!< \c NOTCHF_RAW -- Notch Freq., arg float [0.0 ... 1.0] */
RIG_LEVEL_MONITOR_GAIN = CONSTANT_64BIT_FLAG(37) /*!< \c MONITOR_GAIN -- Monitor gain (level for monitoring of transmitted audio), arg float [0.0 ... 1.0] */
};
#define RIG_LEVEL_FLOAT_LIST (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_APF|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX)
#define RIG_LEVEL_FLOAT_LIST (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_APF|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_MONITOR_GAIN)
#define RIG_LEVEL_READONLY_LIST (RIG_LEVEL_SQLSTAT|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_STRENGTH|RIG_LEVEL_RAWSTR)
#define RIG_LEVEL_READONLY_LIST (RIG_LEVEL_SQLSTAT|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_STRENGTH|RIG_LEVEL_RAWSTR|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER)
#define RIG_LEVEL_IS_FLOAT(l) ((l)&RIG_LEVEL_FLOAT_LIST)
#define RIG_LEVEL_SET(l) ((l)&~RIG_LEVEL_READONLY_LIST)
@ -839,8 +848,8 @@ typedef uint64_t setting_t;
#define RIG_FUNC_AFLT CONSTANT_64BIT_FLAG (34) /*!< \c AFLT -- AF Filter setting */
#define RIG_FUNC_ANL CONSTANT_64BIT_FLAG (35) /*!< \c ANL -- Noise limiter setting */
#define RIG_FUNC_BC2 CONSTANT_64BIT_FLAG (36) /*!< \c BC2 -- 2nd Beat Cancel */
#define RIG_FUNC_BIT37 CONSTANT_64BIT_FLAG (37) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT38 CONSTANT_64BIT_FLAG (38) /* available for future RIG_FUNC items */
#define RIG_FUNC_DUAL_WATCH CONSTANT_64BIT_FLAG (37) /*!< \c DUAL_WATCH -- Dual Watch / Sub Receiver */
#define RIG_FUNC_DIVERSITY CONSTANT_64BIT_FLAG (38) /*!< \c DIVERSITY -- Diversity receive */
#define RIG_FUNC_BIT39 CONSTANT_64BIT_FLAG (39) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT40 CONSTANT_64BIT_FLAG (40) /* available for future RIG_FUNC items */
#define RIG_FUNC_BIT41 CONSTANT_64BIT_FLAG (41) /* available for future RIG_FUNC items */
@ -1284,6 +1293,33 @@ typedef struct cal_table cal_table_t;
#define EMPTY_STR_CAL { 0, { { 0, 0 }, } }
/**
* \brief Calibration table struct for float values
*/
struct cal_table_float {
int size; /*!< number of plots in the table */
struct {
int raw; /*!< raw (A/D) value */
float val; /*!< associated value */
} table[MAX_CAL_LENGTH]; /*!< table of plots */
};
/**
* \brief calibration table type for float values
*
* cal_table_float_t is a data type suited to hold linear calibration.
* cal_table_float_t.size tells the number of plots cal_table_float_t.table contains.
*
* If a value is below or equal to cal_table_float_t.table[0].raw,
* rig_raw2val_float() will return cal_table_float_t.table[0].val.
*
* If a value is greater or equal to cal_table_float_t.table[cal_table_float_t.size-1].raw,
* rig_raw2val_float() will return cal_table_float_t.table[cal_table_float_t.size-1].val.
*/
typedef struct cal_table_float cal_table_float_t;
#define EMPTY_FLOAT_CAL { 0, { { 0, 0f }, } }
typedef int (* chan_cb_t)(RIG *, channel_t **, int, const chan_t *, rig_ptr_t);
typedef int (* confval_cb_t)(RIG *,
const struct confparams *,
@ -1377,7 +1413,13 @@ struct rig_caps {
struct tuning_step_list tuning_steps[TSLSTSIZ]; /*!< Tuning step list */
struct filter_list filters[FLTLSTSIZ]; /*!< mode/filter table, at -6dB */
cal_table_t str_cal; /*!< S-meter calibration table */
cal_table_t str_cal; /*!< S-meter calibration table */
cal_table_float_t swr_cal; /*!< SWR meter calibration table */
cal_table_float_t alc_cal; /*!< ALC meter calibration table */
cal_table_float_t rfpower_meter_cal; /*!< RF power meter calibration table */
cal_table_float_t comp_meter_cal; /*!< COMP meter calibration table */
cal_table_float_t vd_meter_cal; /*!< Voltage meter calibration table */
cal_table_float_t id_meter_cal; /*!< Current draw meter calibration table */
const struct confparams *cfgparams; /*!< Configuration parametres. */
const rig_ptr_t priv; /*!< Private data. */

Wyświetl plik

@ -157,6 +157,9 @@
#define RIG_MODEL_HPSDR RIG_MAKE_MODEL(RIG_KENWOOD, 40) /* OpenHPSDR, PiHPSDR */
#define RIG_MODEL_TS890S RIG_MAKE_MODEL(RIG_KENWOOD, 41)
#define RIG_MODEL_THD74 RIG_MAKE_MODEL(RIG_KENWOOD, 42)
#define RIG_MODEL_K3S RIG_MAKE_MODEL(RIG_KENWOOD, 43)
#define RIG_MODEL_KX2 RIG_MAKE_MODEL(RIG_KENWOOD, 44)
#define RIG_MODEL_KX3 RIG_MAKE_MODEL(RIG_KENWOOD, 45)
/*

Wyświetl plik

@ -57,7 +57,7 @@ static char k3_fw_rev[KENWOOD_MAX_BUF_LEN];
* See enum rig_conf_e and struct confparams in rig.h
*/
const struct confparams elecraft_ext_levels[] = {
{ TOK_IF_FREQ, "ifctr", "IF center frequency", "IF center freq",
{ TOK_IF_FREQ, "ifctr", "IF freq", "IF center frequency",
NULL, RIG_CONF_NUMERIC, { .n = { 0, 9990, 10 } }
},
{ TOK_TX_STAT, "txst", "TX status", "TX status",
@ -154,6 +154,9 @@ int elecraft_open(RIG *rig)
break;
case RIG_MODEL_K3:
case RIG_MODEL_K3S:
case RIG_MODEL_KX2:
case RIG_MODEL_KX3:
err = elecraft_get_extension_level(rig, "K2", &priv->k2_ext_lvl);
if (err != RIG_OK)
return err;

Wyświetl plik

@ -59,9 +59,14 @@ enum k3_data_submodes_e {
*
* See Private Elecraft extra levels definitions in elecraft.c
*/
#define TOK_IF_FREQ TOKEN_BACKEND(101) /* K3 FI command */
#define TOK_TX_STAT TOKEN_BACKEND(102) /* K3 TQ command */
#define TOK_RIT_CLR TOKEN_BACKEND(103) /* K3 RC command */
#define TOK_IF_FREQ TOKEN_BACKEND(101) /* K3 FI command - IF center frequency (K3/K3S only) */
#define TOK_TX_STAT TOKEN_BACKEND(102) /* K3 TQ command - transmit query (K3/K3S/KX3/KX2) */
#define TOK_RIT_CLR TOKEN_BACKEND(103) /* K3 RC command - RIT/XIT clear (K3/K3S/KX3/KX2) */
#define TOK_ESSB TOKEN_BACKEND(104) /* K3 ES command - ESSB mode (K3/K3S/KX3/KX2) */
#define TOK_RX_ANT TOKEN_BACKEND(105) /* K3 AR command - RX antenna on/off (K3/K3S only) */
#define TOK_LINK_VFOS TOKEN_BACKEND(106) /* K3 LN command - link VFOs on/off (K3/K3S only) */
#define TOK_TX_METER TOKEN_BACKEND(107) /* K3 TM command - Transmit meter mode, SWR/ALC (K3/K3S only) */
#define TOK_IF_NB TOKEN_BACKEND(108) /* K3 NL command - IF noise blanker level (K3/K3S only) */
/* Token structure assigned to .cfgparams in rig_caps */
extern const struct confparams elecraft_ext_levels[];

Plik diff jest za duży Load Diff

Wyświetl plik

@ -2929,6 +2929,9 @@ int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg)
*/
switch(rig->caps->rig_model) {
case RIG_MODEL_K3: // probably a lot more rigs need to go here
case RIG_MODEL_K3S:
case RIG_MODEL_KX2:
case RIG_MODEL_KX3:
snprintf(morsebuf, sizeof (morsebuf), "KY %s", m2);
break;
default:
@ -3505,6 +3508,9 @@ DECLARE_INITRIG_BACKEND(kenwood)
rig_register(&trc80_caps);
rig_register(&k2_caps);
rig_register(&k3_caps);
rig_register(&k3s_caps);
rig_register(&kx2_caps);
rig_register(&kx3_caps);
rig_register(&xg3_caps);
rig_register(&ts440_caps);

Wyświetl plik

@ -176,6 +176,9 @@ extern const struct rig_caps ts930_caps;
extern const struct rig_caps ts2000_caps;
extern const struct rig_caps k2_caps;
extern const struct rig_caps k3_caps;
extern const struct rig_caps k3s_caps;
extern const struct rig_caps kx2_caps;
extern const struct rig_caps kx3_caps;
extern const struct rig_caps xg3_caps;
extern const struct rig_caps trc80_caps;

Wyświetl plik

@ -41,10 +41,10 @@
/**
* \brief Convert raw S-meter data to calibated value, according to table
* \brief Convert raw data to a calibrated integer value, according to table
* \param rawval input value
* \param cal calibration table
* \return calibrated value
* \return calibrated integer value
* cal_table_t is a data type suited to hold linear calibration
* cal_table_t.size tell the number of plot cal_table_t.table contains
@ -111,4 +111,63 @@ float HAMLIB_API rig_raw2val(int rawval, const cal_table_t *cal)
return cal->table[i].val - interpolation;
}
/**
* \brief Convert raw data to a calibrated floating-point value, according to table
* \param rawval input value
* \param cal calibration table
* \return calibrated floating-point value
* cal_table_float_t is a data type suited to hold linear calibration
* cal_table_float_t.size tell the number of plot cal_table_t.table contains
* If a value is below or equal to cal_table_float_t.table[0].raw,
* rig_raw2val_float() will return cal_table_float_t.table[0].val
* If a value is greater or equal to cal_table_float_t.table[cal_table_float_t.size-1].raw,
* rig_raw2val_float() will return cal_table_float_t.table[cal_table_float_t.size-1].val
*/
float HAMLIB_API rig_raw2val_float(int rawval, const cal_table_float_t *cal)
{
float interpolation;
int i;
/* ASSERT(cal != NULL) */
/* ASSERT(cal->size <= MAX_CAL_LENGTH) */
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (cal->size == 0)
{
return rawval;
}
for (i = 0; i < cal->size; i++)
{
if (rawval < cal->table[i].raw)
{
break;
}
}
if (i == 0)
{
return cal->table[0].val;
}
if (i >= cal->size)
{
return cal->table[i - 1].val;
}
/* catch divide by 0 error */
if (cal->table[i].raw == cal->table[i - 1].raw)
{
return cal->table[i].val;
}
interpolation = ((cal->table[i].raw - rawval)
* (float)(cal->table[i].val - cal->table[i - 1].val))
/ (float)(cal->table[i].raw - cal->table[i - 1].raw);
return cal->table[i].val - interpolation;
}
/** @} */

Wyświetl plik

@ -25,5 +25,6 @@
#include <hamlib/rig.h>
extern HAMLIB_EXPORT(float) rig_raw2val(int rawval, const cal_table_t *cal);
extern HAMLIB_EXPORT(float) rig_raw2val_float(int rawval, const cal_table_float_t *cal);
#endif /* _CAL_H */

Wyświetl plik

@ -104,6 +104,14 @@
#define LVL_STRENGTH setting2idx_builtin(RIG_LEVEL_STRENGTH)
/*#define LVL_BWC setting2idx_builtin(RIG_LEVEL_BWC)*/
#define LVL_RFPOWER_METER setting2idx_builtin(RIG_LEVEL_RFPOWER_METER)
#define LVL_COMP_METER setting2idx_builtin(RIG_LEVEL_COMP_METER)
#define LVL_VD_METER setting2idx_builtin(RIG_LEVEL_VD_METER)
#define LVL_ID_METER setting2idx_builtin(RIG_LEVEL_ID_METER)
#define LVL_NOTCHF_RAW setting2idx_builtin(RIG_LEVEL_NOTCHF_RAW)
#define LVL_MONITOR_GAIN setting2idx_builtin(RIG_LEVEL_MONITOR_GAIN)
#define PARM_ANN setting2idx_builtin(RIG_PARM_ANN)
#define PARM_APO setting2idx_builtin(RIG_PARM_APO)
#define PARM_BACKLIGHT setting2idx_builtin(RIG_PARM_BACKLIGHT)

Wyświetl plik

@ -521,6 +521,8 @@ static struct
{ RIG_FUNC_AFLT, "AFLT" },
{ RIG_FUNC_ANL, "ANL" },
{ RIG_FUNC_BC2, "BC2" },
{ RIG_FUNC_DUAL_WATCH, "DUAL_WATCH"},
{ RIG_FUNC_DIVERSITY, "DIVERSITY"},
{ RIG_FUNC_NONE, "" },
};
@ -625,6 +627,12 @@ static struct
{ RIG_LEVEL_SWR, "SWR" },
{ RIG_LEVEL_ALC, "ALC" },
{ RIG_LEVEL_STRENGTH, "STRENGTH" },
{ RIG_LEVEL_RFPOWER_METER, "RFPOWER_METER" },
{ RIG_LEVEL_COMP_METER, "COMP_METER" },
{ RIG_LEVEL_VD_METER, "VD_METER" },
{ RIG_LEVEL_ID_METER, "ID_METER" },
{ RIG_LEVEL_NOTCHF_RAW, "NOTCHF_RAW" },
{ RIG_LEVEL_MONITOR_GAIN, "MONITOR_GAIN" },
{ RIG_LEVEL_NONE, "" },
};

Wyświetl plik

@ -34,13 +34,14 @@
#include "rigctl_parse.h"
static int print_ext(RIG *rig, const struct confparams *cfp, rig_ptr_t ptr);
void range_print(FILE *fout, const struct freq_range_list range_list[], int rx);
int range_sanity_check(const struct freq_range_list range_list[], int rx);
int ts_sanity_check(const struct tuning_step_list tuning_step[]);
static void dump_chan_caps(const channel_cap_t *chan, FILE *fout);
/*
* the rig may be in rig_init state, but not openned
* the rig may be in rig_init state, but not opened
*/
int dumpcaps(RIG *rig, FILE *fout)
{
@ -359,9 +360,8 @@ int dumpcaps(RIG *rig, FILE *fout)
backend_warnings++;
}
fprintf(fout, "Extra levels:");
fprintf(fout, "Extra levels:\n");
rig_ext_level_foreach(rig, print_ext, fout);
fprintf(fout, "\n");
sprintf_parm_gran(prntbuf, caps->has_get_parm, caps->parm_gran);
fprintf(fout, "Get parameters: %s\n", prntbuf);
@ -375,9 +375,8 @@ int dumpcaps(RIG *rig, FILE *fout)
backend_warnings++;
}
fprintf(fout, "Extra parameters:");
fprintf(fout, "Extra parameters:\n");
rig_ext_parm_foreach(rig, print_ext, fout);
fprintf(fout, "\n");
if (rig->state.mode_list != 0)
@ -433,7 +432,18 @@ int dumpcaps(RIG *rig, FILE *fout)
fprintf(fout, "\n");
/* TODO: print rx/tx ranges here */
fprintf(fout, "TX ranges, region 1:\n");
range_print(fout, caps->tx_range_list1, 0);
fprintf(fout, "RX ranges, region 1:\n");
range_print(fout, caps->rx_range_list1, 1);
fprintf(fout, "TX ranges, region 2:\n");
range_print(fout, caps->tx_range_list2, 0);
fprintf(fout, "RX ranges, region 2:\n");
range_print(fout, caps->rx_range_list2, 1);
status = range_sanity_check(caps->tx_range_list1, 0);
fprintf(fout,
"TX ranges status, region 1:\t%s (%d)\n",
@ -711,14 +721,67 @@ int dumpcaps(RIG *rig, FILE *fout)
return backend_warnings;
}
static int print_ext(RIG *rig, const struct confparams *cfp, rig_ptr_t ptr)
{
fprintf((FILE *)ptr, " %s", cfp->name);
fprintf((FILE *)ptr, "\t%s\n", cfp->name);
fprintf((FILE *)ptr, "\t\tType: %s\n", get_rig_conf_type(cfp->type));
fprintf((FILE *)ptr, "\t\tDefault: %s\n", cfp->dflt != NULL ? cfp->dflt : "");
fprintf((FILE *)ptr, "\t\tLabel: %s\n", cfp->label != NULL ? cfp->label : "");
fprintf((FILE *)ptr, "\t\tTooltip: %s\n", cfp->tooltip != NULL ? cfp->tooltip : "");
switch (cfp->type) {
case RIG_CONF_NUMERIC:
fprintf((FILE *)ptr, "\t\tRange: %g..%g/%g\n", cfp->u.n.min, cfp->u.n.max, cfp->u.n.step);
break;
case RIG_CONF_COMBO:
fprintf((FILE *)ptr, "\t\tValues:");
if (cfp->u.c.combostr != NULL) {
for (int i = 0; i < RIG_COMBO_MAX && cfp->u.c.combostr[i] != NULL; i++) {
fprintf((FILE *)ptr, " %d=\"%s\"", i, cfp->u.c.combostr[i]);
}
}
fprintf((FILE *)ptr, "\n");
break;
default:
break;
}
return 1; /* process them all */
}
void range_print(FILE *fout, const struct freq_range_list range_list[], int rx)
{
int i;
char prntbuf[1024]; /* a malloc would be better.. */
for (i = 0; i < FRQRANGESIZ; i++) {
if (range_list[i].start == 0 && range_list[i].end == 0) {
break;
}
fprintf(fout, "\t%.0f Hz - %.0f Hz\n", range_list[i].start, range_list[i].end);
fprintf(fout, "\t\tVFO list: ");
sprintf_vfo(prntbuf, range_list[i].vfo);
fprintf(fout, prntbuf);
fprintf(fout, "\n");
fprintf(fout, "\t\tMode list: ");
sprintf_mode(prntbuf, range_list[i].modes);
fprintf(fout, prntbuf);
fprintf(fout, "\n");
fprintf(fout, "\t\tAntenna list: ");
sprintf_ant(prntbuf, range_list[i].ant);
fprintf(fout, prntbuf);
fprintf(fout, "\n");
if (!rx) {
fprintf(fout, "\t\tLow power: %.0f W, High power: %.0f W\n",
range_list[i].low_power / 1000.0f, range_list[i].high_power / 1000.0f);
}
}
}
/*
* check for:

Wyświetl plik

@ -130,6 +130,26 @@ int sprintf_mode(char *str, rmode_t mode)
}
int sprintf_ant(char *str, ant_t ant)
{
int i, len = 0;
*str = '\0';
if (ant == RIG_ANT_NONE) {
return 0;
}
for (i = 0; i < RIG_ANT_MAX; i++) {
if (ant & (1UL << i)) {
len += sprintf(str + len, "%d ", i + 1);
}
}
return len;
}
int sprintf_func(char *str, setting_t func)
{
uint64_t i, len = 0;
@ -424,3 +444,21 @@ int sprintf_scan(char *str, scan_t rscan)
return len;
}
char *get_rig_conf_type(enum rig_conf_e type)
{
switch (type) {
case RIG_CONF_STRING:
return "STRING";
case RIG_CONF_COMBO:
return "COMBO";
case RIG_CONF_NUMERIC:
return "NUMERIC";
case RIG_CONF_CHECKBUTTON:
return "CHECKBUTTON";
case RIG_CONF_BUTTON:
return "BUTTON";
}
return "UNKNOWN";
}

Wyświetl plik

@ -30,6 +30,7 @@ __BEGIN_DECLS
extern int sprintf_mode(char *str, rmode_t);
extern int sprintf_vfo(char *str, vfo_t);
extern int sprintf_ant(char *str, ant_t);
extern int sprintf_func(char *str, setting_t);
extern int sprintf_level(char *str, setting_t);
extern int sprintf_level_ext(char *str, const struct confparams *);
@ -38,6 +39,7 @@ extern int sprintf_parm(char *str, setting_t);
extern int sprintf_parm_gran(char *str, setting_t, const gran_t gran[]);
extern int sprintf_vfop(char *str, vfo_op_t);
extern int sprintf_scan(char *str, scan_t);
extern char *get_rig_conf_type(enum rig_conf_e type);
__END_DECLS