1
1
import os
2
2
from cereal import car , log
3
3
import cereal .messaging as messaging
4
- from openpilot . common . params import Params
4
+ from panda . python import PANDA_BUS_CNT
5
5
6
6
SPOOFING_STARTED = os .getenv ("STARTED" ) == "1"
7
7
13
13
class PandaStateManager :
14
14
def __init__ (self , pandas , hw_types , lock ):
15
15
self .pandas = pandas
16
- self .params = Params ()
17
16
self .lock = lock
18
17
self .hw_types = hw_types
19
18
@@ -26,47 +25,48 @@ def __init__(self, pandas, hw_types, lock):
26
25
def process (self , engaged , pm ) -> bool :
27
26
msg = messaging .new_message ('pandaStates' , len (self .pandas ))
28
27
msg .valid = True
29
- pss = msg .pandaStates
28
+ panda_states = msg .pandaStates
30
29
ignition = False
31
30
32
- for i , p in enumerate (self .pandas ):
31
+ for i , panda in enumerate (self .pandas ):
33
32
with self .lock :
34
- health = p .health () or {}
33
+ health = panda .health () or {}
35
34
36
35
if SPOOFING_STARTED :
37
36
health ['ignition_line' ] = 1
38
37
elif self .is_comma_three_red and self .hw_types [i ] == log .PandaState .PandaType .dos :
39
38
health ['ignition_line' ] = 0
40
39
41
40
ignition |= bool (health ['ignition_line' ]) or bool (health ['ignition_can' ])
42
- ps = pss [i ]
41
+ ps = panda_states [i ]
43
42
self ._fill_state (ps , self .hw_types [i ], health )
44
43
45
- for j , cs in enumerate ((ps .init ('canState0' ), ps .init ('canState1' ), ps .init ('canState2' ))):
44
+ # Fill can state
45
+ for j in range (PANDA_BUS_CNT ):
46
46
with self .lock :
47
- can_health = p .can_health (j )
48
- self . _fill_can_state ( cs , can_health )
49
-
50
- fault_bits = int ( health [ 'faults' ])
51
- fault_count = bin ( fault_bits ). count ( '1' )
52
- faults = ps . init ('faults' , fault_count )
53
- idx = 0
54
- for f in range ( log .PandaState .FaultType .relayMalfunction ,
55
- log . PandaState . FaultType . heartbeatLoopWatchdog + 1 ):
56
- if fault_bits & ( 1 << f ):
57
- faults [ idx ] = f
58
- idx += 1
47
+ can_health = panda .can_health (j )
48
+ can_state = ps . init ( f'canState { j } ' )
49
+ self . _fill_can_state ( can_state , can_health )
50
+
51
+ # Set faults
52
+ fault_bits = int ( health . get ('faults' , 0 ) )
53
+ faults_list = [ f for f in range ( log . PandaState . FaultType . relayMalfunction ,
54
+ log .PandaState .FaultType .heartbeatLoopWatchdog + 1 )
55
+ if fault_bits & ( 1 << f )]
56
+ faults = ps . init ( 'faults' , len ( faults_list ))
57
+ for idx , fault in enumerate ( faults_list ):
58
+ faults [ idx ] = fault
59
59
60
60
with self .lock :
61
- for p , ps in zip (self .pandas , pss ):
61
+ for panda , ps in zip (self .pandas , panda_states ):
62
62
if ps .safetyModel == car .CarParams .SafetyModel .silent or (
63
63
not ignition and ps .safetyModel != car .CarParams .SafetyModel .noOutput ):
64
- p .set_safety_mode (car .CarParams .SafetyModel .noOutput )
64
+ panda .set_safety_mode (car .CarParams .SafetyModel .noOutput )
65
65
66
66
if ps .powerSaveEnabled != (not ignition ):
67
- p .set_power_save (not ignition )
67
+ panda .set_power_save (not ignition )
68
68
69
- p .send_heartbeat (engaged )
69
+ panda .send_heartbeat (engaged )
70
70
71
71
pm .send ("pandaStates" , msg )
72
72
return ignition
0 commit comments