added emulated split operation through RIG_OP_TOGGLE

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1949 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.4
Stéphane Fillod, F8CFE 2005-03-26 17:57:14 +00:00
rodzic de6fb60b06
commit c806c7e40c
1 zmienionych plików z 92 dodań i 50 usunięć

142
src/rig.c
Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib Interface - main file * Hamlib Interface - main file
* Copyright (c) 2000-2005 by Stephane Fillod and Frank Singleton * Copyright (c) 2000-2005 by Stephane Fillod and Frank Singleton
* *
* $Id: rig.c,v 1.85 2005-02-20 02:38:27 fillods Exp $ * $Id: rig.c,v 1.86 2005-03-26 17:57:14 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
@ -1488,13 +1488,13 @@ int HAMLIB_API rig_get_rptr_offs(RIG *rig, vfo_t vfo, shortfreq_t *rptr_offs)
* \param vfo The target VFO * \param vfo The target VFO
* \param tx_freq The transmit split frequency to set to * \param tx_freq The transmit split frequency to set to
* *
* Sets the split frequencies. * Sets the split(TX) frequency.
* *
* \return RIG_OK if the operation has been sucessful, otherwise * \return RIG_OK if the operation has been sucessful, otherwise
* a negative value if an error occured (in which case, cause is * a negative value if an error occured (in which case, cause is
* set appropriately). * set appropriately).
* *
* \sa rig_get_split_freq() * \sa rig_get_split_freq(), rig_set_split_vfo()
*/ */
int HAMLIB_API rig_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) int HAMLIB_API rig_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
@ -1508,22 +1508,32 @@ int HAMLIB_API rig_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
caps = rig->caps; caps = rig->caps;
if (caps->set_split_freq == NULL) if (caps->set_split_freq &&
return -RIG_ENAVAIL; ((caps->targetable_vfo&RIG_TARGETABLE_ALL) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo))
if ((caps->targetable_vfo&RIG_TARGETABLE_ALL) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo)
return caps->set_split_freq(rig, vfo, tx_freq); return caps->set_split_freq(rig, vfo, tx_freq);
if (!caps->set_vfo)
return -RIG_ENTARGET;
curr_vfo = rig->state.current_vfo; curr_vfo = rig->state.current_vfo;
retcode = caps->set_vfo(rig, vfo); if (caps->set_vfo) {
retcode = caps->set_vfo(rig, vfo);
} else if (rig_has_vfo_op(rig, RIG_OP_TOGGLE) && caps->vfo_op) {
retcode = caps->vfo_op(rig, vfo, RIG_OP_TOGGLE);
} else {
return -RIG_ENAVAIL;
}
if (retcode != RIG_OK) if (retcode != RIG_OK)
return retcode; return retcode;
retcode = caps->set_split_freq(rig, vfo, tx_freq); if (caps->set_split_freq)
caps->set_vfo(rig, curr_vfo); retcode = caps->set_split_freq(rig, vfo, tx_freq);
else
retcode = caps->set_freq(rig, RIG_VFO_CURR, tx_freq);
if (caps->set_vfo) {
caps->set_vfo(rig, curr_vfo);
} else {
caps->vfo_op(rig, vfo, RIG_OP_TOGGLE);
}
return retcode; return retcode;
} }
@ -1533,7 +1543,7 @@ int HAMLIB_API rig_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq)
* \param vfo The target VFO * \param vfo The target VFO
* \param tx_freq The location where to store the current transmit split frequency * \param tx_freq The location where to store the current transmit split frequency
* *
* Retrieves the current split frequencies. * Retrieves the current split(TX) frequency.
* *
* \return RIG_OK if the operation has been sucessful, otherwise * \return RIG_OK if the operation has been sucessful, otherwise
* a negative value if an error occured (in which case, cause is * a negative value if an error occured (in which case, cause is
@ -1552,22 +1562,33 @@ int HAMLIB_API rig_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq)
caps = rig->caps; caps = rig->caps;
if (caps->get_split_freq == NULL) if (caps->get_split_freq &&
return -RIG_ENAVAIL; ((caps->targetable_vfo&RIG_TARGETABLE_ALL) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo))
if ((caps->targetable_vfo&RIG_TARGETABLE_ALL) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo)
return caps->get_split_freq(rig, vfo, tx_freq); return caps->get_split_freq(rig, vfo, tx_freq);
if (!caps->set_vfo)
return -RIG_ENTARGET;
curr_vfo = rig->state.current_vfo; curr_vfo = rig->state.current_vfo;
retcode = caps->set_vfo(rig, vfo); if (caps->set_vfo) {
retcode = caps->set_vfo(rig, vfo);
} else if (rig_has_vfo_op(rig, RIG_OP_TOGGLE) && caps->vfo_op) {
retcode = caps->vfo_op(rig, vfo, RIG_OP_TOGGLE);
} else {
return -RIG_ENAVAIL;
}
if (retcode != RIG_OK) if (retcode != RIG_OK)
return retcode; return retcode;
if (caps->get_split_freq)
retcode = caps->get_split_freq(rig, vfo, tx_freq);
else
retcode = caps->get_freq(rig, RIG_VFO_CURR, tx_freq);
if (caps->set_vfo) {
caps->set_vfo(rig, curr_vfo);
} else {
caps->vfo_op(rig, vfo, RIG_OP_TOGGLE);
}
retcode = caps->get_split_freq(rig, vfo, tx_freq);
caps->set_vfo(rig, curr_vfo);
return retcode; return retcode;
} }
@ -1578,7 +1599,7 @@ int HAMLIB_API rig_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq)
* \param tx_mode The transmit split mode to set to * \param tx_mode The transmit split mode to set to
* \param tx_width The transmit split width to set to * \param tx_width The transmit split width to set to
* *
* Sets the split mode. * Sets the split(TX) mode.
* *
* \return RIG_OK if the operation has been sucessful, otherwise * \return RIG_OK if the operation has been sucessful, otherwise
* a negative value if an error occured (in which case, cause is * a negative value if an error occured (in which case, cause is
@ -1598,22 +1619,33 @@ int HAMLIB_API rig_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, pbwidth_
caps = rig->caps; caps = rig->caps;
if (caps->set_split_mode == NULL) if (caps->set_split_mode &&
return -RIG_ENAVAIL; ((caps->targetable_vfo&RIG_TARGETABLE_ALL) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo))
if ((caps->targetable_vfo&RIG_TARGETABLE_ALL) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo)
return caps->set_split_mode(rig, vfo, tx_mode, tx_width); return caps->set_split_mode(rig, vfo, tx_mode, tx_width);
if (!caps->set_vfo)
return -RIG_ENTARGET;
curr_vfo = rig->state.current_vfo; curr_vfo = rig->state.current_vfo;
retcode = caps->set_vfo(rig, vfo); if (caps->set_vfo) {
retcode = caps->set_vfo(rig, vfo);
} else if (rig_has_vfo_op(rig, RIG_OP_TOGGLE) && caps->vfo_op) {
retcode = caps->vfo_op(rig, vfo, RIG_OP_TOGGLE);
} else {
return -RIG_ENAVAIL;
}
if (retcode != RIG_OK) if (retcode != RIG_OK)
return retcode; return retcode;
if (caps->set_split_mode)
retcode = caps->set_split_mode(rig, vfo, tx_mode, tx_width);
else
retcode = caps->set_mode(rig, RIG_VFO_CURR, tx_mode, tx_width);
if (caps->set_vfo) {
caps->set_vfo(rig, curr_vfo);
} else {
caps->vfo_op(rig, vfo, RIG_OP_TOGGLE);
}
retcode = caps->set_split_mode(rig, vfo, tx_mode, tx_width);
caps->set_vfo(rig, curr_vfo);
return retcode; return retcode;
} }
@ -1624,7 +1656,7 @@ int HAMLIB_API rig_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, pbwidth_
* \param tx_mode The location where to store the current transmit split mode * \param tx_mode The location where to store the current transmit split mode
* \param tx_width The location where to store the current transmit split width * \param tx_width The location where to store the current transmit split width
* *
* Retrieves the current split mode. * Retrieves the current split(TX) mode.
* *
* \return RIG_OK if the operation has been sucessful, otherwise * \return RIG_OK if the operation has been sucessful, otherwise
* a negative value if an error occured (in which case, cause is * a negative value if an error occured (in which case, cause is
@ -1643,22 +1675,32 @@ int HAMLIB_API rig_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, pbwidth
caps = rig->caps; caps = rig->caps;
if (caps->get_split_mode == NULL) if (caps->get_split_mode &&
return -RIG_ENAVAIL; ((caps->targetable_vfo&RIG_TARGETABLE_ALL) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo))
if ((caps->targetable_vfo&RIG_TARGETABLE_ALL) ||
vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo)
return caps->get_split_mode(rig, vfo, tx_mode, tx_width); return caps->get_split_mode(rig, vfo, tx_mode, tx_width);
if (!caps->set_vfo)
return -RIG_ENTARGET;
curr_vfo = rig->state.current_vfo; curr_vfo = rig->state.current_vfo;
retcode = caps->set_vfo(rig, vfo); if (caps->set_vfo) {
retcode = caps->set_vfo(rig, vfo);
} else if (rig_has_vfo_op(rig, RIG_OP_TOGGLE) && caps->vfo_op) {
retcode = caps->vfo_op(rig, vfo, RIG_OP_TOGGLE);
} else {
return -RIG_ENAVAIL;
}
if (retcode != RIG_OK) if (retcode != RIG_OK)
return retcode; return retcode;
retcode = caps->get_split_mode(rig, vfo, tx_mode, tx_width); if (caps->get_split_mode)
caps->set_vfo(rig, curr_vfo); retcode = caps->get_split_mode(rig, vfo, tx_mode, tx_width);
else
retcode = caps->get_mode(rig, RIG_VFO_CURR, tx_mode, tx_width);
if (caps->set_vfo) {
caps->set_vfo(rig, curr_vfo);
} else {
caps->vfo_op(rig, vfo, RIG_OP_TOGGLE);
}
return retcode; return retcode;
} }