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

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

8
.editorconfig 100644
Wyświetl plik

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

1
.gitignore vendored
Wyświetl plik

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

Wyświetl plik

@ -76,6 +76,9 @@ static const struct confparams dummy_ext_levels[] = {
{ TOK_EL_MAGICOP, "MGO", "Magic Op", "Magic Op, as an example", { TOK_EL_MAGICOP, "MGO", "Magic Op", "Magic Op, as an example",
NULL, RIG_CONF_BUTTON 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, } { 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", { TOK_CFG_MAGICCONF, "mcfg", "Magic conf", "Magic parameter, as an example",
"DX", RIG_CONF_STRING, { } "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, { } "0", RIG_CONF_CHECKBUTTON, { }
}, },
{ RIG_CONF_END, NULL, } { 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) if (idx >= RIG_SETTING_MAX)
return -RIG_EINVAL; return -RIG_EINVAL;
if (level == RIG_LEVEL_STRENGTH || level == RIG_LEVEL_RAWSTR) { switch (level) {
if (priv->static_data) { case RIG_LEVEL_STRENGTH:
curr->levels[idx].i = -12; case RIG_LEVEL_RAWSTR:
} else { if (priv->static_data) {
/* make S-Meter jiggle */ curr->levels[idx].i = -12;
int qrm = -56; } else {
if (curr->freq < MHz(7)) /* make S-Meter jiggle */
int qrm = -56;
if (curr->freq < MHz(7))
qrm = -20; qrm = -20;
else if (curr->freq < MHz(21)) else if (curr->freq < MHz(21))
qrm = -30; qrm = -30;
else if (curr->freq < MHz(50)) else if (curr->freq < MHz(50))
qrm = -50; qrm = -50;
curr->levels[idx].i = qrm + time(NULL)%32 + rand()%4 curr->levels[idx].i = qrm + time(NULL)%32 + rand()%4
- curr->levels[LVL_ATT].i - curr->levels[LVL_ATT].i
+ curr->levels[LVL_PREAMP].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]; *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_MAGICLEVEL:
case TOK_EL_MAGICFUNC: case TOK_EL_MAGICFUNC:
case TOK_EL_MAGICOP: case TOK_EL_MAGICOP:
case TOK_EL_MAGICCOMBO:
break; break;
default: 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_MAGICLEVEL:
case TOK_EL_MAGICFUNC: case TOK_EL_MAGICFUNC:
case TOK_EL_MAGICOP: case TOK_EL_MAGICOP:
case TOK_EL_MAGICCOMBO:
break; break;
default: 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, * The following macros set bitmasks for the various funcs, levels, parms,
* etc. This dummy backend claims support for almost all of them. * etc. This dummy backend claims support for almost all of them.
*/ */
#define DUMMY_FUNC ((setting_t)-1UL) /* All possible functions */ #define DUMMY_FUNC ((setting_t)-1ULL) /* All possible functions */
#define DUMMY_LEVEL (((setting_t)-1UL)&~(1UL<<27)) /* All levels except SQLSTAT */ #define DUMMY_LEVEL (((setting_t)-1ULL)&~(1ULL<<27)) /* All levels except SQLSTAT */
#define DUMMY_PARM ((setting_t)-1UL) /* All possible parms */ #define DUMMY_PARM ((setting_t)-1ULL) /* All possible parms */
#define DUMMY_VFO_OP 0x7ffffffUL /* All possible VFO OPs */ #define DUMMY_VFO_OP 0x7ffffffUL /* All possible VFO OPs */
#define DUMMY_SCAN 0x7ffffffUL /* All possible scan 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, .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}, .low_power=-1,.high_power=-1,DUMMY_VFOS, RIG_ANT_1|RIG_ANT_2},
RIG_FRNG_END, }, 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, .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}, .low_power=-1,.high_power=-1,DUMMY_VFOS, RIG_ANT_1|RIG_ANT_2},
RIG_FRNG_END, }, RIG_FRNG_END, },
.tx_range_list2 = { RIG_FRNG_END, }, .tx_range_list2 = { RIG_FRNG_END, },
.tuning_steps = { {DUMMY_MODES,1}, {DUMMY_MODES,RIG_TS_ANY}, RIG_TS_END, }, .tuning_steps = { {DUMMY_MODES,1}, {DUMMY_MODES,RIG_TS_ANY}, RIG_TS_END, },
.filters = { .filters = {
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_RTTY, kHz(2.4)}, {RIG_MODE_SSB, kHz(2.4)},
{RIG_MODE_CW, Hz(500)}, {RIG_MODE_SSB, kHz(1.8)},
{RIG_MODE_AM, kHz(8)}, {RIG_MODE_SSB, kHz(3.0)},
{RIG_MODE_AM, kHz(2.4)}, {RIG_MODE_SSB, RIG_FLT_ANY},
{RIG_MODE_FM, kHz(15)}, {RIG_MODE_CW, Hz(500)},
{RIG_MODE_FM, kHz(8)}, {RIG_MODE_CW, kHz(2.4)},
{RIG_MODE_WFM, kHz(230)}, {RIG_MODE_CW, Hz(50)},
RIG_FLT_END, {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_rit = 9990,
.max_xit = 9990, .max_xit = 9990,

Wyświetl plik

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

Wyświetl plik

@ -334,6 +334,8 @@ int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width,
case RIG_MODE_LSB: icmode = S_LSB; break; case RIG_MODE_LSB: icmode = S_LSB; break;
case RIG_MODE_RTTY: icmode = S_RTTY; break; case RIG_MODE_RTTY: icmode = S_RTTY; break;
case RIG_MODE_RTTYR: icmode = S_RTTYR; 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_FM: icmode = S_FM; break;
case RIG_MODE_FMN: icmode = S_FMN; break; case RIG_MODE_FMN: icmode = S_FMN; break;
case RIG_MODE_WFM: icmode = S_WFM; 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_LSB: *mode = RIG_MODE_LSB; break;
case S_RTTY: *mode = RIG_MODE_RTTY; break; case S_RTTY: *mode = RIG_MODE_RTTY; break;
case S_RTTYR: *mode = RIG_MODE_RTTYR; break; case S_RTTYR: *mode = RIG_MODE_RTTYR; break;
case S_PSK: *mode = RIG_MODE_PKTUSB; break; /* IC-7800 */ case S_PSK: *mode = RIG_MODE_PSK; break;
case S_PSKR: *mode = RIG_MODE_PKTLSB; break; case S_PSKR: *mode = RIG_MODE_PSKR; break;
case S_DSTAR: *mode = RIG_MODE_DSTAR; break; case S_DSTAR: *mode = RIG_MODE_DSTAR; break;
case S_P25: *mode = RIG_MODE_P25; break; case S_P25: *mode = RIG_MODE_P25; break;
case S_DPMR: *mode = RIG_MODE_DPMR; break; case S_DPMR: *mode = RIG_MODE_DPMR; break;

Wyświetl plik

@ -46,7 +46,7 @@
#define IC7000_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO) #define IC7000_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_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) #define IC7000_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP)
@ -80,6 +80,35 @@
{ 255, 63 } \ { 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. * IC7000 channel caps.
@ -101,6 +130,8 @@
} }
int ic7000_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op); 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. * IC-7000 rig capabilities.
@ -144,6 +175,7 @@ const struct rig_caps ic7000_caps = {
.has_set_parm = RIG_PARM_SET(IC7000_PARMS), .has_set_parm = RIG_PARM_SET(IC7000_PARMS),
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = common_ctcss_list, .ctcss_list = common_ctcss_list,
@ -229,6 +261,10 @@ const struct rig_caps ic7000_caps = {
}, },
.str_cal = IC7000_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -248,11 +284,9 @@ const struct rig_caps ic7000_caps = {
.set_ant = NULL, /*automatically set by rig depending band */ .set_ant = NULL, /*automatically set by rig depending band */
.get_ant = NULL, .get_ant = NULL,
.set_rit = icom_set_rit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level, .set_level = ic7000_set_level,
.get_level = icom_get_level, .get_level = ic7000_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_parm = NULL, .set_parm = NULL,
@ -317,3 +351,35 @@ int ic7000_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
return RIG_OK; return RIG_OK;
} }
int ic7000_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x17;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x17;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -82,16 +82,78 @@
RIG_LEVEL_AGC| \ RIG_LEVEL_AGC| \
RIG_LEVEL_PBT_IN| \ RIG_LEVEL_PBT_IN| \
RIG_LEVEL_PBT_OUT| \ RIG_LEVEL_PBT_OUT| \
RIG_LEVEL_NOTCHF| \ RIG_LEVEL_NOTCHF_RAW| \
RIG_LEVEL_ATT| \ 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_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) #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 = { static const struct icom_priv_caps ic7100_priv_caps = {
@ -125,12 +187,13 @@ const struct rig_caps ic7100_caps = {
.retry = 3, .retry = 3,
.has_get_func = IC7100_FUNC_ALL, .has_get_func = IC7100_FUNC_ALL,
.has_set_func = IC7100_FUNC_ALL | RIG_FUNC_RESUME, .has_set_func = IC7100_FUNC_ALL | RIG_FUNC_RESUME,
.has_get_level = IC7100_LEVEL_ALL | RIG_LEVEL_RAWSTR| RIG_LEVEL_SWR, .has_get_level = IC7100_LEVEL_ALL,
.has_set_level = IC7100_LEVEL_ALL, .has_set_level = RIG_LEVEL_SET(IC7100_LEVEL_ALL),
.has_get_parm = IC7100_PARM_ALL, .has_get_parm = IC7100_PARM_ALL,
.has_set_parm = IC7100_PARM_ALL, .has_set_parm = IC7100_PARM_ALL,
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = common_ctcss_list, .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_MODE_FM|RIG_MODE_AM, kHz(6)}, /* builtin */
RIG_FLT_END, }, RIG_FLT_END, },
.str_cal = IC7100_STR_CAL, .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, .priv = (void*)&ic7100_priv_caps,
.rig_init = icom_init, .rig_init = icom_init,
@ -235,8 +304,8 @@ const struct rig_caps ic7100_caps = {
.set_ts = icom_set_ts, .set_ts = icom_set_ts,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_level = icom_get_level, .get_level = ic7100_get_level,
.set_level = icom_set_level, .set_level = ic7100_set_level,
.set_ptt = icom_set_ptt, .set_ptt = icom_set_ptt,
.get_ptt = icom_get_ptt, .get_ptt = icom_get_ptt,
@ -271,4 +340,34 @@ const struct rig_caps ic7100_caps = {
.send_morse = icom_send_morse .send_morse = icom_send_morse
}; };
/* end of file */ int ic7100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x65;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x65;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -52,7 +52,7 @@
#define IC7200_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO) #define IC7200_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_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) #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 */ #define IC7200_ANTS (RIG_ANT_1) /* ant-1 is Hf-6m */
/* #define IC7200_STR_CAL { 3, \
* FIXME: This is a guess real measures please!
*/
#define IC7200_STR_CAL { 2, \
{ \ { \
{ 0, -60 }, \ { 0, -54 }, \
{ 255, 60 } \ { 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. * IC-7200 rig capabilities.
* *
@ -115,6 +138,7 @@ const struct rig_caps ic7200_caps = {
.has_set_parm = RIG_PARM_SET(IC7200_PARMS), .has_set_parm = RIG_PARM_SET(IC7200_PARMS),
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = NULL, .ctcss_list = NULL,
@ -180,6 +204,9 @@ const struct rig_caps ic7200_caps = {
}, },
.str_cal = IC7200_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -199,11 +226,9 @@ const struct rig_caps ic7200_caps = {
.set_ant = NULL, /*automatically set by rig depending band */ .set_ant = NULL, /*automatically set by rig depending band */
.get_ant = NULL, .get_ant = NULL,
.set_rit = icom_set_rit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level, .set_level = ic7200_set_level,
.get_level = icom_get_level, .get_level = ic7200_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_parm = NULL, .set_parm = NULL,
@ -216,10 +241,10 @@ const struct rig_caps ic7200_caps = {
.get_dcd = icom_get_dcd, .get_dcd = icom_get_dcd,
.set_ts = icom_set_ts, .set_ts = icom_set_ts,
.get_ts = NULL, .get_ts = NULL,
.set_rptr_shift = icom_set_rptr_shift, .set_rptr_shift = NULL,
.get_rptr_shift = NULL, .get_rptr_shift = NULL,
.set_rptr_offs = icom_set_rptr_offs, .set_rptr_offs = NULL,
.get_rptr_offs = icom_get_rptr_offs, .get_rptr_offs = NULL,
.set_ctcss_tone = icom_set_ctcss_tone, .set_ctcss_tone = icom_set_ctcss_tone,
.get_ctcss_tone = icom_get_ctcss_tone, .get_ctcss_tone = icom_get_ctcss_tone,
.set_ctcss_sql = icom_set_ctcss_sql, .set_ctcss_sql = icom_set_ctcss_sql,
@ -232,3 +257,33 @@ const struct rig_caps ic7200_caps = {
.get_split_vfo = NULL, .get_split_vfo = NULL,
}; };
int ic7200_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x55;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x03, 1, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7200_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x55;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x03, 1, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -38,7 +38,6 @@
#include "bandplan.h" #include "bandplan.h"
#include "tones.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_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_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) #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_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) #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)
// Not implemented yet
//#define IC7300_EXT_LEVELS (TOK_LEVEL_MONITOR)
#define IC7300_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) #define IC7300_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7300_PARMS (RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP) #define IC7300_PARMS (RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP)
@ -75,6 +71,50 @@
{ 241, 64 } \ { 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_OFF 0x00
#define IC7300_AGC_FAST 0x01 #define IC7300_AGC_FAST 0x01
#define IC7300_AGC_MID 0x02 #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_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_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. * 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 */ .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_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_rit(RIG *rig, vfo_t vfo, shortfreq_t ts);
int ic7300_set_xit(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_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_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 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 = { const struct rig_caps ic7300_caps = {
.rig_model = RIG_MODEL_IC7300, .rig_model = RIG_MODEL_IC7300,
@ -158,14 +241,15 @@ const struct rig_caps ic7300_caps = {
.has_get_parm = IC7300_PARMS, .has_get_parm = IC7300_PARMS,
.has_set_parm = RIG_PARM_SET(IC7300_PARMS), .has_set_parm = RIG_PARM_SET(IC7300_PARMS),
.level_gran = { .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 = {}, .parm_gran = {},
.extlevels = ic7300_ext_levels, .extlevels = NULL,
.ctcss_list = full_ctcss_list, .ctcss_list = full_ctcss_list,
.dcs_list = NULL, .dcs_list = NULL,
.preamp = { 1, 2, RIG_DBLST_END, }, .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_rit = Hz(9999),
.max_xit = Hz(9999), .max_xit = Hz(9999),
.max_ifshift = Hz(0), .max_ifshift = Hz(0),
@ -235,6 +319,12 @@ const struct rig_caps ic7300_caps = {
}, },
.str_cal = IC7300_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -330,13 +420,14 @@ const struct rig_caps ic9700_caps = {
.has_set_parm = RIG_PARM_SET(IC7300_PARMS), .has_set_parm = RIG_PARM_SET(IC7300_PARMS),
.level_gran = { .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 = {}, .parm_gran = {},
.extlevels = ic7300_ext_levels, .extlevels = NULL,
.ctcss_list = full_ctcss_list, .ctcss_list = full_ctcss_list,
.dcs_list = NULL, .dcs_list = NULL,
.preamp = { 1, 2, RIG_DBLST_END, }, .preamp = { 1, 2, 3, RIG_DBLST_END, },
.attenuator = { 1, RIG_DBLST_END, }, /* value taken from p.45 of manual*/ .attenuator = { 10, RIG_DBLST_END, },
.max_rit = Hz(9999), .max_rit = Hz(9999),
.max_xit = Hz(9999), .max_xit = Hz(9999),
.max_ifshift = Hz(0), .max_ifshift = Hz(0),
@ -402,7 +493,13 @@ const struct rig_caps ic9700_caps = {
RIG_FLT_END, 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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -432,8 +529,8 @@ const struct rig_caps ic9700_caps = {
.set_xit = ic7300_set_xit, .set_xit = ic7300_set_xit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = ic7300_set_level, .set_level = ic9700_set_level,
.get_level = ic7300_get_level, .get_level = ic9700_get_level,
.set_ext_level = icom_set_ext_level, .set_ext_level = icom_set_ext_level,
.get_ext_level = icom_get_ext_level, .get_ext_level = icom_get_ext_level,
.set_func = ic7300_set_func, .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) int ic7300_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
{ {
unsigned char ackbuf[16]; unsigned char ackbuf[16];
int ack_len; int ack_len;
int retval; int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (!rig || !status) if (!rig || !status)
return -RIG_EINVAL; return -RIG_EINVAL;
switch (func) { switch (func) {
case RIG_FUNC_RIT: case RIG_FUNC_RIT:
retval = icom_transaction(rig, 0x21, 0x01, NULL, 0, ackbuf, &ack_len); retval = icom_transaction(rig, 0x21, 0x01, NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK) return retval; if (retval != RIG_OK) return retval;
if (ack_len != 3) { if (ack_len != 3) {
return RIG_BUSERROR; return RIG_BUSERROR;
} }
*status = ackbuf[2]; *status = ackbuf[2];
break; break;
case RIG_FUNC_XIT: case RIG_FUNC_XIT:
retval = icom_transaction(rig, 0x21, 0x02, NULL, 0, ackbuf, &ack_len); retval = icom_transaction(rig, 0x21, 0x02, NULL, 0, ackbuf, &ack_len);
if (ack_len != 3) { if (ack_len != 3) {
return RIG_BUSERROR; return RIG_BUSERROR;
} }
*status = ackbuf[2]; *status = ackbuf[2];
break; break;
case RIG_FUNC_TUNER: case RIG_FUNC_TUNER:
retval = icom_transaction (rig, 0x1C, 0x01, NULL, 0, ackbuf, &ack_len); retval = icom_transaction(rig, 0x1C, 0x01, NULL, 0, ackbuf, &ack_len);
if (ack_len == 3) if (ack_len == 3) {
{ *status = ackbuf[2]; // 0x01 = enabled, 0x00 = disabled, 0x02 = tuning in progress
*status = ackbuf[2]; // 0x01 = enabled, 0x00 = disabled, 0x02 = tuning in progress } else {
} else { return RIG_BUSERROR;
return RIG_BUSERROR; }
} break;
break;
default:
default: return icom_get_func(rig, vfo, func, status);
return icom_get_func(rig, vfo, func, status); }
} return retval;
return retval;
} }
int ic7300_set_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)
{ {
unsigned char ts_buf[4]; unsigned char ts_buf[4];
unsigned char ackbuf[8]; unsigned char ackbuf[8];
int ack_len; int ack_len;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (!rig) if (!rig)
return -RIG_EINVAL; return -RIG_EINVAL;
switch (func) { switch (func) {
case RIG_FUNC_RIT: case RIG_FUNC_RIT:
ts_buf[0] = status; ts_buf[0] = status;
return icom_transaction (rig, 0x21, 0x01, ts_buf, 1, ackbuf, &ack_len); return icom_transaction(rig, 0x21, 0x01, ts_buf, 1, ackbuf, &ack_len);
case RIG_FUNC_XIT: case RIG_FUNC_XIT:
ts_buf[0] = status; ts_buf[0] = status;
return icom_transaction (rig, 0x21, 0x02, ts_buf, 1, ackbuf, &ack_len); return icom_transaction(rig, 0x21, 0x02, ts_buf, 1, ackbuf, &ack_len);
case RIG_FUNC_TUNER: case RIG_FUNC_TUNER:
if(status==0 || status==1 || status==2) if (status == 0 || status == 1 || status == 2) { // 0=off, 1 = on, 2 = begin tuning
{ // 0=off, 1 = on, 2 = begin tuning ts_buf[0] = status;
ts_buf[0] = status; return icom_transaction(rig, 0x1C, 0x01, ts_buf, 1, ackbuf, &ack_len);
return icom_transaction (rig, 0x1C, 0x01, ts_buf, 1, ackbuf, &ack_len); } else {
} else { return -1; // perhaps some other reply would be more informative
return -1; // perhaps some other reply would be more informative }
}
default:
default: return icom_set_func(rig, vfo, func, status);
return icom_set_func(rig, vfo, func, status); }
}
} }
int ic7300_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) int ic7300_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{ {
unsigned char lvlbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; unsigned char cmdbuf[MAXFRAMELEN];
int ack_len=sizeof(ackbuf), lvl_len;
int lvl_cn, lvl_sc; /* Command Number, Subcommand */
int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) { switch (level) {
case RIG_LEVEL_AGC: case RIG_LEVEL_AGC:
lvl_cn = C_CTL_FUNC; switch (val.i) {
lvl_sc = S_FUNC_AGC; case RIG_AGC_OFF:
lvl_len = 1; val.i = IC7300_AGC_OFF;
break;
unsigned char agc_value; case RIG_AGC_SLOW:
switch (val.i) { val.i = IC7300_AGC_SLOW;
case RIG_AGC_OFF: break;
agc_value = IC7300_AGC_OFF; case RIG_AGC_MEDIUM:
break; val.i = IC7300_AGC_MID;
case RIG_AGC_SLOW: break;
agc_value = IC7300_AGC_SLOW; case RIG_AGC_FAST:
break; val.i = IC7300_AGC_FAST;
case RIG_AGC_MEDIUM: break;
agc_value = IC7300_AGC_MID; default:
break; rig_debug(RIG_DEBUG_ERR, "Unsupported LEVEL_AGC %d", val.i);
case RIG_AGC_FAST: return -RIG_EINVAL;
agc_value = IC7300_AGC_FAST; }
break; return icom_set_level_raw(rig, level, C_CTL_FUNC, S_FUNC_AGC, 0, NULL, 1, val);
default: case RIG_LEVEL_VOXDELAY:
rig_debug(RIG_DEBUG_ERR,"Unsupported LEVEL_AGC %d", val.i); cmdbuf[0] = 0x01;
return -RIG_EINVAL; cmdbuf[1] = 0x91;
} return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
lvlbuf[0] = agc_value; return icom_set_level(rig, vfo, level, val);
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;
} }
int ic7300_get_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)
{ {
unsigned char lvlbuf[MAXFRAMELEN], lvl2buf[MAXFRAMELEN]; unsigned char cmdbuf[MAXFRAMELEN];
int lvl_len, lvl2_len; value_t temp_val;
int lvl_cn, lvl_sc; /* Command Number, Subcommand */ int retval;
int icom_val;
int cmdhead;
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) { switch (temp_val.i) {
case RIG_LEVEL_AGC: case IC7300_AGC_OFF:
lvl_cn = C_CTL_FUNC; val->i = RIG_AGC_OFF;
lvl_sc = S_FUNC_AGC; break;
break; case IC7300_AGC_SLOW:
default: val->i = RIG_AGC_SLOW;
return icom_get_level(rig, vfo, level, val); 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, return RIG_OK;
lvlbuf, &lvl_len); }
if (retval != RIG_OK)
return retval; int ic9700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
cmdhead = 2; unsigned char cmdbuf[MAXFRAMELEN];
lvl_len -= cmdhead;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
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); switch (level) {
return -RIG_ERJCTED; 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);
* The result is a 3 digit BCD, but in *big endian* order: 0000..0255 default:
* (from_bcd is little endian) return ic7300_set_level(rig, vfo, level, val);
*/ }
icom_val = from_bcd_be(lvlbuf + cmdhead, lvl_len * 2); }
switch (level) { int ic9700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_AGC: {
switch (icom_val) { unsigned char cmdbuf[MAXFRAMELEN];
case IC7300_AGC_OFF:
val->i = RIG_AGC_OFF; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
break;
case IC7300_AGC_SLOW: switch (level) {
val->i = RIG_AGC_SLOW; case RIG_LEVEL_VOXDELAY:
break; cmdbuf[0] = 0x03;
case IC7300_AGC_MID: cmdbuf[1] = 0x30;
val->i = RIG_AGC_MEDIUM; return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
break; default:
case IC7300_AGC_FAST: return ic7300_get_level(rig, vfo, level, val);
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;
} }

Wyświetl plik

@ -43,7 +43,7 @@
#define IC7410_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK) #define IC7410_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_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7410_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) #define IC7410_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -63,6 +63,30 @@
{ 246, 60 } /* S9+60dB */ \ { 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. * IC-7410 rig capabilities.
@ -106,6 +130,7 @@ const struct rig_caps ic7410_caps = {
.has_set_parm = RIG_PARM_SET(IC7410_PARMS), /* FIXME: parms */ .has_set_parm = RIG_PARM_SET(IC7410_PARMS), /* FIXME: parms */
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = common_ctcss_list, .ctcss_list = common_ctcss_list,
@ -176,6 +201,9 @@ const struct rig_caps ic7410_caps = {
RIG_FLT_END, RIG_FLT_END,
}, },
.str_cal = IC7410_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -198,8 +226,8 @@ const struct rig_caps ic7410_caps = {
.set_rit = icom_set_rit, .set_rit = icom_set_rit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level, .set_level = ic7410_set_level,
.get_level = icom_get_level, .get_level = ic7410_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_parm = icom_set_parm, .set_parm = icom_set_parm,
@ -229,3 +257,32 @@ const struct rig_caps ic7410_caps = {
}; };
int ic7410_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x75;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7410_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x75;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -60,7 +60,7 @@
#define IC746_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_RF|RIG_FUNC_ANF|RIG_FUNC_APF|RIG_FUNC_VSC|RIG_FUNC_RESUME|RIG_FUNC_ARO) #define IC746_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_GET_PARM (RIG_PARM_BACKLIGHT|RIG_PARM_BEEP)
#define IC746_SET_PARM (RIG_PARM_BACKLIGHT|RIG_PARM_BEEP|RIG_PARM_ANN) #define IC746_SET_PARM (RIG_PARM_BACKLIGHT|RIG_PARM_BEEP|RIG_PARM_ANN)

Wyświetl plik

@ -48,7 +48,7 @@
#define IC756PRO_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_RF|RIG_FUNC_ANF) #define IC756PRO_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 /* Note that RIG_LEVEL_VOXGAIN and RIG_LEVEL_ANTIVOX are incorrectly handled in icom.c for
* this model. * this model.
@ -81,6 +81,9 @@
{ 247 ,60 } \ { 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 * This function deals with the older type radios with only 2 filter widths
* (0 - normal, 1 - narrow) * (0 - normal, 1 - narrow)
@ -251,7 +254,7 @@ const struct rig_caps ic756_caps = {
/* /*
* ic756pro rig capabilities. * ic756pro rig capabilities.
* TODO: check every paramters, * TODO: check every parameter,
* add antenna capabilities * add antenna capabilities
*/ */
static const struct icom_priv_caps ic756pro_priv_caps = { static const struct icom_priv_caps ic756pro_priv_caps = {
@ -401,7 +404,7 @@ const struct rig_caps ic756pro_caps = {
/* /*
* ic756proII rig capabilities. * ic756proII rig capabilities.
* TODO: check every paramters, * TODO: check every parameter,
* add antenna capabilities * add antenna capabilities
*/ */
static const struct icom_priv_caps ic756pro2_priv_caps = { 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_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_AM_TX_MODES (RIG_MODE_AM)
#define IC756PROII_LEVEL_ALL (IC756PRO_LEVEL_ALL|RIG_LEVEL_VOXDELAY)
const struct rig_caps ic756pro2_caps = { const struct rig_caps ic756pro2_caps = {
.rig_model = RIG_MODEL_IC756PROII, .rig_model = RIG_MODEL_IC756PROII,
@ -491,12 +495,13 @@ const struct rig_caps ic756pro2_caps = {
.retry = 3, .retry = 3,
.has_get_func = IC756PRO_FUNC_ALL, .has_get_func = IC756PRO_FUNC_ALL,
.has_set_func = IC756PRO_FUNC_ALL, .has_set_func = IC756PRO_FUNC_ALL,
.has_get_level = IC756PRO_LEVEL_ALL, .has_get_level = IC756PROII_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(IC756PRO_LEVEL_ALL), .has_set_level = RIG_LEVEL_SET(IC756PROII_LEVEL_ALL),
.has_get_parm = RIG_PARM_NONE, .has_get_parm = RIG_PARM_NONE,
.has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */
.level_gran = { .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 = {}, .parm_gran = {},
.extparms = ic756pro2_ext_parms, .extparms = ic756pro2_ext_parms,
@ -577,8 +582,8 @@ const struct rig_caps ic756pro2_caps = {
.get_ant = icom_get_ant, .get_ant = icom_get_ant,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level, .set_level = ic756pro2_set_level,
.get_level = icom_get_level, .get_level = ic756pro2_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_mem = icom_set_mem, .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. * ic756proIII rig capabilities.
* *
* TODO: check every paramters, * TODO: check every parameter,
* add antenna capabilities * add antenna capabilities
*/ */
static const struct icom_priv_caps ic756pro3_priv_caps = { 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_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_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), \ .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 = { const struct rig_caps ic756pro3_caps = {
.rig_model = RIG_MODEL_IC756PROIII, .rig_model = RIG_MODEL_IC756PROIII,
.model_name = "IC-756PROIII", .model_name = "IC-756PROIII",
@ -825,12 +860,13 @@ const struct rig_caps ic756pro3_caps = {
.retry = 3, .retry = 3,
.has_get_func = IC756PRO_FUNC_ALL, .has_get_func = IC756PRO_FUNC_ALL,
.has_set_func = IC756PRO_FUNC_ALL, .has_set_func = IC756PRO_FUNC_ALL,
.has_get_level = IC756PRO_LEVEL_ALL, .has_get_level = IC756PROIII_LEVEL_ALL,
.has_set_level = RIG_LEVEL_SET(IC756PRO_LEVEL_ALL), .has_set_level = RIG_LEVEL_SET(IC756PROIII_LEVEL_ALL),
.has_get_parm = IC756PROIII_PARMS, .has_get_parm = IC756PROIII_PARMS,
.has_set_parm = RIG_PARM_SET(IC756PROIII_PARMS), .has_set_parm = RIG_PARM_SET(IC756PROIII_PARMS),
.level_gran = { .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 = {}, .parm_gran = {},
.extparms = ic756pro2_ext_parms, .extparms = ic756pro2_ext_parms,
@ -898,6 +934,10 @@ const struct rig_caps ic756pro3_caps = {
RIG_FLT_END, RIG_FLT_END,
}, },
.str_cal = IC756PRO_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -920,8 +960,8 @@ const struct rig_caps ic756pro3_caps = {
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_parm = icom_set_parm, .set_parm = icom_set_parm,
.get_parm = icom_get_parm, .get_parm = icom_get_parm,
.set_level = icom_set_level, .set_level = ic756pro2_set_level,
.get_level = icom_get_level, .get_level = ic756pro2_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_mem = icom_set_mem, .set_mem = icom_set_mem,
@ -948,4 +988,32 @@ const struct rig_caps ic756pro3_caps = {
.get_ext_parm = ic756pro2_get_ext_parm, .get_ext_parm = ic756pro2_get_ext_parm,
}; };
int ic756pro2_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x60;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic756pro2_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x60;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -36,17 +36,14 @@
#include "misc.h" #include "misc.h"
#include "bandplan.h" #include "bandplan.h"
/* #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)
* 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_1HZ_TS_MODES IC7600_ALL_RX_MODES #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_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_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_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
#define IC7600_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) #define IC7600_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -79,6 +76,52 @@
{ 246, 60 } /* S9+60dB */ \ { 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. * IC-7600 rig capabilities.
@ -123,6 +166,7 @@ const struct rig_caps ic7600_caps = {
.has_set_parm = RIG_PARM_SET(IC7600_PARMS), /* FIXME: parms */ .has_set_parm = RIG_PARM_SET(IC7600_PARMS), /* FIXME: parms */
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = common_ctcss_list, .ctcss_list = common_ctcss_list,
@ -193,6 +237,12 @@ const struct rig_caps ic7600_caps = {
RIG_FLT_END, RIG_FLT_END,
}, },
.str_cal = IC7600_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -215,8 +265,8 @@ const struct rig_caps ic7600_caps = {
.set_rit = icom_set_rit, .set_rit = icom_set_rit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level, .set_level = ic7600_set_level,
.get_level = icom_get_level, .get_level = ic7600_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_parm = icom_set_parm, .set_parm = icom_set_parm,
@ -246,3 +296,34 @@ const struct rig_caps ic7600_caps = {
.send_morse = icom_send_morse .send_morse = icom_send_morse
}; };
int ic7600_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x67;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7600_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x67;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -1,6 +1,6 @@
/* /*
* Hamlib CI-V backend - description of IC-7610 * 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 * Copyright (c) 2010 by Stephane Fillod
* *
* *
@ -37,17 +37,14 @@
#include "misc.h" #include "misc.h"
#include "bandplan.h" #include "bandplan.h"
/* #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)
* 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_1HZ_TS_MODES IC7610_ALL_RX_MODES #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_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_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_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
#define IC7610_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) #define IC7610_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
@ -80,6 +77,52 @@
{ 246, 60 } /* S9+60dB */ \ { 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. * IC-7610 rig capabilities.
@ -124,6 +167,7 @@ const struct rig_caps ic7610_caps = {
.has_set_parm = RIG_PARM_SET(IC7610_PARMS), /* FIXME: parms */ .has_set_parm = RIG_PARM_SET(IC7610_PARMS), /* FIXME: parms */
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = common_ctcss_list, .ctcss_list = common_ctcss_list,
@ -194,6 +238,12 @@ const struct rig_caps ic7610_caps = {
RIG_FLT_END, RIG_FLT_END,
}, },
.str_cal = IC7610_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -216,8 +266,8 @@ const struct rig_caps ic7610_caps = {
.set_rit = icom_set_rit, .set_rit = icom_set_rit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level, .set_level = ic7610_set_level,
.get_level = icom_get_level, .get_level = ic7610_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_parm = icom_set_parm, .set_parm = icom_set_parm,
@ -247,3 +297,34 @@ const struct rig_caps ic7610_caps = {
.send_morse = icom_send_morse .send_morse = icom_send_morse
}; };
int ic7610_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x02;
cmdbuf[1] = 0x92;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7610_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x02;
cmdbuf[1] = 0x92;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -15,7 +15,7 @@
* *
* You should have received a copy of the GNU Lesser General Public * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software * 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 "misc.h"
#include "bandplan.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_AM_TX_MODES (RIG_MODE_AM)
#define IC7700_ALL_RX_MODES IC7700_OTHER_TX_MODES | IC7700_AM_TX_MODES #define IC7700_ALL_RX_MODES IC7700_OTHER_TX_MODES | IC7700_AM_TX_MODES
#define IC7700_1HZ_TS_MODES IC7700_ALL_RX_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_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_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7700_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) #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) #define IC7700_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
/* // IC-7700 S-meter calibration data based on manual
* FIXME: real measures!
*/
#define IC7700_STR_CAL { 3, \ #define IC7700_STR_CAL { 3, \
{ \ { \
{ 0,-54 }, \ { 0,-54 }, \
@ -63,6 +61,52 @@
{ 241, 60 } \ { 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. * IC-7700 rig capabilities.
@ -106,6 +150,7 @@ const struct rig_caps ic7700_caps = {
.has_set_parm = RIG_PARM_SET(IC7700_PARMS), /* FIXME: parms */ .has_set_parm = RIG_PARM_SET(IC7700_PARMS), /* FIXME: parms */
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = common_ctcss_list, .ctcss_list = common_ctcss_list,
@ -177,6 +222,12 @@ const struct rig_caps ic7700_caps = {
RIG_FLT_END, RIG_FLT_END,
}, },
.str_cal = IC7700_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -199,8 +250,8 @@ const struct rig_caps ic7700_caps = {
.set_rit = icom_set_rit, .set_rit = icom_set_rit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level, .set_level = ic7700_set_level,
.get_level = icom_get_level, .get_level = ic7700_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_parm = icom_set_parm, .set_parm = icom_set_parm,
@ -230,3 +281,34 @@ const struct rig_caps ic7700_caps = {
}; };
int ic7700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x82;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return icom_set_level(rig, vfo, level, val);
}
}
int ic7700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x82;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

@ -36,17 +36,14 @@
#include "misc.h" #include "misc.h"
#include "bandplan.h" #include "bandplan.h"
/* #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)
* 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_1HZ_TS_MODES IC7800_ALL_RX_MODES #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_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_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_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
#define IC7800_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) #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) #define IC7800_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
/* // IC-7800 S-meter calibration data based on manual
* FIXME: real measures!
*/
#define IC7800_STR_CAL { 3, \ #define IC7800_STR_CAL { 3, \
{ \ { \
{ 0, -54 }, /* S0 */ \ { 0, -54 }, /* S0 */ \
@ -66,6 +61,49 @@
{ 241, 60 } /* S9+60 */ \ { 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_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 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 */ .has_set_parm = RIG_PARM_SET(IC7800_PARMS), /* FIXME: parms */
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = common_ctcss_list, .ctcss_list = common_ctcss_list,
@ -181,6 +220,12 @@ const struct rig_caps ic7800_caps = {
RIG_FLT_END, RIG_FLT_END,
}, },
.str_cal = IC7800_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .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 * 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 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 */ /* Convert dB to index */
for (i=0; i < 7; i++) { for (i = 0; i < 7; i++) {
if (val.i == rig->state.attenuator[i]) { if (val.i == rig->state.attenuator[i]) {
val.i = i+1; val.i = i + 1;
break; break;
} }
} }
/* TODO: Should fail when not found? */ /* 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 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); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (ret != RIG_OK)
return ret;
/* Convert index to dB switch (level) {
* Rem: ATT index 0 means attenuator Off case RIG_LEVEL_ATT:
*/ retval = icom_get_level(rig, vfo, level, val);
if (level == RIG_LEVEL_ATT && val->i > 0 && val->i <= 7) 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]; val->i = rig->state.attenuator[val->i - 1];
}
break;
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x01;
cmdbuf[1] = 0x83;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return icom_get_level(rig, vfo, level, val);
}
return RIG_OK; return RIG_OK;
} }

Wyświetl plik

@ -37,17 +37,14 @@
#include "misc.h" #include "misc.h"
#include "bandplan.h" #include "bandplan.h"
/* #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)
* 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_1HZ_TS_MODES IC785x_ALL_RX_MODES #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_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_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_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM)
#define IC785x_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) #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) #define IC785x_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
/* // IC-785x S-meter calibration data based on manual
* FIXME: real measures!
*/
#define IC785x_STR_CAL { 3, \ #define IC785x_STR_CAL { 3, \
{ \ { \
{ 0, -54 }, /* S0 */ \ { 0, -54 }, /* S0 */ \
@ -67,10 +62,57 @@
{ 241, 60 } /* S9+60 */ \ { 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_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); 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. * IC-785x rig capabilities.
* *
@ -113,6 +155,7 @@ const struct rig_caps ic785x_caps = {
.has_set_parm = RIG_PARM_SET(IC785x_PARMS), /* FIXME: parms */ .has_set_parm = RIG_PARM_SET(IC785x_PARMS), /* FIXME: parms */
.level_gran = { .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 = {}, .parm_gran = {},
.ctcss_list = common_ctcss_list, .ctcss_list = common_ctcss_list,
@ -182,6 +225,12 @@ const struct rig_caps ic785x_caps = {
RIG_FLT_END, RIG_FLT_END,
}, },
.str_cal = IC785x_STR_CAL, .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, .cfgparams = icom_cfg_params,
.set_conf = icom_set_conf, .set_conf = icom_set_conf,
@ -204,8 +253,8 @@ const struct rig_caps ic785x_caps = {
.set_rit = icom_set_rit, .set_rit = icom_set_rit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = ic7800_set_level, .set_level = ic785x_set_level,
.get_level = ic7800_get_level, .get_level = ic785x_get_level,
.set_func = icom_set_func, .set_func = icom_set_func,
.get_func = icom_get_func, .get_func = icom_get_func,
.set_parm = icom_set_parm, .set_parm = icom_set_parm,
@ -236,3 +285,35 @@ const struct rig_caps ic785x_caps = {
.get_powerstat = icom_get_powerstat, .get_powerstat = icom_get_powerstat,
}; };
int ic785x_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x03;
cmdbuf[1] = 0x09;
return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val);
default:
return ic7800_set_level(rig, vfo, level, val);
}
}
int ic785x_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
unsigned char cmdbuf[MAXFRAMELEN];
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (level) {
case RIG_LEVEL_VOXDELAY:
cmdbuf[0] = 0x03;
cmdbuf[1] = 0x09;
return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val);
default:
return ic7800_get_level(rig, vfo, level, val);
}
}

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -39,6 +39,62 @@
#include "icom_defs.h" #include "icom_defs.h"
#include "frame.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[] = { const struct ts_sc_list r8500_ts_sc_list[] = {
{ 10, 0x00 }, { 10, 0x00 },
{ 50, 0x01 }, { 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, * Most of the time, the data field is a 3 digit BCD,
* but in *big endian* order: 0000..0255 * 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_cn = C_CTL_LVL;
lvl_sc = S_LVL_KEYSPD; lvl_sc = S_LVL_KEYSPD;
break; break;
case RIG_LEVEL_NOTCHF: case RIG_LEVEL_NOTCHF_RAW:
lvl_cn = C_CTL_LVL; lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_NOTCHF; lvl_sc = S_LVL_NOTCHF;
break; 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; lvl_sc = S_LVL_VOXGAIN;
} }
break; 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: case RIG_LEVEL_ANTIVOX:
if (rig->caps->rig_model == RIG_MODEL_IC910) { if (rig->caps->rig_model == RIG_MODEL_IC910) {
/* IC-910H */ /* 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; lvl_sc = S_LVL_ANTIVOX;
} }
break; break;
case RIG_LEVEL_MONITOR_GAIN:
lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_MON;
break;
default: default:
rig_debug(RIG_DEBUG_ERR,"Unsupported set_level %d", level); rig_debug(RIG_DEBUG_ERR,"Unsupported set_level %d", level);
return -RIG_EINVAL; return -RIG_EINVAL;
} }
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvlbuf, lvl_len, retval = icom_transaction (rig, lvl_cn, lvl_sc, lvlbuf, lvl_len, ackbuf, &ack_len);
ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (ack_len != 1 || ackbuf[0] != ACK) { if (ack_len != 1 || ackbuf[0] != ACK) {
rig_debug(RIG_DEBUG_ERR,"icom_set_level: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR,"icom_set_level: ack NG (%#.2x), len=%d\n", ackbuf[0], ack_len);
"len=%d\n", ackbuf[0], ack_len);
return -RIG_ERJCTED; 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 * icom_get_level
* Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL * 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) 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_cn = C_RD_SQSM;
lvl_sc = S_SWR; lvl_sc = S_SWR;
break; 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: case RIG_LEVEL_PREAMP:
lvl_cn = C_CTL_FUNC; lvl_cn = C_CTL_FUNC;
lvl_sc = S_FUNC_PAMP; 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_cn = C_CTL_LVL;
lvl_sc = S_LVL_KEYSPD; lvl_sc = S_LVL_KEYSPD;
break; break;
case RIG_LEVEL_NOTCHF: case RIG_LEVEL_NOTCHF_RAW:
lvl_cn = C_CTL_LVL; lvl_cn = C_CTL_LVL;
lvl_sc = S_LVL_NOTCHF; lvl_sc = S_LVL_NOTCHF;
break; 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; lvl_sc = S_LVL_VOXGAIN;
} }
break; break;
case RIG_LEVEL_VOXDELAY: /* IC-910H */
lvl_cn = C_CTL_MEM;
lvl_sc = S_MEM_VOXDELAY;
break;
case RIG_LEVEL_ANTIVOX: case RIG_LEVEL_ANTIVOX:
if (rig->caps->rig_model == RIG_MODEL_IC910) { if (rig->caps->rig_model == RIG_MODEL_IC910) {
/* IC-910H */ /* 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; lvl_sc = S_LVL_ANTIVOX;
} }
break; break;
/* Not implemented yet case RIG_LEVEL_MONITOR_GAIN:
case TOK_LEVEL_MONITOR: lvl_cn = C_CTL_LVL;
lvl_cn = C_CTL_MEM; lvl_sc = S_LVL_MON;
lvl_sc = S_MEM_MONITOR; break;
break;
*/
default: default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get_level %d", level); rig_debug(RIG_DEBUG_ERR,"Unsupported get_level %d", level);
return -RIG_EINVAL; return -RIG_EINVAL;
} }
/* use lvl2buf and lvl2_len for 'set mode' subcommand */ /* use lvl2buf and lvl2_len for 'set mode' subcommand */
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvl2buf, lvl2_len, retval = icom_transaction (rig, lvl_cn, lvl_sc, lvl2buf, lvl2_len, lvlbuf, &lvl_len);
lvlbuf, &lvl_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; 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) { if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) {
rig_debug(RIG_DEBUG_ERR,"icom_get_level: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR,"icom_get_level: ack NG (%#.2x), len=%d\n", lvlbuf[0],lvl_len);
"len=%d\n", lvlbuf[0],lvl_len);
return -RIG_ERJCTED; 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; return -RIG_EPROTO;
} }
break; break;
case RIG_LEVEL_ALC: case RIG_LEVEL_ALC:
/* 120 max on IC-7600 */ if (rig->caps->alc_cal.size == 0) {
val->f = (float)icom_val/120; val->f = rig_raw2val_float(icom_val, &icom_default_alc_cal);
break; } else {
case RIG_LEVEL_SWR: val->f = rig_raw2val_float(icom_val, &rig->caps->alc_cal);
/* {0->1, 48->1.5, 80->2} on IC-7600 */ }
val->f = 1. + (float)icom_val/80; break;
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: case RIG_LEVEL_PREAMP:
if (icom_val == 0) { if (icom_val == 0) {
val->i = 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__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (token) { switch (token) {
case TOK_LEVEL_MONITOR:
rig_debug(RIG_DEBUG_VERBOSE, "TOK_LEVEL_MONITOR\n", __func__);
break;
default: return -RIG_EINVAL; default: return -RIG_EINVAL;
} }
return RIG_OK; 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__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (token) { switch (token) {
case TOK_LEVEL_MONITOR:
rig_debug(RIG_DEBUG_VERBOSE, "TOK_LEVEL_MONITOR\n", __func__);
break;
default: return -RIG_EINVAL; default: return -RIG_EINVAL;
} }
return RIG_OK; 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 * 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 */ *rptr_shift = RIG_RPT_SHIFT_NONE; /* Simplex mode */
break; break;
case S_DUP_M: case S_DUP_M:
*rptr_shift = RIG_RPT_SHIFT_MINUS; /* Duples - mode */ *rptr_shift = RIG_RPT_SHIFT_MINUS; /* Duplex - mode */
break; break;
case S_DUP_P: case S_DUP_P:
*rptr_shift = RIG_RPT_SHIFT_PLUS; /* Duplex + mode */ *rptr_shift = RIG_RPT_SHIFT_PLUS; /* Duplex + mode */

Wyświetl plik

@ -194,6 +194,10 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); int icom_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_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_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_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_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
int icom_set_parm(RIG *rig, setting_t parm, value_t val); int icom_set_parm(RIG *rig, setting_t parm, value_t val);

Wyświetl plik

@ -50,10 +50,10 @@
* Cn controller commands * 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 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. 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: * Notes:
* The following only applies to IC-706. * The following only applies to IC-706.
@ -63,8 +63,8 @@
* 2. Memory channel number 1A=0100/1b=0101, 2A=0102/2b=0103, * 2. Memory channel number 1A=0100/1b=0101, 2A=0102/2b=0103,
* 3A=0104/3b=0105, C1=0106, C2=0107 * 3A=0104/3b=0105, C1=0106, C2=0107
*/ */
#define C_SND_FREQ 0x00 /* Send frequency data 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 trancieve 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_BAND 0x02 /* Read band edge frequencies */
#define C_RD_FREQ 0x03 /* Read display frequency */ #define C_RD_FREQ 0x03 /* Read display frequency */
#define C_RD_MODE 0x04 /* Read display mode */ #define C_RD_MODE 0x04 /* Read display mode */
@ -487,7 +487,5 @@
#define TOK_RTTY_FLTR TOKEN_BACKEND(100) #define TOK_RTTY_FLTR TOKEN_BACKEND(100)
#define TOK_SSBBASS TOKEN_BACKEND(101) #define TOK_SSBBASS TOKEN_BACKEND(101)
#define TOK_SQLCTRL TOKEN_BACKEND(102) #define TOK_SQLCTRL TOKEN_BACKEND(102)
#define TOK_LEVEL_MONITOR TOKEN_BACKEND(103)
#endif /* _ICOM_DEFS_H */ #endif /* _ICOM_DEFS_H */

Wyświetl plik

@ -42,7 +42,7 @@
#define ICR9500_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) #define ICR9500_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_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_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT)
#define ICR9500_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_SLCT|RIG_SCAN_PRIO) /* TBC */ #define ICR9500_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_SLCT|RIG_SCAN_PRIO) /* TBC */

Wyświetl plik

@ -55,7 +55,7 @@
#define X108G_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO) #define X108G_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_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) #define X108G_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP)

Wyświetl plik

@ -637,6 +637,8 @@ typedef int ant_t;
#define RIG_ANT_4 RIG_ANT_N(3) #define RIG_ANT_4 RIG_ANT_N(3)
#define RIG_ANT_5 RIG_ANT_N(4) #define RIG_ANT_5 RIG_ANT_N(4)
#define RIG_ANT_MAX 32
/** /**
* \brief AGC delay settings * \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_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_SWR = (1 << 28), /*!< \c SWR -- SWR, arg float [0.0 ... infinite] */
RIG_LEVEL_ALC = (1 << 29), /*!< \c ALC -- ALC, arg float */ 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_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_IS_FLOAT(l) ((l)&RIG_LEVEL_FLOAT_LIST)
#define RIG_LEVEL_SET(l) ((l)&~RIG_LEVEL_READONLY_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_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_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_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_DUAL_WATCH CONSTANT_64BIT_FLAG (37) /*!< \c DUAL_WATCH -- Dual Watch / Sub Receiver */
#define RIG_FUNC_BIT38 CONSTANT_64BIT_FLAG (38) /* available for future RIG_FUNC items */ #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_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_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 */ #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 }, } } #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 (* chan_cb_t)(RIG *, channel_t **, int, const chan_t *, rig_ptr_t);
typedef int (* confval_cb_t)(RIG *, typedef int (* confval_cb_t)(RIG *,
const struct confparams *, const struct confparams *,
@ -1377,7 +1413,13 @@ struct rig_caps {
struct tuning_step_list tuning_steps[TSLSTSIZ]; /*!< Tuning step list */ struct tuning_step_list tuning_steps[TSLSTSIZ]; /*!< Tuning step list */
struct filter_list filters[FLTLSTSIZ]; /*!< mode/filter table, at -6dB */ 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 struct confparams *cfgparams; /*!< Configuration parametres. */
const rig_ptr_t priv; /*!< Private data. */ const rig_ptr_t priv; /*!< Private data. */

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -59,9 +59,14 @@ enum k3_data_submodes_e {
* *
* See Private Elecraft extra levels definitions in elecraft.c * See Private Elecraft extra levels definitions in elecraft.c
*/ */
#define TOK_IF_FREQ TOKEN_BACKEND(101) /* K3 FI 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 */ #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 */ #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 */ /* Token structure assigned to .cfgparams in rig_caps */
extern const struct confparams elecraft_ext_levels[]; extern const struct confparams elecraft_ext_levels[];

Plik diff jest za duży Load Diff

Wyświetl plik

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

Wyświetl plik

@ -176,6 +176,9 @@ extern const struct rig_caps ts930_caps;
extern const struct rig_caps ts2000_caps; extern const struct rig_caps ts2000_caps;
extern const struct rig_caps k2_caps; extern const struct rig_caps k2_caps;
extern const struct rig_caps k3_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 xg3_caps;
extern const struct rig_caps trc80_caps; extern const struct rig_caps trc80_caps;

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -104,6 +104,14 @@
#define LVL_STRENGTH setting2idx_builtin(RIG_LEVEL_STRENGTH) #define LVL_STRENGTH setting2idx_builtin(RIG_LEVEL_STRENGTH)
/*#define LVL_BWC setting2idx_builtin(RIG_LEVEL_BWC)*/ /*#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_ANN setting2idx_builtin(RIG_PARM_ANN)
#define PARM_APO setting2idx_builtin(RIG_PARM_APO) #define PARM_APO setting2idx_builtin(RIG_PARM_APO)
#define PARM_BACKLIGHT setting2idx_builtin(RIG_PARM_BACKLIGHT) #define PARM_BACKLIGHT setting2idx_builtin(RIG_PARM_BACKLIGHT)

Wyświetl plik

@ -521,6 +521,8 @@ static struct
{ RIG_FUNC_AFLT, "AFLT" }, { RIG_FUNC_AFLT, "AFLT" },
{ RIG_FUNC_ANL, "ANL" }, { RIG_FUNC_ANL, "ANL" },
{ RIG_FUNC_BC2, "BC2" }, { RIG_FUNC_BC2, "BC2" },
{ RIG_FUNC_DUAL_WATCH, "DUAL_WATCH"},
{ RIG_FUNC_DIVERSITY, "DIVERSITY"},
{ RIG_FUNC_NONE, "" }, { RIG_FUNC_NONE, "" },
}; };
@ -625,6 +627,12 @@ static struct
{ RIG_LEVEL_SWR, "SWR" }, { RIG_LEVEL_SWR, "SWR" },
{ RIG_LEVEL_ALC, "ALC" }, { RIG_LEVEL_ALC, "ALC" },
{ RIG_LEVEL_STRENGTH, "STRENGTH" }, { 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, "" }, { RIG_LEVEL_NONE, "" },
}; };

Wyświetl plik

@ -34,13 +34,14 @@
#include "rigctl_parse.h" #include "rigctl_parse.h"
static int print_ext(RIG *rig, const struct confparams *cfp, rig_ptr_t ptr); 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 range_sanity_check(const struct freq_range_list range_list[], int rx);
int ts_sanity_check(const struct tuning_step_list tuning_step[]); int ts_sanity_check(const struct tuning_step_list tuning_step[]);
static void dump_chan_caps(const channel_cap_t *chan, FILE *fout); 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) int dumpcaps(RIG *rig, FILE *fout)
{ {
@ -359,9 +360,8 @@ int dumpcaps(RIG *rig, FILE *fout)
backend_warnings++; backend_warnings++;
} }
fprintf(fout, "Extra levels:"); fprintf(fout, "Extra levels:\n");
rig_ext_level_foreach(rig, print_ext, fout); rig_ext_level_foreach(rig, print_ext, fout);
fprintf(fout, "\n");
sprintf_parm_gran(prntbuf, caps->has_get_parm, caps->parm_gran); sprintf_parm_gran(prntbuf, caps->has_get_parm, caps->parm_gran);
fprintf(fout, "Get parameters: %s\n", prntbuf); fprintf(fout, "Get parameters: %s\n", prntbuf);
@ -375,9 +375,8 @@ int dumpcaps(RIG *rig, FILE *fout)
backend_warnings++; backend_warnings++;
} }
fprintf(fout, "Extra parameters:"); fprintf(fout, "Extra parameters:\n");
rig_ext_parm_foreach(rig, print_ext, fout); rig_ext_parm_foreach(rig, print_ext, fout);
fprintf(fout, "\n");
if (rig->state.mode_list != 0) if (rig->state.mode_list != 0)
@ -433,7 +432,18 @@ int dumpcaps(RIG *rig, FILE *fout)
fprintf(fout, "\n"); 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); status = range_sanity_check(caps->tx_range_list1, 0);
fprintf(fout, fprintf(fout,
"TX ranges status, region 1:\t%s (%d)\n", "TX ranges status, region 1:\t%s (%d)\n",
@ -711,14 +721,67 @@ int dumpcaps(RIG *rig, FILE *fout)
return backend_warnings; return backend_warnings;
} }
static int print_ext(RIG *rig, const struct confparams *cfp, rig_ptr_t ptr) 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 */ 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: * check for:

Wyświetl plik

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

Wyświetl plik

@ -30,6 +30,7 @@ __BEGIN_DECLS
extern int sprintf_mode(char *str, rmode_t); extern int sprintf_mode(char *str, rmode_t);
extern int sprintf_vfo(char *str, vfo_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_func(char *str, setting_t);
extern int sprintf_level(char *str, setting_t); extern int sprintf_level(char *str, setting_t);
extern int sprintf_level_ext(char *str, const struct confparams *); 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_parm_gran(char *str, setting_t, const gran_t gran[]);
extern int sprintf_vfop(char *str, vfo_op_t); extern int sprintf_vfop(char *str, vfo_op_t);
extern int sprintf_scan(char *str, scan_t); extern int sprintf_scan(char *str, scan_t);
extern char *get_rig_conf_type(enum rig_conf_e type);
__END_DECLS __END_DECLS