diff --git a/icom/ic7300.c b/icom/ic7300.c index daa091153..02049f60c 100644 --- a/icom/ic7300.c +++ b/icom/ic7300.c @@ -119,8 +119,8 @@ /* * IC9700 items that differ from IC7300 */ -#define IC9700_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM|RIG_VFO_MAIN|RIG_VFO_SUB) -#define IC9700_FUNCS (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_SCOPE) +#define IC9700_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) +#define IC9700_FUNCS (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_SCOPE|RIG_FUNC_SATMODE|RIG_FUNC_AFC) #define IC9700_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) #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) @@ -186,7 +186,7 @@ static const struct icom_priv_caps IC7300_priv_caps = { 0x94, /* default address */ 0, /* 731 mode */ - 0, /* no XCHG */ + 1, /* no XCHG to avoid display flickering */ ic7300_ts_sc_list, .agc_levels_present = 1, .agc_levels = { @@ -200,7 +200,7 @@ static const struct icom_priv_caps IC7300_priv_caps = { static const struct icom_priv_caps IC9700_priv_caps = { 0xA2, /* default address */ 0, /* 731 mode */ - 0, /* no XCHG */ + 1, /* no XCHG to avoid display flickering */ ic7300_ts_sc_list, .serial_USB_echo_check = 1, /* USB CI-V may not echo */ .agc_levels_present = 1, @@ -223,7 +223,7 @@ const struct rig_caps ic7300_caps = { .rig_model = RIG_MODEL_IC7300, .model_name = "IC-7300", .mfg_name = "Icom", -.version = BACKEND_VER ".3", +.version = BACKEND_VER ".4", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -274,26 +274,26 @@ const struct rig_caps ic7300_caps = { RIG_CHAN_END, }, -.rx_range_list1 = { {kHz(30),MHz(74.8),IC7300_ALL_RX_MODES,-1,-1,IC7300_VFOS}, RIG_FRNG_END, }, +.rx_range_list1 = { {kHz(30),MHz(74.8),IC7300_ALL_RX_MODES,-1,-1,IC9700_VFOS}, RIG_FRNG_END, }, .tx_range_list1 = { - FRQ_RNG_HF(1,IC7300_OTHER_TX_MODES, W(2),W(100),IC7300_VFOS,RIG_ANT_1), - FRQ_RNG_60m(1,IC7300_OTHER_TX_MODES, W(2),W(100),IC7300_VFOS,RIG_ANT_1), - FRQ_RNG_6m(1,IC7300_OTHER_TX_MODES, W(2),W(100),IC7300_VFOS,RIG_ANT_1), - FRQ_RNG_4m(1,IC7300_OTHER_TX_MODES, W(2),W(100),IC7300_VFOS,RIG_ANT_1), - FRQ_RNG_HF(1,IC7300_AM_TX_MODES, W(1),W(40),IC7300_VFOS,RIG_ANT_1), /* AM class */ - FRQ_RNG_60m(1,IC7300_AM_TX_MODES, W(1),W(40),IC7300_VFOS,RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(1,IC7300_AM_TX_MODES, W(1),W(40),IC7300_VFOS,RIG_ANT_1), /* AM class */ - FRQ_RNG_4m(1,IC7300_AM_TX_MODES, W(1),W(40),IC7300_VFOS,RIG_ANT_1), /* AM class */ + FRQ_RNG_HF(1,IC7300_OTHER_TX_MODES, W(2),W(100),IC9700_VFOS,RIG_ANT_1), + FRQ_RNG_60m(1,IC7300_OTHER_TX_MODES, W(2),W(100),IC9700_VFOS,RIG_ANT_1), + FRQ_RNG_6m(1,IC7300_OTHER_TX_MODES, W(2),W(100),IC9700_VFOS,RIG_ANT_1), + FRQ_RNG_4m(1,IC7300_OTHER_TX_MODES, W(2),W(100),IC9700_VFOS,RIG_ANT_1), + FRQ_RNG_HF(1,IC7300_AM_TX_MODES, W(1),W(40),IC9700_VFOS,RIG_ANT_1), /* AM class */ + FRQ_RNG_60m(1,IC7300_AM_TX_MODES, W(1),W(40),IC9700_VFOS,RIG_ANT_1), /* AM class */ + FRQ_RNG_6m(1,IC7300_AM_TX_MODES, W(1),W(40),IC9700_VFOS,RIG_ANT_1), /* AM class */ + FRQ_RNG_4m(1,IC7300_AM_TX_MODES, W(1),W(40),IC9700_VFOS,RIG_ANT_1), /* AM class */ RIG_FRNG_END, }, -.rx_range_list2 = { {kHz(30),MHz(74.8),IC7300_ALL_RX_MODES,-1,-1,IC7300_VFOS}, RIG_FRNG_END, }, +.rx_range_list2 = { {kHz(30),MHz(74.8),IC7300_ALL_RX_MODES,-1,-1,IC9700_VFOS}, RIG_FRNG_END, }, .tx_range_list2 = { - FRQ_RNG_HF(2,IC7300_OTHER_TX_MODES, W(2),W(100),IC7300_VFOS,RIG_ANT_1), - FRQ_RNG_60m(2,IC7300_OTHER_TX_MODES, W(2),W(100),IC7300_VFOS,RIG_ANT_1), - FRQ_RNG_6m(2,IC7300_OTHER_TX_MODES, W(2),W(100),IC7300_VFOS,RIG_ANT_1), - FRQ_RNG_HF(2,IC7300_AM_TX_MODES, W(1),W(40),IC7300_VFOS,RIG_ANT_1), /* AM class */ - FRQ_RNG_60m(2,IC7300_AM_TX_MODES, W(1),W(40),IC7300_VFOS,RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(2,IC7300_AM_TX_MODES, W(1),W(40),IC7300_VFOS,RIG_ANT_1), /* AM class */ + FRQ_RNG_HF(2,IC7300_OTHER_TX_MODES, W(2),W(100),IC9700_VFOS,RIG_ANT_1), + FRQ_RNG_60m(2,IC7300_OTHER_TX_MODES, W(2),W(100),IC9700_VFOS,RIG_ANT_1), + FRQ_RNG_6m(2,IC7300_OTHER_TX_MODES, W(2),W(100),IC9700_VFOS,RIG_ANT_1), + FRQ_RNG_HF(2,IC7300_AM_TX_MODES, W(1),W(40),IC9700_VFOS,RIG_ANT_1), /* AM class */ + FRQ_RNG_60m(2,IC7300_AM_TX_MODES, W(1),W(40),IC9700_VFOS,RIG_ANT_1), /* AM class */ + FRQ_RNG_6m(2,IC7300_AM_TX_MODES, W(1),W(40),IC9700_VFOS,RIG_ANT_1), /* AM class */ RIG_FRNG_END, }, .tuning_steps = { @@ -375,10 +375,10 @@ const struct rig_caps ic7300_caps = { .get_dcd = icom_get_dcd, .set_ts = icom_set_ts, .get_ts = icom_get_ts, -.set_rptr_shift = NULL, -.get_rptr_shift = NULL, -.set_rptr_offs = NULL, -.get_rptr_offs = NULL, +.set_rptr_shift = icom_set_rptr_shift, +.get_rptr_shift = icom_get_rptr_shift, +.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, @@ -403,7 +403,7 @@ const struct rig_caps ic9700_caps = { .mfg_name = "Icom", .version = BACKEND_VER ".2", .copyright = "LGPL", -.status = RIG_STATUS_BETA, +.status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, .ptt_type = RIG_PTT_RIG, .dcd_type = RIG_DCD_RIG, @@ -548,10 +548,10 @@ const struct rig_caps ic9700_caps = { .get_dcd = icom_get_dcd, .set_ts = icom_set_ts, .get_ts = icom_get_ts, -.set_rptr_shift = NULL, -.get_rptr_shift = NULL, -.set_rptr_offs = NULL, -.get_rptr_offs = NULL, +.set_rptr_shift = icom_set_rptr_shift, +.get_rptr_shift = icom_get_rptr_shift, +.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, diff --git a/icom/ic910.c b/icom/ic910.c index 98a9eee1b..7e37126a4 100644 --- a/icom/ic910.c +++ b/icom/ic910.c @@ -42,24 +42,26 @@ #ifdef HAVE_WEIRD_IC910_MODES static int ic910_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { - /* FIX: The IC-910 has "Set FM" = 4, which is RTTY in for other radios */ - if (mode == RIG_MODE_FM) { - mode = RIG_MODE_RTTY; - } + /* FIX: The IC-910 has "Set FM" = 4, which is RTTY in for other radios */ + if (mode == RIG_MODE_FM) + { + mode = RIG_MODE_RTTY; + } - return icom_set_mode(rig, vfo, mode, width); + return icom_set_mode(rig, vfo, mode, width); } static int ic910_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { - /* FIX: The IC-910 has "Set FM" = 4, which is RTTY in for other radios */ - int retval = icom_get_mode(rig, vfo, mode, width); + /* FIX: The IC-910 has "Set FM" = 4, which is RTTY in for other radios */ + int retval = icom_get_mode(rig, vfo, mode, width); - if (*mode == RIG_MODE_RTTY) { - *mode = RIG_MODE_FM; - } + if (*mode == RIG_MODE_RTTY) + { + *mode = RIG_MODE_FM; + } - return retval; + return retval; } #endif /* HAVE_WEIRD_IC910_MODES */ @@ -70,193 +72,237 @@ static int ic910_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) static int compareFrequencies(RIG *rig, freq_t freq1, freq_t freq2) { - int freq1band = 0, freq2band = 0; - freq_range_t noband = RIG_FRNG_END; + int freq1band = 0, freq2band = 0; + freq_range_t noband = RIG_FRNG_END; - while (rig->caps->rx_range_list1[freq1band].startf != noband.startf) { - if (freq1 >= rig->caps->rx_range_list1[freq1band].startf && - freq1 <= rig->caps->rx_range_list1[freq1band].endf) - break; + while (rig->caps->rx_range_list1[freq1band].startf != noband.startf) + { + if (freq1 >= rig->caps->rx_range_list1[freq1band].startf && + freq1 <= rig->caps->rx_range_list1[freq1band].endf) + { + break; + } - ++freq1band; - //fprintf(stderr, "%i\n", freq1band); - } + ++freq1band; + //fprintf(stderr, "%i\n", freq1band); + } - while (rig->caps->rx_range_list1[freq2band].startf != noband.startf) { - if (freq2 >= rig->caps->rx_range_list1[freq2band].startf && - freq2 <= rig->caps->rx_range_list1[freq2band].endf) - break; + while (rig->caps->rx_range_list1[freq2band].startf != noband.startf) + { + if (freq2 >= rig->caps->rx_range_list1[freq2band].startf && + freq2 <= rig->caps->rx_range_list1[freq2band].endf) + { + break; + } - ++freq2band; - } + ++freq2band; + } - if (freq2band == freq1band) return 1; - else return 0; + if (freq2band == freq1band) { return 1; } + else { return 0; } } static int ic910_set_freq(RIG *rig, vfo_t vfo, freq_t freq) { - int retval; - freq_t otherfreq; - freq_t origfreq; + int retval; + freq_t otherfreq; + freq_t origfreq; - if ((retval = icom_get_freq(rig, RIG_VFO_CURR, &origfreq)) != RIG_OK) return retval; - if (compareFrequencies (rig, freq, origfreq)) + if ((retval = icom_get_freq(rig, RIG_VFO_CURR, &origfreq)) != RIG_OK) { return retval; } + + if (compareFrequencies(rig, freq, origfreq)) { - /* correct band already */ - if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) + /* correct band already */ + if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) { - /* switch to desired VFO and read its frequency */ - if ((retval = icom_set_vfo (rig, vfo)) != RIG_OK) return retval; - if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) return retval; - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - if (otherfreq != origfreq) + /* switch to desired VFO and read its frequency */ + if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } + + if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) { return retval; } + + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + + if (otherfreq != origfreq) { - /* swap VFOs back as original was the other one */ - icom_set_vfo (rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); + /* swap VFOs back as original was the other one */ + icom_set_vfo(rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); } } - else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) + else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) { - /* switch to the desired of MAIN and SUB and read its frequency */ - if ((retval = icom_set_vfo (rig, vfo)) != RIG_OK) return retval; - if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) return retval; - if (otherfreq != origfreq) + /* switch to the desired of MAIN and SUB and read its frequency */ + if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } + + if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) { return retval; } + + if (otherfreq != origfreq) { - /* started on a different so band exchange MAIN and SUB */ - if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) return retval; - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - /* swap MAIN/SUB back as original was the other one */ - icom_set_vfo (rig, RIG_VFO_MAIN == vfo ? RIG_VFO_SUB : RIG_VFO_MAIN); + /* started on a different so band exchange MAIN and SUB */ + if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) { return retval; } + + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + /* swap MAIN/SUB back as original was the other one */ + icom_set_vfo(rig, RIG_VFO_MAIN == vfo ? RIG_VFO_SUB : RIG_VFO_MAIN); } - else + else { - /* already correct one of MAIN and SUB */ - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); + /* already correct one of MAIN and SUB */ + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); } } - else if (RIG_VFO_CURR == vfo) + else if (RIG_VFO_CURR == vfo) { - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); } - else retval = -RIG_EVFO; + else { retval = -RIG_EVFO; } } - else + else { - /* wrong band */ - if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) + /* wrong band */ + if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) { - /* try and set frequency, may fail if band is already on other of MAIN/SUB */ - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - if (-RIG_ERJCTED == retval) + /* try and set frequency, may fail if band is already on other of MAIN/SUB */ + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + + if (-RIG_ERJCTED == retval) { - /* exchange MAIN & SUB */ - if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) return retval; - if ((retval = icom_get_freq(rig, vfo, &origfreq)) != RIG_OK) return retval; - if ((retval = icom_set_vfo (rig, vfo)) != RIG_OK) return retval; - if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) return retval; - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - if (-RIG_ERJCTED == retval) + /* exchange MAIN & SUB */ + if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) { return retval; } + + if ((retval = icom_get_freq(rig, vfo, &origfreq)) != RIG_OK) { return retval; } + + if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } + + if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) { return retval; } + + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + + if (-RIG_ERJCTED == retval) { - /* band not fitted so swap MAIN & SUB back and give up */ - icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG); - return retval; + /* band not fitted so swap MAIN & SUB back and give up */ + icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG); + return retval; } - else if (retval != RIG_OK) return retval; - if (otherfreq != origfreq) + else if (retval != RIG_OK) { return retval; } + + if (otherfreq != origfreq) { - /* swap VFOs back as original was the other one */ - icom_set_vfo (rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); + /* swap VFOs back as original was the other one */ + icom_set_vfo(rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); } - /* we do not exchange bands back as this is taken to - mean set VFOA/B on MAIN to the specified frequency - as Hamlib does not recognize A on MAIN or B on SUB - etc. This is probably reasonable since we cannot Tx - on SUB */ - return retval; + + /* we do not exchange bands back as this is taken to + mean set VFOA/B on MAIN to the specified frequency + as Hamlib does not recognize A on MAIN or B on SUB + etc. This is probably reasonable since we cannot Tx + on SUB */ + return retval; } - /* we changed band to the "third band" which always makes - VFO A current so just make the requested one the - specified frequency as well if it is VFO B. There is no - way of going to the "third band" without changing VFO - A */ - if (RIG_VFO_B == vfo) { - if ((retval = icom_set_vfo (rig, vfo)) != RIG_OK) return retval; - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - icom_set_vfo (rig, RIG_VFO_A); - } - } - else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) - { - if ((retval = icom_set_vfo (rig, vfo)) != RIG_OK) return retval; - if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) return retval; - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - if (-RIG_ERJCTED == retval) + + /* we changed band to the "third band" which always makes + VFO A current so just make the requested one the + specified frequency as well if it is VFO B. There is no + way of going to the "third band" without changing VFO + A */ + if (RIG_VFO_B == vfo) { - /* required band is on other of MAIN or SUB */ - if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) return retval; - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - } - else if (retval != RIG_OK) return retval; - if (otherfreq != origfreq) - { - /* started on other of MAIN & SUB so switch back */ - icom_set_vfo (rig, - RIG_VFO_MAIN == vfo ? - RIG_VFO_SUB : RIG_VFO_MAIN); + if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } + + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + icom_set_vfo(rig, RIG_VFO_A); } } - else if (RIG_VFO_CURR == vfo) + else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) { - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - if (-RIG_ERJCTED == retval) + if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } + + if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) { return retval; } + + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + + if (-RIG_ERJCTED == retval) { - /* exchange MAIN & SUB */ - if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) return retval; - retval = icom_set_freq (rig, RIG_VFO_CURR, freq); - if (-RIG_ERJCTED == retval) + /* required band is on other of MAIN or SUB */ + if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) { return retval; } + + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + } + else if (retval != RIG_OK) { return retval; } + + if (otherfreq != origfreq) + { + /* started on other of MAIN & SUB so switch back */ + icom_set_vfo(rig, + RIG_VFO_MAIN == vfo ? + RIG_VFO_SUB : RIG_VFO_MAIN); + } + } + else if (RIG_VFO_CURR == vfo) + { + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + + if (-RIG_ERJCTED == retval) + { + /* exchange MAIN & SUB */ + if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) { return retval; } + + retval = icom_set_freq(rig, RIG_VFO_CURR, freq); + + if (-RIG_ERJCTED == retval) { - /* band not fitted so swap MAIN & SUB back and give up */ - icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG); - return retval; + /* band not fitted so swap MAIN & SUB back and give up */ + icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG); + return retval; } } } - else retval = -RIG_EVFO; + else { retval = -RIG_EVFO; } } - return retval; + + return retval; } -static int ic910_get_freq(RIG *rig, vfo_t vfo, freq_t * freq) +static int ic910_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) { - int retval; - freq_t origfreq; + int retval; + freq_t origfreq; - /* start off by reading the current VFO frequency */ - if ((retval = icom_get_freq(rig, RIG_VFO_CURR, &origfreq)) != RIG_OK) return retval; - if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) { - /* switch to desired VFO and read its frequency */ - if ((retval = icom_set_vfo (rig, vfo)) != RIG_OK) return retval; - if ((retval = icom_get_freq(rig, vfo, freq)) != RIG_OK) return retval; - if (*freq != origfreq) { - /* swap VFOs back as original was the other one */ - icom_set_vfo (rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); + /* start off by reading the current VFO frequency */ + if ((retval = icom_get_freq(rig, RIG_VFO_CURR, &origfreq)) != RIG_OK) { return retval; } + + if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) + { + /* switch to desired VFO and read its frequency */ + if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } + + if ((retval = icom_get_freq(rig, vfo, freq)) != RIG_OK) { return retval; } + + if (*freq != origfreq) + { + /* swap VFOs back as original was the other one */ + icom_set_vfo(rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); } } - else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) { - /* switch to the desired of MAIN and SUB and read its frequency */ - if ((retval = icom_set_vfo (rig, vfo)) != RIG_OK) return retval; - if ((retval = icom_get_freq(rig, vfo, freq)) != RIG_OK) return retval; - if (*freq != origfreq) { - /* started on a different so switch back MAIN or SUB */ - icom_set_vfo (rig, RIG_VFO_MAIN == vfo ? RIG_VFO_SUB : RIG_VFO_MAIN); + else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) + { + /* switch to the desired of MAIN and SUB and read its frequency */ + if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } + + if ((retval = icom_get_freq(rig, vfo, freq)) != RIG_OK) { return retval; } + + if (*freq != origfreq) + { + /* started on a different so switch back MAIN or SUB */ + icom_set_vfo(rig, RIG_VFO_MAIN == vfo ? RIG_VFO_SUB : RIG_VFO_MAIN); } } - else if (RIG_VFO_CURR == vfo) { - *freq = origfreq; + else if (RIG_VFO_CURR == vfo) + { + *freq = origfreq; } - else retval = -RIG_EVFO; - return retval; + else { retval = -RIG_EVFO; } + + return retval; } /* @@ -264,16 +310,18 @@ static int ic910_get_freq(RIG *rig, vfo_t vfo, freq_t * freq) * (1 - normal, 2 - narrow) */ static int ic910_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd) + unsigned char *md, signed char *pd) { - int err; + int err; - err = rig2icom_mode(rig, mode, width, md, pd); + err = rig2icom_mode(rig, mode, width, md, pd); - if (*pd == PD_NARROW_3) - *pd = PD_NARROW_2; + if (*pd == PD_NARROW_3) + { + *pd = PD_NARROW_2; + } - return err; + return err; } @@ -321,203 +369,229 @@ static int ic910_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, #define IC910_STR_CAL UNKNOWN_IC_STR_CAL /* FIXME */ -static const struct icom_priv_caps ic910_priv_caps = { - 0x60, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic910_ts_sc_list, - .r2i_mode = ic910_r2i_mode +static const struct icom_priv_caps ic910_priv_caps = +{ + 0x60, /* default address */ + 0, /* 731 mode */ + 1, /* no XCHG to avoid display flicker */ + ic910_ts_sc_list, + .r2i_mode = ic910_r2i_mode }; int ic910_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) { - switch (func) { - case RIG_FUNC_SCOPE: - return icom_set_raw(rig, C_CTL_MEM, S_MEM_BANDSCOPE, 0, NULL, 1, status ? 1 : 0); - case RIG_FUNC_SATMODE: - return icom_set_raw(rig, C_CTL_MEM, S_MEM_SATMODE, 0, NULL, 1, status ? 1 : 0); - default: - return icom_set_func(rig, vfo, func, status); + switch (func) + { + case RIG_FUNC_SCOPE: + return icom_set_raw(rig, C_CTL_MEM, S_MEM_BANDSCOPE, 0, NULL, 1, + status ? 1 : 0); + + case RIG_FUNC_SATMODE: + return icom_set_raw(rig, C_CTL_MEM, S_MEM_SATMODE910, 0, NULL, 1, + status ? 1 : 0); + + default: + return icom_set_func(rig, vfo, func, status); } } int ic910_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) { - switch (func) { - case RIG_FUNC_SCOPE: - return icom_get_raw(rig, C_CTL_MEM, S_MEM_BANDSCOPE, 0, NULL, status); - case RIG_FUNC_SATMODE: - return icom_get_raw(rig, C_CTL_MEM, S_MEM_SATMODE, 0, NULL, status); - default: - return icom_get_func(rig, vfo, func, status); + switch (func) + { + case RIG_FUNC_SCOPE: + return icom_get_raw(rig, C_CTL_MEM, S_MEM_BANDSCOPE, 0, NULL, status); + + case RIG_FUNC_SATMODE: + return icom_get_raw(rig, C_CTL_MEM, S_MEM_SATMODE910, 0, NULL, status); + + default: + return icom_get_func(rig, vfo, func, status); } } int ic910_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { - 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_VOXDELAY: - return icom_set_level_raw(rig, level, C_CTL_MEM, S_MEM_VOXDELAY, 0, NULL, 1, val); + 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); - } + 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__); + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - switch (level) { + switch (level) + { case RIG_LEVEL_VOXDELAY: - return icom_get_level_raw(rig, level, C_CTL_MEM, S_MEM_VOXDELAY, 0, NULL, val); + 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); - } + return icom_get_level(rig, vfo, level, val); + } } -const struct rig_caps ic910_caps = { - .rig_model = RIG_MODEL_IC910, - .model_name = "IC-910", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .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 = IC910_FUNC_ALL, - .has_set_func = IC910_FUNC_ALL | RIG_FUNC_RESUME, - .has_get_level = IC910_LEVEL_ALL | (RIG_LEVEL_RAWSTR), - .has_set_level = IC910_LEVEL_ALL, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { 20, RIG_DBLST_END, }, - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), /* SSB,CW: +-1.0kHz FM: +-5.0kHz */ - .max_xit = Hz(0), - .max_ifshift = Hz(0), /* 1.2kHz manual knob */ - .targetable_vfo = RIG_TARGETABLE_FREQ, - .vfo_ops = IC910_VFO_OPS, - .scan_ops = IC910_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, +const struct rig_caps ic910_caps = +{ + .rig_model = RIG_MODEL_IC910, + .model_name = "IC-910", + .mfg_name = "Icom", + .version = BACKEND_VER ".2", + .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 = IC910_FUNC_ALL, + .has_set_func = IC910_FUNC_ALL | RIG_FUNC_RESUME, + .has_get_level = IC910_LEVEL_ALL | (RIG_LEVEL_RAWSTR), + .has_set_level = IC910_LEVEL_ALL, + .has_get_parm = RIG_PARM_NONE, + .has_set_parm = RIG_PARM_NONE, + .level_gran = { + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, + [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, + }, + .parm_gran = {}, + .ctcss_list = common_ctcss_list, - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 105, RIG_MTYPE_EDGE }, - { 106, 106, RIG_MTYPE_CALL }, - RIG_CHAN_END, - }, + .dcs_list = NULL, + .preamp = { 20, RIG_DBLST_END, }, + .attenuator = { 20, RIG_DBLST_END, }, + .max_rit = Hz(0), /* SSB,CW: +-1.0kHz FM: +-5.0kHz */ + .max_xit = Hz(0), + .max_ifshift = Hz(0), /* 1.2kHz manual knob */ + .targetable_vfo = RIG_TARGETABLE_FREQ, + .vfo_ops = IC910_VFO_OPS, + .scan_ops = IC910_SCAN_OPS, + .transceive = RIG_TRN_RIG, + .bank_qty = 0, + .chan_desc_sz = 0, - .rx_range_list1 = { /* USA */ - {MHz(144), MHz(148), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(430), MHz(450), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(148), IC910_MODES, W(5), W(100), IC910_VFO_ALL}, - {MHz(430), MHz(450), IC910_MODES, W(5), W(75), IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, - RIG_FRNG_END, - }, + .chan_list = { + { 1, 99, RIG_MTYPE_MEM }, + { 100, 105, RIG_MTYPE_EDGE }, + { 106, 106, RIG_MTYPE_CALL }, + RIG_CHAN_END, + }, - .rx_range_list2 = { /* Europe */ - {MHz(144), MHz(146), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(430), MHz(440), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(146), IC910_MODES, W(5), W(100), IC910_VFO_ALL}, - {MHz(430), MHz(440), IC910_MODES, W(5), W(75), IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, - RIG_FRNG_END, - }, + .rx_range_list1 = { /* USA */ + {MHz(144), MHz(148), IC910_MODES, -1, -1, IC910_VFO_ALL}, + {MHz(430), MHz(450), IC910_MODES, -1, -1, IC910_VFO_ALL}, + {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, + RIG_FRNG_END, + }, + .tx_range_list1 = { + {MHz(144), MHz(148), IC910_MODES, W(5), W(100), IC910_VFO_ALL}, + {MHz(430), MHz(450), IC910_MODES, W(5), W(75), IC910_VFO_ALL}, + {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, + RIG_FRNG_END, + }, - .tuning_steps = { - {RIG_MODE_SSB | RIG_MODE_CW, 1}, - {RIG_MODE_SSB | RIG_MODE_CW, 10}, - {RIG_MODE_SSB | RIG_MODE_CW, 50}, - {RIG_MODE_SSB | RIG_MODE_CW, 100}, - {RIG_MODE_FM, kHz(0.1)}, - {RIG_MODE_FM, kHz(5)}, - {RIG_MODE_FM, kHz(6.25)}, - {RIG_MODE_FM, kHz(10)}, - {RIG_MODE_FM, kHz(12.5)}, - {RIG_MODE_FM, kHz(20)}, - {RIG_MODE_FM, kHz(25)}, - {RIG_MODE_FM, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_CW | RIG_MODE_SSB, kHz(2.3)}, /* builtin */ - {RIG_MODE_CW, Hz(600)}, /* with optional FL-132/Fl133 CW filters */ - {RIG_MODE_FM, kHz(15)}, /* builtin */ - {RIG_MODE_FM, kHz(6)}, /* builtin */ - RIG_FLT_END, - }, - .str_cal = IC910_STR_CAL, + .rx_range_list2 = { /* Europe */ + {MHz(144), MHz(146), IC910_MODES, -1, -1, IC910_VFO_ALL}, + {MHz(430), MHz(440), IC910_MODES, -1, -1, IC910_VFO_ALL}, + {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, + RIG_FRNG_END, + }, + .tx_range_list2 = { + {MHz(144), MHz(146), IC910_MODES, W(5), W(100), IC910_VFO_ALL}, + {MHz(430), MHz(440), IC910_MODES, W(5), W(75), IC910_VFO_ALL}, + {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, + RIG_FRNG_END, + }, - .priv = &ic910_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, + .tuning_steps = { + {RIG_MODE_SSB | RIG_MODE_CW, 1}, + {RIG_MODE_SSB | RIG_MODE_CW, 10}, + {RIG_MODE_SSB | RIG_MODE_CW, 50}, + {RIG_MODE_SSB | RIG_MODE_CW, 100}, + {RIG_MODE_FM, kHz(0.1)}, + {RIG_MODE_FM, kHz(5)}, + {RIG_MODE_FM, kHz(6.25)}, + {RIG_MODE_FM, kHz(10)}, + {RIG_MODE_FM, kHz(12.5)}, + {RIG_MODE_FM, kHz(20)}, + {RIG_MODE_FM, kHz(25)}, + {RIG_MODE_FM, kHz(100)}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_CW | RIG_MODE_SSB, kHz(2.3)}, /* builtin */ + {RIG_MODE_CW, Hz(600)}, /* with optional FL-132/Fl133 CW filters */ + {RIG_MODE_FM, kHz(15)}, /* builtin */ + {RIG_MODE_FM, kHz(6)}, /* builtin */ + RIG_FLT_END, + }, + .str_cal = IC910_STR_CAL, - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, + .priv = &ic910_priv_caps, + .rig_init = icom_init, + .rig_cleanup = icom_cleanup, - .get_freq = ic910_get_freq, - .set_freq = ic910_set_freq, + .cfgparams = icom_cfg_params, + .set_conf = icom_set_conf, + .get_conf = icom_get_conf, + + .get_freq = ic910_get_freq, + .set_freq = ic910_set_freq, #ifdef HAVE_WEIRD_IC910_MODES - .get_mode = ic910_get_mode, - .set_mode = ic910_set_mode, + .get_mode = ic910_get_mode, + .set_mode = ic910_set_mode, #else - .get_mode = icom_get_mode, - .set_mode = icom_set_mode, + .get_mode = icom_get_mode, + .set_mode = icom_set_mode, #endif -.set_vfo = icom_set_vfo, -.get_ts = icom_get_ts, -.set_ts = icom_set_ts, -.get_func = ic910_get_func, -.set_func = ic910_set_func, -.get_level = ic910_get_level, -.set_level = ic910_set_level, + .set_ptt = icom_set_ptt, + .get_ptt = icom_get_ptt, + .set_vfo = icom_set_vfo, + .get_ts = icom_get_ts, + .set_ts = icom_set_ts, + .get_func = ic910_get_func, + .set_func = ic910_set_func, + .get_level = ic910_get_level, + .set_level = ic910_set_level, + + .set_mem = icom_set_mem, + .vfo_op = icom_vfo_op, + .scan = icom_scan, + .get_dcd = icom_get_dcd, + .decode_event = icom_decode_event, + .set_split_vfo = icom_set_split_vfo, + .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_freq_mode = icom_set_split_freq_mode, + .get_split_freq_mode = icom_get_split_freq_mode, + .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_rptr_shift = icom_set_rptr_shift, + .set_rptr_offs = icom_set_rptr_offs, + .get_rptr_offs = icom_get_rptr_offs, -.set_mem = icom_set_mem, -.vfo_op = icom_vfo_op, -.scan = icom_scan, -.get_dcd = icom_get_dcd, -.decode_event = icom_decode_event, -.set_split_vfo = icom_set_split_vfo, -.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_freq_mode = icom_set_split_freq_mode, -.get_split_freq_mode = icom_get_split_freq_mode, }; diff --git a/icom/ic9100.c b/icom/ic9100.c index af1e26fa2..e73185207 100644 --- a/icom/ic9100.c +++ b/icom/ic9100.c @@ -88,217 +88,230 @@ #define IC9100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) -#define IC9100_STR_CAL UNKNOWN_IC_STR_CAL /* FIXME */ +#define IC9100_STR_CAL UNKNOWN_IC_STR_CAL /* FIXME */ #define IC9100_HF_ANTS (RIG_ANT_1|RIG_ANT_2) /* */ -static const struct icom_priv_caps ic9100_priv_caps = { +static const struct icom_priv_caps ic9100_priv_caps = +{ 0x7c, /* default address */ 0, /* 731 mode */ - 0, /* no XCHG */ + 1, /* no XCHG to avoid display flicker */ ic910_ts_sc_list, /* FIXME */ }; -const struct rig_caps ic9100_caps = { -.rig_model = RIG_MODEL_IC9100, -.model_name = "IC-9100", -.mfg_name = "Icom", -.version = BACKEND_VER, -.copyright = "LGPL", -.status = RIG_STATUS_UNTESTED, -.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 = IC9100_FUNC_ALL, -.has_set_func = IC9100_FUNC_ALL | RIG_FUNC_RESUME, -.has_get_level = IC9100_LEVEL_ALL | RIG_LEVEL_RAWSTR| RIG_LEVEL_SWR, -.has_set_level = IC9100_LEVEL_ALL, -.has_get_parm = IC9100_PARM_ALL, -.has_set_parm = IC9100_PARM_ALL, -.level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, -}, -.parm_gran = {}, -.ctcss_list = common_ctcss_list, -.dcs_list = common_dcs_list, -.preamp = {20, RIG_DBLST_END, }, -.attenuator = {20, RIG_DBLST_END, }, -.max_rit = kHz(9.999), -.max_xit = kHz(9.999), -.max_ifshift = Hz(0), -.targetable_vfo = 0, -.vfo_ops = IC9100_VFO_OPS, -.scan_ops = IC9100_SCAN_OPS, -.transceive = RIG_TRN_RIG, -.bank_qty = 0, -.chan_desc_sz = 9, /* TODO */ +const struct rig_caps ic9100_caps = +{ + .rig_model = RIG_MODEL_IC9100, + .model_name = "IC-9100", + .mfg_name = "Icom", + .version = BACKEND_VER".2", + .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 = IC9100_FUNC_ALL, + .has_set_func = IC9100_FUNC_ALL | RIG_FUNC_RESUME, + .has_get_level = IC9100_LEVEL_ALL | RIG_LEVEL_RAWSTR | RIG_LEVEL_SWR, + .has_set_level = IC9100_LEVEL_ALL, + .has_get_parm = IC9100_PARM_ALL, + .has_set_parm = IC9100_PARM_ALL, + .level_gran = { + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, + [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, + }, + .parm_gran = {}, + .ctcss_list = common_ctcss_list, + .dcs_list = common_dcs_list, + .preamp = {20, RIG_DBLST_END, }, + .attenuator = {20, RIG_DBLST_END, }, + .max_rit = kHz(9.999), + .max_xit = kHz(9.999), + .max_ifshift = Hz(0), + .targetable_vfo = 0, + .vfo_ops = IC9100_VFO_OPS, + .scan_ops = IC9100_SCAN_OPS, + .transceive = RIG_TRN_RIG, + .bank_qty = 0, + .chan_desc_sz = 9, /* TODO */ -.chan_list = { /* TBC */ - { 1, 396, RIG_MTYPE_MEM }, - { 397, 400, RIG_MTYPE_CALL }, - { 401, 424, RIG_MTYPE_EDGE }, - RIG_CHAN_END, }, + .chan_list = { /* TBC */ + { 1, 396, RIG_MTYPE_MEM }, + { 397, 400, RIG_MTYPE_CALL }, + { 401, 424, RIG_MTYPE_EDGE }, + RIG_CHAN_END, + }, -.rx_range_list1 = { /* Europe */ - {kHz(30),MHz(60),IC9100_MODES,-1,-1,IC9100_VFO_ALL,IC9100_HF_ANTS}, - {kHz(136),MHz(174),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_3}, - {MHz(420),MHz(480),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_4}, - {MHz(1240),MHz(1320),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_5}, - RIG_FRNG_END, }, -.tx_range_list1 = { - FRQ_RNG_HF(1,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,IC9100_HF_ANTS), - FRQ_RNG_HF(1,RIG_MODE_AM, W(2),W(25),IC9100_VFO_ALL,IC9100_HF_ANTS), /* only HF */ - FRQ_RNG_6m(1,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,IC9100_HF_ANTS), - FRQ_RNG_2m(1,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,RIG_ANT_3), - FRQ_RNG_70cm(1,IC9100_OTHER_TX_MODES, W(2),W(75),IC9100_VFO_ALL,RIG_ANT_4), - /* option */ - FRQ_RNG_23cm_REGION1(IC9100_OTHER_TX_MODES, W(1),W(10),IC9100_VFO_ALL,RIG_ANT_5), - RIG_FRNG_END, }, + .rx_range_list1 = { /* Europe */ + {kHz(30), MHz(60), IC9100_MODES, -1, -1, IC9100_VFO_ALL, IC9100_HF_ANTS}, + {kHz(136), MHz(174), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_3}, + {MHz(420), MHz(480), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_4}, + {MHz(1240), MHz(1320), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_5}, + RIG_FRNG_END, + }, + .tx_range_list1 = { + FRQ_RNG_HF(1, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS), + FRQ_RNG_HF(1, RIG_MODE_AM, W(2), W(25), IC9100_VFO_ALL, IC9100_HF_ANTS), /* only HF */ + FRQ_RNG_6m(1, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS), + FRQ_RNG_2m(1, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, RIG_ANT_3), + FRQ_RNG_70cm(1, IC9100_OTHER_TX_MODES, W(2), W(75), IC9100_VFO_ALL, RIG_ANT_4), + /* option */ + FRQ_RNG_23cm_REGION1(IC9100_OTHER_TX_MODES, W(1), W(10), IC9100_VFO_ALL, RIG_ANT_5), + RIG_FRNG_END, + }, -.rx_range_list2 = { /* USA */ - {kHz(30),MHz(60),IC9100_MODES,-1,-1,IC9100_VFO_ALL,IC9100_HF_ANTS}, - {kHz(136),MHz(174),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_3}, - {MHz(420),MHz(480),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_4}, - {MHz(1240),MHz(1320),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_5}, - RIG_FRNG_END, }, -.tx_range_list2 = { - FRQ_RNG_HF(2,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,IC9100_HF_ANTS), - FRQ_RNG_HF(2,RIG_MODE_AM, W(2),W(25),IC9100_VFO_ALL,IC9100_HF_ANTS), /* only HF */ - /* USA only, TBC: end of range and modes */ - {MHz(5.255),MHz(5.405),IC9100_OTHER_TX_MODES,W(2),W(100),IC9100_VFO_ALL,IC9100_HF_ANTS}, /* USA only */ - {MHz(5.255),MHz(5.405),RIG_MODE_AM,W(2),W(100),IC9100_VFO_ALL,IC9100_HF_ANTS}, /* USA only */ - FRQ_RNG_6m(2,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,IC9100_HF_ANTS), - FRQ_RNG_2m(2,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,RIG_ANT_3), - FRQ_RNG_70cm(2,IC9100_OTHER_TX_MODES, W(2),W(75),IC9100_VFO_ALL,RIG_ANT_4), - /* option */ - FRQ_RNG_23cm_REGION2(IC9100_OTHER_TX_MODES, W(1),W(10),IC9100_VFO_ALL,RIG_ANT_5), - RIG_FRNG_END, }, + .rx_range_list2 = { /* USA */ + {kHz(30), MHz(60), IC9100_MODES, -1, -1, IC9100_VFO_ALL, IC9100_HF_ANTS}, + {kHz(136), MHz(174), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_3}, + {MHz(420), MHz(480), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_4}, + {MHz(1240), MHz(1320), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_5}, + RIG_FRNG_END, + }, + .tx_range_list2 = { + FRQ_RNG_HF(2, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS), + FRQ_RNG_HF(2, RIG_MODE_AM, W(2), W(25), IC9100_VFO_ALL, IC9100_HF_ANTS), /* only HF */ + /* USA only, TBC: end of range and modes */ + {MHz(5.255), MHz(5.405), IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS}, /* USA only */ + {MHz(5.255), MHz(5.405), RIG_MODE_AM, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS}, /* USA only */ + FRQ_RNG_6m(2, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS), + FRQ_RNG_2m(2, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, RIG_ANT_3), + FRQ_RNG_70cm(2, IC9100_OTHER_TX_MODES, W(2), W(75), IC9100_VFO_ALL, RIG_ANT_4), + /* option */ + FRQ_RNG_23cm_REGION2(IC9100_OTHER_TX_MODES, W(1), W(10), IC9100_VFO_ALL, RIG_ANT_5), + RIG_FRNG_END, + }, -.tuning_steps = { - {RIG_MODE_SSB|RIG_MODE_CW,1}, - {RIG_MODE_SSB|RIG_MODE_CW,10}, - {RIG_MODE_SSB|RIG_MODE_CW,50}, - {RIG_MODE_SSB|RIG_MODE_CW,100}, - {RIG_MODE_FM,kHz(0.1)}, - {RIG_MODE_FM,kHz(5)}, - {RIG_MODE_FM,kHz(6.25)}, - {RIG_MODE_FM,kHz(10)}, - {RIG_MODE_FM,kHz(12.5)}, - {RIG_MODE_FM,kHz(20)}, - {RIG_MODE_FM,kHz(25)}, - {RIG_MODE_FM,kHz(100)}, - RIG_TS_END, }, + .tuning_steps = { + {RIG_MODE_SSB | RIG_MODE_CW, 1}, + {RIG_MODE_SSB | RIG_MODE_CW, 10}, + {RIG_MODE_SSB | RIG_MODE_CW, 50}, + {RIG_MODE_SSB | RIG_MODE_CW, 100}, + {RIG_MODE_FM, kHz(0.1)}, + {RIG_MODE_FM, kHz(5)}, + {RIG_MODE_FM, kHz(6.25)}, + {RIG_MODE_FM, kHz(10)}, + {RIG_MODE_FM, kHz(12.5)}, + {RIG_MODE_FM, kHz(20)}, + {RIG_MODE_FM, kHz(25)}, + {RIG_MODE_FM, kHz(100)}, + RIG_TS_END, + }, /* mode/filter list, remember: order matters! */ -.filters = { - {RIG_MODE_CW | RIG_MODE_SSB | RIG_MODE_RTTY, kHz(2.4)}, /* builtin */ - {RIG_MODE_CW | RIG_MODE_RTTY, Hz(500)}, - {RIG_MODE_FM, kHz(15)}, /* builtin */ - {RIG_MODE_FM|RIG_MODE_AM, kHz(6)}, /* builtin */ - RIG_FLT_END, }, -.str_cal = IC9100_STR_CAL, + .filters = { + {RIG_MODE_CW | RIG_MODE_SSB | RIG_MODE_RTTY, kHz(2.4)}, /* builtin */ + {RIG_MODE_CW | RIG_MODE_RTTY, Hz(500)}, + {RIG_MODE_FM, kHz(15)}, /* builtin */ + {RIG_MODE_FM | RIG_MODE_AM, kHz(6)}, /* builtin */ + RIG_FLT_END, + }, + .str_cal = IC9100_STR_CAL, -.priv = (void*)&ic9100_priv_caps, -.rig_init = icom_init, -.rig_cleanup = icom_cleanup, -.rig_open = NULL, -.rig_close = NULL, + .priv = (void *)& ic9100_priv_caps, + .rig_init = icom_init, + .rig_cleanup = icom_cleanup, + .rig_open = NULL, + .rig_close = NULL, -.cfgparams = icom_cfg_params, -.set_conf = icom_set_conf, -.get_conf = icom_get_conf, + .cfgparams = icom_cfg_params, + .set_conf = icom_set_conf, + .get_conf = icom_get_conf, -.get_freq = icom_get_freq, -.set_freq = icom_set_freq, + .get_freq = icom_get_freq, + .set_freq = icom_set_freq, -.get_mode = icom_get_mode_with_data, -.set_mode = icom_set_mode_with_data, + .get_mode = icom_get_mode_with_data, + .set_mode = icom_set_mode_with_data, -.get_vfo = NULL, -.set_vfo = icom_set_vfo, -.set_ant = icom_set_ant, -.get_ant = icom_get_ant, -.get_ts = icom_get_ts, -.set_ts = icom_set_ts, -.get_func = icom_get_func, -.set_func = icom_set_func, -.get_level = icom_get_level, -.set_level = icom_set_level, + .get_vfo = NULL, + .set_vfo = icom_set_vfo, + .set_ant = icom_set_ant, + .get_ant = icom_get_ant, + .get_ts = icom_get_ts, + .set_ts = icom_set_ts, + .get_func = icom_get_func, + .set_func = icom_set_func, + .get_level = icom_get_level, + .set_level = icom_set_level, -.set_ptt = icom_set_ptt, -.get_ptt = icom_get_ptt, + .set_ptt = icom_set_ptt, + .get_ptt = icom_get_ptt, -.set_rit = icom_set_rit, + .set_rit = icom_set_rit, -.set_rptr_shift = icom_set_rptr_shift, -.get_rptr_shift = icom_get_rptr_shift, -.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_sql = icom_set_dcs_code, -.get_dcs_sql = icom_get_dcs_code, + .set_rptr_shift = icom_set_rptr_shift, + .get_rptr_shift = icom_get_rptr_shift, + .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_sql = icom_set_dcs_code, + .get_dcs_sql = icom_get_dcs_code, -.set_parm = icom_set_parm, -.get_parm = icom_get_parm, + .set_parm = icom_set_parm, + .get_parm = icom_get_parm, -.set_mem = icom_set_mem, -.vfo_op = icom_vfo_op, -.scan = icom_scan, -.get_dcd = icom_get_dcd, -.decode_event = icom_decode_event, -.set_split_vfo = icom_set_split_vfo, -.get_split_vfo = icom_get_split_vfo, -.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_mem = icom_set_mem, + .vfo_op = icom_vfo_op, + .scan = icom_scan, + .get_dcd = icom_get_dcd, + .decode_event = icom_decode_event, + .set_split_vfo = icom_set_split_vfo, + .get_split_vfo = icom_get_split_vfo, + .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, }; int ic9100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { - unsigned char cmdbuf[MAXFRAMELEN]; + unsigned char cmdbuf[MAXFRAMELEN]; - 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_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x27; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); + 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); - } + 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]; + unsigned char cmdbuf[MAXFRAMELEN]; - 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_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x27; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); + 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); - } + return icom_get_level(rig, vfo, level, val); + } }