[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] pipe trick
From: |
Eric Blossom |
Subject: |
Re: [Discuss-gnuradio] pipe trick |
Date: |
Tue, 5 Apr 2005 16:51:55 -0700 |
User-agent: |
Mutt/1.5.6i |
On Tue, Apr 05, 2005 at 06:50:04PM -0400, cswiger wrote:
> Gang - *almost* have a keyboard input to a psk31 transmitter running -
> but I don't fully understand named pipes. Q: Why does it not send
> untill the pipe is closed???
>
> One script opens a named pipe /pipe for writing
>
> pskfh = open("/pipe","w")
>
> and the script successfully gets characters from the keyboard and
> translates to the appropriate phase shift sent to the pipe, or inserts
> idles characters if no keys are pressed before timeouts.
>
> Another script opens the pipe for input to the gnuradio part
> feeding gr.bytes_to_syms() etc
>
> src = gr.file_source(gr.sizeof_char,"/pipe")
>
> However the gnuradio script produces NO output untill the
> keyboard/varicode/psk script closes the pipe - then it appears
> to produce the correct output. Even tried pskfh.flush() after
> every pipe write w/o luck.
>
> I want it to run as I type - the keyboard script should be keeping the
> pipe loaded faster then the gnuradio script is reading (I think).
>
> Clue appreciated.
Two things:
(1) For better interaction with pipes, sockets, etc use
gr.file_descriptor_source instead of gr.file_source.
gr.file_descriptor_source returns as soon as it gets any input.
gr.file_source blocks until it gets everything asked for by the
caller.
# you've got to keep a reference to file until you're done...
self.file = open("/pipe", "r")
src = gr.file_descriptor_source(gr.sizeof_char, self.file.fileno())
(2) If you aren't already calling flush, after writing each
character into pskfh, try this:
pskfg.flush()
Eric