mirror of
https://github.com/Hamlib/Hamlib.git
synced 2024-09-21 02:17:21 +00:00
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.
This commit is contained in:
parent
57c16d20f2
commit
3dbbe02b78
8
.editorconfig
Normal file
8
.editorconfig
Normal file
@ -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
1
.gitignore
vendored
@ -9,6 +9,7 @@
|
||||
*.la
|
||||
*.orig
|
||||
*.swp
|
||||
$depbase.Tpo
|
||||
Makefile
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
|
101
dummy/dummy.c
101
dummy/dummy.c
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
115
icom/ic7100.c
115
icom/ic7100.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
471
icom/ic7300.c
471
icom/ic7300.c
@ -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_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;
|
||||
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;
|
||||
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_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
|
||||
}
|
||||
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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
94
icom/ic756.c
94
icom/ic756.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
129
icom/ic7800.c
129
icom/ic7800.c
@ -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;
|
||||
}
|
||||
|
||||
|
103
icom/ic785x.c
103
icom/ic785x.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
36
icom/ic910.c
36
icom/ic910.c
@ -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 */
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
276
icom/icom.c
276
icom/icom.c
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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. */
|
||||
|
@ -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)
|
||||
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
@ -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[];
|
||||
|
1230
kenwood/k3.c
1230
kenwood/k3.c
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
63
src/cal.c
63
src/cal.c
@ -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;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
@ -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, "" },
|
||||
};
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user