diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 03663e325..df939ed47 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -130,6 +130,7 @@ #define RIG_MODEL_TS480 RIG_MAKE_MODEL(RIG_KENWOOD, 28) #define RIG_MODEL_K3 RIG_MAKE_MODEL(RIG_KENWOOD, 29) #define RIG_MODEL_TRC80 RIG_MAKE_MODEL(RIG_KENWOOD, 30) +#define RIG_MODEL_TS590S RIG_MAKE_MODEL(RIG_KENWOOD, 31) /* * Icom diff --git a/kenwood/Makefile.am b/kenwood/Makefile.am index 47b56f43d..95ddef7d0 100644 --- a/kenwood/Makefile.am +++ b/kenwood/Makefile.am @@ -1,7 +1,7 @@ TSSRCLIST = ts850.c ts870s.c ts570.c ts450s.c ts950.c ts50s.c \ ts790.c ts2000.c k2.c k3.c ts930.c \ - ts680.c ts690.c ts140.c ts480.c trc80.c + ts680.c ts690.c ts140.c ts480.c trc80.c ts590.c IC10SRCLIST = ts440.c ts940.c ts711.c ts811.c r5000.c diff --git a/kenwood/kenwood.c b/kenwood/kenwood.c index 987f82e1b..177a4ff0d 100644 --- a/kenwood/kenwood.c +++ b/kenwood/kenwood.c @@ -3,7 +3,6 @@ * Copyright (c) 2000-2009 by Stephane Fillod * Copyright (C) 2009 Alessandro Zummo * - * $Id: kenwood.c,v 1.118 2009-02-13 19:34:21 azummo 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 @@ -76,6 +75,7 @@ static const struct kenwood_id kenwood_id_list[] = { { RIG_MODEL_TS570S, 18 }, { RIG_MODEL_TS2000, 19 }, { RIG_MODEL_TS480, 20 }, + { RIG_MODEL_TS590S, 21 }, /* TBC */ { RIG_MODEL_NONE, UNKNOWN_ID }, /* end marker */ }; @@ -96,6 +96,7 @@ static const struct kenwood_id_string kenwood_id_string_list[] = { { RIG_MODEL_TS570S, "018" }, { RIG_MODEL_TS2000, "019" }, { RIG_MODEL_TS480, "020" }, + { RIG_MODEL_TS590S, "021" }, /* TBC */ { RIG_MODEL_THD7A, "TH-D7" }, { RIG_MODEL_THD7AG, "TH-D7G" }, { RIG_MODEL_TMD700, "TM-D700" }, @@ -2145,6 +2146,7 @@ DECLARE_INITRIG_BACKEND(kenwood) rig_register(&thg71_caps); rig_register(&tmv7_caps); + rig_register(&ts590_caps); rig_register(&ts480_caps); rig_register(&thf6a_caps); return RIG_OK; diff --git a/kenwood/kenwood.h b/kenwood/kenwood.h index 977a789a8..e9fcaaad0 100644 --- a/kenwood/kenwood.h +++ b/kenwood/kenwood.h @@ -2,8 +2,6 @@ * Hamlib Kenwood backend - main header * Copyright (c) 2000-2009 by Stephane Fillod * - * $Id: kenwood.h,v 1.54 2009-02-10 22:48:25 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 @@ -164,6 +162,7 @@ extern const struct rig_caps ts811_caps; extern const struct rig_caps r5000_caps; extern const struct rig_caps ts480_caps; +extern const struct rig_caps ts590_caps; extern const struct rig_caps thf6a_caps; /* use when not interested in the answer, but want to check its len */ diff --git a/kenwood/ts590.c b/kenwood/ts590.c new file mode 100644 index 000000000..ae1613e48 --- /dev/null +++ b/kenwood/ts590.c @@ -0,0 +1,243 @@ +/* + * Hamlib Kenwood backend - TS590 description + * Copyright (c) 2010 by Stephane Fillod + * + * + * 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 + +#include "hamlib/rig.h" +#include "idx_builtin.h" +#include "kenwood.h" + +#define TS590_ALL_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR) +#define TS590_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) +#define TS590_AM_TX_MODES RIG_MODE_AM +#define TS590_VFO (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) + +#define TS590_LEVEL_ALL (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|\ + RIG_LEVEL_CWPITCH|RIG_LEVEL_METER|RIG_LEVEL_SWR|RIG_LEVEL_ALC|\ + RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_STRENGTH) +#define TS590_FUNC_ALL (RIG_FUNC_LOCK|RIG_FUNC_AIP|RIG_FUNC_TONE|\ + RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_NR|RIG_FUNC_NR|RIG_FUNC_BC) + +#define TS590_VFO_OPS (RIG_OP_UP|RIG_OP_DOWN) +#define TS590_SCAN_OPS (RIG_SCAN_VFO) + +#define TS590_ANTS (RIG_ANT_1|RIG_ANT_2) + +#define TS590_CHANNEL_CAPS { \ + .freq=1,\ + .mode=1,\ + .tx_freq=1,\ + .tx_mode=1,\ + .split=1,\ + .funcs=RIG_FUNC_TONE, \ + .flags=RIG_CHFLAG_SKIP \ + } + +static struct kenwood_priv_caps ts590_priv_caps = { + .cmdtrm = EOM_KEN, +}; + + +/* + * ts590 rig capabilities. + * Notice that some rigs share the same functions. + * Also this struct is READONLY! + */ +const struct rig_caps ts590_caps = { + .rig_model = RIG_MODEL_TS590S, + .model_name = "TS-590S", + .mfg_name = "Kenwood", + .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 = 4800, + .serial_rate_max = 115200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_HARDWARE, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 500, + .retry = 3, + .preamp = {12, RIG_DBLST_END,}, + .attenuator = {12, RIG_DBLST_END,}, + .max_rit = kHz (9.99), + .max_xit = kHz (9.99), + .max_ifshift = Hz (0), + .targetable_vfo = RIG_TARGETABLE_FREQ, + .transceive = RIG_TRN_RIG, + + +.chan_list = { /* TBC */ + { 0, 89, RIG_MTYPE_MEM, TS590_CHANNEL_CAPS }, + { 90, 99, RIG_MTYPE_EDGE, TS590_CHANNEL_CAPS }, + RIG_CHAN_END, + }, + + .rx_range_list1 = { + {kHz(30), Hz(59999999), TS590_ALL_MODES, -1, -1, TS590_VFO, TS590_ANTS}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 1 */ + .tx_range_list1 = { + {kHz(1810), kHz(1850), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, /* 100W class */ + {kHz(1810), kHz(1850), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, /* 25W class */ + {kHz(3500), kHz(3800), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(3500), kHz(3800), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(7), kHz(7200), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(7), kHz(7200), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(10100), kHz(10150), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(10100), kHz(10150), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(14), kHz(14350), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(14), kHz(14350), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(18068), kHz(18168), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(18068), kHz(18168), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(21), kHz(21450), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(21), kHz(21450), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(24890), kHz(24990), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(24890), kHz(24990), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(28), kHz(29700), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(28), kHz(29700), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(50), kHz(52000), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(50), kHz(52000), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 1 */ + .rx_range_list2 = { + {kHz(30), Hz(59999999), TS590_ALL_MODES, -1, -1, TS590_VFO, TS590_ANTS}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 2 */ + .tx_range_list2 = { + {kHz(1800), MHz(2) - 1, TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, /* 100W class */ + {kHz(1800), MHz(2) - 1, TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, /* 25W class */ + {kHz(3500), MHz(4) - 1, TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(3500), MHz(4) - 1, TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(5250), kHz(5450), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(5250), kHz(5450), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(7), kHz(7300), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(7), kHz(7300), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(10100), kHz(10150), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(10100), kHz(10150), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(14), kHz(14350), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(14), kHz(14350), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(18068), kHz(18168), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(18068), kHz(18168), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(21), kHz(21450), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(21), kHz(21450), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {kHz(24890), kHz(24990), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {kHz(24890), kHz(24990), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(28), kHz(29700), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(28), kHz(29700), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + {MHz(50), kHz(52000), TS590_OTHER_TX_MODES, 5000, 100000, TS590_VFO, TS590_ANTS}, + {MHz(50), kHz(52000), TS590_AM_TX_MODES, 5000, 25000, TS590_VFO, TS590_ANTS}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 2 */ + .tuning_steps = { + {TS590_ALL_MODES,kHz(1)}, + {TS590_ALL_MODES,Hz(2500)}, + {TS590_ALL_MODES,kHz(5)}, + {TS590_ALL_MODES,Hz(6250)}, + {TS590_ALL_MODES,kHz(10)}, + {TS590_ALL_MODES,Hz(12500)}, + {TS590_ALL_MODES,kHz(15)}, + {TS590_ALL_MODES,kHz(20)}, + {TS590_ALL_MODES,kHz(25)}, + {TS590_ALL_MODES,kHz(30)}, + {TS590_ALL_MODES,kHz(100)}, + {TS590_ALL_MODES,kHz(500)}, + {TS590_ALL_MODES,MHz(1)}, + {TS590_ALL_MODES,0}, /* any tuning step */ + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_SSB, kHz(2.2)}, + {RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(500)}, + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_FM, kHz(12)}, + RIG_FLT_END, + }, + .priv = (void *) &ts590_priv_caps, + .rig_init = kenwood_init, + .rig_cleanup = kenwood_cleanup, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_rit = kenwood_set_rit, /* FIXME should this switch to rit mode or just set the frequency? */ + .get_rit = kenwood_get_rit, + .set_xit = kenwood_set_xit, /* FIXME should this switch to xit mode or just set the frequency? */ + .get_xit = kenwood_get_xit, + .set_mode = kenwood_set_mode, + .get_mode = kenwood_get_mode, + .set_vfo = kenwood_set_vfo, + .get_vfo = kenwood_get_vfo_if, + .set_split_vfo = kenwood_set_split_vfo, + .get_split_vfo = kenwood_get_split_vfo_if, + .get_ptt = kenwood_get_ptt, + .set_ptt = kenwood_set_ptt, + .get_dcd = kenwood_get_dcd, + .set_powerstat = kenwood_set_powerstat, + .get_powerstat = kenwood_get_powerstat, + .get_info = kenwood_get_info, + .reset = kenwood_reset, + .set_ant = kenwood_set_ant, + .get_ant = kenwood_get_ant, + .scan_ops = TS590_SCAN_OPS, + .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */ + .has_set_level = RIG_LEVEL_SET(TS590_LEVEL_ALL), + .has_get_level = TS590_LEVEL_ALL, + .set_level = kenwood_set_level, + .get_level = kenwood_get_level, + .has_get_func = TS590_FUNC_ALL, + .has_set_func = TS590_FUNC_ALL, + .set_func = kenwood_set_func, + .get_func = kenwood_get_func, + .set_ctcss_tone = kenwood_set_ctcss_tone, + .get_ctcss_tone = kenwood_get_ctcss_tone, + .ctcss_list = kenwood38_ctcss_list, + .set_trn = kenwood_set_trn, + .get_trn = kenwood_get_trn, + .send_morse = kenwood_send_morse, + .set_mem = kenwood_set_mem, + .get_mem = kenwood_get_mem, + .set_channel = kenwood_set_channel, + .get_channel = kenwood_get_channel, + .vfo_ops = TS590_VFO_OPS, + .vfo_op = kenwood_vfo_op, +}; + + +/* + * for the TS480 the function NR and BC have tree state: NR0,1,2 and BC0,1,2 + * this cannot be send through the on/off logic of set_function! + */ + + +/* + * Function definitions below + */