add token list for ext operations

pull/179/head
Malcolm Herring 2020-01-06 19:54:09 +00:00
rodzic d3a22305ad
commit c4e0696ee1
7 zmienionych plików z 135 dodań i 141 usunięć

Wyświetl plik

@ -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;

Wyświetl plik

@ -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);

Wyświetl plik

@ -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)

Wyświetl plik

@ -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,

Wyświetl plik

@ -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,

Wyświetl plik

@ -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,

Wyświetl plik

@ -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: