00001 /* 00002 * Hamlib TenTenc backend - TT-565 headers 00003 * Copyright (c) 2004-2006 by Stephane Fillod & Martin Ewing 00004 * 00005 * 00006 * This library is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU Library General Public License as 00008 * published by the Free Software Foundation; either version 2 of 00009 * the License, or (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU Library General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Library General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00019 * 00020 */ 00021 00034 #define TT565_BUFSIZE 16 00035 00043 #define TT565_MEM_CAP { \ 00044 .freq = 1, \ 00045 .mode = 1, \ 00046 .width = 1, \ 00047 } 00048 00049 static int tt565_init(RIG *rig); 00050 static int tt565_open(RIG *rig); 00051 static int tt565_cleanup(RIG *rig); 00052 static int tt565_set_freq(RIG *rig, vfo_t vfo, freq_t freq); 00053 static int tt565_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); 00054 static int tt565_set_vfo(RIG *rig, vfo_t vfo); 00055 static int tt565_get_vfo(RIG *rig, vfo_t *vfo); 00056 static int tt565_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); 00057 static int tt565_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width); 00058 static int tt565_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo); 00059 static int tt565_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo); 00060 static int tt565_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); 00061 static int tt565_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt); 00062 static int tt565_reset(RIG *rig, reset_t reset); 00063 static int tt565_set_mem(RIG * rig, vfo_t vfo, int ch); 00064 static int tt565_get_mem(RIG * rig, vfo_t vfo, int *ch); 00065 static int tt565_vfo_op(RIG * rig, vfo_t vfo, vfo_op_t op); 00066 static int tt565_set_ts(RIG *rig, vfo_t vfo, shortfreq_t ts); 00067 static int tt565_get_ts(RIG *rig, vfo_t vfo, shortfreq_t *ts); 00068 static int tt565_set_rit(RIG * rig, vfo_t vfo, shortfreq_t rit); 00069 static int tt565_get_rit(RIG * rig, vfo_t vfo, shortfreq_t *rit); 00070 static int tt565_set_xit(RIG * rig, vfo_t vfo, shortfreq_t xit); 00071 static int tt565_get_xit(RIG * rig, vfo_t vfo, shortfreq_t *xit); 00072 static int tt565_set_level(RIG * rig, vfo_t vfo, setting_t level, value_t val); 00073 static int tt565_get_level(RIG * rig, vfo_t vfo, setting_t level, value_t *val); 00074 static const char* tt565_get_info(RIG *rig); 00075 static int tt565_send_morse(RIG *rig, vfo_t vfo, const char *msg); 00076 static int tt565_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status); 00077 static int tt565_set_func(RIG *rig, vfo_t vfo, setting_t func, int status); 00078 static int tt565_set_ant(RIG * rig, vfo_t vfo, ant_t ant); 00079 static int tt565_get_ant(RIG *rig, vfo_t vfo, ant_t *ant); 00080 00082 struct tt565_priv_data { 00083 int ch; 00084 vfo_t vfo_curr; 00085 }; 00086 00088 #define TT565_MODES (RIG_MODE_FM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\ 00089 RIG_MODE_RTTY|RIG_MODE_AM) 00090 00091 #define TT565_RXMODES (TT565_MODES) 00092 00094 #define TT565_FUNCS (RIG_FUNC_LOCK|RIG_FUNC_TUNER|RIG_FUNC_VOX|RIG_FUNC_NB) 00095 00097 #define TT565_LEVELS (RIG_LEVEL_RAWSTR| \ 00098 RIG_LEVEL_CWPITCH| \ 00099 RIG_LEVEL_SQL|RIG_LEVEL_IF| \ 00100 RIG_LEVEL_RFPOWER|RIG_LEVEL_KEYSPD| \ 00101 RIG_LEVEL_RF|RIG_LEVEL_NR| \ 00102 RIG_LEVEL_MICGAIN| \ 00103 RIG_LEVEL_AF|RIG_LEVEL_AGC| \ 00104 RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOX|RIG_LEVEL_ANTIVOX| \ 00105 RIG_LEVEL_COMP|RIG_LEVEL_PREAMP| \ 00106 RIG_LEVEL_SWR|RIG_LEVEL_ATT)| \ 00107 RIG_LEVEL_STRENGTH 00108 00110 #define TT565_ANTS (RIG_ANT_1|RIG_ANT_2) 00111 00112 #define TT565_RXANTS (TT565_ANTS|RIG_ANT_3) 00113 00115 #define TT565_PARMS (RIG_PARM_NONE) 00116 00120 #define TT565_VFO (RIG_VFO_A|RIG_VFO_B) 00121 00126 #define TT565_VFO_OPS (RIG_OP_UP|RIG_OP_DOWN|\ 00127 RIG_OP_TO_VFO|RIG_OP_FROM_VFO| \ 00128 RIG_OP_TUNE) 00129 00141 #define TT565_STR_CAL_V1 { 14, { \ 00142 { 1, -47 }, /* padding to match lengths with v2 */ \ 00143 { 10, -47 }, \ 00144 { 13, -42 }, \ 00145 { 18, -37 }, \ 00146 { 22, -32 }, \ 00147 { 27, -27 }, \ 00148 { 32, -18 }, \ 00149 { 37, -11 }, \ 00150 { 42, -4 }, \ 00151 { 47, -1 }, \ 00152 { 52, 10 }, \ 00153 { 57, 20 }, \ 00154 { 65, 30 }, \ 00155 { 74, 40 }, \ 00156 } } 00157 00161 #define TT565_STR_CAL_V2 { 14, { \ 00162 { 10., -48. }, /* S1 = min. indication */ \ 00163 { 24., -42. }, \ 00164 { 38., -36. }, \ 00165 { 47., -30. }, \ 00166 { 61., -24. }, \ 00167 { 70., -18. }, \ 00168 { 79., -12. }, \ 00169 { 84., -6. }, \ 00170 { 94., 0. }, /* S9 */ \ 00171 { 103., 10. }, \ 00172 { 118., 20. }, \ 00173 { 134., 30. }, \ 00174 { 147., 40. }, \ 00175 { 161., 50. }, \ 00176 } } 00177 00178 #undef TT565_TIME /* Define to enable time checks */ 00179 #define TT565_ASCII_FREQ /* select ascii mode for vfo commands */ 00180 /* Note: Binary mode seems buggy at certain freqs like 00181 7015679 < freq < 7015936, etc. Use ascii mode. */ 00182 00192 const struct rig_caps tt565_caps = { 00193 .rig_model = RIG_MODEL_TT565, 00194 .model_name = "TT-565 Orion", 00195 .mfg_name = "Ten-Tec", 00196 .version = "0.3", 00197 .copyright = "LGPL", 00198 .status = RIG_STATUS_BETA, 00199 .rig_type = RIG_TYPE_TRANSCEIVER, 00200 .ptt_type = RIG_PTT_RIG, 00201 .dcd_type = RIG_DCD_NONE, 00202 .port_type = RIG_PORT_SERIAL, 00203 .serial_rate_min = 57600, 00204 .serial_rate_max = 57600, 00205 .serial_data_bits = 8, 00206 .serial_stop_bits = 1, 00207 .serial_parity = RIG_PARITY_NONE, 00208 .serial_handshake = RIG_HANDSHAKE_HARDWARE, 00209 .write_delay = 0, /* no delay between characters written */ 00210 .post_write_delay = 10, /* ms delay between writes DEBUGGING HERE */ 00211 .timeout = 200, /* ms */ 00212 .retry = 4, 00213 00214 .has_get_func = TT565_FUNCS, 00215 .has_set_func = TT565_FUNCS, 00216 .has_get_level = TT565_LEVELS, 00217 .has_set_level = RIG_LEVEL_SET(TT565_LEVELS), 00218 .has_get_parm = TT565_PARMS, 00219 .has_set_parm = TT565_PARMS, 00220 00221 .level_gran = {}, 00222 .parm_gran = {}, 00223 .ctcss_list = NULL, 00224 .dcs_list = NULL, 00225 .preamp = { 20, RIG_DBLST_END }, 00226 .attenuator = { 6, 12, 18, RIG_DBLST_END }, 00227 .max_rit = kHz(8), 00228 .max_xit = kHz(8), 00229 .max_ifshift = kHz(8), 00230 .vfo_ops = TT565_VFO_OPS, 00231 .targetable_vfo = RIG_TARGETABLE_ALL, 00232 .transceive = RIG_TRN_OFF, 00233 .bank_qty = 0, 00234 .chan_desc_sz = 0, 00235 00236 .chan_list = { 00237 { 0, 199, RIG_MTYPE_MEM, TT565_MEM_CAP }, 00238 }, 00239 00240 .rx_range_list1 = { 00241 FRQ_RNG_HF(1,TT565_RXMODES, -1,-1,RIG_VFO_N(0),TT565_RXANTS), 00242 {kHz(500),MHz(30),TT565_RXMODES,-1,-1,RIG_VFO_N(1),TT565_RXANTS}, 00243 RIG_FRNG_END, 00244 }, 00245 .tx_range_list1 = { 00246 FRQ_RNG_HF(1,TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS), 00247 RIG_FRNG_END, 00248 }, 00249 00250 .rx_range_list2 = { 00251 FRQ_RNG_HF(2,TT565_RXMODES, -1,-1,RIG_VFO_N(0),TT565_RXANTS), 00252 {MHz(5.25),MHz(5.40),TT565_RXMODES,-1,-1,RIG_VFO_N(0),TT565_RXANTS}, 00253 {kHz(500),MHz(30),TT565_RXMODES,-1,-1,RIG_VFO_N(1),TT565_RXANTS}, 00254 RIG_FRNG_END, 00255 }, 00256 .tx_range_list2 = { 00257 FRQ_RNG_HF(2,TT565_MODES, W(5),W(100),RIG_VFO_N(0),TT565_ANTS), 00258 {MHz(5.25),MHz(5.40),TT565_MODES,W(5),W(100),RIG_VFO_N(0),TT565_ANTS}, 00259 RIG_FRNG_END, 00260 }, 00261 00262 .tuning_steps = { 00263 {TT565_RXMODES,1}, 00264 {TT565_RXMODES,10}, 00265 {TT565_RXMODES,100}, 00266 {TT565_RXMODES,kHz(1)}, 00267 {TT565_RXMODES,kHz(10)}, 00268 {TT565_RXMODES,kHz(100)}, 00269 RIG_TS_END, 00270 }, 00271 /* mode/filter list, remember: order matters! */ 00272 .filters = { 00273 /* 9MHz IF filters: 15kHz, 6kHz, 2.4kHz, 1.0kHz */ 00274 /* opt: 1.8kHz, 500Hz, 250Hz */ 00275 {RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY, kHz(2.4)}, 00276 {RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY, 100}, 00277 {RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY, kHz(6)}, 00278 {RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY, 0}, /* 590 filters */ 00279 {RIG_MODE_AM, kHz(6)}, 00280 {RIG_MODE_AM, kHz(4)}, 00281 {RIG_MODE_FM, kHz(15)}, 00282 RIG_FLT_END, 00283 }, 00284 .priv = (void*)NULL, 00285 00286 .rig_init = tt565_init, 00287 .rig_cleanup = tt565_cleanup, 00288 .rig_open = tt565_open, 00289 00290 .set_freq = tt565_set_freq, 00291 .get_freq = tt565_get_freq, 00292 .set_vfo = tt565_set_vfo, 00293 .get_vfo = tt565_get_vfo, 00294 .set_mode = tt565_set_mode, 00295 .get_mode = tt565_get_mode, 00296 .set_split_vfo = tt565_set_split_vfo, 00297 .get_split_vfo = tt565_get_split_vfo, 00298 .set_level = tt565_set_level, 00299 .get_level = tt565_get_level, 00300 .set_mem = tt565_set_mem, 00301 .get_mem = tt565_get_mem, 00302 .set_ptt = tt565_set_ptt, 00303 .get_ptt = tt565_get_ptt, 00304 .vfo_op = tt565_vfo_op, 00305 .set_ts = tt565_set_ts, 00306 .get_ts = tt565_get_ts, 00307 .set_rit = tt565_set_rit, 00308 .get_rit = tt565_get_rit, 00309 .set_xit = tt565_set_xit, 00310 .get_xit = tt565_get_xit, 00311 .reset = tt565_reset, 00312 .get_info = tt565_get_info, 00313 .send_morse = tt565_send_morse, 00314 .get_func = tt565_get_func, 00315 .set_func = tt565_set_func, 00316 .get_ant = tt565_get_ant, 00317 .set_ant = tt565_set_ant, 00318 00319 /* V2 is default. S-Meter cal table may be changed if V1 firmware detected. */ 00320 .str_cal = TT565_STR_CAL_V2, 00321 }; 00322 00323 /* 00324 * Function definitions below 00325 */ 00326 00328 #define EOM "\015" /* CR */ 00329 00330 #define TT565_USB '0' 00331 00332 #define TT565_LSB '1' 00333 00334 #define TT565_CW '2' 00335 00336 #define TT565_CWR '3' 00337 00338 #define TT565_AM '4' 00339 00340 #define TT565_FM '5' 00341 00342 #define TT565_RTTY '6' 00343 00345 #define TT565_TONE_MIN 300 00346 00347 #define TT565_TONE_MAX 1200 00348 00350 #define TT565_CW_MIN 10 00351 00352 #define TT565_CW_MAX 60 00353
Hamlib documentation for version 1.2.8 -- Mon Dec 15 18:03:30 2008
Project page: http://hamlib.org