use new non-blocking strategy (affects all reads)
This commit is contained in:
		
							
								
								
									
										9
									
								
								csdr.py
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								csdr.py
									
									
									
									
									
								
							| @@ -26,7 +26,6 @@ import os | ||||
| import code | ||||
| import signal | ||||
| import fcntl | ||||
| import select | ||||
|  | ||||
| class dsp: | ||||
|  | ||||
| @@ -394,6 +393,10 @@ class dsp: | ||||
|         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) | ||||
|  | ||||
|         #set stdout to non-blocking to avoid blocking the main loop when no audio was decoded in digital modes | ||||
|         self.set_pipe_nonblocking(self.process.stdout) | ||||
|  | ||||
|         self.running = True | ||||
|  | ||||
|         #open control pipes for csdr and send initialization data | ||||
| @@ -419,9 +422,9 @@ class dsp: | ||||
|         return self.process.stdout.read(size) | ||||
|  | ||||
|     def read_async(self, size): | ||||
|         if (select.select([self.process.stdout], [], [], 0)[0] != []): | ||||
|         try: | ||||
|             return self.process.stdout.read(size) | ||||
|         else: | ||||
|         except IOError: | ||||
|             return None | ||||
|  | ||||
|     def stop(self): | ||||
|   | ||||
| @@ -306,13 +306,16 @@ def spectrum_thread_function(): | ||||
|     print "[openwebrx-spectrum] Spectrum thread initialized successfully." | ||||
|     dsp.start() | ||||
|     if cfg.csdr_dynamic_bufsize: | ||||
|         dsp.read(8) #dummy read to skip bufsize & preamble | ||||
|         dsp.read_async(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()) | ||||
|     spectrum_thread_counter=0 | ||||
|     while True: | ||||
|         data=dsp.read(bytes_to_read) | ||||
|         data=dsp.read_async(bytes_to_read) | ||||
|         if data is None: | ||||
|             time.sleep(.01) | ||||
|             continue | ||||
|         #print "gotcha",len(data),"bytes of spectrum data via spectrum_thread_function()" | ||||
|         if spectrum_thread_counter >= cfg.fft_fps: | ||||
|             spectrum_thread_counter=0 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jakob Ketterl
					Jakob Ketterl