Hamlib/rigs/tentec/orion.h

575 wiersze
19 KiB
C

/*
* Hamlib TenTenc backend - TT-565 headers
* Copyright (c) 2004-2011 by Stephane Fillod
* Copyright (c) 2004-2011 by Martin Ewing
*
*
* 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
*
*/
/**
* \addtogroup tentec_orion
* @{ */
/**
* \file orion.h
* \brief Backend for Tentec Orion 565 / 566
*
* This backend supports the Ten-Tec Orion (565) and Orion II (566) transceivers.
*/
#include <stddef.h>
#include "bandplan.h"
#include "rig.h"
#include "riglist.h"
#define BACKEND_VER "20220614"
#define TRUE 1
#define FALSE 0
#define TT565_BUFSIZE 32
/**
* \brief Memory capability
*
* Orion's own memory channel holds a freq, mode, and bandwidth.
* May be captured from VFO A or B and applied to VFO A or B.
* It cannot directly be read or written from the computer!
*/
#define TT565_MEM_CAP { \
.freq = 1, \
.mode = 1, \
.width = 1, \
}
static int tt565_init(RIG *rig);
static int tt565_open(RIG *rig);
static int tt565_cleanup(RIG *rig);
static int tt565_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
static int tt565_get_freq(RIG *rig, vfo_t vfo, freq_t *freq);
static int tt565_set_vfo(RIG *rig, vfo_t vfo);
static int tt565_get_vfo(RIG *rig, vfo_t *vfo);
static int tt565_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width);
static int tt565_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);
static int tt565_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo);
static int tt565_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo);
static int tt565_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt);
static int tt565_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt);
static int tt565_reset(RIG *rig, reset_t reset);
static int tt565_set_mem(RIG * rig, vfo_t vfo, int ch);
static int tt565_get_mem(RIG * rig, vfo_t vfo, int *ch);
static int tt565_vfo_op(RIG * rig, vfo_t vfo, vfo_op_t op);
static int tt565_set_ts(RIG *rig, vfo_t vfo, shortfreq_t ts);
static int tt565_get_ts(RIG *rig, vfo_t vfo, shortfreq_t *ts);
static int tt565_set_rit(RIG * rig, vfo_t vfo, shortfreq_t rit);
static int tt565_get_rit(RIG * rig, vfo_t vfo, shortfreq_t *rit);
static int tt565_set_xit(RIG * rig, vfo_t vfo, shortfreq_t xit);
static int tt565_get_xit(RIG * rig, vfo_t vfo, shortfreq_t *xit);
static int tt565_set_level(RIG * rig, vfo_t vfo, setting_t level, value_t val);
static int tt565_get_level(RIG * rig, vfo_t vfo, setting_t level, value_t *val);
static const char* tt565_get_info(RIG *rig);
static int tt565_send_morse(RIG *rig, vfo_t vfo, const char *msg);
static int tt565_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
static int tt565_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
static int tt565_set_ant(RIG * rig, vfo_t vfo, ant_t ant, value_t option);
static int tt565_get_ant(RIG *rig, vfo_t vfo, ant_t dummy, value_t *option, ant_t *ant_curr, ant_t *ant_tx, ant_t *ant_rx);
/** \brief Orion private data */
struct tt565_priv_data {
int ch; /*!< memory channel */
vfo_t vfo_curr; /*!< Currently selected VFO */
};
/** \brief Orion Supported Modes */
#define TT565_MODES (RIG_MODE_FM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
RIG_MODE_RTTY|RIG_MODE_AM)
/** \brief Orion Receiver Modes */
#define TT565_RXMODES (TT565_MODES)
/** \brief Orion Supported Functions */
#define TT565_FUNCS (RIG_FUNC_LOCK|RIG_FUNC_TUNER|RIG_FUNC_VOX|RIG_FUNC_NB)
/** \brief Orion Supported Levels */
#define TT565_LEVELS (RIG_LEVEL_RAWSTR| \
RIG_LEVEL_CWPITCH| \
RIG_LEVEL_SQL|RIG_LEVEL_IF| \
RIG_LEVEL_RFPOWER|RIG_LEVEL_KEYSPD| \
RIG_LEVEL_RF|RIG_LEVEL_NR| \
RIG_LEVEL_MICGAIN| \
RIG_LEVEL_AF|RIG_LEVEL_AGC| \
RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_ANTIVOX| \
RIG_LEVEL_COMP|RIG_LEVEL_PREAMP| \
RIG_LEVEL_SWR|RIG_LEVEL_ATT)
/** \brief Orion Tx/Rx Antennas*/
#define TT565_ANTS (RIG_ANT_1|RIG_ANT_2)
/** \brief Orion Rx Antennas*/
#define TT565_RXANTS (TT565_ANTS|RIG_ANT_3)
/** \brief Orion Parameters */
#define TT565_PARMS (RIG_PARM_NONE)
/**
* \brief Orion VFOs - A and B
*/
#define TT565_VFO (RIG_VFO_A|RIG_VFO_B)
/**
* \brief Orion VFO Operations
*
* Allowed operations
*/
#define TT565_VFO_OPS (RIG_OP_UP|RIG_OP_DOWN|\
RIG_OP_TO_VFO|RIG_OP_FROM_VFO| \
RIG_OP_TUNE)
/**
* \brief S-Meter Calibration list
*
* List format: { hardware units, dB relative to S9}
*
* These alternate tables must be of equal size, because they may be
* switched depending on firmware version detection.
*
* Note high end of scale is severely compressed in v1
* Table corrected against v 1.372, 11/2007
*/
#define TT565_STR_CAL_V1 { 14, { \
{ 1, -47 }, /* padding to match lengths with v2 */ \
{ 10, -47 }, \
{ 13, -42 }, \
{ 18, -37 }, \
{ 22, -32 }, \
{ 27, -27 }, \
{ 32, -18 }, \
{ 37, -11 }, \
{ 42, -4 }, \
{ 47, -1 }, \
{ 52, 10 }, \
{ 57, 20 }, \
{ 65, 30 }, \
{ 74, 40 }, \
} }
/**
* Calibration for Version 2.062a firmware, from Rigserve project.
* Again, this is approximate based on one measurement.
*/
#define TT565_STR_CAL_V2 { 14, { \
{ 10., -48. }, /* S1 = min. indication */ \
{ 24., -42. }, \
{ 38., -36. }, \
{ 47., -30. }, \
{ 61., -24. }, \
{ 70., -18. }, \
{ 79., -12. }, \
{ 84., -6. }, \
{ 94., 0. }, /* S9 */ \
{ 103., 10. }, \
{ 118., 20. }, \
{ 134., 30. }, \
{ 147., 40. }, \
{ 161., 50. }, \
} }
#undef TT565_TIME /* Define to enable time checks */
#define TT565_ASCII_FREQ /* select ascii mode for vfo commands */
/* Note: Binary mode seems buggy at certain freqs like
7015679 < freq < 7015936, etc. Use ascii mode. */
/**
* \brief tt565 transceiver capabilities.
*
* All of the Orion's personality is defined here!
*
* Protocol is documented at Tentec's firmware site
* http://www.rfsquared.com/
*/
struct rig_caps tt565_caps = {
RIG_MODEL(RIG_MODEL_TT565),
.model_name = "TT-565 Orion",
.mfg_name = "Ten-Tec",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_NONE,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 57600,
.serial_rate_max = 57600,
.serial_data_bits = 8,
.serial_stop_bits = 1,
.serial_parity = RIG_PARITY_NONE,
.serial_handshake = RIG_HANDSHAKE_HARDWARE,
.write_delay = 0, /* no delay between characters written */
.post_write_delay = 0, /* ms delay between writes DEBUGGING HERE */
.timeout = 2000, /* ms */
.retry = 4,
.has_get_func = TT565_FUNCS,
.has_set_func = TT565_FUNCS,
.has_get_level = TT565_LEVELS,
.has_set_level = RIG_LEVEL_SET(TT565_LEVELS),
.has_get_parm = TT565_PARMS,
.has_set_parm = TT565_PARMS,
.level_gran = {},
.parm_gran = {},
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { 20, RIG_DBLST_END },
.attenuator = { 6, 12, 18, RIG_DBLST_END },
.max_rit = kHz(8),
.max_xit = kHz(8),
.max_ifshift = kHz(8),
.vfo_ops = TT565_VFO_OPS,
.targetable_vfo = RIG_TARGETABLE_ALL,
.transceive = RIG_TRN_OFF,
.bank_qty = 0,
.chan_desc_sz = 0,
.chan_list = {
{ 0, 199, RIG_MTYPE_MEM, TT565_MEM_CAP },
},
/* Note Orion's ranges correspond to the hardware capability - same in
* regions 1 and 2. Band edges (VFOA) are wider than legal bands.
* VFOB is used for general coverage receive.
*/
.rx_range_list1 = {
/* FRQ_RNG_HF(1,TT565_RXMODES, -1,-1,RIG_VFO_N(0),TT565_RXANTS), */
{kHz(1790),kHz(2010),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(3490),kHz(4075),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(5100),kHz(5450),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(6890),kHz(7430),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(10090),kHz(10160),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(13990),kHz(15010),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(18058),kHz(18178),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(20990),kHz(21460),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(24880),kHz(25000),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(27990),kHz(29710),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(100),MHz(30),TT565_RXMODES,-1,-1,RIG_VFO_N(1),TT565_RXANTS},
RIG_FRNG_END,
},
.tx_range_list1 = {
/* FRQ_RNG_HF(1,TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS), */
{kHz(1790),kHz(2010),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(3490),kHz(4075),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(5100),kHz(5450),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(6890),kHz(7430),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(10090),kHz(10160),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(13990),kHz(15010),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(18058),kHz(18178),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(20990),kHz(21460),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(24880),kHz(25000),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(27990),kHz(29710),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
RIG_FRNG_END,
},
.rx_range_list2 = {
/* FRQ_RNG_HF(2,TT565_RXMODES, -1,-1,RIG_VFO_N(0),TT565_RXANTS),
{MHz(5.25),MHz(5.40),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS}, */
{kHz(1790),kHz(2010),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(3490),kHz(4075),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(5100),kHz(5450),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(6890),kHz(7430),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(10090),kHz(10160),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(13990),kHz(15010),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(18058),kHz(18178),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(20990),kHz(21460),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(24880),kHz(25000),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(27990),kHz(29710),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS},
{kHz(100),MHz(30),TT565_RXMODES,-1,-1,RIG_VFO_N(1),TT565_RXANTS},
RIG_FRNG_END,
},
.tx_range_list2 = {
/* FRQ_RNG_HF(2,TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS),
{MHz(5.25),MHz(5.40),TT565_MODES,W(5),W(100),RIG_VFO_N(0),TT565_ANTS}, */
{kHz(1790),kHz(2010),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(3490),kHz(4075),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(5100),kHz(5450),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(6890),kHz(7430),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(10090),kHz(10160),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(13990),kHz(15010),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(18058),kHz(18178),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(20990),kHz(21460),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(24880),kHz(25000),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
{kHz(27990),kHz(29710),TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS},
RIG_FRNG_END,
},
.tuning_steps = {
{TT565_RXMODES,1},
{TT565_RXMODES,10},
{TT565_RXMODES,100},
{TT565_RXMODES,kHz(1)},
{TT565_RXMODES,kHz(10)},
{TT565_RXMODES,kHz(100)},
RIG_TS_END,
},
/* mode/filter list, remember: order matters! */
.filters = {
/* 9MHz IF filters: 15kHz, 6kHz, 2.4kHz, 1.0kHz */
/* opt: 1.8kHz, 500Hz, 250Hz */
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY, kHz(2.4)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY, 100},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY, kHz(6)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY, 0}, /* 590 filters */
{RIG_MODE_AM, kHz(6)},
{RIG_MODE_AM, kHz(4)},
{RIG_MODE_FM, kHz(15)},
RIG_FLT_END,
},
.priv = (void*)NULL,
.rig_init = tt565_init,
.rig_cleanup = tt565_cleanup,
.rig_open = tt565_open,
.set_freq = tt565_set_freq,
.get_freq = tt565_get_freq,
.set_vfo = tt565_set_vfo,
.get_vfo = tt565_get_vfo,
.set_mode = tt565_set_mode,
.get_mode = tt565_get_mode,
.set_split_vfo = tt565_set_split_vfo,
.get_split_vfo = tt565_get_split_vfo,
.set_level = tt565_set_level,
.get_level = tt565_get_level,
.set_mem = tt565_set_mem,
.get_mem = tt565_get_mem,
.set_ptt = tt565_set_ptt,
.get_ptt = tt565_get_ptt,
.vfo_op = tt565_vfo_op,
.set_ts = tt565_set_ts,
.get_ts = tt565_get_ts,
.set_rit = tt565_set_rit,
.get_rit = tt565_get_rit,
.set_xit = tt565_set_xit,
.get_xit = tt565_get_xit,
.reset = tt565_reset,
.get_info = tt565_get_info,
.send_morse = tt565_send_morse,
.wait_morse = rig_wait_morse,
.get_func = tt565_get_func,
.set_func = tt565_set_func,
.get_ant = tt565_get_ant,
.set_ant = tt565_set_ant,
/* V2 is default. S-Meter cal table may be changed if V1 firmware detected. */
.str_cal = TT565_STR_CAL_V2,
};
/*
* Eagle TT-599 share the same ability as Orion's
*/
#define TT599_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|\
/* optional */ RIG_MODE_AM|RIG_MODE_FM)
#define TT599_RXMODES TT599_MODES
#define TT599_FUNCS (RIG_FUNC_ANF)
#define TT599_LEVELS (RIG_LEVEL_RAWSTR| \
RIG_LEVEL_SWR|RIG_LEVEL_RFPOWER| \
RIG_LEVEL_NR|RIG_LEVEL_AGC| \
RIG_LEVEL_PREAMP|RIG_LEVEL_ATT)
#define TT599_PARMS (RIG_PARM_NONE)
#define TT599_MEM_CAP { \
.freq = 1, \
.mode = 1, \
.width = 1, \
.split = 1, \
.tx_freq = 1, \
}
#define TT599_ANTS (RIG_ANT_1)
#define TT599_RXANTS TT599_ANTS
#define TT599_VFO (RIG_VFO_A|RIG_VFO_B)
#define TT599_VFO_OPS (RIG_OP_TO_VFO|RIG_OP_FROM_VFO)
/*
* Random guess, to be measured. See FAQ at http://hamlib.org
*/
#define TT599_STR_CAL { 3, { \
{ 10., -48. }, /* S1 = min. indication */ \
{ 94., 0. }, /* S9 */ \
{ 161., 50. }, \
} }
/**
* \brief tt599 transceiver capabilities.
*
* All of the Eagle's personality is defined here!
*
* Protocol is documented in Programmers Reference Manual V1.001 at
* http://www.tentec.com/index.php?id=360#down
*
*/
struct rig_caps tt599_caps = {
RIG_MODEL(RIG_MODEL_TT599),
.model_name = "TT-599 Eagle",
.mfg_name = "Ten-Tec",
.version = BACKEND_VER ".0",
.copyright = "LGPL",
.status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_NONE,
.port_type = RIG_PORT_SERIAL,
.serial_rate_min = 57600,
.serial_rate_max = 57600,
.serial_data_bits = 8,
.serial_stop_bits = 1,
.serial_parity = RIG_PARITY_NONE,
.serial_handshake = RIG_HANDSHAKE_HARDWARE,
.write_delay = 0, /* no delay between characters written */
.post_write_delay = 0, /* ms delay between writes DEBUGGING HERE */
.timeout = 2000, /* ms */
.retry = 4,
.has_get_func = TT599_FUNCS,
.has_set_func = TT599_FUNCS,
.has_get_level = TT599_LEVELS|RIG_LEVEL_RF,
.has_set_level = RIG_LEVEL_SET(TT599_LEVELS),
.has_get_parm = TT599_PARMS,
.has_set_parm = TT599_PARMS,
.level_gran = {},
.parm_gran = {},
.ctcss_list = NULL,
.dcs_list = NULL,
.preamp = { 10, RIG_DBLST_END },
.attenuator = { 12, RIG_DBLST_END },
.max_rit = kHz(0),
.max_xit = kHz(0),
.max_ifshift = kHz(0),
.vfo_ops = TT599_VFO_OPS,
.targetable_vfo = RIG_TARGETABLE_FREQ,
.transceive = RIG_TRN_OFF,
.bank_qty = 0,
.chan_desc_sz = 0,
.chan_list = {
{ 1, 100, RIG_MTYPE_MEM, TT599_MEM_CAP },
},
.rx_range_list1 = {
FRQ_RNG_HF(1,TT599_RXMODES, -1,-1,RIG_VFO_N(0),TT599_RXANTS),
FRQ_RNG_6m(1,TT599_RXMODES, -1,-1,RIG_VFO_N(0),TT599_RXANTS),
{kHz(500),MHz(30),TT599_RXMODES,-1,-1,RIG_VFO_N(1),TT599_RXANTS},
RIG_FRNG_END,
},
.tx_range_list1 = {
FRQ_RNG_HF(1,TT599_MODES, W(5),W(100),RIG_VFO_N(0),TT599_ANTS),
FRQ_RNG_6m(1,TT599_MODES, W(5),W(100),RIG_VFO_N(0),TT599_ANTS),
RIG_FRNG_END,
},
.rx_range_list2 = {
FRQ_RNG_HF(2,TT599_RXMODES, -1,-1,RIG_VFO_N(0),TT599_RXANTS),
FRQ_RNG_6m(2,TT599_RXMODES, -1,-1,RIG_VFO_N(0),TT599_RXANTS),
{MHz(5.25),MHz(5.40),TT599_RXMODES,-1,-1,RIG_VFO_N(0),TT599_RXANTS},
{kHz(500),MHz(30),TT599_RXMODES,-1,-1,RIG_VFO_N(1),TT599_RXANTS},
RIG_FRNG_END,
},
.tx_range_list2 = {
FRQ_RNG_HF(2,TT599_MODES, W(5),W(100),RIG_VFO_N(0),TT599_ANTS),
FRQ_RNG_6m(2,TT599_MODES, W(5),W(100),RIG_VFO_N(0),TT599_ANTS),
{MHz(5.25),MHz(5.40),TT599_MODES,W(5),W(100),RIG_VFO_N(0),TT599_ANTS},
RIG_FRNG_END,
},
.tuning_steps = {
{TT599_RXMODES,1},
{TT599_RXMODES,10},
{TT599_RXMODES,100},
{TT599_RXMODES,kHz(1)},
{TT599_RXMODES,kHz(10)},
RIG_TS_END,
},
/* mode/filter list, remember: order matters! */
.filters = {
/* 15kHz, 6kHz, 2.4kHz, 1.0kHz */
/* 9MHz IF filters: 2.4K standard */
/* optional = 300, 600, 1.8k, 6k, 15k */
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB, kHz(2.4)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB, 600},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB, 300},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB, kHz(1.8)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB, kHz(6)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB, 0}, /* 127 filters */
{RIG_MODE_AM, kHz(6)},
{RIG_MODE_FM, kHz(15)},
RIG_FLT_END,
},
.priv = (void*)NULL,
.rig_init = tt565_init,
.rig_cleanup = tt565_cleanup,
.rig_open = tt565_open,
.set_freq = tt565_set_freq,
.get_freq = tt565_get_freq,
.set_vfo = tt565_set_vfo,
.get_vfo = tt565_get_vfo,
.set_mode = tt565_set_mode,
.get_mode = tt565_get_mode,
.set_split_vfo = tt565_set_split_vfo,
.get_split_vfo = tt565_get_split_vfo,
.set_level = tt565_set_level,
.get_level = tt565_get_level,
.set_mem = tt565_set_mem,
.get_mem = tt565_get_mem,
.set_ptt = tt565_set_ptt,
.get_ptt = tt565_get_ptt,
.vfo_op = tt565_vfo_op,
.get_info = tt565_get_info,
.get_func = tt565_get_func,
.set_func = tt565_set_func,
.str_cal = TT599_STR_CAL,
};
/*
* Function definitions below
*/
/** \brief End of command marker */
#define EOM "\015" /* CR */
/** \brief USB Mode */
#define TT565_USB '0'
/** \brief LSB Mode */
#define TT565_LSB '1'
/** \brief CW normal Mode */
#define TT565_CW '2'
/** \brief CW reverse Mode */
#define TT565_CWR '3'
/** \brief AM Mode */
#define TT565_AM '4'
/** \brief FM Mode */
#define TT565_FM '5'
/** \brief RTTY Mode */
#define TT565_RTTY '6'
/** \brief minimum sidetone freq., Hz */
#define TT565_TONE_MIN 300
/** \brief maximum sidetone freq., Hz */
#define TT565_TONE_MAX 1200
/** \brief minimum CW keyer rate, wpm */
#define TT565_CW_MIN 10
/** \brief maximum CW keyer rate, wpm */
#define TT565_CW_MAX 60
/** @} */