diff --git a/config_webrx.py b/config_webrx.py index 3b02107..60c74d5 100644 --- a/config_webrx.py +++ b/config_webrx.py @@ -66,8 +66,8 @@ sdrhu_public_listing = False dsp_plugin="csdr" fft_fps=9 fft_size=4096 -samp_rate = 2048000 -#samp_rate = 250000 +samp_rate = 250000 +#samp_rate = 2048000 center_freq = 145525000 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. #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. diff --git a/htdocs/openwebrx.js b/htdocs/openwebrx.js index 7ea1c2e..0bc8d6f 100644 --- a/htdocs/openwebrx.js +++ b/htdocs/openwebrx.js @@ -1019,6 +1019,7 @@ function on_ws_recv(evt) else if(fft_compression="adpcm") { fft_codec.reset(); + var waterfall_i16=fft_codec.decode(new Uint8Array(evt.data,4)); var waterfall_f32=new Float32Array(waterfall_i16.length-COMPRESS_FFT_PAD_N); for(var i=0;i>>>>>> ERROR:", 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(): global clients, spectrum_dsp 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_compression(cfg.fft_compression) dsp.set_format_conversion(cfg.format_conversion) + apply_csdr_cfg_to_dsp(dsp) sleep_sec=0.87/cfg.fft_fps print "[openwebrx-spectrum] Spectrum thread initialized successfully." dsp.start() - dsp.read(8) #dummy read to skip bufsize & preamble + if cfg.csdr_dynamic_bufsize: + dsp.read(8) #dummy read to skip bufsize & preamble + print "[openwebrx-spectrum] Note: CSDR_DYNAMIC_BUFSIZE_ON = 1" print "[openwebrx-spectrum] Spectrum thread started." bytes_to_read=int(dsp.get_fft_bytes_to_read()) while True: @@ -402,6 +410,7 @@ class WebRXHandler(BaseHTTPRequestHandler): dsp.set_offset_freq(0) dsp.set_bpf(-4000,4000) dsp.nc_port=cfg.iq_server_port + apply_csdr_cfg_to_dsp(dsp) myclient.dsp=dsp access_log("Started streaming to client: "+self.client_address[0]+"#"+myclient.id+" (users now: "+str(len(clients))+")") diff --git a/plugins/dsp/csdr/plugin.py b/plugins/dsp/csdr/plugin.py index ecbfffc..ea5912e 100644 --- a/plugins/dsp/csdr/plugin.py +++ b/plugins/dsp/csdr/plugin.py @@ -46,9 +46,15 @@ class dsp_plugin: self.format_conversion = "csdr convert_u8_f" self.base_bufsize = 512 self.nc_port = 4951 + self.csdr_dynamic_bufsize = False + self.csdr_print_bufsizes = False + self.csdr_through = False 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": 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": @@ -163,7 +169,8 @@ class dsp_plugin: print "[openwebrx-dsp-plugin:csdr] Command =",command #code.interact(local=locals()) 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.running = True