kopia lustrzana https://github.com/Hamlib/Hamlib
* this is WIP. Some new demodulators copy/pasted from the GNU Radio project
* declared GrAudio I&Q interface git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1545 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.0
rodzic
de179ba56b
commit
123f1ef98c
|
@ -3,7 +3,7 @@
|
|||
* Hamlib GNUradio backend - main file
|
||||
* Copyright (c) 2001-2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: gnuradio.cc,v 1.5 2003-09-23 22:54:56 fillods Exp $
|
||||
* $Id: gnuradio.cc,v 1.6 2003-09-28 15:59:27 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -30,10 +30,10 @@
|
|||
*/
|
||||
|
||||
#include <VrSigSource.h>
|
||||
#include <VrAudioSource.h>
|
||||
#include <GrAudioSource.h>
|
||||
#include <VrFileSource.h>
|
||||
#include <VrNullSink.h>
|
||||
#include <VrAudioSink.h>
|
||||
#include <GrAudioSink.h>
|
||||
#include <VrFileSink.h>
|
||||
|
||||
#include <VrFixOffset.h>
|
||||
|
@ -46,10 +46,8 @@
|
|||
#include <GrFIRfilterFSF.h>
|
||||
#include <GrFIRfilterFFF.h>
|
||||
#include <VrQuadratureDemod.h> /* FM */
|
||||
//#include <VrAmplitudeDemod.h> /* AM */
|
||||
/* SSB mod */
|
||||
//#include <GrSSBMod.h>
|
||||
//#include <GrHilbert.h>
|
||||
#include <GrMagnitude.h> /* AM */
|
||||
#include <GrSSBMod.h> /* SSB */
|
||||
|
||||
#include <gr_firdes.h>
|
||||
#include <gr_fir_builderF.h>
|
||||
|
@ -59,6 +57,9 @@
|
|||
#define CARRIER_FREQ 1.070e6 // AM 1070
|
||||
#define AMPLITUDE 3000
|
||||
|
||||
#define AUDIO_IN "/dev/dsp"
|
||||
#define AUDIO_OUT "/dev/dsp1"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h> /* Standard input/output definitions */
|
||||
#include <string.h> /* String function definitions */
|
||||
|
@ -270,24 +271,30 @@ int gr_open(RIG *rig)
|
|||
|
||||
// --> short
|
||||
|
||||
priv->source = new VrFileSource<short>(priv->input_rate, "/tmp/fm95_5_half.dat", true);
|
||||
#if 0
|
||||
if (!priv->source) {
|
||||
priv->source = new VrFileSource<short>(priv->input_rate, "/tmp/fm95_5_half.dat", true);
|
||||
priv->need_fixer = 1;
|
||||
}
|
||||
// Chirp
|
||||
if (!priv->source)
|
||||
priv->source = new VrSigSource<IOTYPE>(priv->input_rate, VR_SIN_WAVE, CARRIER_FREQ, AMPLITUDE);
|
||||
#endif
|
||||
//new VrChirpSource<IOTYPE>(priv->input_rate, AMPLITUDE, 4);
|
||||
/* VrFileSource (double sampling_freq, const char *file, bool repeat = false) */
|
||||
//priv->source = new VrFileSource<short>(priv->input_rate, "microtune_source.sw", true);
|
||||
|
||||
// short --> short
|
||||
priv->need_fixer = 1;
|
||||
priv->offset_fixer = new VrFixOffset<short,short>();
|
||||
NWO_CONNECT (priv->source, priv->offset_fixer);
|
||||
if (priv->need_fixer) {
|
||||
priv->offset_fixer = new VrFixOffset<short,short>();
|
||||
NWO_CONNECT (priv->source, priv->offset_fixer);
|
||||
}
|
||||
|
||||
priv->sink = new VrAudioSink<short>();
|
||||
priv->sink = new GrAudioSink<float>(1,AUDIO_IN);
|
||||
|
||||
/* ** Sink ** */
|
||||
if (!priv->sink)
|
||||
priv->sink = new VrNullSink<short>();
|
||||
priv->sink = new VrNullSink<float>();
|
||||
//priv->sink = new VrFileSink<short>("microtune_audio.sw");
|
||||
|
||||
priv->m = new VrMultiTask ();
|
||||
|
@ -324,13 +331,16 @@ int mc4020_open(RIG *rig)
|
|||
struct gnuradio_priv_data *priv = (struct gnuradio_priv_data*)rig->state.priv;
|
||||
|
||||
/* input sample rate from PCI-DAS4020/12: 20000000 */
|
||||
#if 0
|
||||
priv->source = make_GrMC4020SourceS(priv->input_rate, MCC_CH3_EN | MCC_ALL_1V);
|
||||
#endif
|
||||
|
||||
return gr_open(rig);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* graudio, mono
|
||||
* sound card source override
|
||||
*/
|
||||
int graudio_open(RIG *rig)
|
||||
|
@ -339,8 +349,27 @@ int graudio_open(RIG *rig)
|
|||
|
||||
/*
|
||||
* assumes sound card is full duplex!
|
||||
* mono source
|
||||
*/
|
||||
priv->source = new VrAudioSource<short>(priv->input_rate);
|
||||
priv->source = new GrAudioSource<VrComplex>(priv->input_rate, 1,1,AUDIO_OUT);
|
||||
|
||||
return gr_open(rig);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* graudio I&Q, stereo
|
||||
* sound card source override
|
||||
*/
|
||||
int graudioiq_open(RIG *rig)
|
||||
{
|
||||
struct gnuradio_priv_data *priv = (struct gnuradio_priv_data*)rig->state.priv;
|
||||
|
||||
/*
|
||||
* assumes sound card is full duplex!
|
||||
* I&Q source
|
||||
*/
|
||||
priv->source = new GrAudioSource<VrComplex>(priv->input_rate, 2,1, AUDIO_OUT);
|
||||
|
||||
return gr_open(rig);
|
||||
}
|
||||
|
@ -442,6 +471,7 @@ static int update_freq(RIG *rig, unsigned chan_num, freq_t tuner_freq, freq_t fr
|
|||
/* TODO: change mode plumbing (don't forget locking!)
|
||||
* workaround?: set_mode(NONE), set_mode(previous)
|
||||
*/
|
||||
|
||||
pthread_mutex_lock(&priv->mutex_process);
|
||||
switch (chan->mode) {
|
||||
case RIG_MODE_WFM:
|
||||
|
@ -583,19 +613,21 @@ int gr_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
if (chan->mode != RIG_MODE_NONE && mode != chan->mode) {
|
||||
|
||||
switch (chan->mode) {
|
||||
case RIG_MODE_FM:
|
||||
#if 0
|
||||
case RIG_MODE_WFM:
|
||||
delete mod->demod.wfm.demod;
|
||||
delete mod->chan_filter;
|
||||
delete mod->audio_filter;
|
||||
break;
|
||||
#endif
|
||||
case RIG_MODE_FM:
|
||||
case RIG_MODE_USB:
|
||||
delete mod->audio_filter;
|
||||
delete mod->chan_filter;
|
||||
break;
|
||||
case RIG_MODE_LSB:
|
||||
case RIG_MODE_AM:
|
||||
delete mod->chan_filter;
|
||||
delete mod->audio_filter;
|
||||
delete mod->mixer;
|
||||
delete mod->demod;
|
||||
delete mod->gainstage;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -606,6 +638,7 @@ int gr_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
priv->m->stop();
|
||||
|
||||
switch (mode) {
|
||||
#if 0
|
||||
case RIG_MODE_FM:
|
||||
{
|
||||
mod->CFIRdecimate = 20;
|
||||
|
@ -720,7 +753,8 @@ const int audioRate = quadRate / mod->RFIRdecimate;
|
|||
|
||||
break;
|
||||
}
|
||||
|
||||
#endif
|
||||
#if 0
|
||||
case RIG_MODE_WFM:
|
||||
{
|
||||
mod->CFIRdecimate = 125;
|
||||
|
@ -791,60 +825,69 @@ const int audioRate = quadRate / mod->RFIRdecimate;
|
|||
|
||||
break;
|
||||
}
|
||||
|
||||
#endif
|
||||
case RIG_MODE_USB:
|
||||
{
|
||||
float rf_gain = chan->levels[rig_setting2idx(RIG_LEVEL_RF)].f;
|
||||
float low_cutoff = 300;
|
||||
float high_cutoff = low_cutoff+width;
|
||||
mod->centerfreq = (freq_t)(priv->IF_center_freq + low_cutoff + width/2);
|
||||
|
||||
/* GrSSBMod<short>(2*M_PI*freq_offset/(double)priv->input_rate, rf_gain); */
|
||||
|
||||
#if 0
|
||||
//SSB mod:
|
||||
mod->ssb.hilb = new GrHilbert<short>(31); /* what's that 31? */
|
||||
mod->ssb.shifter = new GrSSBMod<short>(2*M_PI*freq_offset/(double)priv->input_rate,
|
||||
rf_gain);
|
||||
#endif
|
||||
|
||||
//connect the modules together
|
||||
NWO_CONNECT (GR_SOURCE(priv), mod->chan_filter);
|
||||
NWO_CONNECT (mod->chan_filter, mod->demod.fm.demod);
|
||||
NWO_CONNECT (mod->demod.fm.demod, mod->audio_filter);
|
||||
NWO_CONNECT (mod->audio_filter, priv->sink);
|
||||
mod->demod = new GrSSBMod<float>(2*M_PI*(low_cutoff+width/2)/(double)priv->input_rate,rf_gain);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
#if 0
|
||||
case RIG_MODE_AM:
|
||||
{
|
||||
float volume = chan->levels[rig_setting2idx(RIG_LEVEL_AF)].f;
|
||||
|
||||
//
|
||||
// setup Wide FM demodulator chain
|
||||
//
|
||||
|
||||
// VrComplex --> float
|
||||
mod->am.demod =
|
||||
new VrAmplitudeDemod<float>(0.0, 0.05);
|
||||
|
||||
//connect the modules together
|
||||
|
||||
NWO_CONNECT (GR_SOURCE(priv), mod->chan_filter);
|
||||
NWO_CONNECT (mod->chan_filter, mod->am.demod);
|
||||
NWO_CONNECT (mod->am.demod, mod->audio_filter);
|
||||
NWO_CONNECT (mod->audio_filter, priv->sink);
|
||||
mod->centerfreq = priv->IF_center_freq;
|
||||
// VrComplex --> float
|
||||
mod->demod = new GrMagnitude<VrComplex,float>();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case RIG_MODE_FM:
|
||||
{
|
||||
float volume = chan->levels[rig_setting2idx(RIG_LEVEL_AF)].f;
|
||||
|
||||
mod->centerfreq = kHz(10);
|
||||
// VrComplex --> float
|
||||
mod->demod = new VrQuadratureDemod<float>(1);
|
||||
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
case RIG_MODE_NONE:
|
||||
/* ez */
|
||||
break;
|
||||
chan->mode = mode;
|
||||
pthread_mutex_unlock(&priv->mutex_process);
|
||||
return ret;
|
||||
|
||||
default:
|
||||
ret = -RIG_EINVAL;
|
||||
}
|
||||
|
||||
// change_filt();
|
||||
vector<float> channel_coeffs =
|
||||
gr_firdes::low_pass (1.0, // gain
|
||||
priv->input_rate, // sampling rate
|
||||
width/2, // low-pass cutoff freq
|
||||
300, // width of transition band
|
||||
gr_firdes::WIN_HAMMING);
|
||||
|
||||
mod->mixer = new GrFreqXlatingFIRfilterCCF (1, channel_coeffs, mod->centerfreq);
|
||||
mod->gainstage = new VrAmp<float,float>(1);
|
||||
|
||||
NWO_CONNECT (GR_SOURCE(priv), mod->mixer);
|
||||
NWO_CONNECT (mod->mixer, mod->demod);
|
||||
NWO_CONNECT (mod->demod, mod->gainstage);
|
||||
NWO_CONNECT (mod->gainstage, priv->sink);
|
||||
|
||||
|
||||
priv->m->add (priv->sink);
|
||||
priv->m->start();
|
||||
|
||||
|
@ -1083,61 +1126,8 @@ DECLARE_INITRIG_BACKEND(gnuradio)
|
|||
rig_register(&gr_caps);
|
||||
rig_register(&mc4020_caps);
|
||||
rig_register(&graudio_caps);
|
||||
rig_register(&graudioiq_caps);
|
||||
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
#if 0
|
||||
VrGUI *guimain = 0;
|
||||
VrGUILayout *horiz = 0;
|
||||
VrGUILayout *vert = 0;
|
||||
|
||||
|
||||
if (use_gui_p){
|
||||
guimain = new VrGUI(argc, argv);
|
||||
horiz = guimain->top->horizontal();
|
||||
vert = horiz->vertical();
|
||||
}
|
||||
|
||||
VrSink<VrComplex> *fft_sink1 = 0;
|
||||
VrSink<float> *fft_sink2 = 0;
|
||||
VrSink<short> *fft_sink3 = 0;
|
||||
|
||||
if (use_gui_p){
|
||||
// sink1 is channel filter output
|
||||
fft_sink1 = new GrFFTSink<VrComplex>(vert, 50, 130, 512);
|
||||
|
||||
// sink2 is fm demod output
|
||||
fft_sink2 = new GrFFTSink<float>(vert, 40, 140, 512);
|
||||
|
||||
// sink3 is audio output
|
||||
fft_sink3 = new GrFFTSink<short>(horiz, 40, 140, 512);
|
||||
}
|
||||
|
||||
if (use_gui_p)
|
||||
NWO_CONNECT (chan_filter, fft_sink1);
|
||||
|
||||
if (use_gui_p)
|
||||
NWO_CONNECT (demod, fft_sink2);
|
||||
|
||||
if (use_gui_p)
|
||||
NWO_CONNECT (audio_filter, fft_sink3);
|
||||
|
||||
VrMultiTask *m = new VrMultiTask ();
|
||||
if (use_gui_p){
|
||||
m->add (fft_sink1);
|
||||
m->add (fft_sink3);
|
||||
m->add (fft_sink2);
|
||||
}
|
||||
|
||||
m->add (final_sink);
|
||||
|
||||
if (use_gui_p)
|
||||
guimain->start ();
|
||||
|
||||
|
||||
while (1){
|
||||
if (use_gui_p)
|
||||
guimain->processEvents(10 /*ms*/);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - main header
|
||||
* Copyright (c) 2001-2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: gnuradio.h,v 1.4 2003-04-16 22:30:40 fillods Exp $
|
||||
* $Id: gnuradio.h,v 1.5 2003-09-28 15:59:27 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -58,12 +58,14 @@ int gnuradio_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit);
|
|||
|
||||
int mc4020_open(RIG *rig);
|
||||
int graudio_open(RIG *rig);
|
||||
int graudioiq_open(RIG *rig);
|
||||
|
||||
extern const struct confparams gnuradio_cfg_params[];
|
||||
|
||||
extern const struct rig_caps gr_caps;
|
||||
extern const struct rig_caps mc4020_caps;
|
||||
extern const struct rig_caps graudio_caps;
|
||||
extern const struct rig_caps graudioiq_caps;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - gnuradio priv structure
|
||||
* Copyright (c) 2001-2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: gr_priv.h,v 1.4 2003-04-06 18:50:21 fillods Exp $
|
||||
* $Id: gr_priv.h,v 1.5 2003-09-28 15:59:27 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -34,6 +34,7 @@
|
|||
//#include <VrAmplitudeDemod.h> /* AM */
|
||||
#include <GrIIRfilter.h>
|
||||
#include <GrConvertFS.h>
|
||||
#include <VrAmp.h>
|
||||
|
||||
/* SSB mod */
|
||||
//#include <GrSSBMod.h>
|
||||
|
@ -46,35 +47,11 @@
|
|||
#define IOTYPE short
|
||||
|
||||
struct mod_data {
|
||||
union {
|
||||
struct {
|
||||
/* FM demod */
|
||||
VrQuadratureDemod<float> *demod;
|
||||
float FMdemodGain;
|
||||
GrFreqXlatingFIRfilterCCF *chan2_filter;
|
||||
GrIIRfilter<float,float,double> *deemph;
|
||||
GrConvertFS *cfs;
|
||||
} fm;
|
||||
struct {
|
||||
/* WFM demod */
|
||||
VrQuadratureDemod<float> *demod;
|
||||
float FMdemodGain;
|
||||
} wfm;
|
||||
#if 0
|
||||
struct {
|
||||
/* AM demod */
|
||||
VrAmplitudeDemod<float> *demod;
|
||||
} am;
|
||||
#endif
|
||||
freq_t centerfreq;
|
||||
GrFreqXlatingFIRfilterCCF *mixer;
|
||||
VrAmp<float,float> *gainstage;
|
||||
VrSigProc *demod;
|
||||
|
||||
struct {
|
||||
/* SSB mod */
|
||||
#if 0
|
||||
GrHilbert<short> *hilb;
|
||||
GrSSBMod<short> *shifter;
|
||||
#endif
|
||||
} ssb;
|
||||
} demod;
|
||||
int CFIRdecimate;
|
||||
int CFIRdecimate2;
|
||||
int RFIRdecimate;
|
||||
|
@ -99,9 +76,9 @@ struct gnuradio_priv_data {
|
|||
shortfreq_t input_rate;
|
||||
shortfreq_t IF_center_freq;
|
||||
|
||||
VrSource<IOTYPE> *source; /*< IF source */
|
||||
VrSource<VrComplex> *source; /*< IF source */
|
||||
VrFixOffset<IOTYPE,IOTYPE> *offset_fixer; /*< some sources need it */
|
||||
VrSink<short> *sink; /*< Audio sink */
|
||||
VrSink<float> *sink; /*< Audio sink */
|
||||
VrMultiTask *m;
|
||||
int need_fixer; /*< always need Offset fixer ? */
|
||||
|
||||
|
@ -113,8 +90,10 @@ struct gnuradio_priv_data {
|
|||
};
|
||||
|
||||
//#define GR_SOURCE(priv) ((priv)->need_fixer?(priv)->offset_fixer:(priv)->source)
|
||||
#define GR_SOURCE(priv) ((priv)->offset_fixer)
|
||||
//#define GR_SOURCE(priv) ((priv)->offset_fixer)
|
||||
#define GR_SOURCE(priv) ((priv)->source)
|
||||
|
||||
#define GR_MAX_FREQUENCY(priv) ((priv)->input_rate/2)
|
||||
//#define GR_MAX_FREQUENCY(priv) ((priv)->input_rate/2)
|
||||
#define GR_MAX_FREQUENCY(priv) ((priv)->input_rate)
|
||||
|
||||
#endif /* _GR_PRIV_H */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - graudio/any rig
|
||||
* Copyright (c) 2001-2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: graudio.c,v 1.2 2003-04-06 18:50:21 fillods Exp $
|
||||
* $Id: graudio.c,v 1.3 2003-09-28 15:59:27 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -42,20 +42,20 @@
|
|||
/*
|
||||
* GNU Radio Audio has no WFM mode because bandwidth is too wide!
|
||||
*/
|
||||
#define GRAUDIO_MODES (RIG_MODE_FM|RIG_MODE_SSB)
|
||||
#define GRAUDIO_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_SSB)
|
||||
|
||||
#define GRAUDIO_VFO (RIG_VFO_A|RIG_VFO_B)
|
||||
|
||||
static const struct gnuradio_priv_caps graudio_priv_caps = {
|
||||
.tuner_model = RIG_MODEL_DUMMY,
|
||||
.input_rate = 48000, /* To be fixed. how? */
|
||||
.IF_center_freq = kHz(0),
|
||||
.IF_center_freq = -kHz(10),
|
||||
};
|
||||
|
||||
|
||||
const struct rig_caps graudio_caps = {
|
||||
.rig_model = RIG_MODEL_GRAUDIO,
|
||||
.model_name = "GNU Radio GRAUDIO",
|
||||
.model_name = "GNU Radio GrAudio",
|
||||
.mfg_name = "GNU",
|
||||
.version = "0.1.1",
|
||||
.copyright = "GPL",
|
||||
|
@ -88,7 +88,7 @@ const struct rig_caps graudio_caps = {
|
|||
.tuning_steps = { {GRAUDIO_MODES,1}, {GRAUDIO_MODES,RIG_TS_ANY}, RIG_TS_END, },
|
||||
.filters = {
|
||||
{RIG_MODE_SSB|RIG_MODE_CW, kHz(2.4)},
|
||||
{RIG_MODE_AM, kHz(8)},
|
||||
{RIG_MODE_AM, kHz(6)},
|
||||
{RIG_MODE_FM, kHz(15)},
|
||||
{GRAUDIO_MODES, RIG_FLT_ANY},
|
||||
RIG_FLT_END,
|
||||
|
@ -123,3 +123,73 @@ const struct rig_caps graudio_caps = {
|
|||
.vfo_op = gnuradio_vfo_op,
|
||||
};
|
||||
|
||||
const struct rig_caps graudioiq_caps = {
|
||||
.rig_model = RIG_MODEL_GRAUDIOIQ,
|
||||
.model_name = "GNU Radio GrAudio I&Q",
|
||||
.mfg_name = "GNU",
|
||||
.version = "0.1.1",
|
||||
.copyright = "GPL",
|
||||
.status = RIG_STATUS_ALPHA,
|
||||
.rig_type = RIG_TYPE_PCRECEIVER,
|
||||
.targetable_vfo = RIG_TARGETABLE_ALL,
|
||||
.ptt_type = RIG_PTT_RIG,
|
||||
.dcd_type = RIG_DCD_RIG,
|
||||
.port_type = RIG_PORT_NONE,
|
||||
.has_get_func = GRAUDIO_FUNC,
|
||||
.has_set_func = GRAUDIO_FUNC,
|
||||
.has_get_level = GRAUDIO_LEVEL,
|
||||
.has_set_level = RIG_LEVEL_SET(GRAUDIO_LEVEL),
|
||||
.has_get_parm = GRAUDIO_PARM,
|
||||
.has_set_parm = RIG_PARM_SET(GRAUDIO_PARM),
|
||||
.ctcss_list = NULL,
|
||||
.dcs_list = NULL,
|
||||
.chan_list = {
|
||||
RIG_CHAN_END,
|
||||
},
|
||||
.scan_ops = GRAUDIO_SCAN,
|
||||
.vfo_ops = GRAUDIO_VFO_OP,
|
||||
.transceive = RIG_TRN_OFF,
|
||||
.attenuator = { RIG_DBLST_END, },
|
||||
.preamp = { RIG_DBLST_END, },
|
||||
.rx_range_list2 = { {.start=kHz(100),.end=MHz(30),.modes=GRAUDIO_MODES,
|
||||
.low_power=-1,.high_power=-1,GRAUDIO_VFO},
|
||||
RIG_FRNG_END, },
|
||||
.tx_range_list2 = { RIG_FRNG_END, },
|
||||
.tuning_steps = { {GRAUDIO_MODES,1}, {GRAUDIO_MODES,RIG_TS_ANY}, RIG_TS_END, },
|
||||
.filters = {
|
||||
{RIG_MODE_SSB|RIG_MODE_CW, kHz(2.4)},
|
||||
{RIG_MODE_AM, kHz(6)},
|
||||
{RIG_MODE_FM, kHz(15)},
|
||||
{GRAUDIO_MODES, RIG_FLT_ANY},
|
||||
RIG_FLT_END,
|
||||
},
|
||||
|
||||
.priv = (void*)&graudio_priv_caps,
|
||||
|
||||
.rig_init = gr_init,
|
||||
.rig_cleanup = gr_cleanup,
|
||||
.rig_open = graudioiq_open,
|
||||
.rig_close = gr_close,
|
||||
|
||||
.cfgparams = gnuradio_cfg_params,
|
||||
.set_conf = gnuradio_set_conf,
|
||||
.get_conf = gnuradio_get_conf,
|
||||
|
||||
.set_freq = gr_set_freq,
|
||||
.get_freq = gr_get_freq,
|
||||
|
||||
.set_vfo = gr_set_vfo,
|
||||
.get_vfo = gr_get_vfo,
|
||||
.set_mode = gr_set_mode,
|
||||
.get_mode = gr_get_mode,
|
||||
|
||||
.set_level = gnuradio_set_level,
|
||||
.get_level = gnuradio_get_level,
|
||||
|
||||
.set_rit = gnuradio_set_rit,
|
||||
.get_rit = gnuradio_get_rit,
|
||||
.set_ts = gnuradio_set_ts,
|
||||
.get_ts = gnuradio_get_ts,
|
||||
.vfo_op = gnuradio_vfo_op,
|
||||
};
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue