Disable BPF because of probable PTT shared pin, but it can still be enabled through set_conf.

Add conf item for I2C address 


git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2993 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.13
Stéphane Fillod, F8CFE 2010-10-07 21:51:29 +00:00
rodzic aa24ca7ab6
commit 7f06be1267
1 zmienionych plików z 46 dodań i 9 usunięć

Wyświetl plik

@ -74,6 +74,8 @@ static const char *si570avrusb_get_info(RIG *rig);
#define TOK_OSCFREQ TOKEN_BACKEND(1)
#define TOK_MULTIPLIER TOKEN_BACKEND(3)
#define TOK_I2C_ADDR TOKEN_BACKEND(4)
#define TOK_BPF TOKEN_BACKEND(5)
static const struct confparams si570avrusb_cfg_params[] = {
{ TOK_OSCFREQ, "osc_freq", "Oscillator freq", "Oscillator frequency in Hz",
@ -82,6 +84,12 @@ static const struct confparams si570avrusb_cfg_params[] = {
{ TOK_MULTIPLIER, "multiplier", "Freq Multiplier", "Frequency multiplier",
"4", RIG_CONF_NUMERIC, { .n = { 0.000001, 100 } }
},
{ TOK_I2C_ADDR, "i2c_addr", "I2C Address", "Si570 I2C Address",
"55", RIG_CONF_NUMERIC, { .n = { 0, 512 } }
},
{ TOK_BPF, "bpf", "BPF", "Enable Band Pass Filter",
"0", RIG_CONF_CHECKBUTTON, { }
},
{ RIG_CONF_END, NULL, }
};
@ -95,6 +103,9 @@ struct si570avrusb_priv_data {
double osc_freq; /* MHz */
double multiplier; /* default to 4 for QSD/QSE */
int i2c_addr;
int bpf; /* enable BPF? */
};
#define SI570AVRUSB_MODES (RIG_MODE_USB) /* USB is for SDR */
@ -124,7 +135,7 @@ const struct rig_caps si570avrusb_caps = {
.rig_model = RIG_MODEL_SI570AVRUSB,
.model_name = "Si570 AVR-USB",
.mfg_name = "SoftRock",
.version = "0.1",
.version = "0.2",
.copyright = "GPL",
.status = RIG_STATUS_BETA,
.rig_type = RIG_TYPE_TUNER,
@ -209,6 +220,10 @@ int si570avrusb_init(RIG *rig)
/* QSD/QSE */
priv->multiplier = 4;
priv->i2c_addr = SI570_I2C_ADDR;
/* disable BPF, because it may share PTT I/O line */
priv->bpf = 0;
rp->parm.usb.vid = USBDEV_SHARED_VID;
rp->parm.usb.pid = USBDEV_SHARED_PID;
rp->parm.usb.conf = 1;
@ -240,20 +255,34 @@ int si570avrusb_set_conf(RIG *rig, token_t token, const char *val)
struct si570avrusb_priv_data *priv;
freq_t freq;
double multiplier;
int i2c_addr;
priv = (struct si570avrusb_priv_data*)rig->state.priv;
switch(token) {
case TOK_OSCFREQ:
sscanf(val, "%"SCNfreq, &freq);
if (sscanf(val, "%"SCNfreq, &freq) != 1)
return -RIG_EINVAL;
priv->osc_freq = (double)freq/1e6;
break;
case TOK_MULTIPLIER:
sscanf(val, "%lf", &multiplier);
if (sscanf(val, "%lf", &multiplier) != 1)
return -RIG_EINVAL;
if (multiplier == 0.)
return -RIG_EINVAL;
priv->multiplier = multiplier;
break;
case TOK_I2C_ADDR:
if (sscanf(val, "%x", &i2c_addr) != 1)
return -RIG_EINVAL;
if (i2c_addr < 0 || i2c_addr >= (1<<9))
return -RIG_EINVAL;
priv->i2c_addr = i2c_addr;
break;
case TOK_BPF:
if (sscanf(val, "%d", &priv->bpf) != 1)
return -RIG_EINVAL;
break;
default:
return -RIG_EINVAL;
}
@ -273,6 +302,12 @@ int si570avrusb_get_conf(RIG *rig, token_t token, char *val)
case TOK_MULTIPLIER:
sprintf(val, "%f", priv->multiplier);
break;
case TOK_I2C_ADDR:
sprintf(val, "%x", priv->i2c_addr);
break;
case TOK_BPF:
sprintf(val, "%d", priv->bpf);
break;
default:
return -RIG_EINVAL;
}
@ -357,9 +392,11 @@ int si570avrusb_open(RIG *rig)
priv->osc_freq = (double)iFreq / (1UL<<24);
ret = setBPF(rig, 1);
if (ret != RIG_OK)
return ret;
if (priv->bpf) {
ret = setBPF(rig, 1);
if (ret != RIG_OK)
return ret;
}
}
rig_debug(RIG_DEBUG_VERBOSE,"%s: using Xtall at %.3f MHz\n",
@ -474,7 +511,7 @@ int si570avrusb_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
int ret;
unsigned char buffer[6];
int request = REQUEST_SET_FREQ;
int value = 0x700 + SI570_I2C_ADDR;
int value = 0x700 + priv->i2c_addr;
int index = 0;
double f;
struct solution theSolution;
@ -534,7 +571,7 @@ int si570avrusb_set_freq_by_value(RIG *rig, vfo_t vfo, freq_t freq)
unsigned char buffer[4];
int request = REQUEST_SET_FREQ_BY_VALUE;
int value = 0x700 + SI570_I2C_ADDR;
int value = 0x700 + priv->i2c_addr;
int index = 0;
double f;
@ -602,7 +639,7 @@ int si570avrusb_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
return si570avrusb_get_freq_by_value(rig, vfo, freq);
ret = usb_control_msg(udh, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
REQUEST_READ_REGISTERS, SI570_I2C_ADDR, 0,
REQUEST_READ_REGISTERS, priv->i2c_addr, 0,
(char *)buffer, sizeof(buffer), rig->state.rigport.timeout);
if (ret <= 0) {