passband width setting, and return code checking

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2649 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.9
Stéphane Fillod, F8CFE 2009-02-20 12:27:53 +00:00
rodzic b375cea9fd
commit f968bdf224
1 zmienionych plików z 51 dodań i 78 usunięć

Wyświetl plik

@ -1,5 +1,6 @@
/* /*
* hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) * hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com)
* (C) Stephane Fillod 2000-2009
* *
* ft747.c - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) * ft747.c - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com)
* This shared library provides an API for communicating * This shared library provides an API for communicating
@ -7,7 +8,7 @@
* box (FIF-232C) or similar * box (FIF-232C) or similar
* *
* *
* $Id: ft747.c,v 1.22 2006-10-07 15:51:38 csete Exp $ * $Id: ft747.c,v 1.23 2009-02-20 12:27:53 fillods Exp $
* *
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
@ -145,7 +146,7 @@ const struct rig_caps ft747_caps = {
.rig_model = RIG_MODEL_FT747, .rig_model = RIG_MODEL_FT747,
.model_name = "FT-747GX", .model_name = "FT-747GX",
.mfg_name = "Yaesu", .mfg_name = "Yaesu",
.version = "0.2", .version = "0.3",
.copyright = "LGPL", .copyright = "LGPL",
.status = RIG_STATUS_ALPHA, .status = RIG_STATUS_ALPHA,
.rig_type = RIG_TYPE_MOBILE, .rig_type = RIG_TYPE_MOBILE,
@ -241,7 +242,7 @@ const struct rig_caps ft747_caps = {
{RIG_MODE_AM, kHz(6)}, /* normal AM filter */ {RIG_MODE_AM, kHz(6)}, /* normal AM filter */
{RIG_MODE_AM, kHz(2.4)}, /* AM filter with narrow selection */ {RIG_MODE_AM, kHz(2.4)}, /* AM filter with narrow selection */
{RIG_MODE_FM, kHz(8)}, /* FM with optional FM unit */ {RIG_MODE_FM, kHz(8)}, /* FM with optional FM unit */
{RIG_MODE_WFM, kHz(19)}, /* WideFM, with optional FM unit. */ {RIG_MODE_FM, kHz(19)}, /* Wide FM, with optional FM unit. */
RIG_FLT_END, RIG_FLT_END,
}, },
@ -382,12 +383,6 @@ int ft747_set_freq(RIG *rig, vfo_t vfo, freq_t freq) {
rig_debug(RIG_DEBUG_VERBOSE,"ft747: requested freq = %"PRIfreq" Hz \n", freq); rig_debug(RIG_DEBUG_VERBOSE,"ft747: requested freq = %"PRIfreq" Hz \n", freq);
/* frontend sets VFO now , if targetable_vfo = 0 */
#if 0
ft747_set_vfo(rig, vfo); /* select VFO first , new API */
#endif
/* /*
* Copy native cmd freq_set to private cmd storage area * Copy native cmd freq_set to private cmd storage area
*/ */
@ -400,9 +395,7 @@ int ft747_set_freq(RIG *rig, vfo_t vfo, freq_t freq) {
rig_debug(RIG_DEBUG_VERBOSE,"ft747: requested freq after conversion = %"PRIll" Hz \n", from_bcd(p->p_cmd,8)* 10 ); rig_debug(RIG_DEBUG_VERBOSE,"ft747: requested freq after conversion = %"PRIll" Hz \n", from_bcd(p->p_cmd,8)* 10 );
cmd = p->p_cmd; /* get native sequence */ cmd = p->p_cmd; /* get native sequence */
write_block(&rig_s->rigport, (char *) cmd, YAESU_CMD_LENGTH); return write_block(&rig_s->rigport, (char *) cmd, YAESU_CMD_LENGTH);
return RIG_OK;
} }
@ -413,6 +406,7 @@ int ft747_set_freq(RIG *rig, vfo_t vfo, freq_t freq) {
int ft747_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) { int ft747_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) {
struct ft747_priv_data *p; struct ft747_priv_data *p;
freq_t f; freq_t f;
int ret;
rig_debug(RIG_DEBUG_VERBOSE,"ft747:ft747_get_freq called \n"); rig_debug(RIG_DEBUG_VERBOSE,"ft747:ft747_get_freq called \n");
@ -421,7 +415,9 @@ int ft747_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) {
p = (struct ft747_priv_data*)rig->state.priv; p = (struct ft747_priv_data*)rig->state.priv;
ft747_get_update_data(rig); /* get whole shebang from rig */ ret = ft747_get_update_data(rig); /* get whole shebang from rig */
if (ret < 0)
return ret;
if (vfo == RIG_VFO_CURR ) if (vfo == RIG_VFO_CURR )
vfo = p->current_vfo; /* from previous vfo cmd */ vfo = p->current_vfo; /* from previous vfo cmd */
@ -452,15 +448,12 @@ int ft747_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) {
int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) { int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
unsigned char cmd_index; /* index of sequence to send */ unsigned char cmd_index; /* index of sequence to send */
pbwidth_t width_normal;
if (!rig) width_normal = rig_passband_normal(rig, mode);
return -RIG_EINVAL;
/* frontend sets VFO now , if targetable_vfo = 0 */ if (width == RIG_PASSBAND_NORMAL)
width = width_normal;
#if 0
ft747_set_vfo(rig, vfo); /* select VFO first , new API */
#endif
/* /*
* translate mode from generic to ft747 specific * translate mode from generic to ft747 specific
@ -470,10 +463,16 @@ int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
switch(mode) { switch(mode) {
case RIG_MODE_AM: case RIG_MODE_AM:
cmd_index = FT_747_NATIVE_MODE_SET_AMW; if (width < width_normal)
cmd_index = FT_747_NATIVE_MODE_SET_AMN;
else
cmd_index = FT_747_NATIVE_MODE_SET_AMW;
break; break;
case RIG_MODE_CW: case RIG_MODE_CW:
cmd_index = FT_747_NATIVE_MODE_SET_CWW; if (width < width_normal)
cmd_index = FT_747_NATIVE_MODE_SET_CWN;
else
cmd_index = FT_747_NATIVE_MODE_SET_CWW;
break; break;
case RIG_MODE_USB: case RIG_MODE_USB:
cmd_index = FT_747_NATIVE_MODE_SET_USB; cmd_index = FT_747_NATIVE_MODE_SET_USB;
@ -482,57 +481,22 @@ int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
cmd_index = FT_747_NATIVE_MODE_SET_LSB; cmd_index = FT_747_NATIVE_MODE_SET_LSB;
break; break;
case RIG_MODE_FM: case RIG_MODE_FM:
cmd_index = FT_747_NATIVE_MODE_SET_FMW; if (width > width_normal)
cmd_index = FT_747_NATIVE_MODE_SET_FMW;
else
cmd_index = FT_747_NATIVE_MODE_SET_FMN;
break; break;
default: default:
return -RIG_EINVAL; /* sorry, wrong MODE */ return -RIG_EINVAL; /* sorry, wrong MODE */
} }
rig_debug(RIG_DEBUG_VERBOSE,"ft747: cmd_index = %i \n", cmd_index);
/*
* Now set width
*/
switch(width) {
case RIG_PASSBAND_NORMAL: /* easy case , no change to native sequence */
break;
#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) {
case RIG_MODE_AM:
cmd_index = FT_747_NATIVE_MODE_SET_AMN;
break;
case RIG_MODE_FM:
cmd_index = FT_747_NATIVE_MODE_SET_FMN;
break;
case RIG_MODE_CW:
cmd_index = FT_747_NATIVE_MODE_SET_CWN;
break;
default:
return -RIG_EINVAL; /* sorry, wrong MODE/WIDTH combo */
}
break;
#else
/* TODO! */
#endif
default:
return -RIG_EINVAL; /* sorry, wrong WIDTH requested */
}
/* /*
* phew! now send cmd to rig * phew! now send cmd to rig
*/ */
ft747_send_priv_cmd(rig,cmd_index); return ft747_send_priv_cmd(rig,cmd_index);
rig_debug(RIG_DEBUG_VERBOSE,"ft747: cmd_index = %i \n", cmd_index);
return RIG_OK; /* good */
} }
@ -540,13 +504,16 @@ int ft747_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
int ft747_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { int ft747_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
struct ft747_priv_data *p; struct ft747_priv_data *p;
unsigned char mymode; /* ft747 mode */ unsigned char mymode; /* ft747 mode */
int ret;
if (!rig) if (!rig)
return -RIG_EINVAL; return -RIG_EINVAL;
p = (struct ft747_priv_data*)rig->state.priv; p = (struct ft747_priv_data*)rig->state.priv;
ft747_get_update_data(rig); /* get whole shebang from rig */ ret = ft747_get_update_data(rig); /* get whole shebang from rig */
if (ret < 0)
return ret;
mymode = p->update_data[FT747_SUMO_DISPLAYED_MODE]; mymode = p->update_data[FT747_SUMO_DISPLAYED_MODE];
mymode &= MODE_MASK; /* mask out bits 5 and 6 */ mymode &= MODE_MASK; /* mask out bits 5 and 6 */
@ -645,9 +612,7 @@ int ft747_set_vfo(RIG *rig, vfo_t vfo) {
* phew! now send cmd to rig * phew! now send cmd to rig
*/ */
ft747_send_priv_cmd(rig,cmd_index); return ft747_send_priv_cmd(rig,cmd_index);
return RIG_OK;
} }
@ -655,13 +620,16 @@ int ft747_set_vfo(RIG *rig, vfo_t vfo) {
int ft747_get_vfo(RIG *rig, vfo_t *vfo) { int ft747_get_vfo(RIG *rig, vfo_t *vfo) {
struct ft747_priv_data *p; struct ft747_priv_data *p;
unsigned char status; /* ft747 status flag */ unsigned char status; /* ft747 status flag */
int ret;
if (!rig) if (!rig)
return -RIG_EINVAL; return -RIG_EINVAL;
p = (struct ft747_priv_data*)rig->state.priv; p = (struct ft747_priv_data*)rig->state.priv;
ft747_get_update_data(rig); /* get whole shebang from rig */ ret = ft747_get_update_data(rig); /* get whole shebang from rig */
if (ret < 0)
return ret;
status = p->update_data[FT747_SUMO_DISPLAYED_STATUS]; status = p->update_data[FT747_SUMO_DISPLAYED_STATUS];
status &= SF_VFOAB; /* check VFO bit*/ status &= SF_VFOAB; /* check VFO bit*/
@ -712,21 +680,22 @@ int ft747_set_ptt(RIG *rig,vfo_t vfo, ptt_t ptt) {
* phew! now send cmd to rig * phew! now send cmd to rig
*/ */
ft747_send_priv_cmd(rig,cmd_index); return ft747_send_priv_cmd(rig,cmd_index);
return RIG_OK; /* good */
} }
int ft747_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) { int ft747_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) {
struct ft747_priv_data *p; struct ft747_priv_data *p;
unsigned char status; /* ft747 mode */ unsigned char status; /* ft747 mode */
int ret;
if (!rig) if (!rig)
return -RIG_EINVAL; return -RIG_EINVAL;
p = (struct ft747_priv_data*)rig->state.priv; p = (struct ft747_priv_data*)rig->state.priv;
ft747_get_update_data(rig); /* get whole shebang from rig */ ret = ft747_get_update_data(rig); /* get whole shebang from rig */
if (ret < 0)
return ret;
status = p->update_data[FT747_SUMO_DISPLAYED_STATUS]; status = p->update_data[FT747_SUMO_DISPLAYED_STATUS];
status = status & SF_RXTX; /* check RXTX bit*/ status = status & SF_RXTX; /* check RXTX bit*/
@ -780,17 +749,23 @@ static int ft747_get_update_data(RIG *rig) {
/* send PACING cmd to rig */ /* send PACING cmd to rig */
cmd = p->p_cmd; cmd = p->p_cmd;
write_block(&rig_s->rigport, (char *) cmd, YAESU_CMD_LENGTH); n = write_block(&rig_s->rigport, (char *) cmd, YAESU_CMD_LENGTH);
if (n < 0)
return n;
/* send UPDATE comand to fetch data*/ /* send UPDATE comand to fetch data*/
ft747_send_priv_cmd(rig,FT_747_NATIVE_UPDATE); n = ft747_send_priv_cmd(rig,FT_747_NATIVE_UPDATE);
if (n < 0)
return n;
/* n = read_sleep(rig_s->fd,p->update_data, FT747_STATUS_UPDATE_DATA_LENGTH, FT747_DEFAULT_READ_TIMEOUT); */ /* n = read_sleep(rig_s->fd,p->update_data, FT747_STATUS_UPDATE_DATA_LENGTH, FT747_DEFAULT_READ_TIMEOUT); */
n = read_block(&rig_s->rigport, (char *) p->update_data, n = read_block(&rig_s->rigport, (char *) p->update_data,
FT747_STATUS_UPDATE_DATA_LENGTH); FT747_STATUS_UPDATE_DATA_LENGTH);
if (n < 0)
return n;
return 0; return RIG_OK;
} }
@ -823,9 +798,7 @@ static int ft747_send_priv_cmd(RIG *rig, unsigned char ci) {
} }
cmd = (unsigned char *) p->pcs[cmd_index].nseq; /* get native sequence */ cmd = (unsigned char *) p->pcs[cmd_index].nseq; /* get native sequence */
write_block(&rig_s->rigport, (char *) cmd, YAESU_CMD_LENGTH); return write_block(&rig_s->rigport, (char *) cmd, YAESU_CMD_LENGTH);
return RIG_OK;
} }