|
|
|
|
@ -40,9 +40,16 @@ namespace gr {
|
|
|
|
|
*/ |
|
|
|
|
stream_router_impl::stream_router_impl(int ninputs,int noutputs) |
|
|
|
|
: gr::sync_block("stream_router", |
|
|
|
|
gr::io_signature::make(1, 1, sizeof(float)), |
|
|
|
|
gr::io_signature::make(1, 1, sizeof(float))) |
|
|
|
|
{} |
|
|
|
|
gr::io_signature::make(3, 9, sizeof(float)), |
|
|
|
|
gr::io_signature::make(3, 3, sizeof(float))) |
|
|
|
|
{ |
|
|
|
|
message_port_register_in(pmt::mp("ctrl")); |
|
|
|
|
set_msg_handler(pmt::mp("ctrl"), boost::bind(&stream_router_impl::parse_ctrl_msg, this, _1)); |
|
|
|
|
//outmappings={0,1,2};
|
|
|
|
|
outmappings[0]=0; |
|
|
|
|
outmappings[1]=1; |
|
|
|
|
outmappings[2]=2; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Our virtual destructor. |
|
|
|
|
@ -51,13 +58,53 @@ namespace gr {
|
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int |
|
|
|
|
stream_router_impl::work(int noutput_items, |
|
|
|
|
void stream_router_impl::parse_ctrl_msg(pmt::pmt_t pdu) { |
|
|
|
|
if(!pmt::is_pair(pdu)) { |
|
|
|
|
std::cout << "wrong input message (not a pair)" << std::endl; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
pmt::pmt_t inport = pmt::car(pdu); // meta declares type 0:RDS, 1:sync/nosync
|
|
|
|
|
pmt::pmt_t outport = pmt::cdr(pdu); |
|
|
|
|
if(!pmt::is_integer(inport) or !pmt::is_integer(outport)) { |
|
|
|
|
std::cout << "wrong input message (not a long)" << std::endl; |
|
|
|
|
return;
|
|
|
|
|
} |
|
|
|
|
std::cout << pdu << std::endl; |
|
|
|
|
outmappings[pmt::to_long(outport)]=pmt::to_long(inport); |
|
|
|
|
//pmt::to_long(meta)
|
|
|
|
|
// if(1L==pmt::to_long(meta) && pmt::eqv(sync,pmt::PMT_F)){
|
|
|
|
|
// lout<< "entered nosync"<<std::endl;
|
|
|
|
|
// lout<<"mode: "<<mode<<std::endl;
|
|
|
|
|
// mode=COPY;
|
|
|
|
|
// lout<<"mode: "<<mode<<std::endl;
|
|
|
|
|
// }
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int stream_router_impl::work(int noutput_items, |
|
|
|
|
gr_vector_const_void_star &input_items, |
|
|
|
|
gr_vector_void_star &output_items) |
|
|
|
|
{ |
|
|
|
|
const float *in = (const float *) input_items[0]; |
|
|
|
|
float *out = (float *) output_items[0]; |
|
|
|
|
// const float *in0 = (const float *) input_items[0];
|
|
|
|
|
// const float *in1 = (const float *) input_items[1];
|
|
|
|
|
// const float *in2 = (const float *) input_items[2];
|
|
|
|
|
const float *inports[] = { |
|
|
|
|
(const float *) input_items[0],(const float *) input_items[1],(const float *) input_items[2] |
|
|
|
|
,(const float *) input_items[3],(const float *) input_items[4],(const float *) input_items[5] |
|
|
|
|
,(const float *) input_items[6],(const float *) input_items[7],(const float *) input_items[8] |
|
|
|
|
}; |
|
|
|
|
float *outs[] = {(float *) output_items[0],(float *) output_items[1],(float *) output_items[2]}; |
|
|
|
|
// float *outL = (float *) output_items[0];
|
|
|
|
|
// float *outC = (float *) output_items[1];
|
|
|
|
|
// float *outR = (float *) output_items[2];
|
|
|
|
|
for (int i = 0; i < noutput_items; i++) { |
|
|
|
|
for (int outport=0;outport<3;outport++){ |
|
|
|
|
outs[outport][i]=inports[outmappings[outport]][i]; |
|
|
|
|
} |
|
|
|
|
// outL[i]=in0[i];
|
|
|
|
|
// outC[i]=in1[i];
|
|
|
|
|
// outR[i]=in2[i];
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Do <+signal processing+>
|
|
|
|
|
|
|
|
|
|
|