Merge pull request #20 from mdblack98/master

Changes for IC-7300 and IC-7200
Hamlib-3.1
Nate Bargmann 2016-05-26 18:40:50 -05:00
commit 00fb911ce7
5 zmienionych plików z 468 dodań i 75 usunięć

Wyświetl plik

@ -80,7 +80,9 @@ static const struct icom_priv_caps IC7200_priv_caps = {
0x76, /* default address */ 0x76, /* default address */
0, /* 731 mode */ 0, /* 731 mode */
0, /* no XCHG */ 0, /* no XCHG */
ic7200_ts_sc_list ic7200_ts_sc_list,
.civ_version = 1 /* new version of some commands, e.g. ic7200/7300 */
}; };

Wyświetl plik

@ -1,6 +1,7 @@
/* /*
* Hamlib CI-V backend - description of IC-7300 and variations * Hamlib CI-V backend - description of IC-7300 and variations
* Adapted by J.Watson from IC-7000 code (c) 2004 by Stephane Fillod * Adapted by J.Watson from IC-7000 code (c) 2004 by Stephane Fillod
* Adapted from IC-7200 (c) 2016 by Michael Black W9MDB
* *
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
@ -19,11 +20,6 @@
* *
*/ */
/*
* 26Mar09: Corrected tuning steps and added data modes.
* 25Mar09: Initial release
*/
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "config.h" #include "config.h"
#endif #endif
@ -50,25 +46,30 @@
#define IC7300_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) #define IC7300_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR)
#define IC7300_AM_TX_MODES (RIG_MODE_AM) #define IC7300_AM_TX_MODES (RIG_MODE_AM)
#define IC7300_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO) #define IC7300_FUNCS (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT)
#define IC7300_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC) #define IC7300_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC)
// Not implemented yet
//#define IC7300_EXT_LEVELS (TOK_LEVEL_MONITOR)
#define IC7300_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) #define IC7300_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM)
#define IC7300_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP) #define IC7300_PARMS (RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP)
#define IC7300_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) #define IC7300_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE)
#define IC7300_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_SLCT|RIG_SCAN_PRIO) #define IC7300_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_SLCT)
#define IC7300_ANTS (RIG_ANT_1) /* ant-1 is Hf-6m */ #define IC7300_ANTS (RIG_ANT_1) /* ant-1 is Hf-6m */
/* /*
* FIXME: This is a guess real measures please! * FIXME: This is a guess real measures please!
*/ */
#define IC7300_STR_CAL { 2, \ #define IC7300_STR_CAL { 3, \
{ \ { \
{ 0, -60 }, \ { 0, -54 }, \
{ 255, 60 } \ { 120, 0 }, \
{ 241, 64 } \
} } } }
/* /*
@ -80,22 +81,41 @@ static const struct icom_priv_caps IC7300_priv_caps = {
0x94, /* default address */ 0x94, /* default address */
0, /* 731 mode */ 0, /* 731 mode */
0, /* no XCHG */ 0, /* no XCHG */
ic7300_ts_sc_list ic7300_ts_sc_list,
.civ_version = 1 /* new version of some commands, e.g. ic7200/7300 */
}; };
/* Private IC7300 extra levels definitions
*
* Token definitions for .cfgparams in rig_caps
* See enum rig_conf_e and struct confparams in rig.h
*/
const struct confparams ic7300_ext_levels[] = {
{ TOK_LEVEL_MONITOR, "MONITORGAIN", "Monitor gain", "Monitor gain",
NULL, RIG_CONF_NUMERIC, { .n = { 0, 1, 0 } }
},
{ RIG_CONF_END, NULL, }
};
int ic7300_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *ts);
int ic7300_set_rit(RIG *rig, vfo_t vfo, shortfreq_t ts);
int ic7300_set_xit(RIG *rig, vfo_t vfo, shortfreq_t ts);
int ic7300_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
int ic7300_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
const struct rig_caps ic7300_caps = { const struct rig_caps ic7300_caps = {
.rig_model = RIG_MODEL_IC7300, .rig_model = RIG_MODEL_IC7300,
.model_name = "IC-7300", .model_name = "IC-7300",
.mfg_name = "Icom", .mfg_name = "Icom",
.version = BACKEND_VER, .version = BACKEND_VER ".1",
.copyright = "LGPL", .copyright = "LGPL",
.status = RIG_STATUS_ALPHA, .status = RIG_STATUS_STABLE,
.rig_type = RIG_TYPE_TRANSCEIVER, .rig_type = RIG_TYPE_TRANSCEIVER,
.ptt_type = RIG_PTT_RIG, .ptt_type = RIG_PTT_RIG,
.dcd_type = RIG_DCD_RIG, .dcd_type = RIG_DCD_RIG,
.port_type = RIG_PORT_SERIAL, .port_type = RIG_PORT_SERIAL,
.serial_rate_min = 300, .serial_rate_min = 4800,
.serial_rate_max = 19200, .serial_rate_max = 19200,
.serial_data_bits = 8, .serial_data_bits = 8,
.serial_stop_bits = 1, .serial_stop_bits = 1,
@ -115,10 +135,11 @@ const struct rig_caps ic7300_caps = {
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
}, },
.parm_gran = {}, .parm_gran = {},
.extlevels = ic7300_ext_levels,
.ctcss_list = full_ctcss_list, .ctcss_list = full_ctcss_list,
.dcs_list = NULL, .dcs_list = NULL,
.preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess*/ .preamp = { 1, 2, RIG_DBLST_END, },
.attenuator = { 20, RIG_DBLST_END, }, /* value taken from p.45 of manual*/ .attenuator = { 1, RIG_DBLST_END, }, /* value taken from p.45 of manual*/
.max_rit = Hz(9999), .max_rit = Hz(9999),
.max_xit = Hz(9999), .max_xit = Hz(9999),
.max_ifshift = Hz(0), .max_ifshift = Hz(0),
@ -130,8 +151,8 @@ const struct rig_caps ic7300_caps = {
.chan_desc_sz = 0, .chan_desc_sz = 0,
.chan_list = { .chan_list = {
{ 1, 199, RIG_MTYPE_MEM }, { 1, 99, RIG_MTYPE_MEM },
{ 200, 201, RIG_MTYPE_EDGE }, /* two by two */ { 100, 101, RIG_MTYPE_EDGE }, /* two by two */
RIG_CHAN_END, RIG_CHAN_END,
}, },
@ -152,13 +173,14 @@ const struct rig_caps ic7300_caps = {
RIG_FRNG_END, }, RIG_FRNG_END, },
.tuning_steps = { .tuning_steps = {
{IC7300_1HZ_TS_MODES,1}, {IC7300_ALL_RX_MODES,Hz(1)},
{IC7300_NOT_TS_MODES,10},
{IC7300_ALL_RX_MODES,Hz(100)},
{IC7300_ALL_RX_MODES,kHz(1)}, {IC7300_ALL_RX_MODES,kHz(1)},
{IC7300_ALL_RX_MODES,kHz(5)}, {IC7300_ALL_RX_MODES,kHz(5)},
{IC7300_ALL_RX_MODES,kHz(9)}, {IC7300_ALL_RX_MODES,kHz(9)},
{IC7300_ALL_RX_MODES,kHz(10)}, {IC7300_ALL_RX_MODES,kHz(10)},
{IC7300_ALL_RX_MODES,kHz(12.5)},
{IC7300_ALL_RX_MODES,kHz(20)},
{IC7300_ALL_RX_MODES,kHz(25)},
RIG_TS_END, RIG_TS_END,
}, },
@ -198,15 +220,23 @@ const struct rig_caps ic7300_caps = {
.set_ant = NULL, /*automatically set by rig depending band */ .set_ant = NULL, /*automatically set by rig depending band */
.get_ant = NULL, .get_ant = NULL,
.set_rit = icom_set_rit, .set_rit = ic7300_set_rit,
.get_rit = ic7300_get_rit,
// the 7300 has only one register for both RIT and Delta TX
// you can turn one or both on -- but both end up just being in sync
// so we'll just reuse the rit settings
.get_xit = ic7300_get_rit,
.set_xit = ic7300_set_xit,
.decode_event = icom_decode_event, .decode_event = icom_decode_event,
.set_level = icom_set_level, .set_level = icom_set_level,
.get_level = icom_get_level, .get_level = icom_get_level,
.set_func = icom_set_func, .set_ext_level = icom_set_ext_level,
.get_func = icom_get_func, .get_ext_level = icom_get_ext_level,
.set_parm = NULL, .set_func = ic7300_set_func,
.get_parm = NULL, .get_func = ic7300_get_func,
.set_parm = icom_set_parm,
.get_parm = icom_get_parm,
.set_mem = icom_set_mem, .set_mem = icom_set_mem,
.vfo_op = icom_vfo_op, .vfo_op = icom_vfo_op,
.scan = icom_scan, .scan = icom_scan,
@ -214,7 +244,7 @@ const struct rig_caps ic7300_caps = {
.get_ptt = icom_get_ptt, .get_ptt = icom_get_ptt,
.get_dcd = icom_get_dcd, .get_dcd = icom_get_dcd,
.set_ts = icom_set_ts, .set_ts = icom_set_ts,
.get_ts = NULL, .get_ts = icom_get_ts,
.set_rptr_shift = icom_set_rptr_shift, .set_rptr_shift = icom_set_rptr_shift,
.get_rptr_shift = NULL, .get_rptr_shift = NULL,
.set_rptr_offs = icom_set_rptr_offs, .set_rptr_offs = icom_set_rptr_offs,
@ -229,6 +259,143 @@ const struct rig_caps ic7300_caps = {
.get_split_mode = icom_get_split_mode, .get_split_mode = icom_get_split_mode,
.set_split_vfo = icom_set_split_vfo, .set_split_vfo = icom_set_split_vfo,
.get_split_vfo = NULL, .get_split_vfo = NULL,
.set_powerstat = icom_set_powerstat,
.power2mW = icom_power2mW,
.mW2power = icom_mW2power,
.send_morse = icom_send_morse .send_morse = icom_send_morse
}; };
int ic7300_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *ts)
{
unsigned char tsbuf[MAXFRAMELEN];
int ts_len, retval;
retval = icom_transaction (rig, 0x21, 0x00, NULL, 0, tsbuf, &ts_len);
if (retval != RIG_OK)
return retval;
/*
* tsbuf nibbles should contain 10,1,1000,100 hz digits and 00=+, 01=- bit
*/
rig_debug(RIG_DEBUG_VERBOSE,"ts_len=%d\n",ts_len);
if (ts_len != 5) {
rig_debug(RIG_DEBUG_ERR,"ic7300_get_ts: wrong frame len=%d\n",
ts_len);
return -RIG_ERJCTED;
}
*ts = tsbuf[2] & 0x0f * 1;
*ts += (tsbuf[2] >> 4) * 10;
*ts += (tsbuf[3]& 0x0f) * 100;
*ts += (tsbuf[3] >> 4) * 1000;
if (tsbuf[4]!=0) *ts *= -1;
return RIG_OK;
}
static int xit_flag = 0;
int ic7300_set_rit(RIG *rig, vfo_t vfo, shortfreq_t ts)
{
unsigned char tsbuf[8];
char tmpbuf[8];
unsigned char ackbuf[16];
int ack_len;
int retval;
rig_debug(RIG_DEBUG_VERBOSE,"ic7300_set_rit: ts=%d\n",ts);
tsbuf[2] = 0;
// set sign bit
if (ts < 0) tsbuf[2] = 1;
snprintf(tmpbuf,sizeof(tmpbuf),"%04d",abs(ts));
unsigned int b1,b2;
sscanf(tmpbuf,"%02x%02x",&b1,&b2);
tsbuf[1] = b1;
tsbuf[0] = b2;
if (ts != 0) {
retval = icom_transaction (rig, 0x21, 0x00, tsbuf, 3, ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
}
if (ts == 0) { // turn off both rit/xit
retval = ic7300_set_func(rig,vfo,RIG_FUNC_XIT,0);
if (retval != RIG_OK) return retval;
retval = ic7300_set_func(rig,vfo,RIG_FUNC_RIT,0);
}
else {
if (xit_flag) retval = ic7300_set_func(rig,vfo,RIG_FUNC_XIT,1);
else retval = ic7300_set_func(rig,vfo,RIG_FUNC_RIT,1);
}
return retval;
}
int ic7300_set_xit(RIG *rig, vfo_t vfo, shortfreq_t ts)
{
int retval;
xit_flag = 1;
retval = ic7300_set_rit(rig,vfo,ts);
xit_flag = 0;
return retval;
}
int ic7300_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
{
unsigned char ackbuf[16];
int ack_len;
int retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (!rig || !status)
return -RIG_EINVAL;
switch (func) {
case RIG_FUNC_RIT:
retval = icom_transaction (rig, 0x21, 0x01, NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK) return retval;
if (ack_len != 3) return RIG_BUSERROR;
*status = ackbuf[2];
break;
case RIG_FUNC_XIT:
retval = icom_transaction (rig, 0x21, 0x02, NULL, 0, ackbuf, &ack_len);
if (ack_len != 3) return RIG_BUSERROR;
*status = ackbuf[2];
break;
default:
return icom_get_func(rig, vfo, func, status);
}
return retval;
}
int ic7300_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
{
unsigned char ts_buf[4];
unsigned char ackbuf[8];
int ack_len;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
if (!rig)
return -RIG_EINVAL;
switch (func) {
case RIG_FUNC_RIT:
ts_buf[0] = status;
return icom_transaction (rig, 0x21, 0x01, ts_buf, 1, ackbuf, &ack_len);
case RIG_FUNC_XIT:
ts_buf[0] = status;
return icom_transaction (rig, 0x21, 0x02, ts_buf, 1, ackbuf, &ack_len);
default:
return icom_set_func(rig, vfo, func, status);
}
return RIG_OK;
}

Wyświetl plik

@ -221,7 +221,7 @@ const struct ts_sc_list ic7200_ts_sc_list[] = {
}; };
const struct ts_sc_list ic7300_ts_sc_list[] = { const struct ts_sc_list ic7300_ts_sc_list[] = {
{ 10, 0x00 }, /* Manual says "Send/read the tuning step OFF" */ { 1, 0x00 }, /* Manual says "Send/read the tuning step OFF" */
{ 100, 0x01 }, { 100, 0x01 },
{ kHz(1), 0x02 }, { kHz(1), 0x02 },
{ kHz(5), 0x03 }, { kHz(5), 0x03 },
@ -378,6 +378,7 @@ int icom_init(RIG *rig)
priv_caps = (const struct icom_priv_caps *) caps->priv; priv_caps = (const struct icom_priv_caps *) caps->priv;
priv = (struct icom_priv_data*)calloc(1, sizeof(struct icom_priv_data)); priv = (struct icom_priv_data*)calloc(1, sizeof(struct icom_priv_data));
if (!priv) { if (!priv) {
/* whoops! memory shortage! */ /* whoops! memory shortage! */
@ -396,6 +397,8 @@ int icom_init(RIG *rig)
priv->re_civ_addr = priv_caps->re_civ_addr; priv->re_civ_addr = priv_caps->re_civ_addr;
priv->civ_731_mode = priv_caps->civ_731_mode; priv->civ_731_mode = priv_caps->civ_731_mode;
priv->no_xchg = priv_caps->no_xchg; priv->no_xchg = priv_caps->no_xchg;
priv->civ_version = priv_caps->civ_version;
rig_debug(RIG_DEBUG_TRACE,"icom_init: civ_version=%d\n", priv->civ_version);
return RIG_OK; return RIG_OK;
} }
@ -923,6 +926,7 @@ int icom_set_vfo(RIG *rig, vfo_t vfo)
int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{ {
struct rig_state *rs; struct rig_state *rs;
struct icom_priv_data *priv;
unsigned char lvlbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; unsigned char lvlbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN];
int ack_len=sizeof(ackbuf), lvl_len; int ack_len=sizeof(ackbuf), lvl_len;
int lvl_cn, lvl_sc; /* Command Number, Subcommand */ int lvl_cn, lvl_sc; /* Command Number, Subcommand */
@ -930,6 +934,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
int i, retval; int i, retval;
rs = &rig->state; rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
/* /*
@ -956,7 +961,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
break; break;
} }
} }
if (rig->caps->rig_model == RIG_MODEL_IC7300) { if (priv->civ_version == 1) {
switch (level) { switch (level) {
case RIG_LEVEL_KEYSPD: case RIG_LEVEL_KEYSPD:
if (val.i < 6) val.i = 6; if (val.i < 6) val.i = 6;
@ -1097,9 +1102,18 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
lvl_sc = S_LVL_VOXGAIN; lvl_sc = S_LVL_VOXGAIN;
} }
break; break;
case RIG_LEVEL_VOXDELAY: /* IC-910H */ case RIG_LEVEL_VOXDELAY:
if (priv->civ_version == 1) {
lvl_cn = C_CTL_MEM;
lvl_sc = 0x05; // plus 0191 and value 0-20 = 0-2 secs
lvl_len = 2;
lvlbuf[0] = 0x01;
lvlbuf[1] = 0x91;
}
else { /* IC-910H */
lvl_cn = C_CTL_MEM; lvl_cn = C_CTL_MEM;
lvl_sc = S_MEM_VOXDELAY; lvl_sc = S_MEM_VOXDELAY;
}
break; break;
case RIG_LEVEL_ANTIVOX: case RIG_LEVEL_ANTIVOX:
if (rig->caps->rig_model == RIG_MODEL_IC910) { if (rig->caps->rig_model == RIG_MODEL_IC910) {
@ -1135,7 +1149,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
* Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL * Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL
* *
* TODO (missing RIG_LEVEL): * TODO (missing RIG_LEVEL):
* - S_RFML: Read real RFpower-meter level * - S_RiML: Read real RFpower-meter level
* - S_CMP: Read COMP-meter level * - S_CMP: Read COMP-meter level
* - S_VD : Read Vd-meter level * - S_VD : Read Vd-meter level
* - S_ID : Read Id-meter level * - S_ID : Read Id-meter level
@ -1143,6 +1157,7 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{ {
struct rig_state *rs; struct rig_state *rs;
struct icom_priv_data *priv;
unsigned char lvlbuf[MAXFRAMELEN], lvl2buf[MAXFRAMELEN]; unsigned char lvlbuf[MAXFRAMELEN], lvl2buf[MAXFRAMELEN];
int lvl_len, lvl2_len; int lvl_len, lvl2_len;
int lvl_cn, lvl_sc; /* Command Number, Subcommand */ int lvl_cn, lvl_sc; /* Command Number, Subcommand */
@ -1151,6 +1166,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
int retval; int retval;
rs = &rig->state; rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
lvl2_len = 0; lvl2_len = 0;
@ -1275,6 +1291,13 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
lvl_sc = S_LVL_ANTIVOX; lvl_sc = S_LVL_ANTIVOX;
} }
break; break;
/* Not implemented yet
case TOK_LEVEL_MONITOR:
lvl_cn = C_CTL_MEM;
lvl_sc = S_MEM_MONITOR;
break;
*/
default: default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get_level %d", level); rig_debug(RIG_DEBUG_ERR,"Unsupported get_level %d", level);
return -RIG_EINVAL; return -RIG_EINVAL;
@ -1310,6 +1333,9 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
icom_val = from_bcd_be(lvlbuf+cmdhead, lvl_len*2); icom_val = from_bcd_be(lvlbuf+cmdhead, lvl_len*2);
switch (level) { switch (level) {
case RIG_LEVEL_STRENGTH:
val->i = round(rig_raw2val(icom_val, &rig->caps->str_cal));
break;
case RIG_LEVEL_RAWSTR: case RIG_LEVEL_RAWSTR:
/* raw value */ /* raw value */
val->i = icom_val; val->i = icom_val;
@ -1370,7 +1396,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
break; break;
} }
} }
else if ((rig->caps->rig_model == RIG_MODEL_IC7300)&&(level==RIG_LEVEL_KEYSPD)){ else if ((priv->civ_version == 1)&&(level==RIG_LEVEL_KEYSPD)){
switch (level) { switch (level) {
case RIG_LEVEL_KEYSPD: case RIG_LEVEL_KEYSPD:
val->i = val->i*(42.0/255)+6+.5; val->i = val->i*(42.0/255)+6+.5;
@ -1384,6 +1410,41 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return RIG_OK; return RIG_OK;
} }
/*
* icom_set_ext_level
* Assumes rig!=NULL, rig->state.priv!=NULL
*
*/
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__);
switch (token) {
case TOK_LEVEL_MONITOR:
rig_debug(RIG_DEBUG_VERBOSE, "TOK_LEVEL_MONITOR\n", __func__);
break;
default: return -RIG_EINVAL;
}
return RIG_OK;
}
/*
* icom_get_ext_level
* Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL
*
*/
int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val)
{
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (token) {
case TOK_LEVEL_MONITOR:
rig_debug(RIG_DEBUG_VERBOSE, "TOK_LEVEL_MONITOR\n", __func__);
break;
default: return -RIG_EINVAL;
}
return RIG_OK;
}
/* /*
* Assumes rig!=NULL, rig->state.priv!=NULL * Assumes rig!=NULL, rig->state.priv!=NULL
*/ */
@ -2208,9 +2269,17 @@ int icom_get_ts(RIG *rig, vfo_t vfo, shortfreq_t *ts)
*/ */
int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
{ {
struct icom_priv_data *priv;
struct rig_state *rs;
unsigned char fctbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; unsigned char fctbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN];
int fct_len, acklen, retval; int fct_len, acklen, retval;
int fct_cn, fct_sc; /* Command Number, Subcommand */ int fct_cn, fct_sc; /* Command Number, Subcommand */
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
/* r8500, the problem rig */ /* r8500, the problem rig */
int r8500 = (rig->caps->rig_model == RIG_MODEL_ICR8500)? 1 : 0; int r8500 = (rig->caps->rig_model == RIG_MODEL_ICR8500)? 1 : 0;
@ -2226,10 +2295,16 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
fct_sc = (r8500)?(status)?S_FUNC_AGCON:S_FUNC_AGCOFF:S_FUNC_AGC; fct_sc = (r8500)?(status)?S_FUNC_AGCON:S_FUNC_AGCOFF:S_FUNC_AGC;
/* fct_sc = S_FUNC_AGC; */ /* fct_sc = S_FUNC_AGC; */
/* note: should it be a LEVEL only, and no func? --SF */ /* note: should it be a LEVEL only, and no func? --SF */
if (status != 0) if (priv->civ_version == 1) {
fct_len = 1;
fctbuf[0] = status;
}
else if (status != 0) {
fctbuf[0] = 0x03; /* default to 0x03 in IC746 pro super-fast */ fctbuf[0] = 0x03; /* default to 0x03 in IC746 pro super-fast */
else }
else {
fctbuf[0] = 0x02; fctbuf[0] = 0x02;
}
break; break;
case RIG_FUNC_NB: case RIG_FUNC_NB:
fct_cn = C_CTL_FUNC; fct_cn = C_CTL_FUNC;
@ -2452,6 +2527,8 @@ These are very much rig specific and should probably be in rig files. These are
*/ */
int icom_set_parm(RIG *rig, setting_t parm, value_t val) int icom_set_parm(RIG *rig, setting_t parm, value_t val)
{ {
struct rig_state *rs;
struct icom_priv_data *priv;
unsigned char prmbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; unsigned char prmbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN];
int ack_len=sizeof(ackbuf), prm_len; int ack_len=sizeof(ackbuf), prm_len;
int prm_cn, prm_sc; int prm_cn, prm_sc;
@ -2459,6 +2536,9 @@ int icom_set_parm(RIG *rig, setting_t parm, value_t val)
int retval; int retval;
int min,hr,sec; int min,hr,sec;
rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
switch (parm) { switch (parm) {
case RIG_PARM_ANN: case RIG_PARM_ANN:
if ((val.i == RIG_ANN_FREQ) || (val.i == RIG_ANN_RXMODE)) { if ((val.i == RIG_ANN_FREQ) || (val.i == RIG_ANN_RXMODE)) {
@ -2496,26 +2576,54 @@ int icom_set_parm(RIG *rig, setting_t parm, value_t val)
icom_val = val.f * 255; icom_val = val.f * 255;
prm_len = 3; prm_len = 3;
prmbuf[0] = S_PRM_BACKLT; prmbuf[0] = S_PRM_BACKLT;
if (priv->civ_version == 1) {
prm_sc = 0x05;
prm_len = 4;
prmbuf[0] = 0x00;
prmbuf[1] = 0x81;
to_bcd_be(prmbuf+2, (long long)icom_val, (prm_len-1)*2);
}
else {
to_bcd_be(prmbuf+1, (long long)icom_val, (prm_len-1)*2); to_bcd_be(prmbuf+1, (long long)icom_val, (prm_len-1)*2);
}
break; break;
case RIG_PARM_BEEP: case RIG_PARM_BEEP:
prm_cn = C_CTL_MEM; prm_cn = C_CTL_MEM;
if (priv->civ_version == 1) {
prm_sc = 0x05;
prm_len = 3;
prmbuf[0] = 0x00;
prmbuf[1] = 0x23;
prmbuf[2] = val.i;
}
else {
prm_sc = S_MEM_MODE_SLCT; prm_sc = S_MEM_MODE_SLCT;
prm_len = 2; prm_len = 2;
prmbuf[0] = S_PRM_BEEP; prmbuf[0] = S_PRM_BEEP;
prmbuf[1] = val.i; prmbuf[1] = val.i;
}
break; break;
case RIG_PARM_TIME: case RIG_PARM_TIME:
prm_cn = C_CTL_MEM; prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT;
hr = (float)val.i/3600.0; hr = (float)val.i/3600.0;
min = (float)(val.i - (hr*3600))/60.0; min = (float)(val.i - (hr*3600))/60.0;
sec = (val.i - (hr*3600) - (min*60)); sec = (val.i - (hr*3600) - (min*60));
if (priv->civ_version == 1) {
prm_sc = 0x05;
prm_len = 4;
prmbuf[0] = 0x00;
prmbuf[1] = 0x95;
to_bcd_be(prmbuf+2, (long long)hr, 2);
to_bcd_be(prmbuf+3, (long long)min, 2);
}
else {
prm_sc = S_MEM_MODE_SLCT;
prm_len = 4; prm_len = 4;
prmbuf[0] = S_PRM_TIME; prmbuf[0] = S_PRM_TIME;
to_bcd_be(prmbuf+1, (long long)hr, 2); to_bcd_be(prmbuf+1, (long long)hr, 2);
to_bcd_be(prmbuf+2, (long long)min, 2); to_bcd_be(prmbuf+2, (long long)min, 2);
to_bcd_be(prmbuf+3, (long long)sec, 2); to_bcd_be(prmbuf+3, (long long)sec, 2);
}
break; break;
default: default:
rig_debug(RIG_DEBUG_ERR,"Unsupported set_parm %d\n", parm); rig_debug(RIG_DEBUG_ERR,"Unsupported set_parm %d\n", parm);
@ -2542,6 +2650,8 @@ 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_get_parm(RIG *rig, setting_t parm, value_t *val)
{ {
struct rig_state *rs;
struct icom_priv_data *priv;
unsigned char prmbuf[MAXFRAMELEN], resbuf[MAXFRAMELEN]; unsigned char prmbuf[MAXFRAMELEN], resbuf[MAXFRAMELEN];
int prm_len, res_len; int prm_len, res_len;
int prm_cn, prm_sc; int prm_cn, prm_sc;
@ -2550,6 +2660,9 @@ int icom_get_parm(RIG *rig, setting_t parm, value_t *val)
int retval; int retval;
int min,hr,sec; int min,hr,sec;
rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
switch (parm) { switch (parm) {
case RIG_PARM_APO: case RIG_PARM_APO:
prm_cn = C_CTL_MEM; prm_cn = C_CTL_MEM;
@ -2559,21 +2672,45 @@ int icom_get_parm(RIG *rig, setting_t parm, value_t *val)
break; break;
case RIG_PARM_BACKLIGHT: case RIG_PARM_BACKLIGHT:
prm_cn = C_CTL_MEM; prm_cn = C_CTL_MEM;
if (priv->civ_version == 1) {
prm_sc = 0x05;
prm_len = 2;
prmbuf[0] = 0x00;
prmbuf[1] = 0x81;
}
else {
prm_sc = S_MEM_MODE_SLCT; prm_sc = S_MEM_MODE_SLCT;
prm_len = 1; prm_len = 1;
prmbuf[0] = S_PRM_BACKLT; prmbuf[0] = S_PRM_BACKLT;
}
break; break;
case RIG_PARM_BEEP: case RIG_PARM_BEEP:
if (priv->civ_version == 1) {
prm_sc = 0x05;
prm_len = 2;
prmbuf[0] = 0x00;
prmbuf[1] = 0x23;
}
else {
prm_cn = C_CTL_MEM; prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT; prm_sc = S_MEM_MODE_SLCT;
prm_len = 1; prm_len = 1;
prmbuf[0] = S_PRM_BEEP; prmbuf[0] = S_PRM_BEEP;
}
break; break;
case RIG_PARM_TIME: case RIG_PARM_TIME:
if (priv->civ_version == 1) {
prm_sc = 0x05;
prm_len = 2;
prmbuf[0] = 0x00;
prmbuf[1] = 0x95;
}
else {
prm_cn = C_CTL_MEM; prm_cn = C_CTL_MEM;
prm_sc = S_MEM_MODE_SLCT; prm_sc = S_MEM_MODE_SLCT;
prm_len = 1; prm_len = 1;
prmbuf[0] = S_PRM_TIME; prmbuf[0] = S_PRM_TIME;
}
break; break;
default: default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get_parm %d", parm); rig_debug(RIG_DEBUG_ERR,"Unsupported get_parm %d", parm);
@ -2605,12 +2742,26 @@ int icom_get_parm(RIG *rig, setting_t parm, value_t *val)
val->i = icom_val; val->i = icom_val;
break; break;
case RIG_PARM_TIME: case RIG_PARM_TIME:
if (priv->civ_version == 1) {
hr = from_bcd_be(resbuf+cmdhead, 2); hr = from_bcd_be(resbuf+cmdhead, 2);
min = from_bcd_be(resbuf+cmdhead+1, 2); min = from_bcd_be(resbuf+cmdhead+1, 2);
sec = from_bcd_be(resbuf+cmdhead+2, 2); sec = from_bcd_be(resbuf+cmdhead+2, 2);
}
else {
hr = from_bcd_be(resbuf+cmdhead+1, 2);
min = from_bcd_be(resbuf+cmdhead+2, 2);
sec = 0;
}
icom_val = (hr*3600)+(min*60)+sec; icom_val = (hr*3600)+(min*60)+sec;
val->i = icom_val; val->i = icom_val;
break; break;
case RIG_PARM_BACKLIGHT:
icom_val = 0;
if (priv->civ_version == 1) {
icom_val = from_bcd_be(resbuf+cmdhead+1, (res_len-1)*2);
val->f = icom_val/255.0*100;
}
break;
default: default:
icom_val = from_bcd_be(resbuf+cmdhead, res_len*2); icom_val = from_bcd_be(resbuf+cmdhead, res_len*2);
if (RIG_PARM_IS_FLOAT(parm)) if (RIG_PARM_IS_FLOAT(parm))
@ -2868,12 +3019,30 @@ int icom_get_dcs_code(RIG *rig, vfo_t vfo, tone_t *code)
*/ */
int icom_set_powerstat(RIG *rig, powerstat_t status) int icom_set_powerstat(RIG *rig, powerstat_t status)
{ {
unsigned char ackbuf[MAXFRAMELEN]; unsigned char ackbuf[200];
int ack_len=sizeof(ackbuf), retval; int ack_len=sizeof(ackbuf), retval;
int pwr_sc; int pwr_sc;
unsigned char fe_buf[200]; // for FE's to power up
int fe_len = 0;
pwr_sc = status==RIG_POWER_ON ? S_PWR_ON:S_PWR_OFF; switch (status) {
case RIG_POWER_ON:
pwr_sc = RIG_POWER_ON;
// ic7300 manual says ~150 for 115,200
// we'll just send 175 to be sure for all speeds
for(fe_len=0;fe_len<175;++fe_len) {
fe_buf[fe_len]=0xfe;
}
break;
default:
pwr_sc = RIG_POWER_OFF;
fe_buf[0] = 0;
}
// we can ignore this retval
// sending more than enough 0xfe's to take up the rs232
icom_transaction(rig, 0xfe, 0xfe, fe_buf, fe_len,
ackbuf, &ack_len);
retval = icom_transaction(rig, C_SET_PWR, pwr_sc, NULL, 0, retval = icom_transaction(rig, C_SET_PWR, pwr_sc, NULL, 0,
ackbuf, &ack_len); ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
@ -3058,13 +3227,16 @@ int icom_get_ant(RIG *rig, vfo_t vfo, ant_t *ant)
*/ */
int icom_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op) int icom_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
{ {
struct rig_state *rs;
struct icom_priv_data *priv;
unsigned char mvbuf[MAXFRAMELEN]; unsigned char mvbuf[MAXFRAMELEN];
unsigned char ackbuf[MAXFRAMELEN]; unsigned char ackbuf[MAXFRAMELEN];
int mv_len, ack_len=sizeof(ackbuf), retval; int mv_len=0, ack_len=sizeof(ackbuf), retval;
int mv_cn, mv_sc; int mv_cn, mv_sc;
int vfo_list; int vfo_list;
mv_len = 0; rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv;
switch(op) { switch(op) {
case RIG_OP_CPY: case RIG_OP_CPY:
@ -3104,6 +3276,10 @@ int icom_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
mv_sc = -1; mv_sc = -1;
break; break;
case RIG_OP_TUNE: case RIG_OP_TUNE:
if (priv->civ_version == 1) {
mvbuf[0] = 2;
mv_len = 1;
}
mv_cn = C_CTL_PTT; mv_cn = C_CTL_PTT;
mv_sc = S_ANT_TUN; mv_sc = S_ANT_TUN;
break; break;
@ -3227,6 +3403,46 @@ int icom_send_morse (RIG * rig, vfo_t vfo, const char *msg)
return RIG_OK; return RIG_OK;
} }
int icom_power2mW(RIG * rig, unsigned int *mwpower, float power, freq_t freq, rmode_t mode)
{
int rig_id;
rig_id = rig->caps->rig_model;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);
switch (rig_id) {
default:
/* Normal 100 Watts */
*mwpower = power * 100000;
break;
}
return RIG_OK;
}
int icom_mW2power(RIG * rig, float *power, unsigned int mwpower, freq_t freq, rmode_t mode)
{
int rig_id;
rig_id = rig->caps->rig_model;
rig_debug(RIG_DEBUG_TRACE, "%s: passed mwpower = %i\n", __func__, mwpower);
rig_debug(RIG_DEBUG_TRACE, "%s: passed freq = %"PRIfreq" Hz\n", __func__, freq);
rig_debug(RIG_DEBUG_TRACE, "%s: passed mode = %i\n", __func__, mode);
if (mwpower > 100000)
return -RIG_EINVAL;
switch (rig_id) {
default: /* Default to a 100W radio */
*power = ((float)mwpower / 100000);
break;
}
return RIG_OK;
}
/* /*
* icom_decode is called by sa_sigio, when some asynchronous * icom_decode is called by sa_sigio, when some asynchronous

Wyświetl plik

@ -111,6 +111,7 @@ struct icom_priv_caps {
tokens to bandwidth and tokens to bandwidth and
mode */ mode */
int serial_full_duplex; /*!< Whether RXD&TXD are not tied together */ int serial_full_duplex; /*!< Whether RXD&TXD are not tied together */
unsigned char civ_version; // default to 0, 1=IC7200,IC7300,etc differences
}; };
@ -121,6 +122,7 @@ struct icom_priv_data {
int no_1a_03_cmd; /* rig doesn't tell IF widths */ int no_1a_03_cmd; /* rig doesn't tell IF widths */
int split_on; /* record split state */ int split_on; /* record split state */
pltstate_t *pltstate; /* only on optoscan */ pltstate_t *pltstate; /* only on optoscan */
unsigned char civ_version; /* 0=default, 1=new commands for IC7200,IC7300, etc */
}; };
extern const struct ts_sc_list r8500_ts_sc_list[]; extern const struct ts_sc_list r8500_ts_sc_list[];
@ -183,6 +185,8 @@ int icom_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op);
int icom_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch); int icom_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch);
int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
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_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_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
int icom_set_parm(RIG *rig, setting_t parm, value_t val); int icom_set_parm(RIG *rig, setting_t parm, value_t val);
@ -194,6 +198,8 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status);
int icom_set_ant(RIG * rig, vfo_t vfo, ant_t ant); int icom_set_ant(RIG * rig, vfo_t vfo, ant_t ant);
int icom_get_ant(RIG * rig, vfo_t vfo, ant_t *ant); int icom_get_ant(RIG * rig, vfo_t vfo, ant_t *ant);
int icom_decode_event(RIG *rig); int icom_decode_event(RIG *rig);
int icom_power2mW(RIG * rig, unsigned int *mwpower, float power, freq_t freq, rmode_t mode);
int icom_mW2power(RIG * rig, float *power, unsigned int mwpower, freq_t freq, rmode_t mode);
int icom_send_morse (RIG * rig, vfo_t vfo, const char *msg); int icom_send_morse (RIG * rig, vfo_t vfo, const char *msg);
extern const struct confparams icom_cfg_params[]; extern const struct confparams icom_cfg_params[];

Wyświetl plik

@ -294,6 +294,7 @@
*/ */
#define S_PWR_OFF 0x00 #define S_PWR_OFF 0x00
#define S_PWR_ON 0x01 #define S_PWR_ON 0x01
#define S_PWR_STDBY 0x02
/* /*
* Transmit control (C_CTL_PTT) subcommands * Transmit control (C_CTL_PTT) subcommands
@ -324,8 +325,8 @@
#define S_MEM_SATMEM 0x01 /* Satellite memory */ #define S_MEM_SATMEM 0x01 /* Satellite memory */
#define S_MEM_VOXGAIN 0x02 /* VOX gain level (0=0%, 255=100%) */ #define S_MEM_VOXGAIN 0x02 /* VOX gain level (0=0%, 255=100%) */
#define S_MEM_VOXDELAY 0x03 /* VOX delay (0=0.0 sec, 20=2.0 sec) */ #define S_MEM_VOXDELAY 0x03 /* VOX delay (0=0.0 sec, 20=2.0 sec) */
#define S_MEM1_VOXDELAY 0x05 /* VOX delay (0=0.0 sec, 20=2.0 sec) */
#define S_MEM_ANTIVOX 0x04 /* anti VOX setting */ #define S_MEM_ANTIVOX 0x04 /* anti VOX setting */
#define S_MEM_ATTLEVEL 0x05 /* Attenuation level (0=0%, 255=100%) */
#define S_MEM_RIT 0x06 /* RIT (0=off, 1=on, 2=sub dial) */ #define S_MEM_RIT 0x06 /* RIT (0=off, 1=on, 2=sub dial) */
#define S_MEM_SATMODE 0x07 /* Satellite mode (on/off) */ #define S_MEM_SATMODE 0x07 /* Satellite mode (on/off) */
#define S_MEM_BANDSCOPE 0x08 /* Simple bandscope (on/off) */ #define S_MEM_BANDSCOPE 0x08 /* Simple bandscope (on/off) */
@ -391,6 +392,7 @@
#define TOK_RTTY_FLTR TOKEN_BACKEND(100) #define TOK_RTTY_FLTR TOKEN_BACKEND(100)
#define TOK_SSBBASS TOKEN_BACKEND(101) #define TOK_SSBBASS TOKEN_BACKEND(101)
#define TOK_SQLCTRL TOKEN_BACKEND(102) #define TOK_SQLCTRL TOKEN_BACKEND(102)
#define TOK_LEVEL_MONITOR TOKEN_BACKEND(103)
#endif /* _ICOM_DEFS_H */ #endif /* _ICOM_DEFS_H */