‘waterfallsink.py’ uses pipes as an IPC mechanism to get data from one
thread (running gnuradio dispatch loop) to another thread (running
wxPython’s dispatch loop), by creating a pipe and using
file_descriptor_sink/source to move the data.
This seems to be a good way to do things, and I’d like to see how well
it fits in a more general case.
One could implement the ‘data plane’ of one’s application as a set of
gnuradio blocks that implement all the signal processing, and have a set
of pipes that output various display updates. The user interface code
could select() on these pipes and handle updating the various GUI
elements after reading the available data.
For control, having the GUI code invoke public methods on the gnuradio
blocks seems ok, bearing in mind any inter-thread data access locking
required.
Aside from select not working with pipes on Win32, does this seem like a
good application structure?
How have people dealt with the separation of user interface and data
flow in a scalable way?
-Johnathan (wanting to think about something besides autotools!)