pull/1406/head
Mike Black W9MDB 2023-10-21 11:47:31 -05:00
commit aa429806aa
2 zmienionych plików z 47 dodań i 24 usunięć

Wyświetl plik

@ -1076,9 +1076,8 @@ typedef uint64_t rig_level_e;
#define RIG_LEVEL_TEMP_METER CONSTANT_64BIT_FLAG(48) /*!< \c TEMP_METER -- arg float (C, centigrade) */ #define RIG_LEVEL_TEMP_METER CONSTANT_64BIT_FLAG(48) /*!< \c TEMP_METER -- arg float (C, centigrade) */
#define RIG_LEVEL_BAND_SELECT CONSTANT_64BIT_FLAG(49) /*!< \c BAND_SELECT -- arg enum BAND_ENUM */ #define RIG_LEVEL_BAND_SELECT CONSTANT_64BIT_FLAG(49) /*!< \c BAND_SELECT -- arg enum BAND_ENUM */
#define RIG_LEVEL_USB_AF CONSTANT_64BIT_FLAG(50) /*!< \c ACC/USB AF output level */ #define RIG_LEVEL_USB_AF CONSTANT_64BIT_FLAG(50) /*!< \c ACC/USB AF output level */
#define RIG_LEVEL_USB_AF_INPUT CONSTANT_64BIT_FLAG(51) /*!< \c ACC/USB AF output level */ #define RIG_LEVEL_USB_AF_INPUT CONSTANT_64BIT_FLAG(51) /*!< \c ACC/USB AF input level */
#define RIG_LEVEL_AGC_TIME CONSTANT_64BIT_FLAG(51) /*!< \c AGC_TIME -- in seconds, rig dependent */ #define RIG_LEVEL_AGC_TIME CONSTANT_64BIT_FLAG(52) /*!< \c AGC_TIME -- in seconds, rig dependent */
#define RIG_LEVEL_52 CONSTANT_64BIT_FLAG(52) /*!< \c Future use */
#define RIG_LEVEL_53 CONSTANT_64BIT_FLAG(53) /*!< \c Future use */ #define RIG_LEVEL_53 CONSTANT_64BIT_FLAG(53) /*!< \c Future use */
#define RIG_LEVEL_54 CONSTANT_64BIT_FLAG(54) /*!< \c Future use */ #define RIG_LEVEL_54 CONSTANT_64BIT_FLAG(54) /*!< \c Future use */
#define RIG_LEVEL_55 CONSTANT_64BIT_FLAG(55) /*!< \c Future use */ #define RIG_LEVEL_55 CONSTANT_64BIT_FLAG(55) /*!< \c Future use */
@ -1092,7 +1091,7 @@ typedef uint64_t rig_level_e;
#define RIG_LEVEL_63 CONSTANT_64BIT_FLAG(63) /*!< \c Future use */ #define RIG_LEVEL_63 CONSTANT_64BIT_FLAG(63) /*!< \c Future use */
//! @cond Doxygen_Suppress //! @cond Doxygen_Suppress
#define RIG_LEVEL_FLOAT_LIST (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_APF|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_SPECTRUM_REF|RIG_LEVEL_TEMP_METER|RIG_LEVEL_USB_AF|RIG_LEVEL_AGC_TIME) #define RIG_LEVEL_FLOAT_LIST (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_APF|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_COMP|RIG_LEVEL_BALANCE|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB|RIG_LEVEL_SPECTRUM_REF|RIG_LEVEL_TEMP_METER|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT|RIG_LEVEL_AGC_TIME)
#define RIG_LEVEL_READONLY_LIST (RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_STRENGTH|RIG_LEVEL_RAWSTR|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_TEMP_METER|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS) #define RIG_LEVEL_READONLY_LIST (RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_STRENGTH|RIG_LEVEL_RAWSTR|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_TEMP_METER|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_RFPOWER_METER_WATTS)

Wyświetl plik

