kopia lustrzana https://github.com/Hamlib/Hamlib
add token list for ext operations
rodzic
d3a22305ad
commit
c4e0696ee1
230
icom/icom.c
230
icom/icom.c
|
@ -2526,18 +2526,6 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||
return RIG_OK;
|
||||
}
|
||||
|
||||
int icom_set_ext_func(RIG *rig, vfo_t vfo, token_t token, int status)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
return icom_set_ext_cmd(rig, vfo, token, (value_t)status);
|
||||
}
|
||||
|
||||
int icom_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
return icom_get_ext_cmd(rig, vfo, token, (value_t *)status);
|
||||
}
|
||||
|
||||
int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val)
|
||||
{
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
@ -2572,67 +2560,73 @@ int icom_get_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t *val)
|
|||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
const struct icom_priv_caps *priv = rig->caps->priv;
|
||||
const struct cmdparams *cmd = priv->cmdparams ? priv->cmdparams : icom_ext_cmd;
|
||||
for (i = 0; cmd && cmd[i].token != 0; i++) {
|
||||
if (cmd[i].token == TOK_LINK) {
|
||||
cmd = icom_ext_cmd;
|
||||
i = -1;
|
||||
continue;
|
||||
}
|
||||
if (cmd[i].token == token) {
|
||||
if (!(cmd[i].submod & SC_MOD_RD)) break;
|
||||
if ((cmd[i].submod & SC_MOD_RW12) == SC_MOD_RW12) {
|
||||
retval = icom_get_raw_buf(rig, cmd[i].command, cmd[i].subcmd,
|
||||
1, &ssc, &reslen, resbuf);
|
||||
} else {
|
||||
retval = icom_get_raw_buf(rig, cmd[i].command, cmd[i].subcmd,
|
||||
cmd[i].sublen, (unsigned char *)cmd[i].subext, &reslen, resbuf);
|
||||
for (i = 0; rig->caps->ext_tokens && rig->caps->ext_tokens[i] != TOK_BACKEND_NONE; i++) {
|
||||
if (rig->caps->ext_tokens[i] == token) {
|
||||
|
||||
const struct icom_priv_caps *priv = rig->caps->priv;
|
||||
const struct cmdparams *cmd = priv->cmdparams ? priv->cmdparams : icom_ext_cmd;
|
||||
for (i = 0; cmd && cmd[i].token != 0; i++) {
|
||||
if (cmd[i].token == TOK_LINK) {
|
||||
cmd = icom_ext_cmd;
|
||||
i = -1;
|
||||
continue;
|
||||
}
|
||||
if (cmd[i].token == token) {
|
||||
if (!(cmd[i].submod & SC_MOD_RD)) break;
|
||||
if ((cmd[i].submod & SC_MOD_RW12) == SC_MOD_RW12) {
|
||||
retval = icom_get_raw_buf(rig, cmd[i].command, cmd[i].subcmd,
|
||||
1, &ssc, &reslen, resbuf);
|
||||
} else {
|
||||
retval = icom_get_raw_buf(rig, cmd[i].command, cmd[i].subcmd,
|
||||
cmd[i].sublen, (unsigned char *)cmd[i].subext, &reslen, resbuf);
|
||||
}
|
||||
if (retval != RIG_OK) {
|
||||
return retval;
|
||||
}
|
||||
switch (cmd[i].dattyp) {
|
||||
case CMD_DAT_WRD: {
|
||||
int wrd = 0;
|
||||
int j;
|
||||
for (j = 0; j < cmd[i].datlen; j++) {
|
||||
wrd = (wrd << 8) + resbuf[j];
|
||||
}
|
||||
val->i = wrd;
|
||||
}
|
||||
break;
|
||||
case CMD_DAT_STR:
|
||||
if (strlen(val->s) < reslen) {
|
||||
return -RIG_EINTERNAL;
|
||||
}
|
||||
memcpy(val->s, resbuf, reslen);
|
||||
val->s[reslen] = 0;
|
||||
break;
|
||||
case CMD_DAT_BUF:
|
||||
if (reslen > val->b.l) {
|
||||
return -RIG_EINTERNAL;
|
||||
}
|
||||
memcpy(val->b.d, resbuf, reslen);
|
||||
val->b.l = reslen;
|
||||
break;
|
||||
case CMD_DAT_INT:
|
||||
val->i = from_bcd_be(resbuf, (reslen * 2));
|
||||
break;
|
||||
case CMD_DAT_FLT:
|
||||
val->f = (float) from_bcd_be(resbuf, (reslen * 2));
|
||||
break;
|
||||
case CMD_DAT_BOL:
|
||||
val->i = (from_bcd_be(resbuf, (reslen * 2)) == 0) ? 0 : 1;
|
||||
break;
|
||||
case CMD_DAT_TIM:
|
||||
val->f = (float)((from_bcd_be(resbuf, 2) * 3600) + (from_bcd_be(&resbuf[1], 2) * 60));
|
||||
break;
|
||||
default:
|
||||
val->i = 0;
|
||||
break;
|
||||
}
|
||||
return RIG_OK;
|
||||
}
|
||||
}
|
||||
if (retval != RIG_OK) {
|
||||
return retval;
|
||||
}
|
||||
switch (cmd[i].dattyp) {
|
||||
case CMD_DAT_WRD: {
|
||||
int wrd = 0;
|
||||
int j;
|
||||
for (j = 0; j < cmd[i].datlen; j++) {
|
||||
wrd = (wrd << 8) + resbuf[j];
|
||||
}
|
||||
val->i = wrd;
|
||||
}
|
||||
break;
|
||||
case CMD_DAT_STR:
|
||||
if (strlen(val->s) < reslen) {
|
||||
return -RIG_EINTERNAL;
|
||||
}
|
||||
memcpy(val->s, resbuf, reslen);
|
||||
val->s[reslen] = 0;
|
||||
break;
|
||||
case CMD_DAT_BUF:
|
||||
if (reslen > val->b.l) {
|
||||
return -RIG_EINTERNAL;
|
||||
}
|
||||
memcpy(val->b.d, resbuf, reslen);
|
||||
val->b.l = reslen;
|
||||
break;
|
||||
case CMD_DAT_INT:
|
||||
val->i = from_bcd_be(resbuf, (reslen * 2));
|
||||
break;
|
||||
case CMD_DAT_FLT:
|
||||
val->f = (float) from_bcd_be(resbuf, (reslen * 2));
|
||||
break;
|
||||
case CMD_DAT_BOL:
|
||||
val->i = (from_bcd_be(resbuf, (reslen * 2)) == 0) ? 0 : 1;
|
||||
break;
|
||||
case CMD_DAT_TIM:
|
||||
val->f = (float)((from_bcd_be(resbuf, 2) * 3600) + (from_bcd_be(&resbuf[1], 2) * 60));
|
||||
break;
|
||||
default:
|
||||
val->i = 0;
|
||||
break;
|
||||
}
|
||||
return RIG_OK;
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
}
|
||||
return -RIG_EINVAL;
|
||||
|
@ -2652,51 +2646,57 @@ int icom_set_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t val)
|
|||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
|
||||
|
||||
const struct icom_priv_caps *priv = rig->caps->priv;
|
||||
const struct cmdparams *cmd = priv->cmdparams ? priv->cmdparams : icom_ext_cmd;
|
||||
for (i = 0; cmd && cmd[i].token != 0; i++) {
|
||||
if (cmd[i].token == TOK_LINK) {
|
||||
cmd = icom_ext_cmd;
|
||||
i = -1;
|
||||
continue;
|
||||
}
|
||||
if (cmd[i].token == token) {
|
||||
if (!(cmd[i].submod & SC_MOD_WR)) break;
|
||||
if ((cmd[i].submod & SC_MOD_RW12) == SC_MOD_RW12) {
|
||||
cmdbuf[0] = 0x01;
|
||||
cmdlen = 1;
|
||||
} else {
|
||||
cmdlen = cmd[i].sublen;
|
||||
memcpy(cmdbuf, cmd[i].subext, cmdlen);
|
||||
}
|
||||
int wrd = val.i;
|
||||
int j;
|
||||
switch (cmd[i].dattyp) {
|
||||
case CMD_DAT_WRD:
|
||||
for (j = 1; j <= cmd[i].datlen; j++) {
|
||||
cmdbuf[cmdlen + cmd[i].datlen - j] = wrd & 0xff;
|
||||
wrd >>= 8;
|
||||
for (i = 0; rig->caps->ext_tokens && rig->caps->ext_tokens[i] != TOK_BACKEND_NONE; i++) {
|
||||
if (rig->caps->ext_tokens[i] == token) {
|
||||
|
||||
const struct icom_priv_caps *priv = rig->caps->priv;
|
||||
const struct cmdparams *cmd = priv->cmdparams ? priv->cmdparams : icom_ext_cmd;
|
||||
for (i = 0; cmd && cmd[i].token != 0; i++) {
|
||||
if (cmd[i].token == TOK_LINK) {
|
||||
cmd = icom_ext_cmd;
|
||||
i = -1;
|
||||
continue;
|
||||
}
|
||||
if (cmd[i].token == token) {
|
||||
if (!(cmd[i].submod & SC_MOD_WR)) break;
|
||||
if ((cmd[i].submod & SC_MOD_RW12) == SC_MOD_RW12) {
|
||||
cmdbuf[0] = 0x01;
|
||||
cmdlen = 1;
|
||||
} else {
|
||||
cmdlen = cmd[i].sublen;
|
||||
memcpy(cmdbuf, cmd[i].subext, cmdlen);
|
||||
}
|
||||
int wrd = val.i;
|
||||
int j;
|
||||
switch (cmd[i].dattyp) {
|
||||
case CMD_DAT_WRD:
|
||||
for (j = 1; j <= cmd[i].datlen; j++) {
|
||||
cmdbuf[cmdlen + cmd[i].datlen - j] = wrd & 0xff;
|
||||
wrd >>= 8;
|
||||
}
|
||||
break;
|
||||
case CMD_DAT_BUF:
|
||||
memcpy(&cmdbuf[cmdlen], val.b.d, cmd[i].datlen);
|
||||
break;
|
||||
case CMD_DAT_INT:
|
||||
case CMD_DAT_BOL:
|
||||
to_bcd_be(&cmdbuf[cmdlen], val.i, (cmd[i].datlen * 2));
|
||||
break;
|
||||
case CMD_DAT_FLT:
|
||||
to_bcd_be(&cmdbuf[cmdlen], (int) val.f, (cmdlen * 2));
|
||||
break;
|
||||
case CMD_DAT_TIM:
|
||||
to_bcd_be(&cmdbuf[cmdlen], ((((int)val.f / 3600) * 100) + (((int)val.f / 60) % 60)), (cmd[i].datlen * 2));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
cmdlen += cmd[i].datlen;
|
||||
return icom_transaction(rig, cmd[i].command, cmd[i].subcmd,
|
||||
cmdbuf, cmdlen, ackbuf, &acklen);
|
||||
}
|
||||
break;
|
||||
case CMD_DAT_BUF:
|
||||
memcpy(&cmdbuf[cmdlen], val.b.d, cmd[i].datlen);
|
||||
break;
|
||||
case CMD_DAT_INT:
|
||||
case CMD_DAT_BOL:
|
||||
to_bcd_be(&cmdbuf[cmdlen], val.i, (cmd[i].datlen * 2));
|
||||
break;
|
||||
case CMD_DAT_FLT:
|
||||
to_bcd_be(&cmdbuf[cmdlen], (int) val.f, (cmdlen * 2));
|
||||
break;
|
||||
case CMD_DAT_TIM:
|
||||
to_bcd_be(&cmdbuf[cmdlen], ((((int)val.f / 3600) * 100) + (((int)val.f / 60) % 60)), (cmd[i].datlen * 2));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
cmdlen += cmd[i].datlen;
|
||||
return icom_transaction(rig, cmd[i].command, cmd[i].subcmd,
|
||||
cmdbuf, cmdlen, ackbuf, &acklen);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
}
|
||||
return -RIG_EINVAL;
|
||||
|
|
|
@ -236,8 +236,6 @@ int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val);
|
|||
int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val);
|
||||
int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
|
||||
int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
|
||||
int icom_set_ext_func(RIG *rig, vfo_t vfo, token_t token, int status);
|
||||
int icom_get_ext_func(RIG *rig, vfo_t vfo, token_t token, int *status);
|
||||
int icom_set_parm(RIG *rig, setting_t parm, value_t val);
|
||||
int icom_get_parm(RIG *rig, setting_t parm, value_t *val);
|
||||
int icom_set_ext_parm(RIG *rig, token_t token, value_t val);
|
||||
|
|
|
@ -513,9 +513,6 @@
|
|||
#define TOK_BACKLIGHT TOKEN_BACKEND(107)
|
||||
#define TOK_KEYLIGHT TOKEN_BACKEND(108)
|
||||
#define TOK_TIME TOKEN_BACKEND(109)
|
||||
#define TOK_ANL_R30 TOKEN_BACKEND(110)
|
||||
#define TOK_EAR_R30 TOKEN_BACKEND(111)
|
||||
#define TOK_REC_R30 TOKEN_BACKEND(112)
|
||||
#define TOK_DSTAR_CALL_SIGN TOKEN_BACKEND(120)
|
||||
#define TOK_DSTAR_MESSAGE TOKEN_BACKEND(121)
|
||||
#define TOK_DSTAR_STATUS TOKEN_BACKEND(122)
|
||||
|
|
20
icom/icr30.c
20
icom/icr30.c
|
@ -26,6 +26,7 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
#include "hamlib/rig.h"
|
||||
#include "token.h"
|
||||
#include "icom.h"
|
||||
#include "idx_builtin.h"
|
||||
#include "icom_defs.h"
|
||||
|
@ -47,17 +48,23 @@
|
|||
#define ICR30_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL)
|
||||
#define ICR30_SCAN_OPS (RIG_SCAN_NONE)
|
||||
|
||||
#define TOK_ANL TOKEN_BACKEND(110)
|
||||
#define TOK_EAR TOKEN_BACKEND(111)
|
||||
#define TOK_REC TOKEN_BACKEND(112)
|
||||
|
||||
int icr30_tokens[] = { TOK_ANL, TOK_EAR, TOK_REC, TOK_BACKEND_NONE };
|
||||
|
||||
struct confparams icr30_ext[] = {
|
||||
{ TOK_ANL_R30, "anl", "Auto noise limiter", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ TOK_EAR_R30, "ear", "Earphone mode", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ TOK_REC_R30, "record", "Recorder on/off", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ TOK_ANL, "anl", "Auto noise limiter", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ TOK_EAR, "ear", "Earphone mode", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ TOK_REC, "record", "Recorder on/off", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
struct cmdparams icr30_cmd[] = {
|
||||
{ TOK_ANL_R30, C_CTL_MEM, S_MEM_ANL, SC_MOD_RW, 0, {}, CMD_DAT_BOL, 1 },
|
||||
{ TOK_EAR_R30, C_CTL_MEM, S_MEM_EAR, SC_MOD_RW, 0, {}, CMD_DAT_BOL, 1 },
|
||||
{ TOK_REC_R30, C_CTL_MEM, S_MEM_REC, SC_MOD_WR, 0, {}, CMD_DAT_BOL, 1 },
|
||||
{ TOK_ANL, C_CTL_MEM, S_MEM_ANL, SC_MOD_RW, 0, {}, CMD_DAT_BOL, 1 },
|
||||
{ TOK_EAR, C_CTL_MEM, S_MEM_EAR, SC_MOD_RW, 0, {}, CMD_DAT_BOL, 1 },
|
||||
{ TOK_REC, C_CTL_MEM, S_MEM_REC, SC_MOD_WR, 0, {}, CMD_DAT_BOL, 1 },
|
||||
{ TOK_LINK }
|
||||
};
|
||||
|
||||
|
@ -146,6 +153,7 @@ const struct rig_caps icr30_caps =
|
|||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
},
|
||||
.parm_gran = {},
|
||||
.ext_tokens = icr30_tokens,
|
||||
.extlevels = icr30_ext,
|
||||
.extparms = icom_ext_parms,
|
||||
.ctcss_list = common_ctcss_list,
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "hamlib/rig.h"
|
||||
#include "misc.h"
|
||||
#include "idx_builtin.h"
|
||||
#include "token.h"
|
||||
|
||||
#include "icom.h"
|
||||
#include "icom_defs.h"
|
||||
|
@ -67,6 +68,8 @@
|
|||
{ 255, 60 }, \
|
||||
} }
|
||||
|
||||
int icr8600_tokens[] = { TOK_DSTAR_CALL_SIGN, TOK_BACKEND_NONE };
|
||||
|
||||
struct confparams icr8600_ext[] = {
|
||||
{ TOK_KEY_BEEP, "beep", "Key beep enable", "", "", RIG_CONF_CHECKBUTTON, {} },
|
||||
{ 0 }
|
||||
|
@ -134,6 +137,7 @@ const struct rig_caps icr8600_caps =
|
|||
.has_set_parm = RIG_PARM_SET(ICR8600_PARM_ALL),
|
||||
.level_gran = { [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } } },
|
||||
.parm_gran = { [PARM_TIME] = { .min = { .i = 0 }, .max = { .i = 86399} } },
|
||||
.ext_tokens = icr8600_tokens,
|
||||
.extlevels = icr8600_ext,
|
||||
.extparms = icom_ext_parms,
|
||||
.ctcss_list = common_ctcss_list,
|
||||
|
|
|
@ -1423,6 +1423,7 @@ struct rig_caps {
|
|||
|
||||
const struct confparams *extparms; /*!< Extension parm list, \sa ext.c */
|
||||
const struct confparams *extlevels; /*!< Extension level list, \sa ext.c */
|
||||
int *ext_tokens; /*!< Extension token list */
|
||||
|
||||
const tone_t *ctcss_list; /*!< CTCSS tones list, zero ended */
|
||||
const tone_t *dcs_list; /*!< DCS code list, zero ended */
|
||||
|
@ -1583,9 +1584,6 @@ struct rig_caps {
|
|||
int (*set_ext_level)(RIG *rig, vfo_t vfo, token_t token, value_t val);
|
||||
int (*get_ext_level)(RIG *rig, vfo_t vfo, token_t token, value_t *val);
|
||||
|
||||
int (*set_ext_func)(RIG *rig, vfo_t vfo, token_t token, int status);
|
||||
int (*get_ext_func)(RIG *rig, vfo_t vfo, token_t token, int *status);
|
||||
|
||||
int (*set_ext_parm)(RIG *rig, token_t token, value_t val);
|
||||
int (*get_ext_parm)(RIG *rig, token_t token, value_t *val);
|
||||
|
||||
|
@ -2098,17 +2096,6 @@ rig_get_ext_level HAMLIB_PARAMS((RIG *rig,
|
|||
token_t token,
|
||||
value_t *val));
|
||||
|
||||
extern HAMLIB_EXPORT(int)
|
||||
rig_set_ext_func HAMLIB_PARAMS((RIG *rig,
|
||||
vfo_t vfo,
|
||||
token_t token,
|
||||
int status));
|
||||
extern HAMLIB_EXPORT(int)
|
||||
rig_get_ext_func HAMLIB_PARAMS((RIG *rig,
|
||||
vfo_t vfo,
|
||||
token_t token,
|
||||
int *status));
|
||||
|
||||
extern HAMLIB_EXPORT(int)
|
||||
rig_set_ext_parm HAMLIB_PARAMS((RIG *rig,
|
||||
token_t token,
|
||||
|
|
|
@ -2949,7 +2949,7 @@ declare_proto_rig(set_parm)
|
|||
break;
|
||||
|
||||
case RIG_CONF_BINARY:
|
||||
val.b.d = arg2;
|
||||
val.b.d = (unsigned char *)arg2;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Ładowanie…
Reference in New Issue