diff --git a/icom/Android.mk b/icom/Android.mk index f1f972a6a..65f17da17 100644 --- a/icom/Android.mk +++ b/icom/Android.mk @@ -8,7 +8,7 @@ LOCAL_SRC_FILES := ic706.c icr8500.c ic735.c ic775.c ic756.c \ os535.c os456.c omni.c delta2.c ic92d.c \ ic736.c ic738.c ic7410.c ic746.c ic703.c ic726.c ic271.c \ ic765.c ic781.c ic471.c icr9000.c icr9500.c \ - icr10.c icr20.c icr71.c icr72.c icr75.c icrx7.c \ + icr10.c icr20.c icr6.c icr71.c icr72.c icr75.c icrx7.c \ id1.c id5100.c ic2730.c \ ic707.c ic728.c ic751.c ic761.c \ ic78.c ic7800.c ic7000.c ic7100.c ic7200.c ic7600.c ic7700.c \ diff --git a/icom/Makefile.am b/icom/Makefile.am index e2405671f..50f0aea27 100644 --- a/icom/Makefile.am +++ b/icom/Makefile.am @@ -4,7 +4,7 @@ ICOMSRC = ic706.c icr8500.c ic735.c ic775.c ic756.c \ os535.c os456.c omni.c delta2.c ic92d.c \ ic736.c ic738.c ic7410.c ic746.c ic703.c ic726.c ic271.c \ ic765.c ic781.c ic471.c icr9000.c icr9500.c \ - icr10.c icr20.c icr71.c icr72.c icr75.c icrx7.c \ + icr10.c icr20.c icr6.c icr71.c icr72.c icr75.c icrx7.c \ id1.c id5100.c perseus.c ic2730.c \ ic707.c ic728.c ic751.c ic761.c \ ic78.c ic7800.c ic785x.c \ diff --git a/icom/icom.c b/icom/icom.c index d803eb855..29fb25b95 100644 --- a/icom/icom.c +++ b/icom/icom.c @@ -335,6 +335,7 @@ static const struct icom_addr icom_addr_list[] = { { RIG_MODEL_IC1275, 0x18 }, { RIG_MODEL_ICR10, 0x52 }, { RIG_MODEL_ICR20, 0x6c }, + { RIG_MODEL_ICR6, 0x7e }, { RIG_MODEL_ICR71, 0x1a }, { RIG_MODEL_ICR72, 0x32 }, { RIG_MODEL_ICR75, 0x5a }, @@ -3812,14 +3813,15 @@ DECLARE_INITRIG_BACKEND(icom) rig_register(&ic9100_caps); rig_register(&ic970_caps); - rig_register(&icrx7_caps); - rig_register(&icr10_caps); - rig_register(&icr20_caps); - rig_register(&icr71_caps); - rig_register(&icr72_caps); - rig_register(&icr75_caps); - rig_register(&icr7000_caps); - rig_register(&icr7100_caps); + rig_register(&icrx7_caps); + rig_register(&icr6_caps); + rig_register(&icr10_caps); + rig_register(&icr20_caps); + rig_register(&icr71_caps); + rig_register(&icr72_caps); + rig_register(&icr75_caps); + rig_register(&icr7000_caps); + rig_register(&icr7100_caps); rig_register(&icr8500_caps); rig_register(&icr9000_caps); rig_register(&icr9500_caps); diff --git a/icom/icom.h b/icom/icom.h index 9f1ef82ca..47c3a927f 100644 --- a/icom/icom.h +++ b/icom/icom.h @@ -249,6 +249,7 @@ extern const struct rig_caps ic970_caps; extern const struct rig_caps icrx7_caps; extern const struct rig_caps icr10_caps; extern const struct rig_caps icr20_caps; +extern const struct rig_caps icr6_caps; extern const struct rig_caps icr71_caps; extern const struct rig_caps icr72_caps; extern const struct rig_caps icr75_caps; diff --git a/icom/icr10.c b/icom/icr10.c index 941ba40f7..da33d4e9f 100644 --- a/icom/icr10.c +++ b/icom/icr10.c @@ -41,11 +41,13 @@ #define ICR10_VFO_OPS (RIG_OP_NONE) #define ICR10_SCAN_OPS (RIG_SCAN_NONE) -/* - * FIXME: S-meter measurement - */ -#define ICR10_STR_CAL UNKNOWN_IC_STR_CAL - +#define ICR10_STR_CAL { 2, \ + { \ + { 0, -60 }, /* S0 */ \ + { 160, 60 } /* +60 */ \ + } } + + static const struct icom_priv_caps icr10_priv_caps = { 0x52, /* default address */ 0, /* 731 mode */ diff --git a/icom/icr20.c b/icom/icr20.c index bc8d70bcc..f16eb957c 100644 --- a/icom/icr20.c +++ b/icom/icr20.c @@ -1,6 +1,7 @@ /* * Hamlib CI-V backend - description of IC-R20 * Copyright (c) 2004 by Stephane Fillod + * Copyright (c) 2004 by Malcolm Herring * * * This library is free software; you can redistribute it and/or @@ -40,9 +41,6 @@ #define ICR20_VFO_OPS (RIG_OP_NONE) #define ICR20_SCAN_OPS (RIG_SCAN_NONE) -/* - * FIXME: S-meter measurement! - */ #define ICR20_STR_CAL { 2, \ { \ { 0, -60 }, /* S0 */ \ @@ -62,7 +60,7 @@ const struct rig_caps icr20_caps = { .mfg_name = "Icom", .version = BACKEND_VER, .copyright = "LGPL", -.status = RIG_STATUS_UNTESTED, +.status = RIG_STATUS_ALPHA, .rig_type = RIG_TYPE_RECEIVER|RIG_FLAG_HANDHELD, .ptt_type = RIG_PTT_NONE, .dcd_type = RIG_DCD_RIG, diff --git a/icom/icr6.c b/icom/icr6.c new file mode 100644 index 000000000..49ebbff41 --- /dev/null +++ b/icom/icr6.c @@ -0,0 +1,168 @@ +/* + * Hamlib CI-V backend - description of IC-R6 + * Copyright (c) 2017 Malcolm Herring + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include "hamlib/rig.h" +#include "icom.h" +#include "idx_builtin.h" + +#define ICR6_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) + +#define ICR6_FUNC_ALL (RIG_FUNC_NONE) + +#define ICR6_LEVEL_ALL (RIG_LEVEL_RAWSTR) + +#define ICR6_VFO_ALL (RIG_VFO_A) + +#define ICR6_VFO_OPS (RIG_OP_NONE) +#define ICR6_SCAN_OPS (RIG_SCAN_NONE) + +#define ICR6_STR_CAL { 2, \ + { \ + { 0, -60 }, /* S0 */ \ + { 255, 60 } /* +60 */ \ + } } + +static const struct icom_priv_caps icr6_priv_caps = { + 0x7e, /* default address */ + 0, /* 731 mode */ + 0, /* no XCHG */ + r8500_ts_sc_list /* wrong, but don't have set_ts anyway */ +}; + +const struct rig_caps icr6_caps = { +.rig_model = RIG_MODEL_ICR6, +.model_name = "IC-R6", +.mfg_name = "Icom", +.version = BACKEND_VER, +.copyright = "LGPL", +.status = RIG_STATUS_ALPHA, +.rig_type = RIG_TYPE_RECEIVER|RIG_FLAG_HANDHELD, +.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 = ICR6_FUNC_ALL, +.has_set_func = ICR6_FUNC_ALL, +.has_get_level = ICR6_LEVEL_ALL, +.has_set_level = RIG_LEVEL_SET(ICR6_LEVEL_ALL), +.has_get_parm = RIG_PARM_NONE, +.has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ +.level_gran = { + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, +}, +.parm_gran = {}, +.ctcss_list = NULL, +.dcs_list = NULL, +.preamp = { RIG_DBLST_END, }, +.attenuator = { RIG_DBLST_END, }, +.max_rit = Hz(0), +.max_xit = Hz(0), +.max_ifshift = Hz(0), +.targetable_vfo = 0, +.vfo_ops = ICR6_VFO_OPS, +.scan_ops = ICR6_SCAN_OPS, +.transceive = RIG_TRN_RIG, +.bank_qty = 0, +.chan_desc_sz = 0, + + /* Only through cloning mode OPC-1382 */ +.chan_list = { + { 1, 999, RIG_MTYPE_MEM }, /* TBC */ + { 1000, 1199, RIG_MTYPE_MEM }, /* auto-write */ + { 1200, 1299, RIG_MTYPE_EDGE }, /* two by two */ + RIG_CHAN_END, + }, + +.rx_range_list1 = { /* Other countries but France */ + {kHz(100),GHz(1.309995),ICR6_MODES,-1,-1,ICR6_VFO_ALL}, + RIG_FRNG_END, }, +.tx_range_list1 = { RIG_FRNG_END, }, + +.rx_range_list2 = { /* USA */ + {kHz(100),MHz(821.995),ICR6_MODES,-1,-1,ICR6_VFO_ALL}, + {MHz(851),MHz(866.995),ICR6_MODES,-1,-1,ICR6_VFO_ALL}, + {MHz(896),GHz(1.309995),ICR6_MODES,-1,-1,ICR6_VFO_ALL}, + RIG_FRNG_END, }, +.tx_range_list2 = { RIG_FRNG_END, }, + +.tuning_steps = { + {ICR6_MODES,Hz(5000)}, + {ICR6_MODES,Hz(6250)}, + {ICR6_MODES,Hz(10000)}, + {ICR6_MODES,Hz(12500)}, + {ICR6_MODES,kHz(15)}, + {ICR6_MODES,kHz(20)}, + {ICR6_MODES,kHz(25)}, + {ICR6_MODES,kHz(30)}, + {ICR6_MODES,kHz(50)}, + {ICR6_MODES,kHz(100)}, + /* Air band only */ + {ICR6_MODES,Hz(8330)}, + /* AM broadcast band only */ + {ICR6_MODES,Hz(9000)}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ +.filters = { + {RIG_MODE_AM|RIG_MODE_FM, kHz(12)}, + {RIG_MODE_WFM, kHz(150)}, + RIG_FLT_END, + }, +.str_cal = ICR6_STR_CAL, + +.cfgparams = icom_cfg_params, +.set_conf = icom_set_conf, +.get_conf = icom_get_conf, + +.priv = (void*)&icr6_priv_caps, +.rig_init = icom_init, +.rig_cleanup = icom_cleanup, +.rig_open = NULL, +.rig_close = NULL, + +.set_freq = icom_set_freq, +.get_freq = icom_get_freq, +.set_mode = icom_set_mode, /* TODO: do not pass bandwidth data */ +.get_mode = icom_get_mode, +/* .set_vfo = icom_set_vfo, */ + +.decode_event = icom_decode_event, +.get_level = icom_get_level, +.get_dcd = icom_get_dcd, + +}; + + diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index b5c1ccb67..1155d6e2c 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -218,7 +218,8 @@ #define RIG_MODEL_PERSEUS RIG_MAKE_MODEL(RIG_ICOM, 74) #define RIG_MODEL_IC785x RIG_MAKE_MODEL(RIG_ICOM, 75) #define RIG_MODEL_X108G RIG_MAKE_MODEL(RIG_ICOM, 76) /* Xiegu X108 */ -/* next one is 77 */ +#define RIG_MODEL_ICR6 RIG_MAKE_MODEL(RIG_ICOM, 77) +/* next one is 78 */ /* * Optoelectronics (CI-V)