Changeset 5187

Show
Ignore:
Timestamp:
04/28/07 14:39:47
Author:
jcorgan
Message:

Work in progress, block-level input, output disconnect.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc

    r5177 r5187  
    5656    throw std::invalid_argument("src and destination blocks cannot be the same"); 
    5757 
    58   // Assignments to block inputs or outputs 
     58  // Connectments to block inputs or outputs 
    5959  int max_port; 
    6060  if (src.get() == d_owner) { 
     
    6262    if ((max_port != -1 && (src_port >= max_port)) || src_port < 0) 
    6363      throw std::invalid_argument("source port out of range"); 
    64     return assign_input(src_port, dst_port, dst); 
     64    return connect_input(src_port, dst_port, dst); 
    6565  } 
    6666 
     
    6969    if ((max_port != -1 && (dst_port >= max_port)) || dst_port < 0) 
    7070      throw std::invalid_argument("source port out of range"); 
    71     return assign_output(dst_port, src_port, src); 
     71    return connect_output(dst_port, src_port, src); 
    7272  } 
    7373 
     
    8282                                  gr_basic_block_sptr dst, int dst_port) 
    8383{ 
    84   // Handle disconnecting inputs and outputs 
    85  
     84  if (GR_HIER_BLOCK2_DETAIL_DEBUG) 
     85    std::cout << "disconnecting: " << gr_endpoint(src, src_port) 
     86              << " -> " << gr_endpoint(dst, dst_port) << std::endl; 
     87 
     88  if (src.get() == dst.get()) 
     89    throw std::invalid_argument("src and destination blocks cannot be the same"); 
     90 
     91  if (src.get() == d_owner) 
     92    return disconnect_input(src_port, dst_port, dst); 
     93 
     94  if (dst.get() == d_owner) 
     95    return disconnect_output(dst_port, src_port, src); 
     96 
     97  // Internal connections 
    8698  d_fg->disconnect(src, src_port, dst, dst_port); 
    8799} 
    88100 
    89101void 
    90 gr_hier_block2_detail::assign_input(int my_port, int port, gr_basic_block_sptr block) 
     102gr_hier_block2_detail::connect_input(int my_port, int port, gr_basic_block_sptr block) 
    91103{ 
    92104  if (my_port < 0 || my_port >= (signed)d_inputs.size()) 
     
    100112 
    101113void 
    102 gr_hier_block2_detail::assign_output(int my_port, int port, gr_basic_block_sptr block) 
     114gr_hier_block2_detail::connect_output(int my_port, int port, gr_basic_block_sptr block) 
    103115{ 
    104116  if (my_port < 0 || my_port >= (signed)d_outputs.size()) 
     
    109121 
    110122  d_outputs[my_port] = gr_endpoint(block, port); 
     123} 
     124 
     125void 
     126gr_hier_block2_detail::disconnect_input(int my_port, int port, gr_basic_block_sptr block) 
     127{ 
     128  if (my_port < 0 || my_port >= (signed)d_inputs.size()) 
     129    throw std::invalid_argument("input port number out of range"); 
     130 
     131  if (d_inputs[my_port].block() != block) 
     132    throw std::invalid_argument("block not assigned to given input, can't disconnect"); 
     133 
     134  d_inputs[my_port] = gr_endpoint(); 
     135} 
     136 
     137void 
     138gr_hier_block2_detail::disconnect_output(int my_port, int port, gr_basic_block_sptr block) 
     139{ 
     140  if (my_port < 0 || my_port >= (signed)d_outputs.size()) 
     141    throw std::invalid_argument("input port number out of range"); 
     142 
     143  if (d_outputs[my_port].block() != block) 
     144    throw std::invalid_argument("block not assigned to given output, can't disconnect"); 
     145 
     146  d_outputs[my_port] = gr_endpoint(); 
    111147} 
    112148 
  • gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h

    r5177 r5187  
    4646    void disconnect(gr_basic_block_sptr, int src_port,  
    4747                    gr_basic_block_sptr, int dst_port); 
    48     void assign_input(int my_port, int port, gr_basic_block_sptr block); 
    49     void assign_output(int my_port, int port, gr_basic_block_sptr block); 
     48    void connect_input(int my_port, int port, gr_basic_block_sptr block); 
     49    void connect_output(int my_port, int port, gr_basic_block_sptr block); 
     50    void disconnect_input(int my_port, int port, gr_basic_block_sptr block); 
     51    void disconnect_output(int my_port, int port, gr_basic_block_sptr block); 
    5052    void flatten(gr_simple_flowgraph_sptr sfg); 
    5153    gr_endpoint resolve_port(int port, bool is_input); 
  • gnuradio/branches/developers/jcorgan/disc/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py

    r5177 r5187  
    159159        self.assertEquals(expected, actual2) 
    160160 
    161     def test_015_connect_disconnect(self): 
    162         expected = (1.0, 2.0, 3.0, 4.0) 
    163         hblock = gr.top_block("test_block") 
    164         src = gr.vector_source_f(expected, False) 
    165         sink1 = gr.vector_sink_f() 
    166         sink2 = gr.vector_sink_f() 
    167         hblock.connect(src, sink1) 
    168         hblock.connect(src, sink2) 
    169         hblock.disconnect(src, sink2) 
    170         runtime = gr.runtime(hblock) 
    171         runtime.run() 
    172      
     161    def test_015_disconnect_input(self): 
     162        hblock = gr.hier_block2("test_block",  
     163                                gr.io_signature(1,1,gr.sizeof_int),  
     164                                gr.io_signature(1,1,gr.sizeof_int)) 
     165        nop1 = gr.nop(gr.sizeof_int) 
     166        hblock.connect(hblock, nop1) 
     167        hblock.disconnect(hblock, nop1) 
     168    
     169    def test_016_disconnect_input_not_connected(self): 
     170        hblock = gr.hier_block2("test_block",  
     171                                gr.io_signature(1,1,gr.sizeof_int),  
     172                                gr.io_signature(1,1,gr.sizeof_int)) 
     173        nop1 = gr.nop(gr.sizeof_int) 
     174        nop2 = gr.nop(gr.sizeof_int) 
     175        hblock.connect(hblock, nop1) 
     176        self.assertRaises(ValueError, 
     177            lambda: hblock.disconnect(hblock, nop2)) 
     178    
     179    def test_017_disconnect_input_neg(self): 
     180        hblock = gr.hier_block2("test_block",  
     181                                gr.io_signature(1,1,gr.sizeof_int),  
     182                                gr.io_signature(1,1,gr.sizeof_int)) 
     183        nop1 = gr.nop(gr.sizeof_int) 
     184        hblock.connect(hblock, nop1) 
     185        self.assertRaises(ValueError, 
     186            lambda: hblock.disconnect((hblock, -1), nop1)) 
     187 
     188    def test_018_disconnect_input_exceeds(self): 
     189        hblock = gr.hier_block2("test_block",  
     190                                gr.io_signature(1,1,gr.sizeof_int),  
     191                                gr.io_signature(1,1,gr.sizeof_int)) 
     192        nop1 = gr.nop(gr.sizeof_int) 
     193        hblock.connect(hblock, nop1) 
     194        self.assertRaises(ValueError, 
     195            lambda: hblock.disconnect((hblock, 1), nop1)) 
     196 
     197    def test_019_disconnect_output(self): 
     198        hblock = gr.hier_block2("test_block",  
     199                                gr.io_signature(1,1,gr.sizeof_int),  
     200                                gr.io_signature(1,1,gr.sizeof_int)) 
     201        nop1 = gr.nop(gr.sizeof_int) 
     202        hblock.connect(nop1, hblock) 
     203        hblock.disconnect(nop1, hblock) 
     204    
     205    def test_020_disconnect_output_not_connected(self): 
     206        hblock = gr.hier_block2("test_block",  
     207                                gr.io_signature(1,1,gr.sizeof_int),  
     208                                gr.io_signature(1,1,gr.sizeof_int)) 
     209        nop1 = gr.nop(gr.sizeof_int) 
     210        nop2 = gr.nop(gr.sizeof_int) 
     211        hblock.connect(nop1, hblock) 
     212        self.assertRaises(ValueError, 
     213            lambda: hblock.disconnect(nop2, hblock)) 
     214    
     215    def test_021_disconnect_output_neg(self): 
     216        hblock = gr.hier_block2("test_block",  
     217                                gr.io_signature(1,1,gr.sizeof_int),  
     218                                gr.io_signature(1,1,gr.sizeof_int)) 
     219        nop1 = gr.nop(gr.sizeof_int) 
     220        hblock.connect(hblock, nop1) 
     221        self.assertRaises(ValueError, 
     222            lambda: hblock.disconnect(nop1, (hblock, -1))) 
     223 
     224    def test_022_disconnect_output_exceeds(self): 
     225        hblock = gr.hier_block2("test_block",  
     226                                gr.io_signature(1,1,gr.sizeof_int),  
     227                                gr.io_signature(1,1,gr.sizeof_int)) 
     228        nop1 = gr.nop(gr.sizeof_int) 
     229        hblock.connect(nop1, hblock) 
     230        self.assertRaises(ValueError, 
     231            lambda: hblock.disconnect(nop1, (hblock, 1))) 
     232 
    173233if __name__ == "__main__": 
    174234    gr_unittest.main()