mirror of
https://github.com/Hamlib/Hamlib.git
synced 2024-09-25 04:17:28 +00:00
added get_freq and get_mode, fixed set_mode with passband
git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@722 7ae35d74-ebe9-4afe-98af-79ac388436b8
This commit is contained in:
parent
014854b1d8
commit
aa1b95a8ff
143
yaesu/ft847.c
143
yaesu/ft847.c
@ -6,7 +6,7 @@
|
|||||||
* via serial interface to an FT-847 using the "CAT" interface.
|
* via serial interface to an FT-847 using the "CAT" interface.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* $Id: ft847.c,v 1.14 2001-10-30 07:17:09 f4cfe Exp $
|
* $Id: ft847.c,v 1.15 2001-11-14 18:31:51 f4cfe Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
@ -497,9 +497,115 @@ int ft847_set_freq(RIG *rig, vfo_t vfo, freq_t freq) {
|
|||||||
return RIG_OK;
|
return RIG_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ft847_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) {
|
#define MD_LSB 0x00
|
||||||
|
#define MD_USB 0x01
|
||||||
|
#define MD_CW 0x02
|
||||||
|
#define MD_CWR 0x03
|
||||||
|
#define MD_AM 0x04
|
||||||
|
#define MD_FM 0x08
|
||||||
|
#define MD_CWN 0x82
|
||||||
|
#define MD_CWNR 0x83
|
||||||
|
#define MD_AMN 0x84
|
||||||
|
#define MD_FMN 0x88
|
||||||
|
|
||||||
return -RIG_ENIMPL;
|
static int get_freq_and_mode(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode,
|
||||||
|
pbwidth_t *width) {
|
||||||
|
struct rig_state *rs = &rig->state;
|
||||||
|
struct ft847_priv_data *p;
|
||||||
|
unsigned char *cmd; /* points to sequence to send */
|
||||||
|
unsigned char cmd_index; /* index of sequence to send */
|
||||||
|
unsigned char data[8];
|
||||||
|
int n;
|
||||||
|
|
||||||
|
p = (struct ft847_priv_data*)rs->priv;
|
||||||
|
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE,"ft847: vfo =%i \n", vfo);
|
||||||
|
|
||||||
|
if (vfo == RIG_VFO_MAIN)
|
||||||
|
vfo = p->current_vfo;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
* FT_847_NATIVE_CAT_GET_FREQ_MODE_STATUS_SAT_RX
|
||||||
|
* FT_847_NATIVE_CAT_GET_FREQ_MODE_STATUS_SAT_TX
|
||||||
|
*/
|
||||||
|
switch(vfo) {
|
||||||
|
case RIG_VFO_MAIN:
|
||||||
|
cmd_index = FT_847_NATIVE_CAT_GET_FREQ_MODE_STATUS_MAIN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE,"ft847: Unknown VFO \n");
|
||||||
|
return -RIG_EINVAL; /* sorry, wrong VFO */
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(p->p_cmd,&ncmd[cmd_index].nseq,YAESU_CMD_LENGTH);
|
||||||
|
|
||||||
|
cmd = p->p_cmd;
|
||||||
|
write_block(&rs->rigport, cmd, YAESU_CMD_LENGTH);
|
||||||
|
|
||||||
|
n = read_block(&rs->rigport, data, YAESU_CMD_LENGTH);
|
||||||
|
if (n != YAESU_CMD_LENGTH) {
|
||||||
|
rig_debug(RIG_DEBUG_ERR,"ft847: read_block returned %d\n", n);
|
||||||
|
return n < 0 ? n : -RIG_EPROTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remember, this is 10Hz resolution */
|
||||||
|
*freq = 10*from_bcd_be(data, 8);
|
||||||
|
|
||||||
|
*width = RIG_PASSBAND_NORMAL;
|
||||||
|
switch (data[4]) {
|
||||||
|
case MD_LSB: *mode = RIG_MODE_LSB; break;
|
||||||
|
case MD_USB: *mode = RIG_MODE_USB; break;
|
||||||
|
|
||||||
|
case MD_CWN:
|
||||||
|
*width = rig_passband_narrow(rig, RIG_MODE_CW);
|
||||||
|
case MD_CW:
|
||||||
|
*mode = RIG_MODE_CW;
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef RIG_MODE_CWR
|
||||||
|
case MD_CWNR:
|
||||||
|
*width = rig_passband_narrow(rig, RIG_MODE_CW);
|
||||||
|
case MD_CWR:
|
||||||
|
*mode = RIG_MODE_CWR;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case MD_AMN:
|
||||||
|
*width = rig_passband_narrow(rig, RIG_MODE_AM);
|
||||||
|
case MD_AM:
|
||||||
|
*mode = RIG_MODE_AM;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MD_FMN:
|
||||||
|
*width = rig_passband_narrow(rig, RIG_MODE_FM);
|
||||||
|
case MD_FM:
|
||||||
|
*mode = RIG_MODE_FM;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*mode = RIG_MODE_NONE;
|
||||||
|
rig_debug(RIG_DEBUG_VERBOSE,"ft847: Unknown mode %02x\n", data[4]);
|
||||||
|
}
|
||||||
|
if (*width == RIG_PASSBAND_NORMAL)
|
||||||
|
*width = rig_passband_normal(rig, *mode);
|
||||||
|
|
||||||
|
return RIG_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note taken from http://my.en.com/~rayd/ft-847/FAQ/page4.htm#pollingcodes
|
||||||
|
* The FT-847, as originally delivered, could not poll the radio for frequency
|
||||||
|
* and mode information. This was added beginning with the 8G05 production
|
||||||
|
* runs. The Operating Manual does not show the codes for polling the radio.
|
||||||
|
* Note that you cannot query the sub-VFO, nor can you swap VFOs via software.
|
||||||
|
*/
|
||||||
|
int ft847_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
|
||||||
|
{
|
||||||
|
rmode_t mode;
|
||||||
|
pbwidth_t width;
|
||||||
|
|
||||||
|
return get_freq_and_mode(rig, vfo, freq, &mode, &width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -544,16 +650,7 @@ int ft847_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) {
|
|||||||
* Now set width
|
* Now set width
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch(width) {
|
if (width == rig_passband_narrow(rig, mode)) {
|
||||||
case RIG_PASSBAND_NORMAL: /* easy case , no change to native sequence */
|
|
||||||
ft847_send_priv_cmd(rig,cmd_index); /* TODO -- check return codes */
|
|
||||||
return RIG_OK; /* I am out of here .. */
|
|
||||||
|
|
||||||
#ifdef RIG_PASSBAND_OLDTIME
|
|
||||||
case RIG_PASSBAND_WIDE:
|
|
||||||
return -RIG_EINVAL; /* sorry, WIDE WIDTH is not supported */
|
|
||||||
|
|
||||||
case RIG_PASSBAND_NARROW: /* must set narrow */
|
|
||||||
switch(mode) {
|
switch(mode) {
|
||||||
case RIG_MODE_AM:
|
case RIG_MODE_AM:
|
||||||
cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_AMN;
|
cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_AMN;
|
||||||
@ -567,16 +664,12 @@ int ft847_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) {
|
|||||||
default:
|
default:
|
||||||
return -RIG_EINVAL; /* sorry, wrong MODE/WIDTH combo */
|
return -RIG_EINVAL; /* sorry, wrong MODE/WIDTH combo */
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
#else
|
if (width != RIG_PASSBAND_NORMAL &&
|
||||||
/* TODO ! */
|
width != rig_passband_normal(rig, mode)) {
|
||||||
#endif
|
return -RIG_EINVAL; /* sorry, wrong MODE/WIDTH combo */
|
||||||
|
}
|
||||||
default:
|
}
|
||||||
return -RIG_EINVAL; /* sorry, wrong WIDTH requested */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now send the command
|
* Now send the command
|
||||||
*/
|
*/
|
||||||
@ -587,7 +680,9 @@ int ft847_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ft847_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
|
int ft847_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
|
||||||
return -RIG_ENIMPL;
|
freq_t freq;
|
||||||
|
|
||||||
|
return get_freq_and_mode(rig, vfo, &freq, mode, width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user