Skip to content

Commit 5b9876e

Browse files
committed
cleanup
1 parent e74eb84 commit 5b9876e

File tree

2 files changed

+43
-37
lines changed

2 files changed

+43
-37
lines changed

selfdrive/pandad/panda/runner.py

+20-14
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def __init__(self, serials, pandas):
2121
self.pandas = pandas
2222
self.serials = set(serials)
2323
self.hw_types = [int.from_bytes(p.get_type(), 'big') for p in pandas]
24+
2425
for panda in self.pandas:
2526
if os.getenv("BOARDD_LOOPBACK"):
2627
panda.set_can_loopback(True)
@@ -38,17 +39,21 @@ def __init__(self, serials, pandas):
3839
def _can_send(self, evt):
3940
sock = messaging.sub_sock('sendcan', timeout=100)
4041
while not evt.is_set():
41-
data = sock.receive()
42-
if data:
43-
msg = messaging.log_from_bytes(data)
44-
cans = [(c.address, c.dat, c.src) for c in msg.sendcan]
45-
age = (time.monotonic_ns() - msg.logMonoTime) / 1e9
46-
if age < 1 and not FAKE_SEND:
47-
with self.lock:
48-
for p in self.pandas:
49-
p.can_send_many(cans)
50-
elif age >= 1:
51-
cloudlog.error(f"Dropping stale sendcan message, age: {age:.2f}s")
42+
try:
43+
data = sock.receive()
44+
if data:
45+
msg = messaging.log_from_bytes(data)
46+
cans = [(c.address, c.dat, c.src) for c in msg.sendcan]
47+
age = (time.monotonic_ns() - msg.logMonoTime) / 1e9
48+
if age < 1 and not FAKE_SEND:
49+
with self.lock:
50+
for p in self.pandas:
51+
p.can_send_many(cans)
52+
elif age >= 1:
53+
cloudlog.error(f"Dropping stale sendcan message, age: {age:.2f}s")
54+
55+
except Exception as e:
56+
cloudlog.error(f"Exception in sendcan thread: {e}")
5257

5358
def _can_recv(self):
5459
with self.lock:
@@ -63,8 +68,8 @@ def _can_recv(self):
6368
self.pm.send("can", msg)
6469

6570
def run(self, evt):
66-
thread = threading.Thread(target=self._can_send, args=(evt,))
67-
thread.start()
71+
send_thread = threading.Thread(target=self._can_send, args=(evt,))
72+
send_thread.start()
6873

6974
rk = Ratekeeper(100, print_delay_threshold=None)
7075
engaged = False
@@ -88,6 +93,7 @@ def run(self, evt):
8893
if current_serials != self.serials:
8994
cloudlog.warning("Reconnecting to new panda")
9095
evt.set()
96+
break
9197

9298
self.safety_mgr.configure_safety_mode()
9399

@@ -101,7 +107,7 @@ def run(self, evt):
101107
finally:
102108
evt.set()
103109
self.periph_mgr.cleanup()
104-
thread.join()
110+
send_thread.join()
105111

106112
# Close relay on exit to prevent a fault
107113
is_onroad = Params().get_bool("IsOnroad")

selfdrive/pandad/panda/state_manager.py

+23-23
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22
from cereal import car, log
33
import cereal.messaging as messaging
4-
from openpilot.common.params import Params
4+
from panda.python import PANDA_BUS_CNT
55

66
SPOOFING_STARTED = os.getenv("STARTED") == "1"
77

@@ -13,7 +13,6 @@
1313
class PandaStateManager:
1414
def __init__(self, pandas, hw_types, lock):
1515
self.pandas = pandas
16-
self.params = Params()
1716
self.lock = lock
1817
self.hw_types = hw_types
1918

@@ -26,47 +25,48 @@ def __init__(self, pandas, hw_types, lock):
2625
def process(self, engaged, pm) -> bool:
2726
msg = messaging.new_message('pandaStates', len(self.pandas))
2827
msg.valid = True
29-
pss = msg.pandaStates
28+
panda_states = msg.pandaStates
3029
ignition = False
3130

32-
for i, p in enumerate(self.pandas):
31+
for i, panda in enumerate(self.pandas):
3332
with self.lock:
34-
health = p.health() or {}
33+
health = panda.health() or {}
3534

3635
if SPOOFING_STARTED:
3736
health['ignition_line'] = 1
3837
elif self.is_comma_three_red and self.hw_types[i] == log.PandaState.PandaType.dos:
3938
health['ignition_line'] = 0
4039

4140
ignition |= bool(health['ignition_line']) or bool(health['ignition_can'])
42-
ps = pss[i]
41+
ps = panda_states[i]
4342
self._fill_state(ps, self.hw_types[i], health)
4443

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):
4646
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
5959

6060
with self.lock:
61-
for p, ps in zip(self.pandas, pss):
61+
for panda, ps in zip(self.pandas, panda_states):
6262
if ps.safetyModel == car.CarParams.SafetyModel.silent or (
6363
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)
6565

6666
if ps.powerSaveEnabled != (not ignition):
67-
p.set_power_save(not ignition)
67+
panda.set_power_save(not ignition)
6868

69-
p.send_heartbeat(engaged)
69+
panda.send_heartbeat(engaged)
7070

7171
pm.send("pandaStates", msg)
7272
return ignition

0 commit comments

Comments
 (0)