kopia lustrzana https://github.com/Hamlib/Hamlib
Add Xeigu G90 and fix spelling
rodzic
05bed8f52e
commit
e9038f7c41
|
@ -264,6 +264,7 @@
|
|||
#define RIG_MODEL_IC705 RIG_MAKE_MODEL(RIG_ICOM, 85)
|
||||
#define RIG_MODEL_ICF8101 RIG_MAKE_MODEL(RIG_ICOM, 86)
|
||||
#define RIG_MODEL_X6100 RIG_MAKE_MODEL(RIG_ICOM, 87) /* Xiegu X6100 */
|
||||
#define RIG_MODEL_G90 RIG_MAKE_MODEL(RIG_ICOM, 88) /* Xiegu G90 */
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
@ -9,7 +9,7 @@ ICOMSRC = ic706.c icr8500.c ic735.c ic775.c ic756.c \
|
|||
ic707.c ic728.c ic751.c ic761.c \
|
||||
ic78.c ic7800.c ic785x.c \
|
||||
ic7000.c ic7100.c ic7200.c ic7300.c ic7600.c ic7610.c ic7700.c icf8101.c \
|
||||
icom.c icom.h icom_defs.h frame.c frame.h ic7300.h optoscan.c optoscan.h x108g.c
|
||||
icom.c icom.h icom_defs.h frame.c frame.h ic7300.h optoscan.c optoscan.h xiegu.c
|
||||
|
||||
noinst_LTLIBRARIES = libhamlib-icom.la
|
||||
libhamlib_icom_la_SOURCES = $(ICOMSRC)
|
||||
|
|
|
@ -9548,6 +9548,7 @@ DECLARE_INITRIG_BACKEND(icom)
|
|||
|
||||
rig_register(&x108g_caps);
|
||||
rig_register(&x6100_caps);
|
||||
rig_register(&g90_caps);
|
||||
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
|
|
@ -489,6 +489,7 @@ extern const struct rig_caps perseus_caps;
|
|||
|
||||
extern const struct rig_caps x108g_caps;
|
||||
extern const struct rig_caps x6100_caps;
|
||||
extern const struct rig_caps g90_caps;
|
||||
|
||||
extern const struct rig_caps icr8600_caps;
|
||||
extern const struct rig_caps icr30_caps;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Hamlib CI-V backend - description of Xeigu X108G and variations
|
||||
* Hamlib CI-V backend - description of Xiegu X108G and variations
|
||||
* Adapted from IC-7000 code 2017 by Michael Black W9MDB
|
||||
* As of this date there is no CAT manual for this rig
|
||||
* The X108G is supposed to emulate the IC-7000 but there are a few
|
||||
|
@ -123,7 +123,6 @@ static int x108g_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode,
|
|||
static int x108g_rig_open(RIG *rig)
|
||||
{
|
||||
int retval;
|
||||
struct rig_state *rs;
|
||||
|
||||
retval = icom_rig_open(rig);
|
||||
if (retval != RIG_OK)
|
||||
|
@ -131,13 +130,12 @@ static int x108g_rig_open(RIG *rig)
|
|||
rig_debug(RIG_DEBUG_ERR, "%s: rig_open failed with %s\n", __func__, rigerror(retval));
|
||||
RETURNFUNC(retval);
|
||||
}
|
||||
rs = &rig->state;
|
||||
|
||||
RETURNFUNC(RIG_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* IC-7000 rig capabilities.
|
||||
* taken from IC-7000 rig capabilities.
|
||||
*
|
||||
* TODO: complete command set (esp. the $1A bunch!) and testing..
|
||||
*/
|
||||
|
@ -154,7 +152,7 @@ const struct rig_caps x108g_caps =
|
|||
{
|
||||
RIG_MODEL(RIG_MODEL_X108G),
|
||||
.model_name = "X108G",
|
||||
.mfg_name = "Xeigu",
|
||||
.mfg_name = "Xiegu",
|
||||
.version = BACKEND_VER ".0",
|
||||
.copyright = "LGPL",
|
||||
.status = RIG_STATUS_STABLE,
|
||||
|
@ -328,7 +326,7 @@ const struct rig_caps x6100_caps =
|
|||
{
|
||||
RIG_MODEL(RIG_MODEL_X6100),
|
||||
.model_name = "X6100",
|
||||
.mfg_name = "Xeigu",
|
||||
.mfg_name = "Xiegu",
|
||||
.version = BACKEND_VER ".1",
|
||||
.copyright = "LGPL",
|
||||
.status = RIG_STATUS_ALPHA,
|
||||
|
@ -499,6 +497,180 @@ const struct rig_caps x6100_caps =
|
|||
|
||||
};
|
||||
|
||||
const struct rig_caps g90_caps =
|
||||
{
|
||||
RIG_MODEL(RIG_MODEL_G90),
|
||||
.model_name = "G90",
|
||||
.mfg_name = "Xiegu",
|
||||
.version = BACKEND_VER ".0",
|
||||
.copyright = "LGPL",
|
||||
.status = RIG_STATUS_ALPHA,
|
||||
.rig_type = RIG_TYPE_TRANSCEIVER,
|
||||
.ptt_type = RIG_PTT_RIG,
|
||||
.dcd_type = RIG_DCD_RIG,
|
||||
.port_type = RIG_PORT_SERIAL,
|
||||
.serial_rate_min = 300,
|
||||
.serial_rate_max = 19200,
|
||||
.serial_data_bits = 8,
|
||||
.serial_stop_bits = 1,
|
||||
.serial_parity = RIG_PARITY_NONE,
|
||||
.serial_handshake = RIG_HANDSHAKE_NONE,
|
||||
.write_delay = 0,
|
||||
.post_write_delay = 0,
|
||||
.timeout = 1000,
|
||||
.retry = 3,
|
||||
.has_get_func = X108G_FUNCS,
|
||||
.has_set_func = X108G_FUNCS,
|
||||
.has_get_level = X108G_LEVELS,
|
||||
.has_set_level = RIG_LEVEL_SET(X108G_LEVELS),
|
||||
.has_get_parm = X108G_PARMS,
|
||||
.has_set_parm = RIG_PARM_SET(X108G_PARMS),
|
||||
.level_gran = {
|
||||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
},
|
||||
.parm_gran = {},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = common_dcs_list,
|
||||
.preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess*/
|
||||
.attenuator = { 12, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
.max_ifshift = Hz(0), /* TODO */
|
||||
.targetable_vfo = 0,
|
||||
.vfo_ops = X108G_VFO_OPS,
|
||||
.scan_ops = X108G_SCAN_OPS,
|
||||
.transceive = RIG_TRN_RIG,
|
||||
.bank_qty = 5,
|
||||
.chan_desc_sz = 0, /* TODO */
|
||||
|
||||
.chan_list = {
|
||||
{ 1, 99, RIG_MTYPE_MEM, X108G_MEM_CAP },
|
||||
{ 100, 105, RIG_MTYPE_EDGE, X108G_MEM_CAP }, /* two by two */
|
||||
{ 106, 107, RIG_MTYPE_CALL, X108G_MEM_CAP },
|
||||
RIG_CHAN_END,
|
||||
},
|
||||
|
||||
.rx_range_list1 = { {kHz(30), MHz(199.999999), X108G_ALL_RX_MODES, -1, -1, X108G_VFOS},
|
||||
{MHz(400), MHz(470), X108G_ALL_RX_MODES, -1, -1, X108G_VFOS}, RIG_FRNG_END,
|
||||
},
|
||||
.tx_range_list1 = {
|
||||
FRQ_RNG_HF(1, X108G_OTHER_TX_MODES, W(2), W(100), X108G_VFOS, RIG_ANT_1),
|
||||
FRQ_RNG_6m(1, X108G_OTHER_TX_MODES, W(2), W(100), X108G_VFOS, RIG_ANT_1),
|
||||
FRQ_RNG_2m(1, X108G_OTHER_TX_MODES, W(2), W(50), X108G_VFOS, RIG_ANT_2),
|
||||
FRQ_RNG_70cm(1, X108G_OTHER_TX_MODES, W(2), W(35), X108G_VFOS, RIG_ANT_2),
|
||||
FRQ_RNG_HF(1, X108G_AM_TX_MODES, W(1), W(40), X108G_VFOS, RIG_ANT_1), /* AM class */
|
||||
FRQ_RNG_6m(1, X108G_AM_TX_MODES, W(1), W(40), X108G_VFOS, RIG_ANT_1), /* AM class */
|
||||
FRQ_RNG_2m(1, X108G_AM_TX_MODES, W(2), W(20), X108G_VFOS, RIG_ANT_2),
|
||||
FRQ_RNG_70cm(1, X108G_OTHER_TX_MODES, W(2), W(14), X108G_VFOS, RIG_ANT_2),
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
.rx_range_list2 = { {kHz(30), MHz(199.999999), X108G_ALL_RX_MODES, -1, -1, X108G_VFOS},
|
||||
{MHz(400), MHz(470), X108G_ALL_RX_MODES, -1, -1, X108G_VFOS}, RIG_FRNG_END,
|
||||
},
|
||||
.tx_range_list2 = { /* needs the 5 mhz channels added */
|
||||
FRQ_RNG_HF(2, X108G_OTHER_TX_MODES, W(2), W(100), X108G_VFOS, RIG_ANT_1),
|
||||
FRQ_RNG_6m(2, X108G_OTHER_TX_MODES, W(2), W(100), X108G_VFOS, RIG_ANT_1),
|
||||
FRQ_RNG_2m(2, X108G_OTHER_TX_MODES, W(2), W(50), X108G_VFOS, RIG_ANT_2),
|
||||
FRQ_RNG_70cm(2, X108G_OTHER_TX_MODES, W(2), W(35), X108G_VFOS, RIG_ANT_2),
|
||||
FRQ_RNG_HF(2, X108G_AM_TX_MODES, W(1), W(40), X108G_VFOS, RIG_ANT_1), /* AM class */
|
||||
FRQ_RNG_6m(2, X108G_AM_TX_MODES, W(1), W(40), X108G_VFOS, RIG_ANT_1), /* AM class */
|
||||
FRQ_RNG_2m(2, X108G_AM_TX_MODES, W(2), W(20), X108G_VFOS, RIG_ANT_2),
|
||||
FRQ_RNG_70cm(2, X108G_OTHER_TX_MODES, W(2), W(14), X108G_VFOS, RIG_ANT_2),
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
.tuning_steps = {
|
||||
{X108G_1HZ_TS_MODES, 1},
|
||||
{X108G_NOT_TS_MODES, 10},
|
||||
{X108G_ALL_RX_MODES, Hz(100)},
|
||||
{X108G_ALL_RX_MODES, kHz(1)},
|
||||
{X108G_ALL_RX_MODES, kHz(5)},
|
||||
{X108G_ALL_RX_MODES, kHz(9)},
|
||||
{X108G_ALL_RX_MODES, kHz(10)},
|
||||
{X108G_ALL_RX_MODES, kHz(12.5)},
|
||||
{X108G_ALL_RX_MODES, kHz(20)},
|
||||
{X108G_ALL_RX_MODES, kHz(25)},
|
||||
{X108G_ALL_RX_MODES, kHz(100)},
|
||||
{X108G_NOT_TS_MODES, MHz(1)},
|
||||
RIG_TS_END,
|
||||
},
|
||||
|
||||
/* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! Remember these are defaults, with dsp rigs you can change them to anything you want except FM and WFM which are fixed */
|
||||
.filters = {
|
||||
{RIG_MODE_SSB, kHz(2.4)},
|
||||
{RIG_MODE_SSB, kHz(1.8)},
|
||||
{RIG_MODE_SSB, kHz(3)},
|
||||
{RIG_MODE_FM, kHz(10)},
|
||||
{RIG_MODE_FM, kHz(15)},
|
||||
{RIG_MODE_FM, kHz(7)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)},
|
||||
{RIG_MODE_CW | RIG_MODE_CWR, kHz(1.2)},
|
||||
{RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)},
|
||||
{RIG_MODE_AM, kHz(6)},
|
||||
{RIG_MODE_AM, kHz(3)},
|
||||
{RIG_MODE_AM, kHz(9)},
|
||||
{RIG_MODE_WFM, kHz(280)},
|
||||
RIG_FLT_END,
|
||||
},
|
||||
|
||||
.str_cal = X108G_STR_CAL,
|
||||
|
||||
.cfgparams = icom_cfg_params,
|
||||
.set_conf = icom_set_conf,
|
||||
.get_conf = icom_get_conf,
|
||||
|
||||
.priv = (void *)& x108g_priv_caps,
|
||||
.rig_init = icom_init,
|
||||
.rig_cleanup = icom_cleanup,
|
||||
.rig_open = icom_rig_open,
|
||||
.rig_close = icom_rig_open,
|
||||
|
||||
.set_freq = icom_set_freq,
|
||||
.get_freq = icom_get_freq,
|
||||
.set_mode = icom_set_mode,
|
||||
.get_mode = icom_get_mode,
|
||||
.set_vfo = icom_set_vfo,
|
||||
.set_ant = NULL, /*automatically set by rig depending band */
|
||||
.get_ant = NULL,
|
||||
|
||||
.decode_event = icom_decode_event,
|
||||
.set_level = icom_set_level,
|
||||
.get_level = icom_get_level,
|
||||
.set_func = icom_set_func,
|
||||
.get_func = icom_get_func,
|
||||
.set_parm = NULL,
|
||||
.get_parm = NULL,
|
||||
.set_mem = icom_set_mem,
|
||||
.set_bank = icom_set_bank,
|
||||
.vfo_op = icom_vfo_op,
|
||||
.scan = icom_scan,
|
||||
.set_ptt = x108g_set_ptt,
|
||||
.get_ptt = icom_get_ptt,
|
||||
.get_dcd = icom_get_dcd,
|
||||
.set_ts = icom_set_ts,
|
||||
.get_ts = NULL,
|
||||
.set_rptr_shift = icom_set_rptr_shift,
|
||||
.get_rptr_shift = NULL,
|
||||
.set_rptr_offs = icom_set_rptr_offs,
|
||||
.get_rptr_offs = icom_get_rptr_offs,
|
||||
.set_ctcss_tone = icom_set_ctcss_tone,
|
||||
.get_ctcss_tone = icom_get_ctcss_tone,
|
||||
.set_ctcss_sql = icom_set_ctcss_sql,
|
||||
.get_ctcss_sql = icom_get_ctcss_sql,
|
||||
.set_dcs_code = icom_set_dcs_code,
|
||||
.get_dcs_code = icom_get_dcs_code,
|
||||
.set_split_freq = x108g_set_split_freq,
|
||||
.get_split_freq = icom_get_split_freq,
|
||||
.set_split_mode = x108g_set_split_mode,
|
||||
.get_split_mode = icom_get_split_mode,
|
||||
.set_split_vfo = x108g_set_split_vfo,
|
||||
.get_split_vfo = NULL,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* x108g_set_ptt
|
||||
* Assumes rig!=NULL, rig->state.priv!=NULL
|
Ładowanie…
Reference in New Issue