Added option to switch dynamic buffering off. New cfg options: csdr_dynamic_bufsize, csdr_print_bufsizes, csdr_through.
This commit is contained in:
parent
69233a8dea
commit
6b06d13a93
@ -66,8 +66,8 @@ sdrhu_public_listing = False
|
|||||||
dsp_plugin="csdr"
|
dsp_plugin="csdr"
|
||||||
fft_fps=9
|
fft_fps=9
|
||||||
fft_size=4096
|
fft_size=4096
|
||||||
samp_rate = 2048000
|
samp_rate = 250000
|
||||||
#samp_rate = 250000
|
#samp_rate = 2048000
|
||||||
|
|
||||||
center_freq = 145525000
|
center_freq = 145525000
|
||||||
rf_gain = 5
|
rf_gain = 5
|
||||||
@ -111,3 +111,8 @@ start_mod = "nfm" #nfm, am, lsb, usb, cw
|
|||||||
iq_server_port = 4951 #TCP port for ncat to listen on. It will send I/Q data over its connections, for internal use in OpenWebRX. It is only accessible from the localhost by default.
|
iq_server_port = 4951 #TCP port for ncat to listen on. It will send I/Q data over its connections, for internal use in OpenWebRX. It is only accessible from the localhost by default.
|
||||||
|
|
||||||
#access_log = "~/openwebrx_access.log"
|
#access_log = "~/openwebrx_access.log"
|
||||||
|
|
||||||
|
#Warning! The settings below are very experimental.
|
||||||
|
csdr_dynamic_bufsize = False # This allows you to change the buffering mode of csdr.
|
||||||
|
csdr_print_bufsizes = False # This prints the buffer sizes used for csdr processes.
|
||||||
|
csdr_through = False # Setting this True will print out how much data is going into the DSP chains.
|
||||||
|
@ -1019,6 +1019,7 @@ function on_ws_recv(evt)
|
|||||||
else if(fft_compression="adpcm")
|
else if(fft_compression="adpcm")
|
||||||
{
|
{
|
||||||
fft_codec.reset();
|
fft_codec.reset();
|
||||||
|
|
||||||
var waterfall_i16=fft_codec.decode(new Uint8Array(evt.data,4));
|
var waterfall_i16=fft_codec.decode(new Uint8Array(evt.data,4));
|
||||||
var waterfall_f32=new Float32Array(waterfall_i16.length-COMPRESS_FFT_PAD_N);
|
var waterfall_f32=new Float32Array(waterfall_i16.length-COMPRESS_FFT_PAD_N);
|
||||||
for(var i=0;i<waterfall_i16.length;i++) waterfall_f32[i]=waterfall_i16[i+COMPRESS_FFT_PAD_N]/100;
|
for(var i=0;i<waterfall_i16.length;i++) waterfall_f32[i]=waterfall_i16[i+COMPRESS_FFT_PAD_N]/100;
|
||||||
|
11
openwebrx.py
11
openwebrx.py
@ -101,7 +101,7 @@ def main():
|
|||||||
no_arguments=len(sys.argv)==1
|
no_arguments=len(sys.argv)==1
|
||||||
if no_arguments: print "[openwebrx-main] Configuration script not specified. I will use: \"config_webrx.py\""
|
if no_arguments: print "[openwebrx-main] Configuration script not specified. I will use: \"config_webrx.py\""
|
||||||
cfg=__import__("config_webrx" if no_arguments else sys.argv[1])
|
cfg=__import__("config_webrx" if no_arguments else sys.argv[1])
|
||||||
for option in ("access_log",):
|
for option in ("access_log","csdr_dynamic_bufsize","csdr_print_bufsizes","csdr_through"):
|
||||||
if not option in dir(cfg): setattr(cfg, option, False) #initialize optional config parameters
|
if not option in dir(cfg): setattr(cfg, option, False) #initialize optional config parameters
|
||||||
|
|
||||||
#Open log files
|
#Open log files
|
||||||
@ -236,6 +236,11 @@ def check_server():
|
|||||||
if server_fail: print "[openwebrx-check_server] >>>>>>> ERROR:", server_fail
|
if server_fail: print "[openwebrx-check_server] >>>>>>> ERROR:", server_fail
|
||||||
return server_fail
|
return server_fail
|
||||||
|
|
||||||
|
def apply_csdr_cfg_to_dsp(dsp):
|
||||||
|
dsp.csdr_dynamic_bufsize = cfg.csdr_dynamic_bufsize
|
||||||
|
dsp.csdr_print_bufsizes = cfg.csdr_print_bufsizes
|
||||||
|
dsp.csdr_through = cfg.csdr_through
|
||||||
|
|
||||||
def spectrum_thread_function():
|
def spectrum_thread_function():
|
||||||
global clients, spectrum_dsp
|
global clients, spectrum_dsp
|
||||||
spectrum_dsp=dsp=getattr(plugins.dsp,cfg.dsp_plugin).plugin.dsp_plugin()
|
spectrum_dsp=dsp=getattr(plugins.dsp,cfg.dsp_plugin).plugin.dsp_plugin()
|
||||||
@ -246,10 +251,13 @@ def spectrum_thread_function():
|
|||||||
dsp.set_fft_fps(cfg.fft_fps)
|
dsp.set_fft_fps(cfg.fft_fps)
|
||||||
dsp.set_fft_compression(cfg.fft_compression)
|
dsp.set_fft_compression(cfg.fft_compression)
|
||||||
dsp.set_format_conversion(cfg.format_conversion)
|
dsp.set_format_conversion(cfg.format_conversion)
|
||||||
|
apply_csdr_cfg_to_dsp(dsp)
|
||||||
sleep_sec=0.87/cfg.fft_fps
|
sleep_sec=0.87/cfg.fft_fps
|
||||||
print "[openwebrx-spectrum] Spectrum thread initialized successfully."
|
print "[openwebrx-spectrum] Spectrum thread initialized successfully."
|
||||||
dsp.start()
|
dsp.start()
|
||||||
|
if cfg.csdr_dynamic_bufsize:
|
||||||
dsp.read(8) #dummy read to skip bufsize & preamble
|
dsp.read(8) #dummy read to skip bufsize & preamble
|
||||||
|
print "[openwebrx-spectrum] Note: CSDR_DYNAMIC_BUFSIZE_ON = 1"
|
||||||
print "[openwebrx-spectrum] Spectrum thread started."
|
print "[openwebrx-spectrum] Spectrum thread started."
|
||||||
bytes_to_read=int(dsp.get_fft_bytes_to_read())
|
bytes_to_read=int(dsp.get_fft_bytes_to_read())
|
||||||
while True:
|
while True:
|
||||||
@ -402,6 +410,7 @@ class WebRXHandler(BaseHTTPRequestHandler):
|
|||||||
dsp.set_offset_freq(0)
|
dsp.set_offset_freq(0)
|
||||||
dsp.set_bpf(-4000,4000)
|
dsp.set_bpf(-4000,4000)
|
||||||
dsp.nc_port=cfg.iq_server_port
|
dsp.nc_port=cfg.iq_server_port
|
||||||
|
apply_csdr_cfg_to_dsp(dsp)
|
||||||
myclient.dsp=dsp
|
myclient.dsp=dsp
|
||||||
|
|
||||||
access_log("Started streaming to client: "+self.client_address[0]+"#"+myclient.id+" (users now: "+str(len(clients))+")")
|
access_log("Started streaming to client: "+self.client_address[0]+"#"+myclient.id+" (users now: "+str(len(clients))+")")
|
||||||
|
@ -46,9 +46,15 @@ class dsp_plugin:
|
|||||||
self.format_conversion = "csdr convert_u8_f"
|
self.format_conversion = "csdr convert_u8_f"
|
||||||
self.base_bufsize = 512
|
self.base_bufsize = 512
|
||||||
self.nc_port = 4951
|
self.nc_port = 4951
|
||||||
|
self.csdr_dynamic_bufsize = False
|
||||||
|
self.csdr_print_bufsizes = False
|
||||||
|
self.csdr_through = False
|
||||||
|
|
||||||
def chain(self,which):
|
def chain(self,which):
|
||||||
any_chain_base="ncat -v 127.0.0.1 {nc_port} | csdr setbuf {start_bufsize} | csdr through | "+self.format_conversion+(" | " if self.format_conversion!="" else "") ##"csdr flowcontrol {flowcontrol} auto 1.5 10 | "
|
any_chain_base="ncat -v 127.0.0.1 {nc_port} | "
|
||||||
|
if self.csdr_dynamic_bufsize: any_chain_base+="csdr setbuf {start_bufsize} | "
|
||||||
|
if self.csdr_through: any_chain_base+="csdr through | "
|
||||||
|
any_chain_base+=self.format_conversion+(" | " if self.format_conversion!="" else "") ##"csdr flowcontrol {flowcontrol} auto 1.5 10 | "
|
||||||
if which == "fft":
|
if which == "fft":
|
||||||
fft_chain_base = "sleep 1; "+any_chain_base+"csdr fft_cc {fft_size} {fft_block_size} | csdr logpower_cf -70 | csdr fft_exchange_sides_ff {fft_size}"
|
fft_chain_base = "sleep 1; "+any_chain_base+"csdr fft_cc {fft_size} {fft_block_size} | csdr logpower_cf -70 | csdr fft_exchange_sides_ff {fft_size}"
|
||||||
if self.fft_compression=="adpcm":
|
if self.fft_compression=="adpcm":
|
||||||
@ -163,7 +169,8 @@ class dsp_plugin:
|
|||||||
print "[openwebrx-dsp-plugin:csdr] Command =",command
|
print "[openwebrx-dsp-plugin:csdr] Command =",command
|
||||||
#code.interact(local=locals())
|
#code.interact(local=locals())
|
||||||
my_env=os.environ.copy()
|
my_env=os.environ.copy()
|
||||||
my_env["CSDR_DYNAMIC_BUFSIZE_ON"]="1";
|
if self.csdr_dynamic_bufsize: my_env["CSDR_DYNAMIC_BUFSIZE_ON"]="1";
|
||||||
|
if self.csdr_print_bufsizes: my_env["CSDR_PRINT_BUFSIZES"]="1";
|
||||||
self.process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setpgrp, env=my_env)
|
self.process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setpgrp, env=my_env)
|
||||||
self.running = True
|
self.running = True
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user