diff --git a/icom/Makefile.am b/icom/Makefile.am index 9b5fac7e8..9e9aa7014 100644 --- a/icom/Makefile.am +++ b/icom/Makefile.am @@ -4,7 +4,8 @@ ICOMSRCLIST = ic706.c icr8500.c ic735.c ic775.c ic756.c \ ic736.c ic746.c ic703.c ic726.c ic271.c \ ic765.c ic781.c ic471.c id1.c icr9000.c \ icr10.c icr71.c icr72.c icr75.c \ - ic707.c ic728.c ic751.c ic761.c + ic707.c ic728.c ic751.c ic761.c \ + ic78.c ic7800.c icr20.c lib_LTLIBRARIES = hamlib-icom.la hamlib_icom_la_SOURCES = $(ICOMSRCLIST) icom.c frame.c optoscan.c diff --git a/icom/ic756.c b/icom/ic756.c index 03bcf15fe..fc86f7676 100644 --- a/icom/ic756.c +++ b/icom/ic756.c @@ -2,7 +2,7 @@ * Hamlib CI-V backend - description of IC-756 and variations * Copyright (c) 2000-2004 by Stephane Fillod * - * $Id: ic756.c,v 1.10 2004-09-07 21:54:13 fillods Exp $ + * $Id: ic756.c,v 1.11 2004-09-25 14:33:16 fillods Exp $ * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as @@ -91,7 +91,7 @@ const struct rig_caps ic756_caps = { .rig_model = RIG_MODEL_IC756, .model_name = "IC-756", .mfg_name = "Icom", -.version = "0.2", +.version = BACKEND_VER, .copyright = "LGPL", .status = RIG_STATUS_UNTESTED, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -234,7 +234,7 @@ const struct rig_caps ic756pro_caps = { .rig_model = RIG_MODEL_IC756PRO, .model_name = "IC-756PRO", .mfg_name = "Icom", -.version = "0.2", +.version = BACKEND_VER, .copyright = "LGPL", .status = RIG_STATUS_UNTESTED, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -423,7 +423,7 @@ const struct rig_caps ic756pro2_caps = { .rig_model = RIG_MODEL_IC756PROII, .model_name = "IC-756PROII", .mfg_name = "Icom", -.version = "0.3", +.version = BACKEND_VER, .copyright = "LGPL", .status = RIG_STATUS_ALPHA, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -642,3 +642,165 @@ static int ic756pro2_get_ext_parm(RIG *rig, token_t token, value_t *val) return RIG_OK; } + + +/* + * ic756proIII rig capabilities. + * + * TODO: check every paramters, + * add antenna capabilities + */ +static const struct icom_priv_caps ic756pro3_priv_caps = { + 0x6e, /* default address */ + 0, /* 731 mode */ + ic756_ts_sc_list +}; + + +#define IC756PROIII_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) +#define IC756PROIII_1HZ_TS_MODES IC756PROIII_ALL_RX_MODES +#define IC756PROIII_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) +#define IC756PROIII_AM_TX_MODES (RIG_MODE_AM) + + +const struct rig_caps ic756pro3_caps = { +.rig_model = RIG_MODEL_IC756PROIII, +.model_name = "IC-756PROIII", +.mfg_name = "Icom", +.version = BACKEND_VER, +.copyright = "LGPL", +.status = RIG_STATUS_NEW, +.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 = 200, +.retry = 3, +.has_get_func = IC756PRO_FUNC_ALL, +.has_set_func = IC756PRO_FUNC_ALL, +.has_get_level = IC756PRO_LEVEL_ALL, +.has_set_level = RIG_LEVEL_SET(IC756PRO_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 = {}, +.extparms = ic756pro2_ext_parms, +.ctcss_list = common_ctcss_list, +.dcs_list = NULL, +.preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ +.attenuator = { 6, 12, 18, 20, RIG_DBLST_END, }, +.max_rit = Hz(9999), +.max_xit = Hz(9999), +.max_ifshift = Hz(0), +.targetable_vfo = 0, +.vfo_ops = IC756_VFO_OPS, +.scan_ops = IC756_SCAN_OPS, +.transceive = RIG_TRN_RIG, +.bank_qty = 0, +.chan_desc_sz = 0, + +.chan_list = { + { 1, 99, RIG_MTYPE_MEM }, + { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ + RIG_CHAN_END, + }, + +.rx_range_list1 = { {kHz(30),MHz(60),IC756PROIII_ALL_RX_MODES,-1,-1,IC756_VFO_ALL}, + RIG_FRNG_END, }, +.tx_range_list1 = { + FRQ_RNG_HF(1,IC756PROIII_OTHER_TX_MODES, W(5),W(100),IC756_VFO_ALL,IC756_ANTS), + FRQ_RNG_6m(1,IC756PROIII_OTHER_TX_MODES, W(5),W(100),IC756_VFO_ALL,IC756_ANTS), + FRQ_RNG_HF(1,IC756PROIII_AM_TX_MODES, W(5),W(40),IC756_VFO_ALL,IC756_ANTS), /* AM class */ + FRQ_RNG_6m(1,IC756PROIII_AM_TX_MODES, W(5),W(40),IC756_VFO_ALL,IC756_ANTS), /* AM class */ + RIG_FRNG_END, }, + +.rx_range_list2 = { {kHz(30),MHz(60),IC756PROIII_ALL_RX_MODES,-1,-1,IC756_VFO_ALL}, + RIG_FRNG_END, }, +.tx_range_list2 = { + FRQ_RNG_HF(2,IC756PROIII_OTHER_TX_MODES, W(5),W(100),IC756_VFO_ALL,IC756_ANTS), + FRQ_RNG_6m(2,IC756PROIII_OTHER_TX_MODES, W(5),W(100),IC756_VFO_ALL,IC756_ANTS), + FRQ_RNG_HF(2,IC756PROIII_AM_TX_MODES, W(5),W(40),IC756_VFO_ALL,IC756_ANTS), /* AM class */ + FRQ_RNG_6m(2,IC756PROIII_AM_TX_MODES, W(5),W(40),IC756_VFO_ALL,IC756_ANTS), /* AM class */ + RIG_FRNG_END, }, + +.tuning_steps = { + {IC756PROIII_1HZ_TS_MODES,1}, + {IC756PROIII_ALL_RX_MODES,kHz(1)}, + {IC756PROIII_ALL_RX_MODES,kHz(5)}, + {IC756PROIII_ALL_RX_MODES,kHz(9)}, + {IC756PROIII_ALL_RX_MODES,kHz(10)}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ +.filters = { + {RIG_MODE_SSB|RIG_MODE_RTTY, kHz(2.4)}, + {RIG_MODE_CW, Hz(500)}, + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_AM, kHz(2.4)}, + {RIG_MODE_FM, kHz(15)}, + {RIG_MODE_FM, kHz(8)}, + RIG_FLT_END, + }, +.str_cal = IC756PRO_STR_CAL, + +.cfgparams = icom_cfg_params, +.set_conf = icom_set_conf, +.get_conf = icom_get_conf, + +.priv = (void*)&ic756pro3_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, +.get_mode = icom_get_mode, +.set_vfo = icom_set_vfo, +.set_ant = icom_set_ant, +.get_ant = icom_get_ant, + +.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_mem = icom_set_mem, +.vfo_op = icom_vfo_op, +.scan = icom_scan, +.set_ptt = icom_set_ptt, +.get_ptt = icom_get_ptt, +.get_dcd = icom_get_dcd, +.set_ts = icom_set_ts, +.get_ts = icom_get_ts, +.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_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 = icom_get_split_vfo, + +.set_ext_parm = ic756pro2_set_ext_parm, +.get_ext_parm = ic756pro2_get_ext_parm, +}; + + diff --git a/icom/ic78.c b/icom/ic78.c new file mode 100644 index 000000000..8e83edb53 --- /dev/null +++ b/icom/ic78.c @@ -0,0 +1,186 @@ +/* + * Hamlib CI-V backend - description of IC-78 + * Copyright (c) 2004 by Stephane Fillod + * + * $Id: ic78.c,v 1.1 2004-09-25 14:33:16 fillods Exp $ + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include "hamlib/rig.h" +#include "icom.h" +#include "bandplan.h" +#include "idx_builtin.h" + +#define IC78_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) + +#define IC78_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) +#define IC78_AM_TX_MODES (RIG_MODE_AM) + +#define IC78_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP) + +#define IC78_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_RAWSTR|RIG_LEVEL_RF|RIG_LEVEL_AF|RIG_LEVEL_SQL) + +#define IC78_VFO_ALL (RIG_VFO_A|RIG_VFO_MEM) + +#define IC78_VFO_OPS (RIG_OP_NONE) +#define IC78_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) + +#define IC78_ANTS (RIG_ANT_1) + +/* + * IC78_STR_CAL is what the S-meter displays + * + * FIXME: real measures! + */ +#define IC78_STR_CAL { 2, \ + { \ + { 0, -60 }, \ + { 255, 60 } \ + } } + +/* + * ic78 rigs capabilities. + */ +static const struct icom_priv_caps ic78_priv_caps = { + 0x62, /* default address */ + 0, /* 731 mode */ + ic706_ts_sc_list +}; + +const struct rig_caps ic78_caps = { +.rig_model = RIG_MODEL_IC78, +.model_name = "IC-78", +.mfg_name = "Icom", +.version = BACKEND_VER, +.copyright = "LGPL", +.status = RIG_STATUS_UNTESTED, +.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 = 200, +.retry = 3, +.has_get_func = IC78_FUNC_ALL, +.has_set_func = IC78_FUNC_ALL, +.has_get_level = IC78_LEVEL_ALL, +.has_set_level = RIG_LEVEL_SET(IC78_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 = {}, +.preamp = { 10, 20, RIG_DBLST_END, }, +.attenuator = { 20, RIG_DBLST_END, }, +.max_rit = Hz(0), +.max_xit = Hz(0), +.max_ifshift = Hz(0), +.targetable_vfo = 0, +.vfo_ops = IC78_VFO_OPS, +.scan_ops = IC78_SCAN_OPS, +.transceive = RIG_TRN_RIG, +.bank_qty = 0, +.chan_desc_sz = 0, + +.chan_list = { + { 1, 99, RIG_MTYPE_MEM }, + { 100, 100, RIG_MTYPE_CALL }, + RIG_CHAN_END, + }, + +.rx_range_list1 = { + {kHz(30),MHz(30)-1,IC78_ALL_RX_MODES,-1,-1,IC78_VFO_ALL,IC78_ANTS}, + RIG_FRNG_END, }, +.tx_range_list1 = { + FRQ_RNG_HF(1,IC78_OTHER_TX_MODES, W(2),W(100),IC78_VFO_ALL,IC78_ANTS), + FRQ_RNG_HF(1,IC78_AM_TX_MODES, W(2),W(40),IC78_VFO_ALL,IC78_ANTS), /* AM class */ + RIG_FRNG_END, +}, + +.rx_range_list2 = { + {kHz(30),MHz(30)-1,IC78_ALL_RX_MODES,-1,-1,IC78_VFO_ALL,IC78_ANTS}, + RIG_FRNG_END, }, +.tx_range_list2 = { + FRQ_RNG_HF(2,IC78_OTHER_TX_MODES, W(2),W(100),IC78_VFO_ALL,IC78_ANTS), + FRQ_RNG_HF(2,IC78_AM_TX_MODES, W(2),W(40),IC78_VFO_ALL,IC78_ANTS), /* AM class */ + RIG_FRNG_END, +}, + + +.tuning_steps = { + {IC78_ALL_RX_MODES,10}, + {IC78_ALL_RX_MODES,100}, + {IC78_ALL_RX_MODES,kHz(1)}, + {IC78_ALL_RX_MODES,kHz(5)}, + {IC78_ALL_RX_MODES,kHz(9)}, + {IC78_ALL_RX_MODES,kHz(10)}, + {IC78_ALL_RX_MODES,12500}, + {IC78_ALL_RX_MODES,kHz(20)}, + {IC78_ALL_RX_MODES,kHz(25)}, + {IC78_ALL_RX_MODES,kHz(100)}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ +.filters = { + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_RTTY|RIG_MODE_CWR|RIG_MODE_RTTYR|RIG_MODE_AM, kHz(2.4)}, + RIG_FLT_END, + }, +.str_cal = IC78_STR_CAL, + +.cfgparams = icom_cfg_params, +.set_conf = icom_set_conf, +.get_conf = icom_get_conf, + +.priv = (void*)&ic78_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, +.get_mode = icom_get_mode, +.set_vfo = icom_set_vfo, + +.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_mem = icom_set_mem, +.scan = icom_scan, +.get_dcd = icom_get_dcd, + +}; + + diff --git a/icom/ic7800.c b/icom/ic7800.c new file mode 100644 index 000000000..d1332a853 --- /dev/null +++ b/icom/ic7800.c @@ -0,0 +1,226 @@ +/* + * Hamlib CI-V backend - description of IC-7800 and variations + * Copyright (c) 2004 by Stephane Fillod + * + * $Id: ic7800.c,v 1.1 2004-09-25 14:33:16 fillods Exp $ + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include /* String function definitions */ + +#include +#include "token.h" +#include "idx_builtin.h" + +#include "icom.h" +#include "icom_defs.h" +#include "frame.h" +#include "misc.h" +#include "bandplan.h" + +/* + * TODO: PSK and PSKR + */ +#define IC7800_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) +#define IC7800_1HZ_TS_MODES IC7800_ALL_RX_MODES +#define IC7800_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) +#define IC7800_AM_TX_MODES (RIG_MODE_AM) + +#define IC7800_FUNCS (RIG_FUNC_FAGC|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_RNF|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK) + +#define IC7800_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF||RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC) + +#define IC7800_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) +#define IC7800_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) + +#define IC7800_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) +#define IC7800_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) + +#define IC7800_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4) + +/* + * FIXME: real measures! + */ +#define IC7800_STR_CAL { 2, \ + { \ + { 0, -60 }, \ + { 255, 60 } \ + } } + + +/* + * IC-7800 rig capabilities. + * + * TODO: complete command set (esp. the $1A bunch!) and testing.. + */ +static const struct icom_priv_caps ic7800_priv_caps = { + 0x6a, /* default address */ + 0, /* 731 mode */ + ic756pro_ts_sc_list +}; + + +const struct rig_caps ic7800_caps = { +.rig_model = RIG_MODEL_IC7800, +.model_name = "IC-7800", +.mfg_name = "Icom", +.version = BACKEND_VER, +.copyright = "LGPL", +.status = RIG_STATUS_NEW, +.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 = 200, +.retry = 3, +.has_get_func = IC7800_FUNCS, +.has_set_func = IC7800_FUNCS, +.has_get_level = IC7800_LEVELS, +.has_set_level = RIG_LEVEL_SET(IC7800_LEVELS), +.has_get_parm = IC7800_PARMS, +.has_set_parm = RIG_PARM_SET(IC7800_PARMS), /* FIXME: parms */ +.level_gran = { + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, +}, +.parm_gran = {}, +.ctcss_list = common_ctcss_list, +.dcs_list = NULL, +.preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ +.attenuator = { 3, 6, 9, 12, 15, 18, 21, RIG_DBLST_END, }, +.max_rit = Hz(9999), +.max_xit = Hz(9999), +.max_ifshift = Hz(0), +.targetable_vfo = 0, +.vfo_ops = IC7800_VFO_OPS, +.scan_ops = IC7800_SCAN_OPS, +.transceive = RIG_TRN_RIG, +.bank_qty = 0, +.chan_desc_sz = 0, + +.chan_list = { + { 1, 99, RIG_MTYPE_MEM }, + { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ + RIG_CHAN_END, + }, + +.rx_range_list1 = { {kHz(30),MHz(60),IC7800_ALL_RX_MODES,-1,-1,IC7800_VFOS}, + RIG_FRNG_END, }, +.tx_range_list1 = { + FRQ_RNG_HF(1,IC7800_OTHER_TX_MODES, W(5),W(200),IC7800_VFOS,IC7800_ANTS), + FRQ_RNG_6m(1,IC7800_OTHER_TX_MODES, W(5),W(200),IC7800_VFOS,IC7800_ANTS), + FRQ_RNG_HF(1,IC7800_AM_TX_MODES, W(5),W(50),IC7800_VFOS,IC7800_ANTS), /* AM class */ + FRQ_RNG_6m(1,IC7800_AM_TX_MODES, W(5),W(50),IC7800_VFOS,IC7800_ANTS), /* AM class */ + RIG_FRNG_END, }, + +.rx_range_list2 = { {kHz(30),MHz(60),IC7800_ALL_RX_MODES,-1,-1,IC7800_VFOS}, + RIG_FRNG_END, }, +.tx_range_list2 = { + FRQ_RNG_HF(2,IC7800_OTHER_TX_MODES, W(5),W(200),IC7800_VFOS,IC7800_ANTS), + FRQ_RNG_6m(2,IC7800_OTHER_TX_MODES, W(5),W(200),IC7800_VFOS,IC7800_ANTS), + FRQ_RNG_HF(2,IC7800_AM_TX_MODES, W(5),W(50),IC7800_VFOS,IC7800_ANTS), /* AM class */ + FRQ_RNG_6m(2,IC7800_AM_TX_MODES, W(5),W(50),IC7800_VFOS,IC7800_ANTS), /* AM class */ + RIG_FRNG_END, }, + +.tuning_steps = { + {IC7800_1HZ_TS_MODES,1}, + {IC7800_ALL_RX_MODES,Hz(100)}, + {IC7800_ALL_RX_MODES,kHz(1)}, + {IC7800_ALL_RX_MODES,kHz(5)}, + {IC7800_ALL_RX_MODES,kHz(9)}, + {IC7800_ALL_RX_MODES,kHz(10)}, + {IC7800_ALL_RX_MODES,kHz(12.5)}, + {IC7800_ALL_RX_MODES,kHz(20)}, + {IC7800_ALL_RX_MODES,kHz(25)}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ +.filters = { + {RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR, kHz(2.4)}, + {RIG_MODE_CW|RIG_MODE_CWR, Hz(500)}, + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_AM, kHz(2.4)}, + {RIG_MODE_FM, kHz(15)}, + {RIG_MODE_FM, kHz(8)}, + RIG_FLT_END, + }, +.str_cal = IC7800_STR_CAL, + +.cfgparams = icom_cfg_params, +.set_conf = icom_set_conf, +.get_conf = icom_get_conf, + +.priv = (void*)&ic7800_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, +.get_mode = icom_get_mode, +.set_vfo = icom_set_vfo, +.set_ant = icom_set_ant, +.get_ant = icom_get_ant, + +.set_rit = icom_set_rit, + +.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 = icom_set_parm, +.get_parm = icom_get_parm, +.set_mem = icom_set_mem, +.vfo_op = icom_vfo_op, +.scan = icom_scan, +.set_ptt = icom_set_ptt, +.get_ptt = icom_get_ptt, +.get_dcd = icom_get_dcd, +.set_ts = icom_set_ts, +.get_ts = icom_get_ts, +.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_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 = icom_get_split_vfo, + +}; + diff --git a/icom/icom.c b/icom/icom.c index a8ad75604..1f815abaa 100644 --- a/icom/icom.c +++ b/icom/icom.c @@ -2,7 +2,7 @@ * Hamlib CI-V backend - main file * Copyright (c) 2000-2004 by Stephane Fillod * - * $Id: icom.c,v 1.90 2004-09-07 21:54:20 fillods Exp $ + * $Id: icom.c,v 1.91 2004-09-25 14:33:16 fillods Exp $ * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as @@ -232,9 +232,11 @@ static const struct icom_addr icom_addr_list[] = { { RIG_MODEL_IC756, 0x50 }, { RIG_MODEL_IC756PRO, 0x5c }, { RIG_MODEL_IC756PROII, 0x64 }, + { RIG_MODEL_IC756PROIII, 0x6e }, { RIG_MODEL_IC761, 0x1e }, { RIG_MODEL_IC765, 0x2c }, { RIG_MODEL_IC775, 0x46 }, + { RIG_MODEL_IC7800, 0x6a }, { RIG_MODEL_IC781, 0x26 }, { RIG_MODEL_IC820, 0x42 }, { RIG_MODEL_IC821, 0x4c }, @@ -244,6 +246,7 @@ static const struct icom_addr icom_addr_list[] = { { RIG_MODEL_IC1271, 0x24 }, { RIG_MODEL_IC1275, 0x18 }, { RIG_MODEL_ICR10, 0x52 }, + { RIG_MODEL_ICR20, 0x6c }, { RIG_MODEL_ICR71, 0x1a }, { RIG_MODEL_ICR72, 0x32 }, { RIG_MODEL_ICR75, 0x5a }, @@ -2044,8 +2047,8 @@ int icom_get_parm(RIG *rig, setting_t parm, value_t *val) res_len -= cmdhead; if (resbuf[0] != ACK && resbuf[0] != prm_cn) { - rig_debug(RIG_DEBUG_ERR,"icom_get_level: ack NG (%#.2x), " - "len=%d\n", resbuf[0],res_len); + rig_debug(RIG_DEBUG_ERR,"%s: ack NG (%#.2x), " + "len=%d\n", __FUNCTION__,resbuf[0],res_len); return -RIG_ERJCTED; } @@ -2071,8 +2074,8 @@ int icom_get_parm(RIG *rig, setting_t parm, value_t *val) val->i = icom_val; } - rig_debug(RIG_DEBUG_TRACE,"icom_get_parm: %d %d %d %f\n", res_len, - icom_val, val->i, val->f); + rig_debug(RIG_DEBUG_TRACE,"%s: %d %d %d %f\n", + __FUNCTION__, res_len, icom_val, val->i, val->f); return RIG_OK; } @@ -2870,7 +2873,10 @@ DECLARE_INITRIG_BACKEND(icom) rig_register(&ic756_caps); rig_register(&ic756pro_caps); rig_register(&ic756pro2_caps); + rig_register(&ic756pro3_caps); rig_register(&ic765_caps); + rig_register(&ic78_caps); + rig_register(&ic7800_caps); rig_register(&ic781_caps); rig_register(&ic707_caps); rig_register(&ic728_caps); @@ -2880,6 +2886,7 @@ DECLARE_INITRIG_BACKEND(icom) rig_register(&ic970_caps); rig_register(&icr10_caps); + rig_register(&icr20_caps); rig_register(&icr71_caps); rig_register(&icr72_caps); rig_register(&icr75_caps); diff --git a/icom/icom.h b/icom/icom.h index 0ba4d33f9..ef78f4713 100644 --- a/icom/icom.h +++ b/icom/icom.h @@ -2,7 +2,7 @@ * Hamlib CI-V backend - main header * Copyright (c) 2000-2004 by Stephane Fillod * - * $Id: icom.h,v 1.68 2004-08-21 23:53:39 fillods Exp $ + * $Id: icom.h,v 1.69 2004-09-25 14:33:16 fillods Exp $ * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as @@ -31,6 +31,8 @@ #include #endif +#define BACKEND_VER "0.3" + /* * defines used by comp_cal_str in rig.c * STR_CAL_LENGTH is the lenght of the S Meter calibration table @@ -176,15 +178,19 @@ extern const struct rig_caps ic746pro_caps; extern const struct rig_caps ic756_caps; extern const struct rig_caps ic756pro_caps; extern const struct rig_caps ic756pro2_caps; +extern const struct rig_caps ic756pro3_caps; extern const struct rig_caps ic751_caps; extern const struct rig_caps ic761_caps; extern const struct rig_caps ic765_caps; extern const struct rig_caps ic775_caps; +extern const struct rig_caps ic78_caps; +extern const struct rig_caps ic7800_caps; extern const struct rig_caps ic781_caps; extern const struct rig_caps ic821h_caps; extern const struct rig_caps ic910_caps; extern const struct rig_caps ic970_caps; extern const struct rig_caps icr10_caps; +extern const struct rig_caps icr20_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/icr20.c b/icom/icr20.c new file mode 100644 index 000000000..800435e1c --- /dev/null +++ b/icom/icr20.c @@ -0,0 +1,160 @@ +/* + * Hamlib CI-V backend - description of IC-R20 + * Copyright (c) 2004 by Stephane Fillod + * + * $Id: icr20.c,v 1.1 2004-09-25 14:33:16 fillods Exp $ + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include "hamlib/rig.h" +#include "icom.h" +#include "idx_builtin.h" + +#define ICR20_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_WFM) + +#define ICR20_FUNC_ALL (RIG_FUNC_NONE) + +#define ICR20_LEVEL_ALL (RIG_LEVEL_RAWSTR) + +#define ICR20_VFO_ALL (RIG_VFO_A) + +#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 */ \ + { 255, 60 } /* +60 */ \ + } } + +static const struct icom_priv_caps icr20_priv_caps = { + 0x6c, /* default address */ + 0, /* 731 mode */ + r8500_ts_sc_list /* wrong, but don't have set_ts anyway */ +}; + +const struct rig_caps icr20_caps = { +.rig_model = RIG_MODEL_ICR20, +.model_name = "IC-R20", +.mfg_name = "Icom", +.version = BACKEND_VER, +.copyright = "LGPL", +.status = RIG_STATUS_UNTESTED, +.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 = 200, +.retry = 3, +.has_get_func = ICR20_FUNC_ALL, +.has_set_func = ICR20_FUNC_ALL, +.has_get_level = ICR20_LEVEL_ALL, +.has_set_level = RIG_LEVEL_SET(ICR20_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 = ICR20_VFO_OPS, +.scan_ops = ICR20_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, 1249, RIG_MTYPE_EDGE }, /* two by two */ + RIG_CHAN_END, + }, + +.rx_range_list1 = { /* Other countries but France */ + {kHz(150),GHz(3.304999),ICR20_MODES,-1,-1,ICR20_VFO_ALL}, + RIG_FRNG_END, }, +.tx_range_list1 = { RIG_FRNG_END, }, + +.rx_range_list2 = { /* USA */ + {kHz(150),MHz(821.999),ICR20_MODES,-1,-1,ICR20_VFO_ALL}, + {MHz(851),MHz(866.999),ICR20_MODES,-1,-1,ICR20_VFO_ALL}, + {MHz(896),GHz(1.304999),ICR20_MODES,-1,-1,ICR20_VFO_ALL}, + {GHz(1.305),GHz(3.304999),ICR20_MODES,-1,-1,ICR20_VFO_ALL}, + RIG_FRNG_END, }, +.tx_range_list2 = { RIG_FRNG_END, }, + +.tuning_steps = { + {ICR20_MODES,Hz(100)}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ +.filters = { + {RIG_MODE_SSB|RIG_MODE_CW, kHz(1.8)}, + {RIG_MODE_AM|RIG_MODE_FM, kHz(12)}, + {RIG_MODE_WFM, kHz(150)}, + RIG_FLT_END, + }, +.str_cal = ICR20_STR_CAL, + +.cfgparams = icom_cfg_params, +.set_conf = icom_set_conf, +.get_conf = icom_get_conf, + +.priv = (void*)&icr20_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, + +}; + +