Let set_ptt() select source, either TX mic or TX data

(cherry picked from commit 421909bad2)

Signed-off-by: Nate Bargmann <n0nb@n0nb.us>
Hamlib-1.2.15
Stephane Fillod 2011-07-20 00:09:50 +02:00 zatwierdzone przez Nate Bargmann
rodzic 89bce719bf
commit 3c5db5456f
7 zmienionych plików z 38 dodań i 34 usunięć

Wyświetl plik

@ -398,8 +398,10 @@ typedef enum {
* \brief PTT status * \brief PTT status
*/ */
typedef enum { typedef enum {
RIG_PTT_OFF = 0, /*!< PTT activated */ RIG_PTT_OFF = 0, /*!< PTT desactivated */
RIG_PTT_ON /*!< PTT desactivated */ RIG_PTT_ON, /*!< PTT activated */
RIG_PTT_ON_MIC, /*!< PTT Mic only, fallbacks on RIG_PTT_ON if unavailable */
RIG_PTT_ON_DATA /*!< PTT Data (Mic-muted), fallbacks on RIG_PTT_ON if unavailable */
} ptt_t; } ptt_t;
/** /**
@ -411,7 +413,8 @@ typedef enum {
RIG_PTT_RIG, /*!< Legacy PTT */ RIG_PTT_RIG, /*!< Legacy PTT */
RIG_PTT_SERIAL_DTR, /*!< PTT control through serial DTR signal */ RIG_PTT_SERIAL_DTR, /*!< PTT control through serial DTR signal */
RIG_PTT_SERIAL_RTS, /*!< PTT control through serial RTS signal */ RIG_PTT_SERIAL_RTS, /*!< PTT control through serial RTS signal */
RIG_PTT_PARALLEL /*!< PTT control through parallel port */ RIG_PTT_PARALLEL, /*!< PTT control through parallel port */
RIG_PTT_RIG_MICDATA /*!< Legacy PTT, supports RIG_PTT_ON_MIC/RIG_PTT_ON_DATA */
} ptt_type_t; } ptt_type_t;
/** /**

Wyświetl plik

@ -1750,18 +1750,23 @@ int kenwood_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
return RIG_OK; return RIG_OK;
} }
/*
* kenwood_set_ptt
*/
int kenwood_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) int kenwood_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
{ {
const char *ptt_cmd;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (!rig) if (!rig)
return -RIG_EINVAL; return -RIG_EINVAL;
return kenwood_simple_cmd(rig, (ptt == RIG_PTT_ON) ? "TX" : "RX"); switch (ptt) {
case RIG_PTT_ON: ptt_cmd = "TX"; break;
case RIG_PTT_ON_MIC: ptt_cmd = "TX0"; break;
case RIG_PTT_ON_DATA: ptt_cmd = "TX1"; break;
case RIG_PTT_OFF: ptt_cmd = "RX"; break;
default: return -RIG_EINVAL;
}
return kenwood_simple_cmd(rig, ptt_cmd);
} }
int kenwood_set_ptt_safe(RIG *rig, vfo_t vfo, ptt_t ptt) int kenwood_set_ptt_safe(RIG *rig, vfo_t vfo, ptt_t ptt)

Wyświetl plik

