kopia lustrzana https://github.com/Hamlib/Hamlib
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-79ac388436b8Hamlib-1.2.13
rodzic
aa24ca7ab6
commit
7f06be1267
|
@ -74,6 +74,8 @@ static const char *si570avrusb_get_info(RIG *rig);
|
||||||
|
|
||||||
#define TOK_OSCFREQ TOKEN_BACKEND(1)
|
#define TOK_OSCFREQ TOKEN_BACKEND(1)
|
||||||
#define TOK_MULTIPLIER TOKEN_BACKEND(3)
|
#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[] = {
|
static const struct confparams si570avrusb_cfg_params[] = {
|
||||||
{ TOK_OSCFREQ, "osc_freq", "Oscillator freq", "Oscillator frequency in Hz",
|
{ 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",
|
{ TOK_MULTIPLIER, "multiplier", "Freq Multiplier", "Frequency multiplier",
|
||||||
"4", RIG_CONF_NUMERIC, { .n = { 0.000001, 100 } }
|
"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, }
|
{ RIG_CONF_END, NULL, }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -95,6 +103,9 @@ struct si570avrusb_priv_data {
|
||||||
|
|
||||||
double osc_freq; /* MHz */
|
double osc_freq; /* MHz */
|
||||||
double multiplier; /* default to 4 for QSD/QSE */
|
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 */
|
#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,
|
.rig_model = RIG_MODEL_SI570AVRUSB,
|
||||||
.model_name = "Si570 AVR-USB",
|
.model_name = "Si570 AVR-USB",
|
||||||
.mfg_name = "SoftRock",
|
.mfg_name = "SoftRock",
|
||||||
.version = "0.1",
|
.version = "0.2",
|
||||||
.copyright = "GPL",
|
.copyright = "GPL",
|
||||||
.status = RIG_STATUS_BETA,
|
.status = RIG_STATUS_BETA,
|
||||||
.rig_type = RIG_TYPE_TUNER,
|
.rig_type = RIG_TYPE_TUNER,
|
||||||
|
@ -209,6 +220,10 @@ int si570avrusb_init(RIG *rig)
|
||||||
/* QSD/QSE */
|
/* QSD/QSE */
|
||||||
priv->multiplier = 4;
|
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.vid = USBDEV_SHARED_VID;
|
||||||
rp->parm.usb.pid = USBDEV_SHARED_PID;
|
rp->parm.usb.pid = USBDEV_SHARED_PID;
|
||||||
rp->parm.usb.conf = 1;
|
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;
|
struct si570avrusb_priv_data *priv;
|
||||||
freq_t freq;
|
freq_t freq;
|
||||||
double multiplier;
|
double multiplier;
|
||||||
|
int i2c_addr;
|
||||||
|
|
||||||
priv = (struct si570avrusb_priv_data*)rig->state.priv;
|
priv = (struct si570avrusb_priv_data*)rig->state.priv;
|
||||||
|
|
||||||
switch(token) {
|
switch(token) {
|
||||||
case TOK_OSCFREQ:
|
case TOK_OSCFREQ:
|
||||||
sscanf(val, "%"SCNfreq, &freq);
|
if (sscanf(val, "%"SCNfreq, &freq) != 1)
|
||||||
|
return -RIG_EINVAL;
|
||||||
priv->osc_freq = (double)freq/1e6;
|
priv->osc_freq = (double)freq/1e6;
|
||||||
break;
|
break;
|
||||||
case TOK_MULTIPLIER:
|
case TOK_MULTIPLIER:
|
||||||
sscanf(val, "%lf", &multiplier);
|
if (sscanf(val, "%lf", &multiplier) != 1)
|
||||||
|
return -RIG_EINVAL;
|
||||||
if (multiplier == 0.)
|
if (multiplier == 0.)
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
priv->multiplier = multiplier;
|
priv->multiplier = multiplier;
|
||||||
break;
|
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:
|
default:
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -273,6 +302,12 @@ int si570avrusb_get_conf(RIG *rig, token_t token, char *val)
|
||||||
case TOK_MULTIPLIER:
|
case TOK_MULTIPLIER:
|
||||||
sprintf(val, "%f", priv->multiplier);
|
sprintf(val, "%f", priv->multiplier);
|
||||||
break;
|
break;
|
||||||
|
case TOK_I2C_ADDR:
|
||||||
|
sprintf(val, "%x", priv->i2c_addr);
|
||||||
|
break;
|
||||||
|
case TOK_BPF:
|
||||||
|
sprintf(val, "%d", priv->bpf);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -357,9 +392,11 @@ int si570avrusb_open(RIG *rig)
|
||||||
|
|
||||||
priv->osc_freq = (double)iFreq / (1UL<<24);
|
priv->osc_freq = (double)iFreq / (1UL<<24);
|
||||||
|
|
||||||
ret = setBPF(rig, 1);
|
if (priv->bpf) {
|
||||||
if (ret != RIG_OK)
|
ret = setBPF(rig, 1);
|
||||||
return ret;
|
if (ret != RIG_OK)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rig_debug(RIG_DEBUG_VERBOSE,"%s: using Xtall at %.3f MHz\n",
|
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;
|
int ret;
|
||||||
unsigned char buffer[6];
|
unsigned char buffer[6];
|
||||||
int request = REQUEST_SET_FREQ;
|
int request = REQUEST_SET_FREQ;
|
||||||
int value = 0x700 + SI570_I2C_ADDR;
|
int value = 0x700 + priv->i2c_addr;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
double f;
|
double f;
|
||||||
struct solution theSolution;
|
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];
|
unsigned char buffer[4];
|
||||||
int request = REQUEST_SET_FREQ_BY_VALUE;
|
int request = REQUEST_SET_FREQ_BY_VALUE;
|
||||||
int value = 0x700 + SI570_I2C_ADDR;
|
int value = 0x700 + priv->i2c_addr;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
double f;
|
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);
|
return si570avrusb_get_freq_by_value(rig, vfo, freq);
|
||||||
|
|
||||||
ret = usb_control_msg(udh, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
|
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);
|
(char *)buffer, sizeof(buffer), rig->state.rigport.timeout);
|
||||||
|
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
|
|
Ładowanie…
Reference in New Issue