| 259 | } |
| 260 | |
| 261 | static 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; |
nothing calls this directly
no test coverage detected