1 /*
2  *  Hamlib Kenwood backend - TS-811 description
3  *  Copyright (c) 2000-2004 by Stephane Fillod
4  *
5  *
6  *   This library is free software; you can redistribute it and/or
7  *   modify it under the terms of the GNU Lesser General Public
8  *   License as published by the Free Software Foundation; either
9  *   version 2.1 of the License, or (at your option) any later version.
10  *
11  *   This library is distributed in the hope that it will be useful,
12  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  *   Lesser General Public License for more details.
15  *
16  *   You should have received a copy of the GNU Lesser General Public
17  *   License along with this library; if not, write to the Free Software
18  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  */
21 
22 #ifdef HAVE_CONFIG_H
23 #include "config.h"
24 #endif
25 
26 #include <stdlib.h>
27 
28 #include <hamlib/rig.h>
29 #include "kenwood.h"
30 
31 
32 #define TS811_ALL_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM)
33 
34 
35 #define TS811_LEVEL_ALL (RIG_LEVEL_STRENGTH)
36 
37 #define TS811_VFO (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
38 
39 #define TS811_VFO_OP (RIG_OP_UP|RIG_OP_DOWN)
40 #define TS811_SCAN_OP (RIG_SCAN_VFO)
41 
42 static struct kenwood_priv_caps  ts811_priv_caps  =
43 {
44     .cmdtrm =  EOM_KEN,
45 };
46 
47 /*
48  * vfo defines
49 */
50 #define VFO_A   '0'
51 #define VFO_B   '1'
52 #define VFO_MEM '2'
53 
54 
55 /* Note: The 140/680/711/811 need this to set the VFO on the radio */
56 static int
ts811_set_vfo(RIG * rig,vfo_t vfo)57 ts811_set_vfo(RIG *rig, vfo_t vfo)
58 {
59     char cmdbuf[16];
60     char vfo_function;
61 
62     switch (vfo)
63     {
64     case RIG_VFO_VFO:
65     case RIG_VFO_A: vfo_function = VFO_A; break;
66 
67     case RIG_VFO_B: vfo_function = VFO_B; break;
68 
69     case RIG_VFO_MEM: vfo_function = VFO_MEM; break;
70 
71     case RIG_VFO_CURR: return RIG_OK;
72 
73     default:
74         rig_debug(RIG_DEBUG_ERR, "%s: unsupported VFO %s\n",
75                   __func__, rig_strvfo(vfo));
76         return -RIG_EINVAL;
77     }
78 
79     sprintf(cmdbuf, "FN%c", vfo_function);
80     return kenwood_transaction(rig, cmdbuf, NULL, 0);
81 }
82 
83 /*
84  * ts811 rig capabilities.
85  */
86 const struct rig_caps ts811_caps =
87 {
88     RIG_MODEL(RIG_MODEL_TS811),
89     .model_name = "TS-811",
90     .mfg_name =  "Kenwood",
91     .version =  BACKEND_VER ".0",
92     .copyright =  "LGPL",
93     .status =  RIG_STATUS_UNTESTED,
94     .rig_type =  RIG_TYPE_TRANSCEIVER,
95     .ptt_type =  RIG_PTT_RIG,
96     .dcd_type =  RIG_DCD_RIG,
97     .port_type =  RIG_PORT_SERIAL,
98     .serial_rate_min =  4800,
99     .serial_rate_max =  4800,
100     .serial_data_bits =  8,
101     .serial_stop_bits =  2,
102     .serial_parity =  RIG_PARITY_NONE,
103     .serial_handshake =  RIG_HANDSHAKE_HARDWARE,
104     .write_delay =  0,
105     .post_write_delay =  0,
106     .timeout =  1000,
107     .retry =  10,
108 
109     .has_get_func =  RIG_FUNC_LOCK,
110     .has_set_func =  RIG_FUNC_LOCK,
111     .has_get_level =  TS811_LEVEL_ALL,
112     .has_set_level =  RIG_LEVEL_SET(TS811_LEVEL_ALL),
113     .has_get_parm =  RIG_PARM_NONE,
114     .has_set_parm =  RIG_PARM_NONE,
115     .level_gran =  {},                 /* FIXME: granularity */
116     .parm_gran =  {},
117     .ctcss_list =  kenwood38_ctcss_list,
118     .preamp =   { RIG_DBLST_END, },
119     .attenuator =   { RIG_DBLST_END, },
120     .max_rit =  kHz(9.9),
121     .max_xit =  0,
122     .max_ifshift =  0,
123     .targetable_vfo =  RIG_TARGETABLE_FREQ,
124     .transceive =  RIG_TRN_RIG,
125     .bank_qty =   0,
126     .chan_desc_sz =  0,
127 
128     /* FIXME: split memories, call channel, etc. */
129     .chan_list =  {
130         { 1, 59, RIG_MTYPE_MEM },
131         RIG_CHAN_END,
132     },
133 
134     .rx_range_list1 =  {
135         {MHz(430), MHz(440), TS811_ALL_MODES, -1, -1, TS811_VFO},
136         RIG_FRNG_END,
137     }, /* rx range */
138     .tx_range_list1 =  {
139         {MHz(430), MHz(440), TS811_ALL_MODES, W(5), W(25), TS811_VFO},
140         RIG_FRNG_END,
141     }, /* tx range */
142 
143     .rx_range_list2 =  {
144         {MHz(430), MHz(450), TS811_ALL_MODES, -1, -1, TS811_VFO},
145         RIG_FRNG_END,
146     }, /* rx range */
147     .tx_range_list2 =  {
148         {MHz(430), MHz(450), TS811_ALL_MODES, W(5), W(25), TS811_VFO},
149         RIG_FRNG_END,
150     }, /* tx range */
151 
152 
153     .tuning_steps =  {
154         {TS811_ALL_MODES, 50},
155         {TS811_ALL_MODES, 100},
156         {TS811_ALL_MODES, kHz(1)},
157         {TS811_ALL_MODES, kHz(5)},
158         {TS811_ALL_MODES, kHz(9)},
159         {TS811_ALL_MODES, kHz(10)},
160         {TS811_ALL_MODES, 12500},
161         {TS811_ALL_MODES, kHz(20)},
162         {TS811_ALL_MODES, kHz(25)},
163         {TS811_ALL_MODES, kHz(100)},
164         {TS811_ALL_MODES, MHz(1)},
165         {TS811_ALL_MODES, 0},  /* any tuning step */
166         RIG_TS_END,
167     },
168     /* mode/filter list, remember: order matters! */
169     .filters =  {
170         {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.2)},
171         {RIG_MODE_FM, kHz(12)},
172         RIG_FLT_END,
173     },
174     .priv = (void *)& ts811_priv_caps,
175 
176     .rig_init = kenwood_init,
177     .rig_open = kenwood_open,
178     .rig_close = kenwood_close,
179     .rig_cleanup = kenwood_cleanup,
180     .set_freq =  kenwood_set_freq,
181     .get_freq =  kenwood_get_freq,
182     .set_rit =  kenwood_set_rit,
183     .get_rit =  kenwood_get_rit,
184     .set_mode =  kenwood_set_mode,
185     .get_mode = kenwood_get_mode_if,
186     .set_vfo = ts811_set_vfo,
187     .get_vfo =  kenwood_get_vfo_if,
188     .set_ptt =  kenwood_set_ptt,
189     .set_func = kenwood_set_func,
190     .get_func =  kenwood_get_func,
191     .vfo_op =  kenwood_vfo_op,
192     .set_mem =  kenwood_set_mem,
193     .get_mem = kenwood_get_mem_if,
194     .reset =  kenwood_reset,
195 };
196 
197 /*
198  * Function definitions below
199  */
200 
201