Skip to content

Commit 8ac640b

Browse files
author
STAY COOL
committed
增加多通道设置不同波特率的功能
1 parent 51b0ef9 commit 8ac640b

1 file changed

Lines changed: 26 additions & 10 deletions

File tree

candle/candle_bus.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,28 @@ def __init__(self, channel: Union[int, str, List[Union[int, str]]], can_filters:
8080
ch.set_termination(termination)
8181

8282
props_seg = 1
83+
84+
def get_cfg(param, idx, default):
85+
if isinstance(param, (list, tuple)):
86+
return param[idx] if idx < len(param) else default
87+
return param
88+
8389
if fd:
84-
for ch in self._channels:
90+
for i, ch in enumerate(self._channels):
91+
# Resolve per-channel configs
92+
br = get_cfg(bitrate, i, 1000000)
93+
sp = get_cfg(sample_point, i, 87.5)
94+
dbr = get_cfg(data_bitrate, i, 5000000)
95+
dsp = get_cfg(data_sample_point, i, 87.5)
96+
8597
if ch.feature.fd:
8698
# New: Configure FD bit timing per channel when supported.
8799
bit_timing_fd = can.BitTimingFd.from_sample_point(
88100
f_clock=ch.clock_frequency,
89-
nom_bitrate=bitrate,
90-
nom_sample_point=sample_point,
91-
data_bitrate=data_bitrate,
92-
data_sample_point=data_sample_point
101+
nom_bitrate=br,
102+
nom_sample_point=sp,
103+
data_bitrate=dbr,
104+
data_sample_point=dsp
93105
)
94106
ch.set_bit_timing(
95107
props_seg,
@@ -109,8 +121,8 @@ def __init__(self, channel: Union[int, str, List[Union[int, str]]], can_filters:
109121
# New: Fallback to classic CAN bit timing for channels without FD.
110122
bit_timing = can.BitTiming.from_sample_point(
111123
f_clock=ch.clock_frequency,
112-
bitrate=bitrate,
113-
sample_point=sample_point,
124+
bitrate=br,
125+
sample_point=sp,
114126
)
115127
ch.set_bit_timing(
116128
props_seg,
@@ -120,12 +132,16 @@ def __init__(self, channel: Union[int, str, List[Union[int, str]]], can_filters:
120132
bit_timing.brp
121133
)
122134
else:
123-
for ch in self._channels:
135+
for i, ch in enumerate(self._channels):
136+
# Resolve per-channel configs
137+
br = get_cfg(bitrate, i, 1000000)
138+
sp = get_cfg(sample_point, i, 87.5)
139+
124140
# New: Classic CAN bit timing configuration per channel.
125141
bit_timing = can.BitTiming.from_sample_point(
126142
f_clock=ch.clock_frequency,
127-
bitrate=bitrate,
128-
sample_point=sample_point,
143+
bitrate=br,
144+
sample_point=sp,
129145
)
130146
ch.set_bit_timing(
131147
props_seg,

0 commit comments

Comments
 (0)