parent
							
								
									e6742151aa
								
							
						
					
					
						commit
						900564fecc
					
				
				 5 changed files with 74 additions and 162 deletions
			
			
		| @ -1,52 +0,0 @@ | |||||||
| import os |  | ||||||
| import subprocess |  | ||||||
| from openpilot.common.basedir import BASEDIR |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Spinner: |  | ||||||
|   def __init__(self): |  | ||||||
|     try: |  | ||||||
|       self.spinner_proc = subprocess.Popen(["./spinner.py"], |  | ||||||
|                                            stdin=subprocess.PIPE, |  | ||||||
|                                            cwd=os.path.join(BASEDIR, "system", "ui"), |  | ||||||
|                                            close_fds=True) |  | ||||||
|     except OSError: |  | ||||||
|       self.spinner_proc = None |  | ||||||
| 
 |  | ||||||
|   def __enter__(self): |  | ||||||
|     return self |  | ||||||
| 
 |  | ||||||
|   def update(self, spinner_text: str): |  | ||||||
|     if self.spinner_proc is not None: |  | ||||||
|       self.spinner_proc.stdin.write(spinner_text.encode('utf8') + b"\n") |  | ||||||
|       try: |  | ||||||
|         self.spinner_proc.stdin.flush() |  | ||||||
|       except BrokenPipeError: |  | ||||||
|         pass |  | ||||||
| 
 |  | ||||||
|   def update_progress(self, cur: float, total: float): |  | ||||||
|     self.update(str(round(100 * cur / total))) |  | ||||||
| 
 |  | ||||||
|   def close(self): |  | ||||||
|     if self.spinner_proc is not None: |  | ||||||
|       self.spinner_proc.kill() |  | ||||||
|       try: |  | ||||||
|         self.spinner_proc.communicate(timeout=2.) |  | ||||||
|       except subprocess.TimeoutExpired: |  | ||||||
|         print("WARNING: failed to kill spinner") |  | ||||||
|       self.spinner_proc = None |  | ||||||
| 
 |  | ||||||
|   def __del__(self): |  | ||||||
|     self.close() |  | ||||||
| 
 |  | ||||||
|   def __exit__(self, exc_type, exc_value, traceback): |  | ||||||
|     self.close() |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| if __name__ == "__main__": |  | ||||||
|   import time |  | ||||||
|   with Spinner() as s: |  | ||||||
|     s.update("Spinner text") |  | ||||||
|     time.sleep(5.0) |  | ||||||
|   print("gone") |  | ||||||
|   time.sleep(5.0) |  | ||||||
| @ -1,63 +0,0 @@ | |||||||
| #!/usr/bin/env python3 |  | ||||||
| import os |  | ||||||
| import time |  | ||||||
| import subprocess |  | ||||||
| from openpilot.common.basedir import BASEDIR |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class TextWindow: |  | ||||||
|   def __init__(self, text): |  | ||||||
|     try: |  | ||||||
|       self.text_proc = subprocess.Popen(["./text.py", text], |  | ||||||
|                                         stdin=subprocess.PIPE, |  | ||||||
|                                         cwd=os.path.join(BASEDIR, "system", "ui"), |  | ||||||
|                                         close_fds=True) |  | ||||||
|     except OSError: |  | ||||||
|       self.text_proc = None |  | ||||||
| 
 |  | ||||||
|   def get_status(self): |  | ||||||
|     if self.text_proc is not None: |  | ||||||
|       self.text_proc.poll() |  | ||||||
|       return self.text_proc.returncode |  | ||||||
|     return None |  | ||||||
| 
 |  | ||||||
|   def __enter__(self): |  | ||||||
|     return self |  | ||||||
| 
 |  | ||||||
|   def close(self): |  | ||||||
|     if self.text_proc is not None: |  | ||||||
|       self.text_proc.terminate() |  | ||||||
|       self.text_proc = None |  | ||||||
| 
 |  | ||||||
|   def wait_for_exit(self): |  | ||||||
|     if self.text_proc is not None: |  | ||||||
|       while True: |  | ||||||
|         if self.get_status() == 1: |  | ||||||
|           return |  | ||||||
|         time.sleep(0.1) |  | ||||||
| 
 |  | ||||||
|   def __del__(self): |  | ||||||
|     self.close() |  | ||||||
| 
 |  | ||||||
|   def __exit__(self, exc_type, exc_value, traceback): |  | ||||||
|     self.close() |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| if __name__ == "__main__": |  | ||||||
|   text = """Traceback (most recent call last): |  | ||||||
|   File "./controlsd.py", line 608, in <module> |  | ||||||
|     main() |  | ||||||
|   File "./controlsd.py", line 604, in main |  | ||||||
|     controlsd_thread(sm, pm, logcan) |  | ||||||
|   File "./controlsd.py", line 455, in controlsd_thread |  | ||||||
|     1/0 |  | ||||||
| ZeroDivisionError: division by zero""" |  | ||||||
|   print(text) |  | ||||||
| 
 |  | ||||||
|   with TextWindow(text) as s: |  | ||||||
|     for _ in range(100): |  | ||||||
|       if s.get_status() == 1: |  | ||||||
|         print("Got exit button") |  | ||||||
|         break |  | ||||||
|       time.sleep(0.1) |  | ||||||
|   print("gone") |  | ||||||
					Loading…
					
					
				
		Reference in new issue