Adding rig_get_function to replace use of rig->caps->set_vfo and such

https://github.com/Hamlib/Hamlib/issues/484
pull/494/head
Michael Black W9MDB 2020-12-31 23:05:54 -06:00
rodzic 44c1645785
commit f7ff96fec8
2 zmienionych plików z 370 dodań i 0 usunięć

Wyświetl plik

@ -1838,6 +1838,105 @@ struct rig_caps {
};
//! @endcond
/**
* \brief Enumeration of all rig_ functions
*
*/
//! @cond Doxygen_Suppress
// all functions enumerated for rig_get_function_ptr
enum rig_function_e {
RIG_FUNCTION_RIG_INIT,
RIG_FUNCTION_RIG_CLEANUP,
RIG_FUNCTION_RIG_OPEN,
RIG_FUNCTION_RIG_CLOSE,
RIG_FUNCTION_RIG_SET_FREQ,
RIG_FUNCTION_RIG_GET_FREQ,
RIG_FUNCTION_RIG_SET_MODE,
RIG_FUNCTION_RIG_GET_MODE,
RIG_FUNCTION_RIG_SET_VFO,
RIG_FUNCTION_RIG_GET_VFO,
RIG_FUNCTION_RIG_SET_PTT,
RIG_FUNCTION_RIG_GET_PTT,
RIG_FUNCTION_RIG_GET_DCD,
RIG_FUNCTION_RIG_SET_RPTR_SHIFT,
RIG_FUNCTION_RIG_GET_RPTR_SHIFT,
RIG_FUNCTION_RIG_SET_RPTR_OFFS,
RIG_FUNCTION_RIG_GET_RPTR_OFFS,
RIG_FUNCTION_RIG_SET_SPLIT_FREQ,
RIG_FUNCTION_RIG_GET_SPLIT_FREQ,
RIG_FUNCTION_RIG_SET_SPLIT_MODE,
RIG_FUNCTION_RIG_SET_SPLIT_FREQ_MODE,
RIG_FUNCTION_RIG_GET_SPLIT_FREQ_MODE,
RIG_FUNCTION_RIG_SET_SPLIT_VFO,
RIG_FUNCTION_RIG_GET_SPLIT_VFO,
RIG_FUNCTION_RIG_SET_RIT,
RIG_FUNCTION_RIG_GET_RIT,
RIG_FUNCTION_RIG_SET_XIT,
RIG_FUNCTION_RIG_GET_XIT,
RIG_FUNCTION_RIG_SET_TS,
RIG_FUNCTION_RIG_GET_TS,
RIG_FUNCTION_RIG_SET_DCS_CODE,
RIG_FUNCTION_RIG_GET_DCS_CODE,
RIG_FUNCTION_RIG_SET_TONE,
RIG_FUNCTION_RIG_GET_TONE,
RIG_FUNCTION_RIG_SET_CTCSS_TONE,
RIG_FUNCTION_RIG_GET_CTCSS_TONE,
RIG_FUNCTION_RIG_SET_DCS_SQL,
RIG_FUNCTION_RIG_GET_DCS_SQL,
RIG_FUNCTION_RIG_SET_TONE_SQL,
RIG_FUNCTION_RIG_GET_TONE_SQL,
RIG_FUNCTION_RIG_SET_CTCSS_SQL,
RIG_FUNCTION_RIG_GET_CTCSS_SQL,
RIG_FUNCTION_RIG_POWER2MW,
RIG_FUNCTION_RIG_MW2POWER,
RIG_FUNCTION_RIG_SET_POWERSTAT,
RIG_FUNCTION_RIG_GET_POWERSTAT,
RIG_FUNCTION_RIG_RESET,
RIG_FUNCTION_RIG_SET_ANT,
RIG_FUNCTION_RIG_GET_ANT,
RIG_FUNCTION_RIG_SET_LEVEL,
RIG_FUNCTION_RIG_GET_LEVEL,
RIG_FUNCTION_RIG_SET_FUNC,
RIG_FUNCTION_RIG_GET_FUNC,
RIG_FUNCTION_RIG_SET_PARM,
RIG_FUNCTION_RIG_GET_PARM,
RIG_FUNCTION_RIG_SET_EXT_LEVEL,
RIG_FUNCTION_RIG_GET_EXT_LEVEL,
RIG_FUNCTION_RIG_SET_EXT_FUNC,
RIG_FUNCTION_RIG_GET_EXT_FUNC,
RIG_FUNCTION_RIG_SET_EXT_PARM,
RIG_FUNCTION_RIG_GET_EXT_PARM,
RIG_FUNCTION_RIG_SET_CONF,
RIG_FUNCTION_RIG_GET_CONF,
RIG_FUNCTION_RIG_SEND_DTMF,
RIG_FUNCTION_RIG_SEND_MORSE,
RIG_FUNCTION_RIG_STOP_MORSE,
RIG_FUNCTION_RIG_WAIT_MORSE,
RIG_FUNCTION_RIG_SEND_VOICE_MEM,
RIG_FUNCTION_RIG_SET_BANK,
RIG_FUNCTION_RIG_SET_MEM,
RIG_FUNCTION_RIG_GET_MEM,
RIG_FUNCTION_RIG_VFO_OP,
RIG_FUNCTION_RIG_SCAN,
RIG_FUNCTION_RIG_SET_TRN,
RIG_FUNCTION_RIG_GET_TRN,
RIG_FUNCTION_RIG_DECODE_EVENT,
RIG_FUNCTION_RIG_SET_CHANNEL,
RIG_FUNCTION_RIG_GET_CHANNEL,
RIG_FUNCTION_RIG_GET_INFO,
RIG_FUNCTION_RIG_SET_CHAN_ALL_CB,
RIG_FUNCTION_RIG_GET_CHAN_ALL_CB,
RIG_FUNCTION_RIG_SET_MEM_ALL_CB,
RIG_FUNCTION_RIG_GET_MEM_ALL_CB,
RIG_FUNCTION_RIG_SET_VFO_OPT
};
/**
* \brief Function to return pointer to rig_* function
*
*/
//! @cond Doxygen_Suppress
extern void *rig_get_function_ptr(RIG *rig, enum rig_function_e rig_function);
/**
* \brief Port definition

Wyświetl plik

@ -1807,6 +1807,277 @@ const char *HAMLIB_API rot_strstatus(rot_status_t status)
return "";
}
/**
* \brief Get pointer to rig function instead of using rig->caps
* \param RIG* and rig_function_e
* \return the corresponding function pointer
*/
void *rig_get_function_ptr(RIG *rig, enum rig_function_e rig_function)
{
switch (rig_function)
{
case RIG_FUNCTION_RIG_INIT:
return rig->caps->rig_init;
case RIG_FUNCTION_RIG_CLEANUP:
return rig->caps->rig_cleanup;
case RIG_FUNCTION_RIG_OPEN:
return rig->caps->rig_open;
case RIG_FUNCTION_RIG_CLOSE:
return rig->caps->rig_close;
case RIG_FUNCTION_RIG_SET_FREQ:
return rig->caps->set_freq;
case RIG_FUNCTION_RIG_GET_FREQ:
return rig->caps->get_freq;
case RIG_FUNCTION_RIG_SET_MODE:
return rig->caps->set_mode;
case RIG_FUNCTION_RIG_GET_MODE:
return rig->caps->get_mode;
case RIG_FUNCTION_RIG_SET_VFO:
return rig->caps->set_vfo;
case RIG_FUNCTION_RIG_GET_VFO:
return rig->caps->get_vfo;
case RIG_FUNCTION_RIG_SET_PTT:
return rig->caps->set_ptt;
case RIG_FUNCTION_RIG_GET_PTT:
return rig->caps->get_ptt;
case RIG_FUNCTION_RIG_GET_DCD:
return rig->caps->get_dcd;
case RIG_FUNCTION_RIG_SET_RPTR_SHIFT:
return rig->caps->set_rptr_shift;
case RIG_FUNCTION_RIG_GET_RPTR_SHIFT:
return rig->caps->get_rptr_shift;
case RIG_FUNCTION_RIG_SET_RPTR_OFFS:
return rig->caps->set_rptr_offs;
case RIG_FUNCTION_RIG_GET_RPTR_OFFS:
return rig->caps->get_rptr_offs;
case RIG_FUNCTION_RIG_SET_SPLIT_FREQ:
return rig->caps->set_split_freq;
case RIG_FUNCTION_RIG_GET_SPLIT_FREQ:
return rig->caps->get_split_freq;
case RIG_FUNCTION_RIG_SET_SPLIT_MODE:
return rig->caps->set_split_mode;
case RIG_FUNCTION_RIG_SET_SPLIT_FREQ_MODE:
return rig->caps->set_split_freq_mode;
case RIG_FUNCTION_RIG_GET_SPLIT_FREQ_MODE:
return rig->caps->get_split_freq_mode;
case RIG_FUNCTION_RIG_SET_SPLIT_VFO:
return rig->caps->set_split_vfo;
case RIG_FUNCTION_RIG_GET_SPLIT_VFO:
return rig->caps->get_split_vfo;
case RIG_FUNCTION_RIG_SET_RIT:
return rig->caps->set_rit;
case RIG_FUNCTION_RIG_GET_RIT:
return rig->caps->get_rit;
case RIG_FUNCTION_RIG_SET_XIT:
return rig->caps->set_xit;
case RIG_FUNCTION_RIG_GET_XIT:
return rig->caps->get_xit;
case RIG_FUNCTION_RIG_SET_TS:
return rig->caps->set_ts;
case RIG_FUNCTION_RIG_GET_TS:
return rig->caps->get_ts;
case RIG_FUNCTION_RIG_SET_DCS_CODE:
return rig->caps->set_dcs_code;
case RIG_FUNCTION_RIG_GET_DCS_CODE:
return rig->caps->get_dcs_code;
case RIG_FUNCTION_RIG_SET_TONE:
return rig->caps->set_tone;
case RIG_FUNCTION_RIG_GET_TONE:
return rig->caps->get_tone;
case RIG_FUNCTION_RIG_SET_CTCSS_TONE:
return rig->caps->set_ctcss_tone;
case RIG_FUNCTION_RIG_GET_CTCSS_TONE:
return rig->caps->get_ctcss_tone;
case RIG_FUNCTION_RIG_SET_DCS_SQL:
return rig->caps->set_dcs_sql;
case RIG_FUNCTION_RIG_GET_DCS_SQL:
return rig->caps->get_dcs_sql;
case RIG_FUNCTION_RIG_SET_TONE_SQL:
return rig->caps->set_tone_sql;
case RIG_FUNCTION_RIG_GET_TONE_SQL:
return rig->caps->get_tone_sql;
case RIG_FUNCTION_RIG_SET_CTCSS_SQL:
return rig->caps->set_ctcss_sql;
case RIG_FUNCTION_RIG_GET_CTCSS_SQL:
return rig->caps->get_ctcss_sql;
case RIG_FUNCTION_RIG_POWER2MW:
return rig->caps->power2mW;
case RIG_FUNCTION_RIG_MW2POWER:
return rig->caps->mW2power;
case RIG_FUNCTION_RIG_SET_POWERSTAT:
return rig->caps->set_powerstat;
case RIG_FUNCTION_RIG_GET_POWERSTAT:
return rig->caps->get_powerstat;
case RIG_FUNCTION_RIG_RESET:
return rig->caps->reset;
case RIG_FUNCTION_RIG_SET_ANT:
return rig->caps->set_ant;
case RIG_FUNCTION_RIG_GET_ANT:
return rig->caps->get_ant;
case RIG_FUNCTION_RIG_SET_LEVEL:
return rig->caps->set_level;
case RIG_FUNCTION_RIG_GET_LEVEL:
return rig->caps->get_level;
case RIG_FUNCTION_RIG_SET_FUNC:
return rig->caps->set_func;
case RIG_FUNCTION_RIG_GET_FUNC:
return rig->caps->get_func;
case RIG_FUNCTION_RIG_SET_PARM:
return rig->caps->set_parm;
case RIG_FUNCTION_RIG_GET_PARM:
return rig->caps->get_parm;
case RIG_FUNCTION_RIG_SET_EXT_LEVEL:
return rig->caps->set_ext_level;
case RIG_FUNCTION_RIG_GET_EXT_LEVEL:
return rig->caps->get_ext_level;
case RIG_FUNCTION_RIG_SET_EXT_FUNC:
return rig->caps->set_ext_func;
case RIG_FUNCTION_RIG_GET_EXT_FUNC:
return rig->caps->get_ext_func;
case RIG_FUNCTION_RIG_SET_EXT_PARM:
return rig->caps->set_ext_parm;
case RIG_FUNCTION_RIG_GET_EXT_PARM:
return rig->caps->get_ext_parm;
case RIG_FUNCTION_RIG_SET_CONF:
return rig->caps->set_conf;
case RIG_FUNCTION_RIG_GET_CONF:
return rig->caps->get_conf;
case RIG_FUNCTION_RIG_SEND_DTMF:
return rig->caps->send_dtmf;
case RIG_FUNCTION_RIG_SEND_MORSE:
return rig->caps->send_morse;
case RIG_FUNCTION_RIG_STOP_MORSE:
return rig->caps->stop_morse;
case RIG_FUNCTION_RIG_WAIT_MORSE:
return rig->caps->wait_morse;
case RIG_FUNCTION_RIG_SEND_VOICE_MEM:
return rig->caps->send_voice_mem;
case RIG_FUNCTION_RIG_SET_BANK:
return rig->caps->set_bank;
case RIG_FUNCTION_RIG_SET_MEM:
return rig->caps->set_mem;
case RIG_FUNCTION_RIG_GET_MEM:
return rig->caps->get_mem;
case RIG_FUNCTION_RIG_VFO_OP:
return rig->caps->vfo_op;
case RIG_FUNCTION_RIG_SCAN:
return rig->caps->scan;
case RIG_FUNCTION_RIG_SET_TRN:
return rig->caps->set_trn;
case RIG_FUNCTION_RIG_GET_TRN:
return rig->caps->get_trn;
case RIG_FUNCTION_RIG_DECODE_EVENT:
return rig->caps->decode_event;
case RIG_FUNCTION_RIG_SET_CHANNEL:
return rig->caps->set_channel;
case RIG_FUNCTION_RIG_GET_CHANNEL:
return rig->caps->get_channel;
case RIG_FUNCTION_RIG_GET_INFO:
return rig->caps->get_info;
case RIG_FUNCTION_RIG_SET_CHAN_ALL_CB:
return rig->caps->set_chan_all_cb;
case RIG_FUNCTION_RIG_GET_CHAN_ALL_CB:
return rig->caps->get_chan_all_cb;
case RIG_FUNCTION_RIG_SET_MEM_ALL_CB:
return rig->caps->set_mem_all_cb;
case RIG_FUNCTION_RIG_GET_MEM_ALL_CB:
return rig->caps->get_mem_all_cb;
case RIG_FUNCTION_RIG_SET_VFO_OPT:
return rig->caps->set_vfo_opt;
default:
rig_debug(RIG_DEBUG_ERR, "Unknown function?? function=%d\n", rig_function);
return NULL;
}
return RIG_OK;
}
//! @endcond