Add Xeigu X6100

pull/910/head
Mike Black W9MDB 2021-12-27 23:23:26 -06:00
rodzic 1c0ecc7ec6
commit 86a6ffb19e
4 zmienionych plików z 197 dodań i 0 usunięć

Wyświetl plik

@ -263,6 +263,7 @@
#define RIG_MODEL_ID51 RIG_MAKE_MODEL(RIG_ICOM, 84)
#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 */
/*

Wyświetl plik

@ -592,6 +592,7 @@ static const struct icom_addr icom_addr_list[] =
{RIG_MODEL_IC7700, 0x74},
{RIG_MODEL_PERSEUS, 0xE1},
{RIG_MODEL_X108G, 0x70},
{RIG_MODEL_X6100, 0x70},
{RIG_MODEL_ICR8600, 0x96},
{RIG_MODEL_ICR30, 0x9c},
{RIG_MODEL_NONE, 0},
@ -9546,6 +9547,7 @@ DECLARE_INITRIG_BACKEND(icom)
rig_register(&perseus_caps);
rig_register(&x108g_caps);
rig_register(&x6100_caps);
RETURNFUNC(RIG_OK);
}

Wyświetl plik

@ -488,6 +488,7 @@ extern const struct rig_caps ic2730_caps;
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 icr8600_caps;
extern const struct rig_caps icr30_caps;

Wyświetl plik

@ -45,6 +45,7 @@
#include "frame.h"
#include "misc.h"
#include "bandplan.h"
#include "serial.h"
#define X108G_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_WFM)
#define X108G_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR)
@ -119,6 +120,24 @@ static int x108g_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq);
static int x108g_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode,
pbwidth_t tx_width);
static int x108g_rig_open(RIG *rig)
{
int retval;
struct rig_state *rs;
retval = icom_rig_open(rig);
if (retval != RIG_OK)
{
rig_debug(RIG_DEBUG_ERR, "%s: rig_open failed with %s\n", __func__, rigerror(retval));
RETURNFUNC(retval);
}
rs = &rig->state;
ser_set_rts(&rs->rigport, 1);
ser_set_dtr(&rs->rigport, 1);
RETURNFUNC(RIG_OK);
}
/*
* IC-7000 rig capabilities.
*
@ -140,6 +159,180 @@ const struct rig_caps x108g_caps =
.mfg_name = "Xeigu",
.version = BACKEND_VER ".0",
.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 = 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 = x108g_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,
};
const struct rig_caps x6100_caps =
{
RIG_MODEL(RIG_MODEL_X6100),
.model_name = "X6100",
.mfg_name = "Xeigu",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
.status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,