You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							75 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							75 lines
						
					
					
						
							1.9 KiB
						
					
					
				| #!/usr/bin/env python3
 | |
| import time
 | |
| import random
 | |
| import unittest
 | |
| import subprocess
 | |
| 
 | |
| from panda import Panda
 | |
| from openpilot.system.hardware import TICI, HARDWARE
 | |
| from openpilot.system.hardware.tici.hardware import Tici
 | |
| from openpilot.system.hardware.tici.amplifier import Amplifier
 | |
| 
 | |
| 
 | |
| class TestAmplifier(unittest.TestCase):
 | |
| 
 | |
|   @classmethod
 | |
|   def setUpClass(cls):
 | |
|     if not TICI:
 | |
|       raise unittest.SkipTest
 | |
| 
 | |
|   def setUp(self):
 | |
|     # clear dmesg
 | |
|     subprocess.check_call("sudo dmesg -C", shell=True)
 | |
| 
 | |
|     HARDWARE.reset_internal_panda()
 | |
|     Panda.wait_for_panda(None, 30)
 | |
|     self.panda = Panda()
 | |
| 
 | |
|   def tearDown(self):
 | |
|     HARDWARE.reset_internal_panda()
 | |
| 
 | |
|   def _check_for_i2c_errors(self, expected):
 | |
|     dmesg = subprocess.check_output("dmesg", shell=True, encoding='utf8')
 | |
|     i2c_lines = [l for l in dmesg.strip().splitlines() if 'i2c_geni a88000.i2c' in l]
 | |
|     i2c_str = '\n'.join(i2c_lines)
 | |
| 
 | |
|     if not expected:
 | |
|       return len(i2c_lines) == 0
 | |
|     else:
 | |
|       return "i2c error :-107" in i2c_str or "Bus arbitration lost" in i2c_str
 | |
| 
 | |
|   def test_init(self):
 | |
|     amp = Amplifier(debug=True)
 | |
|     r = amp.initialize_configuration(Tici().get_device_type())
 | |
|     assert r
 | |
|     assert self._check_for_i2c_errors(False)
 | |
| 
 | |
|   def test_shutdown(self):
 | |
|     amp = Amplifier(debug=True)
 | |
|     for _ in range(10):
 | |
|       r = amp.set_global_shutdown(True)
 | |
|       r = amp.set_global_shutdown(False)
 | |
|       # amp config should be successful, with no i2c errors
 | |
|       assert r
 | |
|       assert self._check_for_i2c_errors(False)
 | |
| 
 | |
|   def test_init_while_siren_play(self):
 | |
|     for _ in range(10):
 | |
|       self.panda.set_siren(False)
 | |
|       time.sleep(0.1)
 | |
| 
 | |
|       self.panda.set_siren(True)
 | |
|       time.sleep(random.randint(0, 5))
 | |
| 
 | |
|       amp = Amplifier(debug=True)
 | |
|       r = amp.initialize_configuration(Tici().get_device_type())
 | |
|       assert r
 | |
| 
 | |
|       if self._check_for_i2c_errors(True):
 | |
|         break
 | |
|     else:
 | |
|       self.fail("didn't hit any i2c errors")
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|   unittest.main()
 | |
| 
 |