summaryrefslogtreecommitdiff
path: root/gr-trellis/lib/siso_f_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-trellis/lib/siso_f_impl.cc')
-rw-r--r--gr-trellis/lib/siso_f_impl.cc80
1 files changed, 66 insertions, 14 deletions
diff --git a/gr-trellis/lib/siso_f_impl.cc b/gr-trellis/lib/siso_f_impl.cc
index d699cecaec..2af5a21710 100644
--- a/gr-trellis/lib/siso_f_impl.cc
+++ b/gr-trellis/lib/siso_f_impl.cc
@@ -45,19 +45,8 @@ namespace gr {
(new siso_f_impl(FSM, K, S0, SK, POSTI, POSTO, SISO_TYPE));
}
- siso_f_impl::siso_f_impl(const fsm &FSM, int K,
- int S0, int SK,
- bool POSTI, bool POSTO,
- siso_type_t SISO_TYPE)
- : block("siso_f",
- io_signature::make(1, -1, sizeof(float)),
- io_signature::make(1, -1, sizeof(float))),
- d_FSM(FSM), d_K(K),
- d_S0(S0),d_SK(SK),
- d_POSTI(POSTI), d_POSTO(POSTO),
- d_SISO_TYPE(SISO_TYPE)//,
- //d_alpha(FSM.S()*(K+1)),
- //d_beta(FSM.S()*(K+1))
+
+ void siso_f_impl::recalculate()
{
int multiple;
if(d_POSTI && d_POSTO)
@@ -69,7 +58,6 @@ namespace gr {
else
throw std::runtime_error ("Not both POSTI and POSTO can be false.");
- //printf("constructor: Multiple = %d\n",multiple);
set_output_multiple (d_K*multiple);
//what is the meaning of relative rate for a block with 2 inputs?
@@ -84,6 +72,69 @@ namespace gr {
set_relative_rate(multiple / ((double) d_FSM.I()));
}
+ siso_f_impl::siso_f_impl(const fsm &FSM, int K,
+ int S0, int SK,
+ bool POSTI, bool POSTO,
+ siso_type_t SISO_TYPE)
+ : block("siso_f",
+ io_signature::make(1, -1, sizeof(float)),
+ io_signature::make(1, -1, sizeof(float))),
+ d_FSM(FSM), d_K(K),
+ d_S0(S0),d_SK(SK),
+ d_POSTI(POSTI), d_POSTO(POSTO),
+ d_SISO_TYPE(SISO_TYPE)//,
+ //d_alpha(FSM.S()*(K+1)),
+ //d_beta(FSM.S()*(K+1))
+ {
+ recalculate();
+ }
+
+ void siso_f_impl::set_FSM(const fsm &FSM)
+ {
+ gr::thread::scoped_lock guard(d_setlock);
+ d_FSM=FSM;
+ recalculate();
+ }
+
+ void siso_f_impl::set_K(int K)
+ {
+ gr::thread::scoped_lock guard(d_setlock);
+ d_K=K;
+ recalculate();
+ }
+
+ void siso_f_impl::set_POSTI(bool POSTI)
+ {
+ gr::thread::scoped_lock guard(d_setlock);
+ d_POSTI = POSTI;
+ recalculate();
+ }
+
+ void siso_f_impl::set_POSTO(bool POSTO)
+ {
+ gr::thread::scoped_lock guard(d_setlock);
+ d_POSTO = POSTO;
+ recalculate();
+ }
+
+ void siso_f_impl::set_S0(int S0)
+ {
+ gr::thread::scoped_lock guard(d_setlock);
+ d_S0 = S0;
+ }
+
+ void siso_f_impl::set_SK(int SK)
+ {
+ gr::thread::scoped_lock guard(d_setlock);
+ d_SK = SK;
+ }
+
+ void siso_f_impl::set_SISO_TYPE(trellis::siso_type_t type)
+ {
+ gr::thread::scoped_lock guard(d_setlock);
+ d_SISO_TYPE = type;
+ }
+
siso_f_impl::~siso_f_impl()
{
}
@@ -119,6 +170,7 @@ namespace gr {
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
+ gr::thread::scoped_lock guard(d_setlock);
int nstreams = output_items.size();
//printf("general_work:Streams: %d\n",nstreams);
int multiple;