add th_set_func (with TBURST)

add AF level
add TO_VFO vfo op
add set_powerstat
fix get_vfo to return VFO_MEM


git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1708 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.1
Thierry Leconte, F4DWV 2004-03-21 16:55:28 +00:00
rodzic f0c75ca8fb
commit 70d3d7f854
2 zmienionych plików z 183 dodań i 42 usunięć

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib Kenwood backend - TH handheld primitives
* Copyright (c) 2001-2003 by Stephane Fillod
*
* $Id: th.c,v 1.18 2004-03-20 16:48:34 f4dwv Exp $
* $Id: th.c,v 1.19 2004-03-21 16:55:28 f4dwv 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
@ -368,11 +368,12 @@ th_set_vfo (RIG *rig, vfo_t vfo)
int
th_get_vfo (RIG *rig, vfo_t *vfo)
{
char ackbuf[ACKBUF_LEN];
int retval,ack_len=ACKBUF_LEN;
char cmdbuf[16], ackbuf[ACKBUF_LEN],vfoc;
int retval,ack_len;
rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __FUNCTION__);
ack_len=ACKBUF_LEN;
retval = kenwood_transaction (rig, "BC" EOM, 3, ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
@ -382,7 +383,8 @@ th_get_vfo (RIG *rig, vfo_t *vfo)
return -RIG_ERJCTED;
}
switch (ackbuf[3]) {
vfoc=ackbuf[3];
switch (vfoc) {
case '0': *vfo = RIG_VFO_A; break;
case '1': *vfo = RIG_VFO_B; break;
default:
@ -390,7 +392,29 @@ th_get_vfo (RIG *rig, vfo_t *vfo)
return -RIG_EVFO;
}
return RIG_OK;
sprintf(cmdbuf,"VMC %c" EOM,vfoc);
ack_len=ACKBUF_LEN;
retval = kenwood_transaction (rig, cmdbuf, strlen(cmdbuf), ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
if (ack_len < 8 ) {
rig_debug(RIG_DEBUG_ERR, "%s: Unexpected reply '%s'\n", __FUNCTION__, ackbuf);
return -RIG_ERJCTED;
}
switch(ackbuf[6]) {
case '0' :
case '1' :
break;
case '2' :
*vfo = RIG_VFO_MEM;
break;
default:
rig_debug(RIG_DEBUG_ERR, "%s: Unexpected VFO value '%c'\n", __FUNCTION__, ackbuf[6]);
return -RIG_EVFO;
}
return RIG_OK;
}
@ -440,12 +464,12 @@ th_get_trn (RIG *rig, int *trn)
return RIG_OK;
}
/*
* th_get_kenwood_func
* Assumes rig!=NULL, status!=NULL
*/
int
th_get_kenwood_func (RIG *rig, const char *cmd, int *status)
static int th_get_kenwood_func (RIG *rig, const char *cmd, int *status)
{
char ackbuf[ACKBUF_LEN];
int retval,ack_len=ACKBUF_LEN;
@ -479,12 +503,8 @@ th_get_func (RIG *rig, vfo_t vfo, setting_t func, int *status)
/* FIXME: What about the VFO? */
/* Optimize:
* sort the switch cases with the most frequent first
*/
switch (func) {
case RIG_FUNC_MON: /* which one? */
case RIG_FUNC_SQL:
case RIG_FUNC_MON:
return th_get_kenwood_func(rig, "MON" EOM, status);
case RIG_FUNC_TONE:
return th_get_kenwood_func(rig, "TO" EOM, status);
@ -498,24 +518,86 @@ th_get_func (RIG *rig, vfo_t vfo, setting_t func, int *status)
return th_get_kenwood_func(rig, "AIP" EOM, status);
case RIG_FUNC_LOCK:
return th_get_kenwood_func(rig, "LK" EOM, status);
default:
rig_debug(RIG_DEBUG_ERR,"%s: Unsupported function %#x", __FUNCTION__, func);
return -RIG_EINVAL;
}
return RIG_OK;
}
case RIG_FUNC_FAGC:
case RIG_FUNC_NB:
case RIG_FUNC_COMP:
case RIG_FUNC_VOX:
case RIG_FUNC_SBKIN:
case RIG_FUNC_FBKIN:
case RIG_FUNC_ANF:
case RIG_FUNC_NR:
case RIG_FUNC_APF:
case RIG_FUNC_MN:
case RIG_FUNC_RNF:
case RIG_FUNC_MUTE:
case RIG_FUNC_VSC:
case RIG_FUNC_ABM:
case RIG_FUNC_BC:
case RIG_FUNC_MBC:
return -RIG_ENAVAIL;
/* --------------------------------------------------------------------- */
static int th_tburst(RIG *rig, vfo_t vfo, int status)
{
char ackbuf[ACKBUF_LEN];
int retval,ack_len=ACKBUF_LEN;
if(status==1) {
retval = kenwood_transaction(rig, "TT"EOM, 3, ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
return RIG_OK;
}
if(status==0) {
return rig_set_ptt(rig,vfo,RIG_PTT_OFF);
}
return -RIG_EINVAL;
}
/*
* th_set_kenwood_func
* Assumes rig!=NULL, status!=NULL
*/
static int th_set_kenwood_func (RIG *rig, const char *cmd, int status)
{
char trbuf[16], ackbuf[ACKBUF_LEN];
int retval,ack_len=ACKBUF_LEN;
rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __FUNCTION__);
strncpy(trbuf,cmd,16);
strncat(trbuf,(status)?" 1":" 0",16);
strncat(trbuf,EOM,16);
retval = kenwood_transaction (rig, cmd, strlen(cmd), ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
if (ack_len < 4 ) {
rig_debug(RIG_DEBUG_ERR, "%s: Unexpected reply '%s'\n", __FUNCTION__, ackbuf);
return -RIG_ERJCTED;
}
return RIG_OK;
};
/*
* th_get_func
* Assumes rig!=NULL, status!=NULL
*/
int
th_set_func (RIG *rig, vfo_t vfo, setting_t func, int status)
{
rig_debug(RIG_DEBUG_TRACE, "%s: called (0x%04x)\n", __FUNCTION__, func);
/* FIXME: What about the VFO? */
switch (func) {
case RIG_FUNC_MON:
return th_set_kenwood_func(rig, "MON", status);
case RIG_FUNC_TONE:
return th_set_kenwood_func(rig, "TO", status);
case RIG_FUNC_TSQL:
return th_set_kenwood_func(rig, "CT", status);
case RIG_FUNC_REV:
return th_set_kenwood_func(rig, "REV", status);
case RIG_FUNC_ARO:
return th_set_kenwood_func(rig, "ARO", status);
case RIG_FUNC_AIP:
return th_set_kenwood_func(rig, "AIP", status);
case RIG_FUNC_LOCK:
return th_set_kenwood_func(rig, "LK", status);
case RIG_FUNC_TBURST:
return th_tburst(rig, vfo, status);
default:
rig_debug(RIG_DEBUG_ERR,"%s: Unsupported function %#x", __FUNCTION__, func);
return -RIG_EINVAL;
@ -602,23 +684,39 @@ th_get_level (RIG *rig, vfo_t vfo, setting_t level, value_t *val)
if (retval != RIG_OK)
return retval;
retval = sscanf(ackbuf, "SQ %d,%d", &v, &l);
if (retval != 2 || l < 0 || l > 5) {
retval = sscanf(ackbuf, "SQ %d,%x", &v, &l);
if (retval != 2 || l < 0 || l > 32) {
rig_debug(RIG_DEBUG_ERR, "%s: Unexpected reply '%s'\n", __FUNCTION__, ackbuf);
return -RIG_ERJCTED;
}
/* range [0.0 ... 1.0] */
val->f = l / 5.0;
val->f = l / 32.0;
break;
case RIG_LEVEL_RFPOWER:
sprintf(lvlbuf, "PC 0" EOM); /* only VHF power ... */
case RIG_LEVEL_AF:
sprintf(lvlbuf, "AG %c" EOM, vch);
retval = kenwood_transaction (rig, lvlbuf, strlen(lvlbuf), ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
retval = sscanf(ackbuf, "PC 0,%d", &l);
retval = sscanf(ackbuf, "AG %d,%x", &v, &l);
if (retval != 2 || l < 0 || l > 32) {
rig_debug(RIG_DEBUG_ERR, "%s: Unexpected reply '%s'\n", __FUNCTION__, ackbuf);
return -RIG_ERJCTED;
}
/* range [0.0 ... 1.0] */
val->f = l / 32.0;
break;
case RIG_LEVEL_RFPOWER:
sprintf(lvlbuf, "PC %c" EOM,vch);
retval = kenwood_transaction (rig, lvlbuf, strlen(lvlbuf), ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
retval = sscanf(ackbuf, "PC %d,%d", &v, &l);
if (retval != 1 || l < 0 || l > 3) {
rig_debug(RIG_DEBUG_ERR, "%s: Unexpected reply '%s'\n", __FUNCTION__, ackbuf);
return -RIG_ERJCTED;
@ -657,13 +755,25 @@ int th_set_level (RIG *rig, vfo_t vfo, setting_t level, value_t val)
return -RIG_EVFO;
}
if(level!=RIG_LEVEL_RFPOWER)
switch(level) {
case RIG_LEVEL_RFPOWER :
sprintf(lvlbuf, "PC %c,%d" EOM, vch,3-(int)(val.f*3.0));
retval = kenwood_transaction (rig, lvlbuf, strlen(lvlbuf), ackbuf, &ack_len);
return retval;
case RIG_LEVEL_SQL :
sprintf(lvlbuf, "SQ %c,%02x" EOM, vch,(int)(val.f*32.0));
retval = kenwood_transaction (rig, lvlbuf, strlen(lvlbuf), ackbuf, &ack_len);
return retval;
case RIG_LEVEL_AF :
sprintf(lvlbuf, "AG %c,%02x" EOM, vch,(int)(val.f*32.0));
retval = kenwood_transaction (rig, lvlbuf, strlen(lvlbuf), ackbuf, &ack_len);
return retval;
default:
rig_debug(RIG_DEBUG_ERR,"%s: Unsupported Level %d", __FUNCTION__, level);
return -RIG_EINVAL;
sprintf(lvlbuf, "PC 0,%d" EOM, 3-(int)(val.f*3.0)); /* only VHF power ... */
retval = kenwood_transaction (rig, lvlbuf, strlen(lvlbuf), ackbuf, &ack_len);
return retval;
}
return RIG_OK;
}
#ifndef RIG_TONEMAX
@ -872,6 +982,32 @@ th_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
return RIG_OK;
}
int
th_set_powerstat(RIG *rig, powerstat_t status)
{
unsigned char *membuf;
int retval;
rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __FUNCTION__);
switch(status) {
case RIG_POWER_ON :
membuf="PS 1" EOM;
break;
case RIG_POWER_OFF :
membuf="PS 0" EOM;
break;
default:
return -RIG_EINVAL;
}
retval = kenwood_transaction(rig, membuf, strlen(membuf), NULL, NULL);
if (retval != RIG_OK)
return retval;
return RIG_OK;
}
int th_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd)
{
unsigned char *membuf, ackbuf[ACKBUF_LEN];
@ -935,6 +1071,9 @@ int th_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
case RIG_OP_DOWN:
membuf="DW" EOM;
break;
case RIG_OP_TO_VFO:
membuf="MSH" EOM;
break;
default:
return -RIG_EINVAL;
}

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib Kenwood backend - TH handheld header
* Copyright (c) 2001-2003 by Stephane Fillod
*
* $Id: th.h,v 1.6 2004-03-20 16:48:34 f4dwv Exp $
* $Id: th.h,v 1.7 2004-03-21 16:55:28 f4dwv 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
@ -32,6 +32,8 @@ extern int th_set_vfo(RIG *rig, vfo_t vfo);
extern int th_get_vfo(RIG *rig, vfo_t *vfo);
extern int th_set_trn(RIG *rig, int trn);
extern int th_get_trn (RIG *rig, int *trn);
extern int th_set_powerstat (RIG *rig, powerstat_t status);
extern int th_set_func (RIG *rig, vfo_t vfo, setting_t func, int status);
extern int th_get_func (RIG *rig, vfo_t vfo, setting_t func, int *status);
extern int th_get_parm (RIG *rig, setting_t parm, value_t *val);
extern int th_get_level (RIG *rig, vfo_t vfo, setting_t level, value_t *val);