From 1880625972a15866335a9574a0f272fd1406d883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Fillod=2C=20F8CFE?= Date: Wed, 13 Nov 2002 20:35:18 +0000 Subject: [PATCH] added initial support for Elecraft K2 git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1280 7ae35d74-ebe9-4afe-98af-79ac388436b8 --- kenwood/Makefile.am | 4 +- kenwood/k2.c | 174 ++++++++++++++++++++++++++++++++++++++++++++ kenwood/kenwood.c | 37 ++++++++-- kenwood/kenwood.h | 3 +- 4 files changed, 208 insertions(+), 10 deletions(-) create mode 100644 kenwood/k2.c diff --git a/kenwood/Makefile.am b/kenwood/Makefile.am index 4e2c2df52..0e4526b52 100644 --- a/kenwood/Makefile.am +++ b/kenwood/Makefile.am @@ -1,10 +1,10 @@ TSSRCLIST = ts850.c ts870s.c ts570.c ts450s.c ts440.c ts950.c ts50s.c \ - ts790.c thd7.c thf7.c ts2000.c + ts790.c thd7.c thf7.c ts2000.c k2.c lib_LTLIBRARIES = hamlib-kenwood.la hamlib_kenwood_la_SOURCES = $(TSSRCLIST) kenwood.c th.c hamlib_kenwood_la_LDFLAGS = -no-undefined -module -avoid-version -hamlib_kenwood_la_LIBADD = ../src/libhamlib.la @MATH_LIBS@ +hamlib_kenwood_la_LIBADD = $(top_builddir)/src/libhamlib.la @MATH_LIBS@ noinst_HEADERS = kenwood.h th.h diff --git a/kenwood/k2.c b/kenwood/k2.c new file mode 100644 index 000000000..165a71aec --- /dev/null +++ b/kenwood/k2.c @@ -0,0 +1,174 @@ +/* + * Hamlib Kenwood backend - Elecraft K2 description + * Copyright (c) 2002 by Stephane Fillod + * + * $Id: k2.c,v 1.1 2002-11-13 20:35:17 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 +#include "kenwood.h" + + +#define K2_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY) + +#define K2_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_LOCK) + +#define K2_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_SQL|RIG_LEVEL_SQLSTAT|RIG_LEVEL_STRENGTH|RIG_LEVEL_RFPOWER) + +#define K2_VFO (RIG_VFO_A|RIG_VFO_B) +#define K2_VFO_OP (RIG_OP_UP|RIG_OP_DOWN) + +static const struct kenwood_priv_caps k2_priv_caps = { + .cmdtrm = EOM_KEN, +}; + +/* + * KIO2 rig capabilities. + * This kit can recognize a large subset of TS-570 commands. + * + * part of infos comes from http://www.elecraft.com + * + * TODO: 2 antenna support, CW, etc. + */ +const struct rig_caps k2_caps = { +.rig_model = RIG_MODEL_K2, +.model_name = "K2", +.mfg_name = "Elecraft", +.version = "0.2", +.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 = 4800, +.serial_data_bits = 8, +.serial_stop_bits = 2, +.serial_parity = RIG_PARITY_NONE, +.serial_handshake = RIG_HANDSHAKE_NONE, +.write_delay = 0, +.post_write_delay = 0, +.timeout = 100, +.retry = 3, + +.has_get_func = K2_FUNC_ALL, +.has_set_func = K2_FUNC_ALL, +.has_get_level = K2_LEVEL_ALL, +.has_set_level = RIG_LEVEL_SET(K2_LEVEL_ALL), +.has_get_parm = RIG_PARM_NONE, +.has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ +.level_gran = {}, /* FIXME: granularity */ +.parm_gran = {}, +.preamp = { 14, 4, RIG_DBLST_END, }, +.attenuator = { 10, RIG_DBLST_END, }, +.max_rit = Hz(9990), +.max_xit = Hz(9990), +.max_ifshift = Hz(0), +.vfo_ops = K2_VFO_OP, +.targetable_vfo = RIG_TARGETABLE_FREQ, +.transceive = RIG_TRN_RIG, +.bank_qty = 0, +.chan_desc_sz = 0, + +.chan_list = { + { 0, 89, RIG_MTYPE_MEM }, + { 90, 99, RIG_MTYPE_EDGE }, + RIG_CHAN_END, + }, +.rx_range_list1 = { + {kHz(500),MHz(30),K2_MODES,-1,-1,K2_VFO}, + RIG_FRNG_END, + }, /* rx range */ +.tx_range_list1 = { + {kHz(1810),kHz(1850)-1,K2_MODES,10,W(15),K2_VFO}, /* 15W class */ + {kHz(3500),kHz(3800)-1,K2_MODES,10,W(15),K2_VFO}, + {MHz(7),kHz(7100),K2_MODES,10,W(15),K2_VFO}, + {kHz(10100),kHz(10150),K2_MODES,10,W(15),K2_VFO}, + {MHz(14),kHz(14350),K2_MODES,10,W(15),K2_VFO}, + {kHz(18068),kHz(18168),K2_MODES,10,W(15),K2_VFO}, + {MHz(21),kHz(21450),K2_MODES,10,W(15),K2_VFO}, + {kHz(24890),kHz(24990),K2_MODES,10,W(15),K2_VFO}, + {MHz(28),kHz(29700),K2_MODES,10,W(15),K2_VFO}, + RIG_FRNG_END, + }, /* tx range */ + +.rx_range_list2 = { + {kHz(500),MHz(30),K2_MODES,-1,-1,K2_VFO}, + RIG_FRNG_END, + }, /* rx range */ +.tx_range_list2 = { + {kHz(1800),MHz(2)-1,K2_MODES,10,W(15),K2_VFO}, /* 15W class */ + {kHz(3500),MHz(4)-1,K2_MODES,10,W(15),K2_VFO}, + {MHz(7),kHz(7300),K2_MODES,10,W(15),K2_VFO}, + {kHz(10100),kHz(10150),K2_MODES,10,W(15),K2_VFO}, + {MHz(14),kHz(14350),K2_MODES,10,W(15),K2_VFO}, + {kHz(18068),kHz(18168),K2_MODES,10,W(15),K2_VFO}, + {MHz(21),kHz(21450),K2_MODES,10,W(15),K2_VFO}, + {kHz(24890),kHz(24990),K2_MODES,10,W(15),K2_VFO}, + {MHz(28),kHz(29700),K2_MODES,10,W(15),K2_VFO}, + RIG_FRNG_END, + }, /* tx range */ +.tuning_steps = { + {K2_MODES,10}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ +.filters = { + {RIG_MODE_SSB, kHz(2.5)}, + {RIG_MODE_CW, Hz(500)}, + {RIG_MODE_RTTY, Hz(500)}, + RIG_FLT_END, + }, +.priv = (void *)&k2_priv_caps, + +.set_freq = kenwood_set_freq, +.get_freq = kenwood_get_freq, +.set_mode = kenwood_set_mode, +.get_mode = kenwood_get_mode, +.set_vfo = kenwood_set_vfo, +.get_vfo = kenwood_get_vfo, +.set_rit = kenwood_set_rit, +.get_rit = kenwood_get_rit, +.set_xit = kenwood_set_xit, +.get_xit = kenwood_get_xit, +.get_ptt = kenwood_get_ptt, +.set_ptt = kenwood_set_ptt, +.get_dcd = kenwood_get_dcd, +.set_func = kenwood_set_func, +.get_func = kenwood_get_func, +.set_level = kenwood_set_level, +.get_level = kenwood_get_level, +.vfo_op = kenwood_vfo_op, +.set_trn = kenwood_set_trn, +.get_trn = kenwood_get_trn, +.get_powerstat = kenwood_get_powerstat, + +}; + + +/* + * Function definitions below + */ + diff --git a/kenwood/kenwood.c b/kenwood/kenwood.c index 0a5fbcfd5..dd3164156 100644 --- a/kenwood/kenwood.c +++ b/kenwood/kenwood.c @@ -2,7 +2,7 @@ * Hamlib Kenwood backend - main file * Copyright (c) 2000-2002 by Stephane Fillod * - * $Id: kenwood.c,v 1.49 2002-10-22 20:24:07 fillods Exp $ + * $Id: kenwood.c,v 1.50 2002-11-13 20:35:18 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 @@ -80,7 +80,7 @@ static const struct kenwood_id kenwood_id_list[] = { { RIG_MODEL_TS440, 4 }, { RIG_MODEL_R5000, 5 }, { RIG_MODEL_TS870S, 15 }, - { RIG_MODEL_TS570D, 17 }, + { RIG_MODEL_TS570D, 17 }, /* Elecraft K2 also returns 17 */ { RIG_MODEL_TS570S, 18 }, { RIG_MODEL_TS2000, 19 }, { RIG_MODEL_NONE, UNKNOWN_ID }, /* end marker */ @@ -1372,12 +1372,33 @@ rig_model_t probe_kenwood(port_t *port) k_id = atoi(idbuf+2); + /* + * Elecraft K2 returns same ID as TS570 + */ + if (k_id == 17) { + retval = serial_open(port); + if (retval != RIG_OK) + return RIG_MODEL_NONE; + retval = write_block(port, "K2;", 3); + id_len = read_string(port, idbuf, IDBUFSZ, EOM_KEN EOM_TH, 2); + close(port->fd); + if (retval != RIG_OK) + return RIG_MODEL_NONE; + /* + * reply should be something like 'K2n;' + */ + if (id_len == 4 || !strcmp(idbuf, "K2")) { + rig_debug(RIG_DEBUG_VERBOSE,"probe_kenwood: found K2\n"); + return RIG_MODEL_K2; + } + } + for (i=0; kenwood_id_list[i].model != RIG_MODEL_NONE; i++) { - if (kenwood_id_list[i].id == k_id) { - rig_debug(RIG_DEBUG_VERBOSE,"probe_kenwood: " - "found %03d\n", k_id); - return kenwood_id_list[i].model; - } + if (kenwood_id_list[i].id == k_id) { + rig_debug(RIG_DEBUG_VERBOSE,"probe_kenwood: " + "found %03d\n", k_id); + return kenwood_id_list[i].model; + } } /* * not found in known table.... @@ -1460,6 +1481,8 @@ int initrigs_kenwood(void *be_handle) rig_register(&ts850_caps); rig_register(&ts870s_caps); rig_register(&ts2000_caps); + rig_register(&k2_caps); + rig_register(&thd7a_caps); rig_register(&thf7e_caps); diff --git a/kenwood/kenwood.h b/kenwood/kenwood.h index e4e85f078..b4f924405 100644 --- a/kenwood/kenwood.h +++ b/kenwood/kenwood.h @@ -2,7 +2,7 @@ * Hamlib Kenwood backend - main header * Copyright (c) 2000-2002 by Stephane Fillod * - * $Id: kenwood.h,v 1.25 2002-09-04 17:32:42 pa4tu Exp $ + * $Id: kenwood.h,v 1.26 2002-11-13 20:35:18 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 @@ -93,6 +93,7 @@ extern const struct rig_caps ts2000_caps; extern const struct rig_caps thd7a_caps; extern const struct rig_caps thf7a_caps; extern const struct rig_caps thf7e_caps; +extern const struct rig_caps k2_caps; extern BACKEND_EXPORT(int) initrigs_kenwood(void *be_handle); extern BACKEND_EXPORT(rig_model_t) proberigs_kenwood(port_t *port);