mirror of
https://github.com/Hamlib/Hamlib.git
synced 2024-09-21 18:37:18 +00:00
Added working TS-2000 files. There are some changes left out but this
is the minimum I could commit and have a functional rig. The cost is that I've broken kylix and others that duplicate rig.h. I'm in the process of repairing the damage. Please be patient. I hope a day or so, but am asking for up to a week. E-mail me about *anything* you find broken. Kylix (and similar) is (are) known to not work. git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1083 7ae35d74-ebe9-4afe-98af-79ac388436b8
This commit is contained in:
parent
9820f82939
commit
7212a11aa8
1282
include/hamlib/rig.h
1282
include/hamlib/rig.h
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,9 @@
|
||||
TSSRCLIST = ts850.c ts870s.c ts570.c ts450s.c ts950.c ts50s.c \
|
||||
ts790.c thd7.c thf7.c
|
||||
ts790.c thd7.c thf7.c ts2000.c
|
||||
|
||||
lib_LTLIBRARIES = libhamlib-kenwood.la
|
||||
libhamlib_kenwood_la_SOURCES = $(TSSRCLIST) kenwood.c th.c ts2k.c
|
||||
libhamlib_kenwood_la_LDFLAGS = -no-undefined -module -version-info 0:0:0
|
||||
libhamlib_kenwood_la_LIBADD = ../src/libhamlib.la
|
||||
|
||||
noinst_HEADERS = kenwood.h th.h ts2k.h ts2000.h
|
||||
noinst_HEADERS = kenwood.h th.h ts2k.h
|
||||
|
147
kenwood/ts2k.c
147
kenwood/ts2k.c
@ -2,7 +2,7 @@
|
||||
* Hamlib Kenwood backend - TS2000 description
|
||||
* Copyright (c) 2000-2002 by Stephane Fillod
|
||||
*
|
||||
* $Id: ts2k.c,v 1.4 2002-06-29 09:54:50 dedmons Exp $
|
||||
* $Id: ts2k.c,v 1.5 2002-06-30 10:17:03 dedmons 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
|
||||
@ -44,9 +44,7 @@
|
||||
|
||||
#include <ctype.h>
|
||||
#include <hamlib/rig.h>
|
||||
/* we shouldn't depend on kenwood right now */
|
||||
//#include "kenwood.h"
|
||||
#include "ts2000.h"
|
||||
#include "kenwood.h"
|
||||
#include "ts2k.h"
|
||||
|
||||
|
||||
@ -65,7 +63,7 @@
|
||||
* Hamlib Kenwood backend - main file
|
||||
* Copyright (c) 2000-2002 by Stephane Fillod
|
||||
*
|
||||
* $Id: ts2k.c,v 1.4 2002-06-29 09:54:50 dedmons Exp $
|
||||
* $Id: ts2k.c,v 1.5 2002-06-30 10:17:03 dedmons Exp $
|
||||
*/
|
||||
|
||||
|
||||
@ -157,7 +155,7 @@ const int ts2k_ctcss_list[] = {
|
||||
670, 719, 744, 770, 797, 825, 854, 885, 915, 948,
|
||||
974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273, 1318,
|
||||
1365, 1413, 1462, 1514, 1567, 1622, 1679, 1738, 1799, 1862,
|
||||
1928, 2035, 2107, 2181, 2257, 2336, 2418, 2503, 17500,
|
||||
1928, 2035, 2107, 2181, 2257, 2336, 2418, 2503, // 17500,
|
||||
/* Note: 17500 is not available as ctcss, only tone. --kd7eni */
|
||||
0,
|
||||
};
|
||||
@ -197,9 +195,9 @@ ts2k_transaction(RIG * rig, const char *cmdstr, int cmd_len,
|
||||
int retval;
|
||||
const char *cmdtrm = EOM_KEN; /* Default Command/Reply termination char */
|
||||
int retry_read = 0;
|
||||
// char *errtxt;
|
||||
char *errtxt;
|
||||
|
||||
#define MAX_RETRY_READ 32
|
||||
#define MAX_RETRY_READ 5
|
||||
|
||||
rs = &rig->state;
|
||||
rs->hold_decode = 1;
|
||||
@ -357,19 +355,19 @@ int ts2k_set_vfo(RIG * rig, vfo_t vfo)
|
||||
switch (vfo) {
|
||||
case RIG_VFO_A:
|
||||
case RIG_VFO_B:
|
||||
// case RIG_VFO_AB: // split
|
||||
// case RIG_VFO_BA:
|
||||
// case RIG_VFO_SAT: // FIXME: Not even close to correct
|
||||
case RIG_VFO_AB: // split
|
||||
case RIG_VFO_BA:
|
||||
case RIG_CTRL_SAT: // FIXME: Not even close to correct
|
||||
case RIG_VFO_MAIN:
|
||||
// case RIG_VFO_MEM_A:
|
||||
// case RIG_VFO_CALL_A:
|
||||
case RIG_VFO_MEM_A:
|
||||
case RIG_VFO_CALL_A:
|
||||
ctrl = TS2K_CTRL_ON_MAIN; // FIXME : these are independent!
|
||||
ptt = TS2K_PTT_ON_MAIN;
|
||||
break;
|
||||
case RIG_VFO_C:
|
||||
case RIG_VFO_SUB:
|
||||
// case RIG_VFO_MEM_C:
|
||||
// case RIG_VFO_CALL_C:
|
||||
case RIG_VFO_MEM_C:
|
||||
case RIG_VFO_CALL_C:
|
||||
ctrl = TS2K_CTRL_ON_SUB;
|
||||
ptt = TS2K_PTT_ON_SUB;
|
||||
break;
|
||||
@ -388,9 +386,9 @@ int ts2k_set_vfo(RIG * rig, vfo_t vfo)
|
||||
|| (vfo == RIG_VFO_MAIN)
|
||||
|| (vfo == RIG_VFO_CURR)
|
||||
|| (vfo == RIG_VFO_VFO)
|
||||
|| (vfo == RIG_VFO_ALL) // yea, I know
|
||||
// || (vfo == RIG_VFO_ALL) // yea, I know
|
||||
/* bit mask checks */
|
||||
// || (vfo & RIG_CTRL_SAT) // "fr...;", "ft...;" won't do!
|
||||
|| (vfo & RIG_CTRL_SAT) // "fr...;", "ft...;" won't do!
|
||||
;
|
||||
|
||||
rig_debug(RIG_DEBUG_ERR, __FUNCTION__ \
|
||||
@ -408,16 +406,16 @@ int ts2k_set_vfo(RIG * rig, vfo_t vfo)
|
||||
|
||||
// RX Active Tuning
|
||||
switch (vfo) {
|
||||
//ouch! case RIG_VFO_AB: // TX is opposite
|
||||
case RIG_VFO_AB: // TX is opposite
|
||||
case RIG_VFO_A:
|
||||
case RIG_VFO_C:
|
||||
vfo_function = '0';
|
||||
break;
|
||||
//ouch! case RIG_VFO_BA: // TX is opposite
|
||||
case RIG_VFO_BA: // TX is opposite
|
||||
case RIG_VFO_B:
|
||||
vfo_function = '1';
|
||||
break;
|
||||
/* case RIG_VFO_MEM_A:
|
||||
case RIG_VFO_MEM_A:
|
||||
case RIG_VFO_MEM_C:
|
||||
vfo_function = '2';
|
||||
break;
|
||||
@ -425,7 +423,7 @@ int ts2k_set_vfo(RIG * rig, vfo_t vfo)
|
||||
case RIG_VFO_CALL_C:
|
||||
vfo_function = '3';
|
||||
break;
|
||||
ouch! */
|
||||
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR, __FUNCTION__
|
||||
": unsupported VFO %u\n", vfo);
|
||||
@ -447,14 +445,14 @@ ouch! */
|
||||
switch (vfo) {
|
||||
case RIG_VFO_A:
|
||||
case RIG_VFO_C:
|
||||
//ouch! case RIG_VFO_BA: // opposite of above
|
||||
case RIG_VFO_BA: // opposite of above
|
||||
vfo_function = '0';
|
||||
break;
|
||||
//ouch! case RIG_VFO_AB: // opposite of above
|
||||
case RIG_VFO_AB: // opposite of above
|
||||
case RIG_VFO_B:
|
||||
vfo_function = '1';
|
||||
break;
|
||||
/* case RIG_VFO_MEM_A:
|
||||
case RIG_VFO_MEM_A:
|
||||
case RIG_VFO_MEM_C: // FIXME: need to handle vfo/mem split
|
||||
vfo_function = '2';
|
||||
break;
|
||||
@ -462,7 +460,7 @@ ouch! */
|
||||
case RIG_VFO_CALL_C:
|
||||
vfo_function = '3';
|
||||
break;
|
||||
"I'll be back!" ouch!*/
|
||||
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR, __FUNCTION__
|
||||
": unsupported VFO %u\n",
|
||||
@ -483,8 +481,7 @@ ouch! */
|
||||
return retval;
|
||||
|
||||
} else { // Check further for special modes not using "fr...;", "ft...;"
|
||||
// if(vfo & RIG_CTRL_SAT) { // test the SAT bit
|
||||
if(vfo & 0) { // test the SAT bit
|
||||
if(vfo & RIG_CTRL_SAT) { // test the SAT bit
|
||||
retval = ts2k_sat_on(rig, vfo);
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
@ -515,8 +512,8 @@ int ts2k_sat_on(RIG *rig, vfo_t vfo)
|
||||
|
||||
acklen = 20;
|
||||
|
||||
// if(!(vfo & RIG_CTRL_SAT))
|
||||
// return -RIG_EINTERNAL; // All right. Who called us!?
|
||||
if(!(vfo & RIG_CTRL_SAT))
|
||||
return -RIG_EINTERNAL; // All right. Who called us!?
|
||||
|
||||
// cmdlen = sprintf(cmd, "sa%07u;", 0); // Initial string to modify
|
||||
acklen = ts2k_transaction(rig, "sa;", 3, ack, &acklen);
|
||||
@ -544,15 +541,13 @@ int ts2k_sat_on(RIG *rig, vfo_t vfo)
|
||||
// FIXME: Add Sat Trace here!
|
||||
|
||||
// Trace REV
|
||||
// if(vfo & RIG_CTRL_REV)
|
||||
if(vfo & 0)
|
||||
if(vfo & RIG_CTRL_REV)
|
||||
ack[7] = '1'; // sat trace REV
|
||||
else
|
||||
ack[7] = '0';
|
||||
|
||||
// CTRL to main or sub?
|
||||
// if ((vfo & RIG_VFO_CTRL) && (vfo & RIG_CTRL_SUB))
|
||||
if ((vfo & 0) && (vfo & 0)) // ouch!
|
||||
if ((vfo & RIG_VFO_CTRL) && (vfo & RIG_CTRL_SUB))
|
||||
ack[5] = '1'; // sat CTRL on sub
|
||||
else
|
||||
ack[5] = '0'; // sat CTRL on main
|
||||
@ -621,9 +616,7 @@ int ts2k_get_vfo(RIG * rig, vfo_t * vfo)
|
||||
rig_debug(RIG_DEBUG_ERR, __FUNCTION__": SAT=%s\n", vfobuf);
|
||||
if(vfobuf[2] == '1') {
|
||||
/* yes, we're in satellite mode! */
|
||||
// *vfo = RIG_CTRL_SAT; // FIXME: set the rest!
|
||||
// we know what it is, we're just not tellin'
|
||||
*vfo = RIG_VFO_CURR; // FIXME: set the rest!
|
||||
*vfo = RIG_CTRL_SAT; // FIXME: set the rest!
|
||||
/* TODO: write get_sat() and let it do the work */
|
||||
return RIG_OK;
|
||||
}
|
||||
@ -674,7 +667,7 @@ int ts2k_get_vfo(RIG * rig, vfo_t * vfo)
|
||||
// only valid on Main--no checks required.
|
||||
*vfo = RIG_VFO_B;
|
||||
break;
|
||||
/* case '2':
|
||||
case '2':
|
||||
if (ctrl_ptt[3] == '0') // we use CTRL as Active Transceiver.
|
||||
*vfo = RIG_VFO_MEM_A;
|
||||
else if (ctrl_ptt[3] == '1')
|
||||
@ -690,7 +683,7 @@ int ts2k_get_vfo(RIG * rig, vfo_t * vfo)
|
||||
else
|
||||
return -RIG_EPROTO;
|
||||
break;
|
||||
sniff, sniff*/
|
||||
|
||||
default: // Different or newer rig types...
|
||||
rig_debug(RIG_DEBUG_ERR,
|
||||
"ts2k_get_vfo: unsupported VFO %c\n",
|
||||
@ -699,8 +692,8 @@ sniff, sniff*/
|
||||
|
||||
} // end switch
|
||||
} else { // end rx == tx; start split checks.
|
||||
rig_debug(RIG_DEBUG_ERR, "ts2k_get_vfo: Split gone.\n");
|
||||
/*
|
||||
rig_debug(RIG_DEBUG_ERR, "ts2k_get_vfo: Split.\n");
|
||||
|
||||
if (r_vfo == '0' && vfobuf[2] == '1')
|
||||
*vfo = RIG_VFO_AB;
|
||||
else if (r_vfo == '1' && vfobuf[2] == '0')
|
||||
@ -711,7 +704,6 @@ sniff, sniff*/
|
||||
":FIXME: vfo<->mem split! -kd7eni!\n");
|
||||
return -RIG_EPROTO;
|
||||
}
|
||||
ouch!*/
|
||||
}
|
||||
|
||||
return RIG_OK;
|
||||
@ -2269,9 +2261,9 @@ int ts2k_get_rptr_shift(RIG * rig, vfo_t vfo, rptr_shift_t * rptr_shift)
|
||||
case '2':
|
||||
*rptr_shift = RIG_RPT_SHIFT_PLUS;
|
||||
break;
|
||||
// case '3':
|
||||
// *rptr_shift = RIG_RPT_SHIFT_1750;
|
||||
// break;
|
||||
case '3':
|
||||
*rptr_shift = RIG_RPT_SHIFT_1750;
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL;
|
||||
@ -2409,7 +2401,7 @@ int ts2k_set_split_freq(RIG * rig, vfo_t vfo, freq_t tx_freq)
|
||||
* send a ' ' or you'll get a "?;" response. Always
|
||||
* set memory with (e.g.) "mc1020;". --kd7eni
|
||||
*/
|
||||
int ts2k_get_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
int ts2k_get_channel(RIG * rig, channel_t *chan)
|
||||
{
|
||||
// channel_t tch; // needed?
|
||||
char rxtx, mrtxt[2][60], mrcmd[15], ack[60], tmp[20];
|
||||
@ -2427,10 +2419,8 @@ int ts2k_get_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
}
|
||||
|
||||
// get needed info if rig's mem pointers used
|
||||
|
||||
// if( ( vfo == RIG_VFO_MEM_A
|
||||
// || vfo == RIG_VFO_MEM_C ) ) {
|
||||
if( vfo == RIG_VFO_MEM ) // which one! (tmp I hope!)
|
||||
if( ( vfo == RIG_VFO_MEM_A
|
||||
|| vfo == RIG_VFO_MEM_C ) ) {
|
||||
rig_debug(RIG_DEBUG_ERR, __FUNCTION__": using rig's ptr\n");
|
||||
retval = ts2k_get_vfo(rig, &curr_vfo);
|
||||
CHKERR(retval);
|
||||
@ -2438,7 +2428,6 @@ int ts2k_get_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
CHKERR(retval);
|
||||
chan->channel_num = curr_mem;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
mrtxt_len = ack_len = 60;
|
||||
@ -2495,7 +2484,7 @@ int ts2k_get_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
// At any rate, it's currently unused.
|
||||
chan->bank_num = 0; // I merge the two--do not use! --Dale
|
||||
|
||||
//ouch! chan->lock = int_n(tmp, &mrtxt[0][18], 1);
|
||||
chan->lock = int_n(tmp, &mrtxt[0][18], 1);
|
||||
chan->freq = int_n(tmp, &mrtxt[0][06], 11);
|
||||
chan->mode = ts2k_mode_list[ int_n(tmp, &mrtxt[0][17], 1) ];
|
||||
if(chan->mode == RIG_MODE_AM || chan->tx_mode == RIG_MODE_FM)
|
||||
@ -2529,7 +2518,7 @@ int ts2k_get_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
chan->ctcss_sql = int_n(tmp, &mrtxt[1][19], 1);
|
||||
chan->dcs_code = ts2k_dcs_list[ int_n(tmp, &mrtxt[1][24], 3) ];
|
||||
chan->dcs_sql = int_n(tmp, &mrtxt[1][19], 1);
|
||||
//ouch! chan->scan_group = int_n(tmp, &mrtxt[1][40], 1);
|
||||
chan->scan_group = int_n(tmp, &mrtxt[1][40], 1);
|
||||
// chan->flags = curr_vfo; // n/a
|
||||
// FIXME : The following may have trailing garbage
|
||||
strncpy( chan->channel_desc, &mrtxt[1][41], 8);
|
||||
@ -2537,10 +2526,10 @@ int ts2k_get_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
|
||||
#ifdef _USEVFO
|
||||
// if curr mem is changed at top, this'll restore it
|
||||
/* if( ( vfo == RIG_VFO_MEM_A
|
||||
if( ( vfo == RIG_VFO_MEM_A
|
||||
|| vfo == RIG_VFO_MEM_C ) ) {
|
||||
}
|
||||
now we're in the dark, ouch!*/
|
||||
|
||||
rig_debug(RIG_DEBUG_ERR, __FUNCTION__": restoring mem=%i\n", curr_mem);
|
||||
retval = ts2k_set_mem(rig, curr_vfo, curr_mem);
|
||||
CHKERR(retval);
|
||||
@ -2565,9 +2554,9 @@ now we're in the dark, ouch!*/
|
||||
* for the design document and hopefully I'll know which way
|
||||
* to go when things aren't the way they should be. We'll
|
||||
* see how things go.
|
||||
* --Dale kd7eni
|
||||
* --Dale kd7e
|
||||
*/
|
||||
int ts2k_set_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
int ts2k_set_channel(RIG * rig, const channel_t *chan)
|
||||
{
|
||||
char mrtxt[2][60], mrcmd[10], ack[60];
|
||||
int retval, i, j, mr_len[2], ack_len;
|
||||
@ -2618,7 +2607,7 @@ int ts2k_set_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
break;
|
||||
}
|
||||
p5 = (unsigned int) j; // FIXME: either not found, or last!
|
||||
//ouch! p6 = (unsigned int) chan->lock;
|
||||
p6 = (unsigned int) chan->lock;
|
||||
p7 = 0; // FIXME: to lazy to sort this out right now
|
||||
p8 = 0; // " " " " "
|
||||
p9 = 0; // " " " " "
|
||||
@ -2627,7 +2616,7 @@ int ts2k_set_channel(RIG * rig, vfo_t vfo, channel_t *chan)
|
||||
p12 = 0; // " " " " "
|
||||
p13 = 0; // " " " " "
|
||||
p14 = 0; // " " " " "
|
||||
//ouch! p15 = (unsigned int) chan->scan_group;
|
||||
p15 = (unsigned int) chan->scan_group;
|
||||
p16 = &(chan->channel_desc[0]);
|
||||
|
||||
mr_len[i] = sprintf( &(mrtxt[i][0]),
|
||||
@ -2667,19 +2656,19 @@ int ts2k_vfo_ctrl(RIG * rig, vfo_t vfo)
|
||||
switch (vfo) {
|
||||
case RIG_VFO_A:
|
||||
case RIG_VFO_B:
|
||||
//ouch! case RIG_VFO_AB: // split
|
||||
//ouch! case RIG_VFO_BA:
|
||||
//ouch! case RIG_VFO_SAT: // Should be PTT on main CTRL on sub (?)
|
||||
case RIG_VFO_AB: // split
|
||||
case RIG_VFO_BA:
|
||||
case RIG_CTRL_SAT: // Should be PTT on main CTRL on sub (?)
|
||||
case RIG_VFO_MAIN:
|
||||
//ouch! case RIG_VFO_MEM_A:
|
||||
//ouch! case RIG_VFO_CALL_A:
|
||||
case RIG_VFO_MEM_A:
|
||||
case RIG_VFO_CALL_A:
|
||||
ctrl = TS2K_CTRL_ON_MAIN; // FIXME : these are independent!
|
||||
ptt = TS2K_PTT_ON_MAIN;
|
||||
break;
|
||||
case RIG_VFO_C:
|
||||
case RIG_VFO_SUB:
|
||||
//ouch! case RIG_VFO_MEM_C:
|
||||
//ouch! case RIG_VFO_CALL_C:
|
||||
case RIG_VFO_MEM_C:
|
||||
case RIG_VFO_CALL_C:
|
||||
ctrl = TS2K_CTRL_ON_SUB;
|
||||
ptt = TS2K_PTT_ON_SUB;
|
||||
break;
|
||||
@ -2742,7 +2731,7 @@ int ts2k_set_split_mode(RIG * rig,
|
||||
vfo_t vfo, rmode_t txmode, pbwidth_t txwidth)
|
||||
{
|
||||
vfo_t vtmp;
|
||||
/*
|
||||
|
||||
switch(vfo) {
|
||||
case RIG_VFO_AB:
|
||||
vtmp = RIG_VFO_B; break;
|
||||
@ -2751,8 +2740,6 @@ int ts2k_set_split_mode(RIG * rig,
|
||||
default:
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
rig.c, knows all, sees all. ouch!*/
|
||||
vtmp = vfo;
|
||||
return ts2k_set_mode(rig, vtmp, txmode, txwidth);
|
||||
}
|
||||
|
||||
@ -2760,7 +2747,6 @@ int ts2k_get_split_mode(RIG *rig,
|
||||
vfo_t vfo, rmode_t *txmode, pbwidth_t *txwidth)
|
||||
{
|
||||
vfo_t vtmp;
|
||||
/*
|
||||
switch(vfo) {
|
||||
case RIG_VFO_AB:
|
||||
vtmp = RIG_VFO_B; break;
|
||||
@ -2769,8 +2755,6 @@ int ts2k_get_split_mode(RIG *rig,
|
||||
default:
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
rig.c, knows all, sees all. ouch!*/
|
||||
vtmp = vfo;
|
||||
return ts2k_get_mode(rig, vtmp, txmode, txwidth);
|
||||
}
|
||||
|
||||
@ -2798,11 +2782,11 @@ int ts2k_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch)
|
||||
// set proper vfo first (already done?)
|
||||
switch(v) {
|
||||
case RIG_VFO_MEM: // Currently selected Main/Sub
|
||||
//ouch! case RIG_VFO_MEM_A: // Main
|
||||
//ouch! case RIG_VFO_MEM_C: // Sub
|
||||
case RIG_VFO_MEM_A: // Main
|
||||
case RIG_VFO_MEM_C: // Sub
|
||||
// FIXME: we should set the group and fall through
|
||||
/* nobreak */
|
||||
// case RIG_VFO_VFO: // Currently selected Main/Sub???
|
||||
// case RIG_VFO_VFO: // Currently selected Main/Sub
|
||||
case RIG_VFO_A: // Main
|
||||
case RIG_VFO_B: // Main
|
||||
case RIG_VFO_C: // Sub
|
||||
@ -2810,9 +2794,8 @@ int ts2k_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch)
|
||||
CHKERR(retval);
|
||||
break;
|
||||
|
||||
//ouch! case RIG_VFO_CALL_A:
|
||||
//ouch! case RIG_VFO_CALL_C:
|
||||
// Can't feel a thing!
|
||||
case RIG_VFO_CALL_A: //
|
||||
case RIG_VFO_CALL_C:
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR, __FUNCTION__": vfo 'defaulted'\n");
|
||||
return -RIG_ENIMPL; // unimplemented, but valid scan
|
||||
@ -2891,8 +2874,8 @@ int ts2k_get_parm(RIG *rig, setting_t parm, value_t *val)
|
||||
cmdlen = sprintf(cmd, "ex0120000;"); break;
|
||||
case RIG_PARM_BACKLIGHT:
|
||||
cmdlen = sprintf(cmd, "ex0000000;"); break;
|
||||
// case RIG_PARM_KEYLIGHT:
|
||||
//ouch! cmdlen = sprintf(cmd, "ex0010000;"); break;
|
||||
case RIG_PARM_KEYLIGHT:
|
||||
cmdlen = sprintf(cmd, "ex0010000;"); break;
|
||||
case RIG_PARM_APO:
|
||||
cmdlen = sprintf(cmd, "ex0570000;"); break;
|
||||
case RIG_PARM_ANN:
|
||||
@ -2910,7 +2893,7 @@ int ts2k_get_parm(RIG *rig, setting_t parm, value_t *val)
|
||||
val->i = (int)(ack[9] - '0');
|
||||
break;
|
||||
case RIG_PARM_BACKLIGHT:
|
||||
//ouch! case RIG_PARM_KEYLIGHT:
|
||||
case RIG_PARM_KEYLIGHT:
|
||||
val->f = (float)(ack[9] - '0');
|
||||
break;
|
||||
case RIG_PARM_APO:
|
||||
@ -2945,10 +2928,10 @@ int ts2k_set_parm(RIG *rig, setting_t parm, value_t val)
|
||||
(int) ((val.f>1.0)? 4.0 : val.f*4.0) );
|
||||
break;
|
||||
|
||||
/* case RIG_PARM_KEYLIGHT:
|
||||
case RIG_PARM_KEYLIGHT:
|
||||
cmdlen = sprintf(cmd, "ex0010000%01u;", (val.i==0)? 0: 1);
|
||||
break;
|
||||
ouch!*/
|
||||
|
||||
case RIG_PARM_ANN:
|
||||
return -RIG_ENIMPL;
|
||||
|
||||
|
129
kenwood/ts2k.h
129
kenwood/ts2k.h
@ -2,7 +2,7 @@
|
||||
* Hamlib TS2000 backend - main header
|
||||
* Copyright (c) 2000-2002 by Stephane Fillod
|
||||
*
|
||||
* $Id: ts2k.h,v 1.2 2002-06-29 09:54:50 dedmons Exp $
|
||||
* $Id: ts2k.h,v 1.3 2002-06-30 10:17:03 dedmons 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
|
||||
@ -125,8 +125,8 @@ int ts2k_set_trn(RIG *rig, int trn);
|
||||
int ts2k_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch);
|
||||
int ts2k_scan_on(RIG *rig, char ch);
|
||||
int ts2k_scan_off(RIG *rig);
|
||||
int ts2k_get_channel(RIG *rig, vfo_t vfo, channel_t *chan);
|
||||
int ts2k_set_channel(RIG *rig, vfo_t vfo, channel_t *chan);
|
||||
int ts2k_get_channel(RIG *rig, channel_t *chan);
|
||||
int ts2k_set_channel(RIG *rig, const channel_t *chan);
|
||||
char *ts2k_get_ctrl(RIG *rig);
|
||||
int ts2k_set_ctrl(RIG *rig, int ptt, int ctrl);
|
||||
int ts2k_vfo_ctrl(RIG *rig, vfo_t vfo);
|
||||
@ -172,127 +172,4 @@ extern const struct rig_caps ts2000_caps;
|
||||
extern BACKEND_EXPORT(int) initrigs_ts2k(void *be_handle);
|
||||
extern BACKEND_EXPORT(rig_model_t) proberigs_ts2k(port_t *port);
|
||||
|
||||
|
||||
#endif /* _TS2000_H */
|
||||
|
||||
|
||||
/************** Temporary local copy of rig.h *************************/
|
||||
|
||||
|
||||
|
||||
#ifndef _RIG_H_TEMP
|
||||
#define _RIG_H_TEMP 1
|
||||
|
||||
#define RIG_RPT_SHIFT_1750 (RIG_RPT_SHIFT_PLUS + 1)
|
||||
|
||||
/*
|
||||
* I've cleaned up the VFO definition to make it easier to change
|
||||
* when the MoonMelter is finally released. Essentially, I've
|
||||
* done nothing. --Dale :)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Upper segment: "rig Major"
|
||||
* Lower segment: "VFO minor"
|
||||
*
|
||||
* MSB LSB
|
||||
* N n+1 n 0
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | | |
|
||||
* Rig VFO
|
||||
* Major minor
|
||||
*/
|
||||
//typedef unsigned int vfo_t;
|
||||
|
||||
#define BIT(a) ( ((vfo_t) 1) << (a))
|
||||
//#define BIT(a) (1L << (a))
|
||||
|
||||
#define RIG_MINOR 3
|
||||
/* M=Major, m=minor */
|
||||
#define RIG_SET_VFO(M,m) ((vfo_t) ( ((M) << (RIG_MINOR+1)) | (m) ))
|
||||
/* Note: prior definition exibited exponential growth in bit count */
|
||||
|
||||
#define RIG_VFO_RESERVED RIG_SET_VFO(0, BIT(0))
|
||||
#define RIG_VFO_RESERVED2 RIG_SET_VFO(0, BIT(1))
|
||||
|
||||
/* VFO Minor */
|
||||
#define RIG_VFO1 RIG_SET_VFO(0, BIT(2))
|
||||
#define RIG_VFO2 RIG_SET_VFO(0, BIT(3))
|
||||
#define RIG_VFO3 RIG_SET_VFO(0, BIT(4))
|
||||
/* |
|
||||
* RIG_MINOR = n :== MAX >-----------------'
|
||||
*/
|
||||
|
||||
/* Rig Major */
|
||||
#define RIG_CTRL_MAIN RIG_SET_VFO(BIT(0), 0)
|
||||
#define RIG_CTRL_SUB RIG_SET_VFO(BIT(1), 0)
|
||||
#define RIG_CTRL_MEM RIG_SET_VFO(BIT(2), 0)
|
||||
|
||||
/* Standard VFO's for common use */
|
||||
#define RIG_VFO_A (RIG_CTRL_MAIN | RIG_VFO1)
|
||||
#define RIG_VFO_B (RIG_CTRL_MAIN | RIG_VFO2)
|
||||
#define RIG_VFO_C (RIG_CTRL_SUB | RIG_VFO1)
|
||||
#define RIG_VFO_MEM RIG_CTRL_MEM
|
||||
/* VFOC should be VFO3 because ambiguities may arise someday */
|
||||
|
||||
/* VFO stuff that may be handy. */
|
||||
#define RIG_VFO_MASK (RIG_VFO1 | RIG_VFO2 | RIG_VFO3)
|
||||
#define RIG_CTRL_MASK (RIG_CTRL_MAIN | RIG_CTRL_SUB | RIG_CTRL_MEM)
|
||||
#define RIG_VFO_VALID (RIG_CTRL_MASK | RIG_VFO_MASK)
|
||||
#define RIG_VFO_TEST(v) (((v) & RIG_VFO_VALID) != 0)
|
||||
|
||||
/* The following are for compatibility with existing code! */
|
||||
#define RIG_VFO_NONE (~RIG_VFO_VALID)
|
||||
#define RIG_VFO_CURR RIG_SET_VFO(0,0)
|
||||
#define RIG_VFO_ALL RIG_VFO_MASK
|
||||
#define RIG_VFO_MAIN RIG_CTRL_MAIN
|
||||
#define RIG_VFO_SUB RIG_CTRL_SUB
|
||||
#define RIG_VFO_VFO (RIG_VFO_VALID & ~RIG_VFO_MEM)
|
||||
/*
|
||||
* Ahhh. Now I can live happy and die free! --Dale
|
||||
*/
|
||||
|
||||
#define RIG_SCAN_VFO (1L<<4) /* most basic of scans! */
|
||||
|
||||
#define RIG_SCAN_ALL (RIG_SCAN_STOP | RIG_SCAN_MEM | RIG_SCAN_SLCT \
|
||||
| RIG_SCAN_PRIO | RIG_SCAN_PROG | RIG_SCAN_DELTA \
|
||||
| RIG_SCAN_VFO)
|
||||
#define RIG_SCAN_EXCLUDE(e) (RIG_SCAN_ALL & ~(e))
|
||||
|
||||
/* There's no reason for every back-end to write huge lists. The guys
|
||||
* with about 50% features still have some work. Someone that knows
|
||||
* many rigs should make RIG_LEVEL_COMMON, RIG_FUNC_COMMON --Dale
|
||||
*/
|
||||
#define RIG_LEVEL_ALL (RIG_LEVEL_PREAMP | RIG_LEVEL_ATT | RIG_LEVEL_VOX \
|
||||
| RIG_LEVEL_AF | RIG_LEVEL_RF | RIG_LEVEL_SQL \
|
||||
| RIG_LEVEL_IF | RIG_LEVEL_APF | RIG_LEVEL_NR | RIG_LEVEL_PBT_IN \
|
||||
| RIG_LEVEL_PBT_OUT | RIG_LEVEL_CWPITCH | RIG_LEVEL_RFPOWER \
|
||||
| RIG_LEVEL_MICGAIN | RIG_LEVEL_KEYSPD | RIG_LEVEL_NOTCHF \
|
||||
| RIG_LEVEL_COMP | RIG_LEVEL_AGC | RIG_LEVEL_BKINDL \
|
||||
| RIG_LEVEL_BALANCE | RIG_LEVEL_METER | RIG_LEVEL_VOXGAIN \
|
||||
| RIG_LEVEL_VOXDELAY | RIG_LEVEL_ANTIVOX | RIG_LEVEL_SQLSTAT \
|
||||
| RIG_LEVEL_SWR | RIG_LEVEL_ALC | RIG_LEVEL_STRENGTH )
|
||||
|
||||
/* simplification macro */
|
||||
#define RIG_LEVEL_EXCLUDE(e) (RIG_LEVEL_ALL & ~(e))
|
||||
|
||||
/* more simplification macros */
|
||||
#define RIG_PARM_ALL (RIG_PARM_ANN | RIG_PARM_APO | RIG_PARM_BACKLIGHT \
|
||||
| RIG_PARM_BEEP | RIG_PARM_TIME | RIG_PARM_BAT )
|
||||
#define RIG_PARM_EXCLUDE(e) (RIG_PARM_ALL & ~(e))
|
||||
|
||||
/* For the Ham who has it all --Dale */
|
||||
#define RIG_FUNC_ALL (RIG_FUNC_FAGC | RIG_FUNC_NB | RIG_FUNC_COMP \
|
||||
| RIG_FUNC_VOX | RIG_FUNC_TONE | RIG_FUNC_TSQL \
|
||||
| RIG_FUNC_SBKIN | RIG_FUNC_FBKIN | RIG_FUNC_ANF | RIG_FUNC_NR \
|
||||
| RIG_FUNC_AIP | RIG_FUNC_APF | RIG_FUNC_MON | RIG_FUNC_MN \
|
||||
| RIG_FUNC_RNF | RIG_FUNC_ARO | RIG_FUNC_LOCK | RIG_FUNC_MUTE \
|
||||
| RIG_FUNC_VSC | RIG_FUNC_REV | RIG_FUNC_SQL | RIG_FUNC_ABM \
|
||||
| RIG_FUNC_BC | RIG_FUNC_MBC | RIG_FUNC_LMP | RIG_FUNC_AFC \
|
||||
| RIG_FUNC_SATMODE | RIG_FUNC_SCOPE | RIG_FUNC_RESUME )
|
||||
|
||||
/* Those of us who don't have everything */
|
||||
//#define RIG_FUNC_EXCLUDE(f) (RIG_FUNC_ALL & ~(f))
|
||||
|
||||
#endif /* _RIG_H */
|
||||
|
||||
|
@ -6,6 +6,10 @@
|
||||
* License: GNU
|
||||
*/
|
||||
|
||||
/*
|
||||
* status: Never been compiled!
|
||||
*/
|
||||
|
||||
/*
|
||||
* Functions to initialize, read, set, and list menus
|
||||
* for the TS-2000. These functions will be added to
|
||||
|
84
src/misc.c
84
src/misc.c
@ -2,7 +2,7 @@
|
||||
* Hamlib Interface - toolbox
|
||||
* Copyright (c) 2000-2002 by Stephane Fillod and Frank Singleton
|
||||
*
|
||||
* $Id: misc.c,v 1.17 2002-06-17 20:59:51 fillods Exp $
|
||||
* $Id: misc.c,v 1.18 2002-06-30 10:17:03 dedmons 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
|
||||
@ -253,7 +253,7 @@ int sprintf_freq(char *str, freq_t freq)
|
||||
f = (double)freq;
|
||||
}
|
||||
|
||||
return sprintf (str, "%g%s", f, hz);
|
||||
return sprintf (str, "%g %s", f, hz);
|
||||
}
|
||||
|
||||
const char * strmode(rmode_t mode)
|
||||
@ -267,10 +267,15 @@ const char * strmode(rmode_t mode)
|
||||
case RIG_MODE_FM: return "FM";
|
||||
case RIG_MODE_WFM: return "WFM";
|
||||
case RIG_MODE_NONE: return "";
|
||||
default:
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* shouldn't this use the same table as parse_vfo()?
|
||||
* It already caused me one bug. :) --Dale
|
||||
*/
|
||||
const char *strvfo(vfo_t vfo)
|
||||
{
|
||||
switch (vfo) {
|
||||
@ -292,6 +297,20 @@ const char *strvfo(vfo_t vfo)
|
||||
return "Main";
|
||||
case RIG_VFO_SUB:
|
||||
return "Sub";
|
||||
case RIG_CTRL_SAT:
|
||||
return "SAT";
|
||||
case RIG_VFO_MEM_A:
|
||||
return "MEMA";
|
||||
case RIG_VFO_MEM_C:
|
||||
return "MEMC";
|
||||
case RIG_VFO_CALL_A:
|
||||
return "CALLA";
|
||||
case RIG_VFO_CALL_C:
|
||||
return "CALLC";
|
||||
case RIG_VFO_AB:
|
||||
return "VFOAB";
|
||||
case RIG_VFO_BA:
|
||||
return "VFOBA";
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -329,6 +348,7 @@ const char *strfunc(setting_t func)
|
||||
case RIG_FUNC_RESUME: return "RESUME";
|
||||
|
||||
case RIG_FUNC_NONE: return "";
|
||||
default:
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -366,6 +386,7 @@ const char *strlevel(setting_t level)
|
||||
case RIG_LEVEL_STRENGTH: return "STRENGTH";
|
||||
|
||||
case RIG_LEVEL_NONE: return "";
|
||||
default:
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -381,6 +402,7 @@ const char *strparm(setting_t parm)
|
||||
case RIG_PARM_BAT: return "BAT";
|
||||
|
||||
case RIG_PARM_NONE: return "";
|
||||
default:
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -392,6 +414,7 @@ const char *strptrshift(rptr_shift_t shift)
|
||||
case RIG_RPT_SHIFT_PLUS: return "-";
|
||||
|
||||
case RIG_RPT_SHIFT_NONE: return "None";
|
||||
default:
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -412,18 +435,22 @@ const char *strvfop(vfo_op_t op)
|
||||
case RIG_OP_RIGHT: return "RIGHT";
|
||||
|
||||
case RIG_OP_NONE: return "";
|
||||
default:
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *strscan(scan_t scan)
|
||||
const char *strscan(scan_t rscan)
|
||||
{
|
||||
switch (scan) {
|
||||
switch (rscan) {
|
||||
case RIG_SCAN_STOP: return "STOP";
|
||||
case RIG_SCAN_MEM: return "MEM";
|
||||
case RIG_SCAN_SLCT: return "SLCT";
|
||||
case RIG_SCAN_PRIO: return "PRIO";
|
||||
case RIG_SCAN_PROG: return "PROG";
|
||||
case RIG_SCAN_DELTA: return "DELTA";
|
||||
case RIG_SCAN_VFO: return "VFO";
|
||||
default:
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -547,16 +574,16 @@ int sprintf_vfop(char *str, vfo_op_t op)
|
||||
}
|
||||
|
||||
|
||||
int sprintf_scan(char *str, scan_t scan)
|
||||
int sprintf_scan(char *str, scan_t rscan)
|
||||
{
|
||||
int i, len=0;
|
||||
|
||||
*str = '\0';
|
||||
if (scan == RIG_SCAN_NONE)
|
||||
if (rscan == RIG_SCAN_NONE)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < 30; i++) {
|
||||
const char *ms = strscan(scan & (1UL<<i));
|
||||
const char *ms = strscan(rscan & (1UL<<i));
|
||||
if (!ms || !ms[0])
|
||||
continue; /* unknown, FIXME! */
|
||||
strcat(str, ms);
|
||||
@ -600,12 +627,20 @@ static struct {
|
||||
{ RIG_VFO_A, "VFOA" },
|
||||
{ RIG_VFO_B, "VFOB" },
|
||||
{ RIG_VFO_C, "VFOC" },
|
||||
{ RIG_VFO_CURR, "currVFO" },
|
||||
{ RIG_VFO_ALL, "allVFO" },
|
||||
{ RIG_VFO_MEM, "MEM" },
|
||||
{ RIG_VFO_VFO, "VFO" },
|
||||
{ RIG_VFO_AB, "VFOAB" },
|
||||
{ RIG_VFO_BA, "VFOBA" },
|
||||
{ RIG_VFO_MEM_A, "MEMA" },
|
||||
{ RIG_VFO_MEM_C, "MEMC" },
|
||||
{ RIG_CTRL_SAT, "SAT" },
|
||||
{ RIG_VFO_CALL_A, "CALLA" },
|
||||
{ RIG_VFO_CALL_C, "CALLC" },
|
||||
{ RIG_VFO_MAIN, "Main" },
|
||||
{ RIG_VFO_SUB, "Sub" },
|
||||
// one or more of the following may be ambiguous --Dale
|
||||
{ RIG_VFO_CURR, "currVFO" },
|
||||
{ RIG_VFO_VFO, "VFO" },
|
||||
{ RIG_VFO_MEM, "MEM" },
|
||||
// { RIG_VFO_ALL, "allVFO" },
|
||||
{ RIG_VFO_NONE, NULL },
|
||||
};
|
||||
|
||||
@ -761,14 +796,16 @@ vfo_op_t parse_vfo_op(const char *s)
|
||||
}
|
||||
|
||||
static struct {
|
||||
scan_t scan;
|
||||
scan_t SCan;
|
||||
const char *str;
|
||||
} scan_str[] = {
|
||||
{ RIG_SCAN_STOP, "STOP" },
|
||||
{ RIG_SCAN_MEM, "MEM" },
|
||||
{ RIG_SCAN_SLCT, "SLCT" },
|
||||
{ RIG_SCAN_PRIO, "PRIO" },
|
||||
{ RIG_SCAN_PROG, "PROG" },
|
||||
{ RIG_SCAN_DELTA, "DELTA" },
|
||||
{ RIG_SCAN_VFO, "VFO" },
|
||||
{ RIG_SCAN_NONE, NULL },
|
||||
};
|
||||
|
||||
@ -776,19 +813,26 @@ scan_t parse_scan(const char *s)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0 ; scan_str[i].str != NULL; i++)
|
||||
if (!strcmp(s, scan_str[i].str))
|
||||
return scan_str[i].scan;
|
||||
printf(__FUNCTION__": parsing %s...\n",s);
|
||||
|
||||
for (i=0 ; scan_str[i].str != NULL; i++) {
|
||||
if (strcmp(s, scan_str[i].str) == 0) {
|
||||
return scan_str[i].SCan;
|
||||
}
|
||||
}
|
||||
|
||||
return RIG_SCAN_NONE;
|
||||
}
|
||||
|
||||
rptr_shift_t parse_rptr_shift(const char *s)
|
||||
{
|
||||
if (!strcmp(s, "+"))
|
||||
return RIG_RPT_SHIFT_PLUS;
|
||||
else if (!strcmp(s, "-"))
|
||||
return RIG_RPT_SHIFT_MINUS;
|
||||
if (strcmp(s, "+") == 0)
|
||||
return RIG_RPT_SHIFT_PLUS;
|
||||
else if (strcmp(s, "-") == 0)
|
||||
return RIG_RPT_SHIFT_MINUS;
|
||||
else if (strcmp(s, "=") == 0)
|
||||
return RIG_RPT_SHIFT_1750;
|
||||
else
|
||||
return RIG_RPT_SHIFT_NONE;
|
||||
return RIG_RPT_SHIFT_NONE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user