@ -40,21 +40,6 @@
#define TS480_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_NR|RIG_FUNC_NR|RIG_FUNC_BC) #define TS480_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_NR|RIG_FUNC_NR|RIG_FUNC_BC)
/*
* kenwood_ts480_set_ptt
* Assumes rig!=NULL
*
* set PTT with audio from data connector (NOT microphone!!!)
*/
static int
kenwood_ts480_set_ptt (RIG * rig, vfo_t vfo, ptt_t ptt)
{
if (RIG_PTT_ON == ptt)
return kenwood_simple_cmd(rig, "TX1");
return kenwood_simple_cmd(rig, "RX");
}
/* /*
* kenwood_ts480_get_info * kenwood_ts480_get_info
* Assumes rig!=NULL * Assumes rig!=NULL
@ -278,7 +263,7 @@ const struct rig_caps ts480_caps = {
.copyright = "LGPL", .copyright = "LGPL",
.status = RIG_STATUS_UNTESTED, .status = RIG_STATUS_UNTESTED,
.rig_type = RIG_TYPE_TRANSCEIVER, .rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG, .ptt_type = RIG_PTT_RIG_MICDATA,
.dcd_type = RIG_DCD_RIG, .dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL, .port_type = RIG_PORT_SERIAL,
.serial_rate_min = 4800, .serial_rate_min = 4800,
@ -396,7 +381,7 @@ const struct rig_caps ts480_caps = {
.set_vfo = kenwood_set_vfo, .set_vfo = kenwood_set_vfo,
.get_vfo = kenwood_get_vfo_if, .get_vfo = kenwood_get_vfo_if,
.get_ptt = kenwood_get_ptt, .get_ptt = kenwood_get_ptt,
.set_ptt = kenwood_ts480_set_ptt, .set_ptt = kenwood_set_ptt,
.get_dcd = kenwood_get_dcd, .get_dcd = kenwood_get_dcd,
.set_powerstat = kenwood_set_powerstat, .set_powerstat = kenwood_set_powerstat,
.get_powerstat = kenwood_get_powerstat, .get_powerstat = kenwood_get_powerstat,

Wyświetl plik

@ -282,6 +282,8 @@ static int frontend_set_conf(RIG *rig, token_t token, const char *val)
case TOK_PTT_TYPE: case TOK_PTT_TYPE:
if (!strcmp(val, "RIG")) if (!strcmp(val, "RIG"))
rs->pttport.type.ptt = RIG_PTT_RIG; rs->pttport.type.ptt = RIG_PTT_RIG;
else if (!strcmp(val, "RIGMICDATA"))
rs->pttport.type.ptt = RIG_PTT_RIG_MICDATA;
else if (!strcmp(val, "DTR")) else if (!strcmp(val, "DTR"))
rs->pttport.type.ptt = RIG_PTT_SERIAL_DTR; rs->pttport.type.ptt = RIG_PTT_SERIAL_DTR;
else if (!strcmp(val, "RTS")) else if (!strcmp(val, "RTS"))

Wyświetl plik

@ -1,9 +1,8 @@
/* /*
* Hamlib Interface - main file * Hamlib Interface - main file
* Copyright (c) 2000-2010 by Stephane Fillod * Copyright (c) 2000-2011 by Stephane Fillod
* Copyright (c) 2000-2003 by Frank Singleton * Copyright (c) 2000-2003 by Frank Singleton
* *
* $Id: rig.c,v 1.103 2009-02-20 14:14:31 fillods Exp $
* *
* This library is free software; you can redistribute it and/or modify * This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as * it under the terms of the GNU Library General Public License as
@ -31,7 +30,7 @@
* \brief Ham Radio Control Libraries interface * \brief Ham Radio Control Libraries interface
* \author Stephane Fillod * \author Stephane Fillod
* \author Frank Singleton * \author Frank Singleton
* \date 2000-2010 * \date 2000-2011
* *
* Hamlib provides a user-callable API, a set of "front-end" routines that * Hamlib provides a user-callable API, a set of "front-end" routines that
* call rig-specific "back-end" routines which actually communicate with * call rig-specific "back-end" routines which actually communicate with
@ -83,7 +82,7 @@ const char hamlib_version[21] = "Hamlib " PACKAGE_VERSION;
* \brief Hamlib copyright notice * \brief Hamlib copyright notice
*/ */
const char hamlib_copyright[231] = /* hamlib 1.2 ABI specifies 231 bytes */ const char hamlib_copyright[231] = /* hamlib 1.2 ABI specifies 231 bytes */
"Copyright (C) 2000-2010 Stephane Fillod\n" "Copyright (C) 2000-2011 Stephane Fillod\n"
"Copyright (C) 2000-2003 Frank Singleton\n" "Copyright (C) 2000-2003 Frank Singleton\n"
"This is free software; see the source for copying conditions. There is NO\n" "This is free software; see the source for copying conditions. There is NO\n"
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."; "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.";
@ -471,6 +470,7 @@ int HAMLIB_API rig_open(RIG *rig)
switch(rs->pttport.type.ptt) { switch(rs->pttport.type.ptt) {
case RIG_PTT_NONE: case RIG_PTT_NONE:
case RIG_PTT_RIG: case RIG_PTT_RIG:
case RIG_PTT_RIG_MICDATA:
break; break;
case RIG_PTT_SERIAL_RTS: case RIG_PTT_SERIAL_RTS:
case RIG_PTT_SERIAL_DTR: case RIG_PTT_SERIAL_DTR:
@ -611,6 +611,7 @@ int HAMLIB_API rig_close(RIG *rig)
switch(rs->pttport.type.ptt) { switch(rs->pttport.type.ptt) {
case RIG_PTT_NONE: case RIG_PTT_NONE:
case RIG_PTT_RIG: case RIG_PTT_RIG:
case RIG_PTT_RIG_MICDATA:
break; break;
case RIG_PTT_SERIAL_RTS: case RIG_PTT_SERIAL_RTS:
ser_set_rts(&rs->pttport, RIG_PTT_OFF); ser_set_rts(&rs->pttport, RIG_PTT_OFF);
@ -1136,12 +1137,16 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
switch (rig->state.pttport.type.ptt) { switch (rig->state.pttport.type.ptt) {
case RIG_PTT_RIG: case RIG_PTT_RIG:
if (ptt == RIG_PTT_ON_MIC || ptt == RIG_PTT_ON_DATA)
ptt = RIG_PTT_ON;
/* fall through */
case RIG_PTT_RIG_MICDATA:
if (caps->set_ptt == NULL) if (caps->set_ptt == NULL)
return -RIG_ENIMPL; return -RIG_ENIMPL;
if ((caps->targetable_vfo&RIG_TARGETABLE_PURE) || if ((caps->targetable_vfo&RIG_TARGETABLE_PURE) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo) vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo)
return caps->set_ptt(rig, vfo, ptt); return caps->set_ptt(rig, vfo, ptt);
if (!caps->set_vfo) if (!caps->set_vfo)
return -RIG_ENTARGET; return -RIG_ENTARGET;
@ -1157,10 +1162,10 @@ int HAMLIB_API rig_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
break; break;
case RIG_PTT_SERIAL_DTR: case RIG_PTT_SERIAL_DTR:
return ser_set_dtr(&rig->state.pttport, ptt==RIG_PTT_ON); return ser_set_dtr(&rig->state.pttport, ptt!=RIG_PTT_OFF);
case RIG_PTT_SERIAL_RTS: case RIG_PTT_SERIAL_RTS:
return ser_set_rts(&rig->state.pttport, ptt==RIG_PTT_ON); return ser_set_rts(&rig->state.pttport, ptt!=RIG_PTT_OFF);
case RIG_PTT_PARALLEL: case RIG_PTT_PARALLEL:
return par_ptt_set(&rig->state.pttport, ptt); return par_ptt_set(&rig->state.pttport, ptt);
@ -1201,6 +1206,7 @@ int HAMLIB_API rig_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
switch (rig->state.pttport.type.ptt) { switch (rig->state.pttport.type.ptt) {
case RIG_PTT_RIG: case RIG_PTT_RIG:
case RIG_PTT_RIG_MICDATA:
if (caps->get_ptt == NULL) if (caps->get_ptt == NULL)
return -RIG_ENIMPL; return -RIG_ENIMPL;

Wyświetl plik

@ -103,6 +103,9 @@ int dumpcaps (RIG* rig, FILE *fout)
case RIG_PTT_RIG: case RIG_PTT_RIG:
fprintf(fout, "Rig capable\n"); fprintf(fout, "Rig capable\n");
break; break;
case RIG_PTT_RIG_MICDATA:
fprintf(fout, "Rig capable (Mic/Data)\n");
break;
case RIG_PTT_PARALLEL: case RIG_PTT_PARALLEL:
fprintf(fout, "Parallel port (DATA0)\n"); fprintf(fout, "Parallel port (DATA0)\n");
break; break;

Wyświetl plik

@ -203,7 +203,7 @@ against the Hamlib backend.
Get 'XIT', in Hz. Get 'XIT', in Hz.
.TP .TP
.B T, set_ptt 'PTT' .B T, set_ptt 'PTT'
Set 'PTT', 0 (RX) or 1 (TX). Set 'PTT', 0 (RX), 1 (TX), 2 (TX mic), 3 (TX data).
.TP .TP
.B t, get_ptt .B t, get_ptt
Get 'PTT' status. Get 'PTT' status.