kopia lustrzana https://github.com/Hamlib/Hamlib
Fixed CWPITCH function on IC-R75 to use 'set mode data' command. Added level granularity steps
git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1826 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.3
rodzic
4e38224cad
commit
3fd5d8f272
63
icom/icom.c
63
icom/icom.c
|
@ -2,7 +2,7 @@
|
|||
* Hamlib CI-V backend - main file
|
||||
* Copyright (c) 2000-2004 by Stephane Fillod
|
||||
*
|
||||
* $Id: icom.c,v 1.87 2004-08-21 23:53:39 fillods Exp $
|
||||
* $Id: icom.c,v 1.88 2004-08-27 01:49:38 fineware Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -452,7 +452,7 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
struct icom_priv_data *priv;
|
||||
struct rig_state *rs;
|
||||
unsigned char ackbuf[MAXFRAMELEN];
|
||||
unsigned char icmode;
|
||||
unsigned char icmode;
|
||||
signed char icmode_ext;
|
||||
int ack_len, retval, err;
|
||||
|
||||
|
@ -614,16 +614,13 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
|
|||
case RIG_LEVEL_NR:
|
||||
icom_val = val.f * 240;
|
||||
break;
|
||||
case RIG_LEVEL_CWPITCH:
|
||||
icom_val = ((float)val.i - 300.0) / 600.0 * 255;
|
||||
break;
|
||||
case RIG_LEVEL_PBT_IN:
|
||||
case RIG_LEVEL_PBT_OUT:
|
||||
icom_val = (val.f / 10.0) + 128;
|
||||
if (icom_val > 255)
|
||||
icom_val = 255;
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -700,6 +697,14 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
|
|||
case RIG_LEVEL_CWPITCH:
|
||||
lvl_cn = C_CTL_LVL;
|
||||
lvl_sc = S_LVL_CWPITCH;
|
||||
/* use 'set mode' call for CWPITCH on IC-R75*/
|
||||
if (rig->caps->rig_model == RIG_MODEL_ICR75) {
|
||||
lvl_cn = C_CTL_MEM;
|
||||
lvl_sc = S_MEM_MODE_SLCT;
|
||||
lvl_len = 3;
|
||||
lvlbuf[0] = S_PRM_CWPITCH;
|
||||
to_bcd_be(lvlbuf+1, (long long)icom_val, 4);
|
||||
}
|
||||
break;
|
||||
case RIG_LEVEL_RFPOWER:
|
||||
lvl_cn = C_CTL_LVL;
|
||||
|
@ -776,8 +781,8 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||
{
|
||||
struct icom_priv_data *priv;
|
||||
struct rig_state *rs;
|
||||
unsigned char lvlbuf[MAXFRAMELEN];
|
||||
int lvl_len;
|
||||
unsigned char lvlbuf[MAXFRAMELEN], lvl2buf[MAXFRAMELEN];
|
||||
int lvl_len, lvl2_len;
|
||||
int lvl_cn, lvl_sc; /* Command Number, Subcommand */
|
||||
int icom_val;
|
||||
int cmdhead;
|
||||
|
@ -786,7 +791,7 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||
rs = &rig->state;
|
||||
priv = (struct icom_priv_data*)rs->priv;
|
||||
|
||||
|
||||
lvl2_len = 0;
|
||||
/* Optimize:
|
||||
* sort the switch cases with the most frequent first
|
||||
*/
|
||||
|
@ -843,6 +848,13 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||
case RIG_LEVEL_CWPITCH:
|
||||
lvl_cn = C_CTL_LVL;
|
||||
lvl_sc = S_LVL_CWPITCH;
|
||||
/* use 'set mode' call for CWPITCH on IC-R75*/
|
||||
if (rig->caps->rig_model == RIG_MODEL_ICR75) {
|
||||
lvl_cn = C_CTL_MEM;
|
||||
lvl_sc = S_MEM_MODE_SLCT;
|
||||
lvl2_len = 1;
|
||||
lvl2buf[0] = S_PRM_CWPITCH;
|
||||
}
|
||||
break;
|
||||
case RIG_LEVEL_RFPOWER:
|
||||
lvl_cn = C_CTL_LVL;
|
||||
|
@ -893,7 +905,8 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
retval = icom_transaction (rig, lvl_cn, lvl_sc, NULL, 0,
|
||||
/* use lvl2buf and lvl2_len for 'set mode' subcommand */
|
||||
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvl2buf, lvl2_len,
|
||||
lvlbuf, &lvl_len);
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
@ -903,6 +916,11 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||
*/
|
||||
cmdhead = (lvl_sc == -1) ? 1:2;
|
||||
lvl_len -= cmdhead;
|
||||
/* back off one char since first char in buffer is now 'set mode' subcommand */
|
||||
if ((rig->caps->rig_model == RIG_MODEL_ICR75)&&(level==RIG_LEVEL_CWPITCH)){
|
||||
cmdhead = 3;
|
||||
lvl_len--;
|
||||
}
|
||||
|
||||
if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) {
|
||||
rig_debug(RIG_DEBUG_ERR,"icom_get_level: ack NG (%#.2x), "
|
||||
|
@ -955,21 +973,18 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||
case RIG_LEVEL_NR:
|
||||
val->f = (float)icom_val / 240;
|
||||
break;
|
||||
case RIG_LEVEL_CWPITCH:
|
||||
val->i = ((float)icom_val / 255.0 * 600.0) + 300.0;
|
||||
break;
|
||||
case RIG_LEVEL_PBT_IN:
|
||||
case RIG_LEVEL_PBT_OUT:
|
||||
if (icom_val == 255)
|
||||
val->f = 1280.0;
|
||||
else
|
||||
else
|
||||
val->f = (float)(icom_val - 128) * 10.0;
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_TRACE,"icom_get_level: %d %d %d %f\n", lvl_len,
|
||||
icom_val, val->i, val->f);
|
||||
|
||||
|
@ -2282,16 +2297,16 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status)
|
|||
/* r75 has no way to get power status, so fake it */
|
||||
if (rig->caps->rig_model == RIG_MODEL_ICR75) {
|
||||
retval = icom_transaction(rig, C_RD_MODE, -1, NULL, 0,
|
||||
ackbuf, &ack_len);
|
||||
ackbuf, &ack_len);
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
*status = ((ack_len == 3)&&(ackbuf[0] == C_RD_MODE)) ?
|
||||
|
||||
*status = ((ack_len == 3)&&(ackbuf[0] == C_RD_MODE)) ?
|
||||
RIG_POWER_ON : RIG_POWER_OFF;
|
||||
|
||||
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
|
||||
retval = icom_transaction(rig, C_SET_PWR, -1, NULL, 0,
|
||||
ackbuf, &ack_len);
|
||||
if (retval != RIG_OK)
|
||||
|
@ -2707,8 +2722,8 @@ DECLARE_PROBERIG_BACKEND(icom)
|
|||
/*
|
||||
* try all possible addresses on the CI-V bus
|
||||
* FIXME: actualy, old rigs do not support C_RD_TRXID cmd!
|
||||
* Try to be smart, and deduce model depending
|
||||
* on freq range, return address, and
|
||||
* Try to be smart, and deduce model depending
|
||||
* on freq range, return address, and
|
||||
* available commands.
|
||||
*/
|
||||
for (civ_addr=0x01; civ_addr<=0x7f; civ_addr++) {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib CI-V backend - defines for the ICOM "CI-V" interface.
|
||||
* Copyright (c) 2000-2002 by Stephane Fillod
|
||||
*
|
||||
* $Id: icom_defs.h,v 1.15 2004-08-21 23:53:39 fillods Exp $
|
||||
* $Id: icom_defs.h,v 1.16 2004-08-27 01:49:38 fineware Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -313,6 +313,7 @@
|
|||
* C_CTL_MODE Misc CI-V Mode settings
|
||||
*/
|
||||
#define S_PRM_BEEP 0x02
|
||||
#define S_PRM_CWPITCH 0x10
|
||||
#define S_PRM_LANG 0x15
|
||||
#define S_PRM_BACKLT 0x21
|
||||
#define S_PRM_SLEEP 0x32
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib CI-V backend - description of IC-R75
|
||||
* Copyright (c) 2000-2004 by Stephane Fillod
|
||||
*
|
||||
* $Id: icr75.c,v 1.3 2004-08-21 23:53:39 fillods Exp $
|
||||
* $Id: icr75.c,v 1.4 2004-08-27 01:49:38 fineware Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -130,9 +130,10 @@ const struct rig_caps icr75_caps = {
|
|||
.has_set_parm = RIG_PARM_SET(ICR75_PARM_ALL),
|
||||
.level_gran = {
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_PBT_IN] = { .min = { .f = -1280 }, .max = { .f = +1280 } },
|
||||
[LVL_PBT_OUT] = { .min = { .f = -1280 }, .max = { .f = +1280 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 } },
|
||||
[LVL_PBT_IN] = { .min = { .f = -1280 }, .max = { .f = +1280 }, .step = { .f = 15 } },
|
||||
[LVL_PBT_OUT] = { .min = { .f = -1280 }, .max = { .f = +1280 }, .step = { .f = 15 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 10 } },
|
||||
[LVL_NR] = { .min = { .f = 0.0 }, .max = { .f = 1.0 }, .step = { .f = 0.066666667 } },
|
||||
},
|
||||
.parm_gran = {
|
||||
[PARM_APO] = { .min = { .i = 1 }, .max = { .i = 1439} },
|
||||
|
|
Ładowanie…
Reference in New Issue