MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / control

Function control

bsp/loongson/ls1cdev/drivers/drv_can.c:261–349  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

259}
260
261static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
262{
263 struct ls1c_bxcan *pbxcan;
264 rt_uint32_t argval;
265
266 pbxcan = (struct ls1c_bxcan *) can->parent.user_data;
267 switch (cmd)
268 {
269 case RT_CAN_CMD_SET_FILTER:
270 return setfilter(pbxcan, (struct rt_can_filter_config *) arg);
271 break;
272 case RT_CAN_CMD_SET_MODE:
273 argval = (rt_uint32_t) arg;
274 if (argval != RT_CAN_MODE_NORMAL ||
275 argval != RT_CAN_MODE_LISTEN ||
276 argval != RT_CAN_MODE_LOOPBACK ||
277 argval != RT_CAN_MODE_LOOPBACKANLISTEN)
278 {
279 return -RT_ERROR;
280 }
281 if (argval != can->config.mode)
282 {
283 can->config.mode = argval;
284 return CAN_SetMode(pbxcan->reg, argval);
285 }
286 break;
287 case RT_CAN_CMD_SET_BAUD:
288 argval = (rt_uint32_t) arg;
289 if (argval != CAN1MBaud &&
290 argval != CAN800kBaud &&
291 argval != CAN500kBaud &&
292 argval != CAN250kBaud &&
293 argval != CAN125kBaud &&
294 argval != CAN100kBaud &&
295 argval != CAN50kBaud )
296 {
297 return -RT_ERROR;
298 }
299 if (argval != can->config.baud_rate)
300 {
301 can->config.baud_rate = argval;
302 Ls1c_CanBPS_t bps;
303 switch(argval)
304 {
305 case CAN1MBaud:
306 bps = LS1C_CAN1MBaud;
307 break;
308 case CAN800kBaud:
309 bps = LS1C_CAN800kBaud;
310 break;
311 case CAN500kBaud:
312 bps = LS1C_CAN500kBaud;
313 break;
314 case CAN250kBaud:
315 bps = LS1C_CAN250kBaud;
316 break;
317 case CAN125kBaud:
318 bps = LS1C_CAN125kBaud;

Callers

nothing calls this directly

Calls 4

CAN_SetModeFunction · 0.85
CAN_SetBpsFunction · 0.85
rt_memcpyFunction · 0.85
setfilterFunction · 0.70

Tested by

no test coverage detected