Add Xiegu X6200

pull/1590/head
Mike Black W9MDB 2024-07-17 22:43:35 -05:00
rodzic 56d55f59b3
commit 2e96b91b04
5 zmienionych plików z 181 dodań i 1 usunięć

1
NEWS
Wyświetl plik

@ -13,6 +13,7 @@ Version 5.x -- future
* Change FT1000MP Mark V model names to align with FT1000MP
Version 4.6
* Added Xeigu X6200
* Added Commradio CTX-10
* Added Guoehe PMR-171
* Added csntechnoligies.net S.A.T Satellite rotor control

Wyświetl plik

@ -296,6 +296,7 @@
#define RIG_MODEL_G90 RIG_MAKE_MODEL(RIG_ICOM, 88) /* Xiegu G90 */
#define RIG_MODEL_X5105 RIG_MAKE_MODEL(RIG_ICOM, 89) /* Xiegu X5105 -- G90 compatible */
#define RIG_MODEL_IC905 RIG_MAKE_MODEL(RIG_ICOM, 90)
#define RIG_MODEL_X6200 RIG_MAKE_MODEL(RIG_ICOM, 91) /* Xiegu X6200 */
/*
* Optoelectronics (CI-V)

Wyświetl plik

@ -9924,6 +9924,7 @@ DECLARE_INITRIG_BACKEND(icom)
rig_register(&x6100_caps);
rig_register(&g90_caps);
rig_register(&x5105_caps);
rig_register(&x6200_caps);
return (RIG_OK);
}

Wyświetl plik

@ -517,6 +517,7 @@ extern struct rig_caps x108g_caps;
extern struct rig_caps x6100_caps;
extern struct rig_caps g90_caps;
extern struct rig_caps x5105_caps;
extern struct rig_caps x6200_caps;
extern struct rig_caps icr8600_caps;
extern struct rig_caps icr30_caps;

Wyświetl plik

@ -160,7 +160,7 @@ int xiegu_rig_open(RIG *rig)
case 0x0090: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G90S");break;
case 0x0106: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "G106/G106C");break;
case 0x6100:
case 0x00a4: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "X6100");break;
case 0x00a4: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "X6100/X6200");break;
default: rig_debug(RIG_DEBUG_VERBOSE, "%s: Xiegu model %s\n", __func__, "Unknown");break;
}
}
@ -549,6 +549,182 @@ struct rig_caps x6100_caps =
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
struct rig_caps x6200_caps =
{
RIG_MODEL(RIG_MODEL_X6200),
.model_name = "X6200",
.mfg_name = "Xiegu",
.version = BACKEND_VER ".1",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.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 = 3,
.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 = {
[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 */
.vfo_ops = X108G_VFO_OPS,
.targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE,
.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 *) &x6100_priv_caps,
.rig_init = icom_init,
.rig_cleanup = icom_cleanup,
.rig_open = xiegu_rig_open,
.rig_close = icom_rig_close,
.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,
// testing with X6100 showed it rejected the 0x0f 0x01 command
.set_split_freq = icom_set_split_freq,
.get_split_freq = icom_get_split_freq,
.set_split_mode = icom_set_split_mode,
.get_split_mode = icom_get_split_mode,
.set_split_vfo = icom_set_split_vfo,
.get_split_vfo = NULL,
//.set_powerstat = icom_set_powerstat,
//.get_powerstat = icom_get_powerstat,
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
};
static struct icom_priv_caps g90_priv_caps =
{
0xa4, /* default address */