Skip to content

Latest commit

 

History

History
 
 

python

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
THIS IS EXPERIMENTAL SOFTWARE AND API IS SUBJECT TO CHANGE

How to run the example
----------------------

Assuming that the module has been compiled but not installed, in the
gr-zeromq folder do

    cd examples
    ./run_app.sh server

on another terminal or machine

    ./run_app.sh client -s hostname

You can also run a (remote) GUI on any of the two or a third machine for monitoring and control.

    ./run_app.sh gui.py -s servername -c hostname

in doing so the order of starting the scripts is arbitrary. When installing the
module, the run\_app.sh script is of course not needed.


How to use the API
------------------

### PROBE API
Connect a zmq pubsub sink to the block you want to monitor

        self.zmq_probe = zeromq.sink_pubsub(gr.sizeof_float, "tcp://*:5556")

add a probe manager to your Python GUI

        # ZeroMQ
        probe_manager = zeromq.probe_manager()
        probe_manager.add_socket("tcp://localhost:5556",
                                 'float32', self.plot_data)

        def plot_data(self,samples):
            [...]

basically creates a watcher thread that calls the call back functions and
unpacks sample data. Now you can use a timer to update the plot, e.g. in PyQt

        update_timer = Qt.QTimer()
        self.connect(update_timer,
                     QtCore.SIGNAL("timeout()"),
                     probe_manager.watcher)
        update_timer.start(30)

### RPC API
Add an rpc manager to your Python app to receive RPCs

        rpc_manager = zeromq.rpc_manager()
        rpc_manager.set_reply_socket("tcp://*:6666")
        rpc_manager.add_interface("start_fg",self.start)
        rpc_manager.start_watcher()

to be able to send requests also add one on the other side

        rpc_manager = zeromq.rpc_manager()
        rpc_manager.set_request_socket("tcp://localhost:6666")

send a request

        rpc_mganager.request("start_fg")
        rpc_mgr_server.request("set_k",gain)

RPCs use GNU Radio pmt's to serialize arguments, the watcher thread will
regularly poll for incoming RPC requests, deserializes arguments and call the
interface callback function accordingly.