From d91376ab4827d4fc2d4ef12bcf2ded8e3dab34f5 Mon Sep 17 00:00:00 2001 From: Malcolm Herring Date: Tue, 7 Jan 2020 15:27:24 +0000 Subject: [PATCH] more ext operations --- icom/ic7100.c | 9 +++- icom/icom.c | 24 +++++----- icom/icom_defs.h | 9 ++-- icom/icr30.c | 5 +- icom/icr8600.c | 118 ++++++----------------------------------------- 5 files changed, 43 insertions(+), 122 deletions(-) diff --git a/icom/ic7100.c b/icom/ic7100.c index 86a7d6811..028c36829 100644 --- a/icom/ic7100.c +++ b/icom/ic7100.c @@ -31,6 +31,7 @@ #include "frame.h" #include "idx_builtin.h" #include "bandplan.h" +#include "token.h" #define IC7100_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|\ @@ -100,11 +101,16 @@ #define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) +int ic7100_tokens[] = { TOK_KEY_BEEP, TOK_BACKLIGHT, TOK_KEYLIGHT, TOK_TIME, + TOK_DSTAR_CODE, TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE, TOK_DSTAR_STATUS, + TOK_DSTAR_MY_CS, TOK_DSTAR_TX_CS, TOK_DSTAR_TX_MESS, + TOK_BACKEND_NONE }; + struct confparams ic7100_ext[] = { { TOK_TIME, "time", "Time (seconds)", "", "", RIG_CONF_NUMERIC, { .n = { 0, 2359, 1 } } }, { 0 } }; - + struct cmdparams ic7100_cmd[] = { { TOK_TIME, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x21}, CMD_DAT_TIM, 2 }, { TOK_LINK } @@ -220,6 +226,7 @@ const struct rig_caps ic7100_caps = [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, }, + .ext_tokens = ic7100_tokens, .extlevels = ic7100_ext, .extparms = icom_ext_parms, .parm_gran = {}, diff --git a/icom/icom.c b/icom/icom.c index 4a1517d55..e14526401 100644 --- a/icom/icom.c +++ b/icom/icom.c @@ -410,7 +410,7 @@ const struct confparams icom_ext_parms[] = { TOK_DSTAR_DSQL, "dsdsql", "D-STAR CSQL Status", "", "", RIG_CONF_CHECKBUTTON, {} }, { TOK_DSTAR_CALL_SIGN, "dscals", "D-STAR Call sign", "", "", RIG_CONF_BINARY, {} }, { TOK_DSTAR_MESSAGE, "dsrmes", "D-STAR Rx Message", "", "", RIG_CONF_STRING, {} }, - { TOK_DSTAR_STATUS, "dsstat", "D-STAR Rx Status", "", "", RIG_CONF_NUMERIC, {} }, + { TOK_DSTAR_STATUS, "dsstat", "D-STAR Rx Status", "", "", RIG_CONF_BINARY, {} }, { TOK_DSTAR_GPS_DATA, "dsgpsd", "D-STAR GPS Data", "", "", RIG_CONF_BINARY, {} }, { TOK_DSTAR_GPS_MESS, "dsgpsm", "D-STAR GPS Message", "", "", RIG_CONF_STRING, {} }, { TOK_DSTAR_CODE, "dscode", "D-STAR CSQL Code", "", "", RIG_CONF_NUMERIC, {} }, @@ -418,13 +418,9 @@ const struct confparams icom_ext_parms[] = { TOK_DSTAR_MY_CS, "dsmycs", "D-STAR MY Call Sign", "", "", RIG_CONF_STRING, {} }, { TOK_DSTAR_TX_CS, "dstxcs", "D-STAR Tx Call Sign", "", "", RIG_CONF_BINARY, {} }, { TOK_DSTAR_TX_MESS, "dstmes", "D-STAR Tx Message", "", "", RIG_CONF_STRING, {} }, - { TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "", "", RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } } }, + { TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "", "", RIG_CONF_NUMERIC, {} }, { TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "", "", RIG_CONF_CHECKBUTTON, {} }, - { TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "", "", RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } } }, - { TOK_KEY_BEEP, "beep", "Key beep enable", "", "", RIG_CONF_CHECKBUTTON, {} }, - { TOK_BACKLIGHT, "backlight", "Display brightness", "", "", RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } } }, - { TOK_KEYLIGHT, "keylight", "LED brightness", "", "", RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } } }, - { TOK_TIME, "time", "Time (seconds)", "", "", RIG_CONF_NUMERIC, { .n = { 0, 2359, 1 } } }, + { TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "", "", RIG_CONF_NUMERIC, {} }, { RIG_CONF_END, NULL, } }; @@ -436,10 +432,10 @@ const struct cmdparams icom_ext_cmd[] = { { TOK_DSTAR_CALL_SIGN, C_CTL_DIG, S_DIG_DSCALS, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 38 }, { TOK_DSTAR_MESSAGE, C_CTL_DIG, S_DIG_DSMESS, SC_MOD_RW12, 2, {0}, CMD_DAT_STR, 32 }, - { TOK_DSTAR_STATUS, C_CTL_DIG, S_DIG_DSRSTS, SC_MOD_RW12, 2, {0}, CMD_DAT_WRD, 1 }, + { TOK_DSTAR_STATUS, C_CTL_DIG, S_DIG_DSRSTS, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 1 }, { TOK_DSTAR_GPS_DATA, C_CTL_DIG, S_DIG_DSGPSD, SC_MOD_RW12, 2, {0}, CMD_DAT_BUF, 52 }, { TOK_DSTAR_GPS_MESS, C_CTL_DIG, S_DIG_DSGPSM, SC_MOD_RW12, 2, {0}, CMD_DAT_STR, 52 }, - { TOK_DSTAR_DSQL, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW, 2, {0}, CMD_DAT_INT, 1 }, + { TOK_DSTAR_DSQL, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW, 1, {0}, CMD_DAT_BOL, 1 }, { TOK_DSTAR_CODE, C_CTL_DIG, S_DIG_DSCSQL, SC_MOD_RW12, 2, {0}, CMD_DAT_FLT, 1 }, { TOK_DSTAR_TX_DATA, C_CTL_DSD, S_DSD_DSTXDT, SC_MOD_RW, 1, {0}, CMD_DAT_BUF, 30 }, { TOK_DSTAR_MY_CS, C_CTL_DVT, S_DVT_DSMYCS, SC_MOD_RW, 1, {0}, CMD_DAT_STR, 12 }, @@ -448,10 +444,6 @@ const struct cmdparams icom_ext_cmd[] = { TOK_DRIVE_GAIN, C_CTL_LVL, S_LVL_DRIVE, SC_MOD_RW, 1, {0}, CMD_DAT_FLT, 2 }, { TOK_DIGI_SEL_FUNC, C_CTL_FUNC, S_FUNC_DIGISEL, SC_MOD_RW, 1, {0}, CMD_DAT_BOL, 1 }, { TOK_DIGI_SEL_LEVEL, C_CTL_LVL, S_LVL_DIGI, SC_MOD_RW, 1, {0}, CMD_DAT_FLT, 2 }, - { TOK_KEY_BEEP, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x38}, CMD_DAT_BOL, 1 }, - { TOK_BACKLIGHT, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x15}, CMD_DAT_FLT, 2 }, - { TOK_KEYLIGHT, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x16}, CMD_DAT_FLT, 2 }, - { TOK_TIME, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x32}, CMD_DAT_TIM, 2 }, { 0 } }; @@ -2613,6 +2605,9 @@ int icom_get_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t *val) case CMD_DAT_FLT: val->f = (float) from_bcd_be(resbuf, (reslen * 2)); break; + case CMD_DAT_LVL: + val->f = (float) from_bcd_be(resbuf, (reslen * 2)) / 255.0; + break; case CMD_DAT_BOL: val->i = (from_bcd_be(resbuf, (reslen * 2)) == 0) ? 0 : 1; break; @@ -2685,6 +2680,9 @@ int icom_set_ext_cmd(RIG *rig, vfo_t vfo, token_t token, value_t val) case CMD_DAT_FLT: to_bcd_be(&cmdbuf[cmdlen], (int) val.f, (cmdlen * 2)); break; + case CMD_DAT_LVL: + to_bcd_be(&cmdbuf[cmdlen], (int)(val.f * 255.0), (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; diff --git a/icom/icom_defs.h b/icom/icom_defs.h index 8a4406dc3..0e9c7b8ac 100644 --- a/icom/icom_defs.h +++ b/icom/icom_defs.h @@ -541,9 +541,10 @@ #define CMD_DAT_WRD 0x00 /* literal single word type */ #define CMD_DAT_INT 0x01 /* bcd int type */ #define CMD_DAT_FLT 0x02 /* bcd float type */ - #define CMD_DAT_BOL 0x03 /* bcd boolean type */ - #define CMD_DAT_STR 0x04 /* string type */ - #define CMD_DAT_BUF 0x05 /* literal byte buffer type */ - #define CMD_DAT_TIM 0x06 /* Time type HHMM<>seconds */ + #define CMD_DAT_LVL 0x03 /* bcd level type */ + #define CMD_DAT_BOL 0x04 /* bcd boolean type */ + #define CMD_DAT_STR 0x05 /* string type */ + #define CMD_DAT_BUF 0x06 /* literal byte buffer type */ + #define CMD_DAT_TIM 0x07 /* Time type HHMM<>seconds */ #endif /* _ICOM_DEFS_H */ diff --git a/icom/icr30.c b/icom/icr30.c index 5fae80343..f3b6086b9 100644 --- a/icom/icr30.c +++ b/icom/icr30.c @@ -52,7 +52,10 @@ #define TOK_EAR TOKEN_BACKEND(111) #define TOK_REC TOKEN_BACKEND(112) -int icr30_tokens[] = { TOK_ANL, TOK_EAR, TOK_REC, TOK_BACKEND_NONE }; +int icr30_tokens[] = { TOK_ANL, TOK_EAR, TOK_REC, + TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE, TOK_DSTAR_STATUS, + TOK_DSTAR_GPS_DATA, TOK_DSTAR_GPS_MESS, TOK_DSTAR_CODE, TOK_DSTAR_TX_DATA, + TOK_BACKEND_NONE }; struct confparams icr30_ext[] = { { TOK_ANL, "anl", "Auto noise limiter", "", "", RIG_CONF_CHECKBUTTON, {} }, diff --git a/icom/icr8600.c b/icom/icr8600.c index e15f1511c..225629333 100644 --- a/icom/icr8600.c +++ b/icom/icr8600.c @@ -50,8 +50,7 @@ RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_PREAMP|\ RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) -#define ICR8600_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|\ - RIG_PARM_BEEP|RIG_PARM_TIME|RIG_PARM_KEYLIGHT) +#define ICR8600_PARM_ALL (RIG_PARM_NONE) #define ICR8600_VFO_ALL (RIG_VFO_VFO|RIG_VFO_MEM) @@ -68,15 +67,24 @@ { 255, 60 }, \ } } -int icr8600_tokens[] = { TOK_DSTAR_CALL_SIGN, TOK_BACKEND_NONE }; +int icr8600_tokens[] = { TOK_KEY_BEEP, TOK_BACKLIGHT, TOK_KEYLIGHT, TOK_TIME, + TOK_DSTAR_DSQL, TOK_DSTAR_CALL_SIGN, TOK_DSTAR_MESSAGE, TOK_DSTAR_STATUS, TOK_DSTAR_GPS_DATA, + TOK_DSTAR_GPS_MESS, TOK_DSTAR_CODE, TOK_DSTAR_TX_DATA, + TOK_BACKEND_NONE }; struct confparams icr8600_ext[] = { { TOK_KEY_BEEP, "beep", "Key beep enable", "", "", RIG_CONF_CHECKBUTTON, {} }, + { TOK_BACKLIGHT, "backlight", "Display brightness", "", "", RIG_CONF_NUMERIC, {} }, + { TOK_KEYLIGHT, "keylight", "LED brightness", "", "", RIG_CONF_NUMERIC, {} }, + { TOK_TIME, "time", "Time (seconds)", "", "", RIG_CONF_NUMERIC, {} }, { 0 } }; struct cmdparams icr8600_cmd[] = { { TOK_KEY_BEEP, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x00, 0x38}, CMD_DAT_BOL, 1 }, + { TOK_BACKLIGHT, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x15}, CMD_DAT_LVL, 2 }, + { TOK_KEYLIGHT, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x16}, CMD_DAT_LVL, 2 }, + { TOK_TIME, C_CTL_MEM, S_MEM_PARM, SC_MOD_RW, 2, {0x01, 0x32}, CMD_DAT_TIM, 2 }, { TOK_LINK } }; @@ -93,9 +101,6 @@ struct cmdparams icr8600_cmd[] = { .flags = 1, \ } -int icr8600_set_parm(RIG *rig, setting_t parm, value_t val); -int icr8600_get_parm(RIG *rig, setting_t parm, value_t *val); - static const struct icom_priv_caps icr8600_priv_caps = { 0x96, /* default address */ @@ -238,10 +243,10 @@ const struct rig_caps icr8600_caps = .get_func = icom_get_func, .set_level = icom_set_level, .get_level = icom_get_level, - .set_parm = icr8600_set_parm, - .get_parm = icr8600_get_parm, - .set_ext_parm = icom_set_ext_parm, - .get_ext_parm = icom_get_ext_parm, + .set_parm = icom_set_parm, + .get_parm = icom_get_parm, + .set_ext_parm = icom_set_ext_parm, + .get_ext_parm = icom_get_ext_parm, .get_dcd = icom_get_dcd, .set_mem = icom_set_mem, .vfo_op = icom_vfo_op, @@ -254,96 +259,3 @@ const struct rig_caps icr8600_caps = .get_dcs_sql = icom_get_dcs_sql, }; - -int icr8600_set_parm(RIG *rig, setting_t parm, value_t val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x00; - parmbuf[1] = 0x38; - return icom_set_custom_parm(rig, 2, parmbuf, 1, val.i ? 1 : 0); - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x01; - parmbuf[1] = 0x15; - return icom_set_custom_parm(rig, 2, parmbuf, 2, (int)(val.f * 255.0f)); - - case RIG_PARM_KEYLIGHT: - parmbuf[0] = 0x01; - parmbuf[1] = 0x16; - return icom_set_custom_parm(rig, 2, parmbuf, 2, val.f != 0 ? 255 : 0); - - case RIG_PARM_TIME: - parmbuf[0] = 0x01; - parmbuf[1] = 0x32; - return icom_set_custom_parm_time(rig, 2, parmbuf, val.i); - - default: - return icom_set_parm(rig, parm, val); - } -} - -int icr8600_get_parm(RIG *rig, setting_t parm, value_t *val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - int retval; - int icom_val; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x00; - parmbuf[1] = 0x38; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->i = icom_val ? 1 : 0; - break; - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x01; - parmbuf[1] = 0x15; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = (float) icom_val / 255.0f; - break; - - case RIG_PARM_KEYLIGHT: - parmbuf[0] = 0x01; - parmbuf[1] = 0x16; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = icom_val != 0; - break; - - case RIG_PARM_TIME: - parmbuf[0] = 0x01; - parmbuf[1] = 0x32; - return icom_get_custom_parm_time(rig, 2, parmbuf, &val->i); - - default: - return icom_get_parm(rig, parm, val); - } - - return RIG_OK; -}