@@ -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