@@ -199,25 +199,18 @@ void receiver::set_input_device(const std::string device)
199
199
tb->wait ();
200
200
}
201
201
202
- if (d_decim >= 2 )
203
- {
204
- tb->disconnect (src, 0 , input_decim, 0 );
205
- tb->disconnect (input_decim, 0 , iq_swap, 0 );
206
- }
207
- else
208
- {
209
- tb->disconnect (src, 0 , iq_swap, 0 );
210
- }
202
+ tb->disconnect_all ();
211
203
212
204
#if GNURADIO_VERSION < 0x030802
213
205
// Work around GNU Radio bug #3184
214
206
// temporarily connect dummy source to ensure that previous device is closed
215
207
src = osmosdr::source::make (" file=" +escape_filename (get_zero_file ())+" ,freq=428e6,rate=96000,repeat=true,throttle=true" );
216
- tb->connect (src, 0 , iq_swap, 0 );
208
+ auto null_snk = gr::blocks::null_sink::make (sizeof (gr_complex));
209
+ tb->connect (src, 0 , null_snk, 0 );
217
210
tb->start ();
218
211
tb->stop ();
219
212
tb->wait ();
220
- tb->disconnect (src, 0 , iq_swap, 0 );
213
+ tb->disconnect_all ( );
221
214
#else
222
215
src.reset ();
223
216
#endif
@@ -232,19 +225,10 @@ void receiver::set_input_device(const std::string device)
232
225
src = osmosdr::source::make (" file=" +escape_filename (get_zero_file ())+" ,freq=428e6,rate=96000,repeat=true,throttle=true" );
233
226
}
234
227
228
+ set_demod (d_demod, true );
235
229
if (src->get_sample_rate () != 0 )
236
230
set_input_rate (src->get_sample_rate ());
237
231
238
- if (d_decim >= 2 )
239
- {
240
- tb->connect (src, 0 , input_decim, 0 );
241
- tb->connect (input_decim, 0 , iq_swap, 0 );
242
- }
243
- else
244
- {
245
- tb->connect (src, 0 , iq_swap, 0 );
246
- }
247
-
248
232
if (d_running)
249
233
tb->start ();
250
234
@@ -380,16 +364,6 @@ unsigned int receiver::set_input_decim(unsigned int decim)
380
364
tb->wait ();
381
365
}
382
366
383
- if (d_decim >= 2 )
384
- {
385
- tb->disconnect (src, 0 , input_decim, 0 );
386
- tb->disconnect (input_decim, 0 , iq_swap, 0 );
387
- }
388
- else
389
- {
390
- tb->disconnect (src, 0 , iq_swap, 0 );
391
- }
392
-
393
367
input_decim.reset ();
394
368
d_decim = decim;
395
369
if (d_decim >= 2 )
@@ -421,16 +395,7 @@ unsigned int receiver::set_input_decim(unsigned int decim)
421
395
rx->set_quad_rate (d_quad_rate);
422
396
iq_fft->set_quad_rate (d_decim_rate);
423
397
424
- if (d_decim >= 2 )
425
- {
426
- tb->connect (src, 0 , input_decim, 0 );
427
- tb->connect (input_decim, 0 , iq_swap, 0 );
428
- }
429
- else
430
- {
431
- tb->connect (src, 0 , iq_swap, 0 );
432
- }
433
-
398
+ set_demod (d_demod, true );
434
399
#ifdef CUSTOM_AIRSPY_KERNELS
435
400
if (input_devstr.find (" airspy" ) != std::string::npos)
436
401
src->set_bandwidth (d_decim_rate);
@@ -465,6 +430,9 @@ void receiver::set_iq_swap(bool reversed)
465
430
return ;
466
431
467
432
d_iq_rev = reversed;
433
+ // until we have a way to bypass a hier_block2 without overhead
434
+ // we do a reconf
435
+ set_demod (d_demod, true );
468
436
iq_swap->set_enabled (d_iq_rev);
469
437
}
470
438
@@ -1353,8 +1321,11 @@ void receiver::connect_all(rx_chain type)
1353
1321
tb->connect (b, 0 , iq_sink, 0 );
1354
1322
}
1355
1323
1356
- tb->connect (b, 0 , iq_swap, 0 );
1357
- b = iq_swap;
1324
+ if (d_iq_rev)
1325
+ {
1326
+ tb->connect (b, 0 , iq_swap, 0 );
1327
+ b = iq_swap;
1328
+ }
1358
1329
1359
1330
if (d_dc_cancel)
1360
1331
{
0 commit comments