@ -28,31 +28,28 @@
#include "cal.h" #include "cal.h"
#include "misc.h" #include "misc.h"
// TODO: Copied from TS-480, to be verified
#define TS890_VFO (RIG_VFO_A|RIG_VFO_B) #define TS890_VFO (RIG_VFO_A|RIG_VFO_B)
#define TS890_ALL_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_CW|RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_RTTY|RIG_MODE_CWR|RIG_MODE_RTTYR|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM) #define TS890_ALL_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_CW|RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_RTTY|RIG_MODE_CWR|RIG_MODE_RTTYR|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM)
// TODO: Copied from TS-480, to be verified
#define TS890_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) #define TS890_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY)
// TODO: Copied from TS-480, to be verified
#define TS890_AM_TX_MODES RIG_MODE_AM #define TS890_AM_TX_MODES RIG_MODE_AM
// TODO: Copied from TS-480, to be verified #define TS890_LEVEL_SET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_KEYSPD|RIG_LEVEL_CWPITCH|RIG_LEVEL_ATT|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT)
#define TS890_LEVEL_SET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_KEYSPD|RIG_LEVEL_CWPITCH|RIG_LEVEL_ATT) #define TS890_LEVEL_GET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_KEYSPD|RIG_LEVEL_ALC|RIG_LEVEL_SWR|RIG_LEVEL_COMP_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_TEMP_METER|RIG_LEVEL_CWPITCH|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_ATT|RIG_LEVEL_USB_AF|RIG_LEVEL_USB_AF_INPUT)
#define TS890_LEVEL_GET (RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_AGC|RIG_LEVEL_KEYSPD|RIG_LEVEL_ALC|RIG_LEVEL_SWR|RIG_LEVEL_COMP_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_TEMP_METER|RIG_LEVEL_CWPITCH|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_ATT)
#define TS890_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_NB2|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_NR|RIG_FUNC_BC|RIG_FUNC_BC2|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_SEND_MORSE) #define TS890_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_NB2|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_NR|RIG_FUNC_BC|RIG_FUNC_BC2|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_SEND_MORSE)
#define TS890_VFO_OPS (RIG_OP_UP|RIG_OP_DOWN|RIG_OP_BAND_UP|RIG_OP_BAND_DOWN|RIG_OP_CPY|RIG_OP_TUNE) #define TS890_VFO_OPS (RIG_OP_UP|RIG_OP_DOWN|RIG_OP_BAND_UP|RIG_OP_BAND_DOWN|RIG_OP_CPY|RIG_OP_TUNE)
int kenwood_ts890_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) int kenwood_ts890_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{ {
char levelbuf[16]; char levelbuf[16], *command_string;
int kenwood_val, retval; int kenwood_val, retval;
gran_t *level_info;
rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__); rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
retval = check_level_param(rig, level, val, NULL); retval = check_level_param(rig, level, val, &level_info);
if (retval != RIG_OK) if (retval != RIG_OK)
{ {
return retval; return retval;
@ -60,16 +57,6 @@ int kenwood_ts890_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
switch (level) switch (level)
{ {
case RIG_LEVEL_RF:
kenwood_val = val.f * 255;
SNPRINTF(levelbuf, sizeof(levelbuf), "RG%03d", kenwood_val);
break;
case RIG_LEVEL_SQL:
kenwood_val = val.f * 255;
SNPRINTF(levelbuf, sizeof(levelbuf), "SQ%03d", kenwood_val);
break;
case RIG_LEVEL_AGC: case RIG_LEVEL_AGC:
/* hamlib argument is int, possible values rig.h:enum agc_level_e */ /* hamlib argument is int, possible values rig.h:enum agc_level_e */
/* possible values for TS890 0(=off), 1(=slow), 2(=mid), 3(=fast), 4(=off/Last) */ /* possible values for TS890 0(=off), 1(=slow), 2(=mid), 3(=fast), 4(=off/Last) */
@ -91,12 +78,31 @@ int kenwood_ts890_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
} }
SNPRINTF(levelbuf, sizeof(levelbuf), "GC%d", kenwood_val); SNPRINTF(levelbuf, sizeof(levelbuf), "GC%d", kenwood_val);
return kenwood_transaction(rig, levelbuf, NULL, 0); /* Odd man out */
case RIG_LEVEL_RF:
command_string = "RG%03d";
break;
case RIG_LEVEL_SQL:
command_string = "SQ%03d";
break;
case RIG_LEVEL_USB_AF:
command_string = "EX00708 %03d";
break;
case RIG_LEVEL_USB_AF_INPUT:
command_string = "EX00706 %03d";
break; break;
default: default:
return kenwood_set_level(rig, vfo, level, val); return kenwood_set_level(rig, vfo, level, val);
} }
//TODO: Add use of RIG_LEVEL_IS_FLOAT() if need to handle int level
kenwood_val = val.f / level_info->step.f + 0.5;
SNPRINTF(levelbuf, sizeof(levelbuf), command_string, kenwood_val);
return kenwood_transaction(rig, levelbuf, NULL, 0); return kenwood_transaction(rig, levelbuf, NULL, 0);
} }
@ -153,10 +159,13 @@ int ts890_get_meter_reading(RIG *rig, char meter, int *pips)
int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{ {
char ackbuf[50]; char ackbuf[50];
size_t ack_len, ack_len_expected; size_t ack_len, ack_len_expected, len;
int levelint; int levelint;
int retval; int retval;
char *command_string;
gran_t *level_info;
level_info = &rig->caps->level_gran[rig_setting2idx(level)];
rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__); rig_debug(RIG_DEBUG_TRACE, "%s called\n", __func__);
switch (level) switch (level)
@ -219,7 +228,7 @@ int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return -RIG_EPROTO; return -RIG_EPROTO;
} }
val->f = (float) levelint / 255.; val->f = (float) levelint * level_info->step.f;
return RIG_OK; return RIG_OK;
case RIG_LEVEL_AGC: case RIG_LEVEL_AGC:
@ -383,6 +392,19 @@ int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
return RIG_OK; return RIG_OK;
} }
case RIG_LEVEL_USB_AF:
case RIG_LEVEL_USB_AF_INPUT:
if ( level == RIG_LEVEL_USB_AF )
{ command_string = "EX00708"; }
else
{ command_string = "EX00706"; }
len = strlen(command_string);
retval = kenwood_safe_transaction(rig, command_string, ackbuf, sizeof(ackbuf), len + 4);
if (retval != RIG_OK) { return retval; }
sscanf(&ackbuf[len + 1], "%3d", &levelint); /* Skip the extra space */
val->f = levelint * level_info->step.f;
return RIG_OK;
default: default:
return kenwood_get_level(rig, vfo, level, val); return kenwood_get_level(rig, vfo, level, val);
} }
@ -570,6 +592,8 @@ const struct rig_caps ts890s_caps =
[LVL_ATT] = { .min = { .i = 0 }, .max = { .i = 18 }, .step = { .i = 6 } }, [LVL_ATT] = { .min = { .i = 0 }, .max = { .i = 18 }, .step = { .i = 6 } },
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1100 }, .step = { .i = 5 } }, [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1100 }, .step = { .i = 5 } },
[LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0f }, .step = { .f = 1.0 / 255.0 } }, [LVL_SQL] = { .min = { .f = 0 }, .max = { .f = 1.0f }, .step = { .f = 1.0 / 255.0 } },
[LVL_USB_AF] = { .min = { .f = 0 }, .max = { .f = 1.0f }, .step = { .f = 1.0/100.0 } },
[LVL_USB_AF_INPUT] = { .min = { .f = 0 }, .max = { .f = 1.0f }, .step = { .f = 1.0/100.0 } },
}, },
.has_get_func = TS890_FUNC_ALL, .has_get_func = TS890_FUNC_ALL,
.has_set_func = TS890_FUNC_ALL, .has_set_func = TS890_FUNC_ALL,