| 342 | } |
| 343 | |
| 344 | CO_LSSmaster_return_t |
| 345 | CO_LSSmaster_configureBitTiming(CO_LSSmaster_t* LSSmaster, uint32_t timeDifference_us, uint16_t bit) { |
| 346 | CO_LSSmaster_return_t ret = CO_LSSmaster_INVALID_STATE; |
| 347 | uint8_t bitTiming; |
| 348 | |
| 349 | if (LSSmaster == NULL) { |
| 350 | return CO_LSSmaster_ILLEGAL_ARGUMENT; |
| 351 | } |
| 352 | |
| 353 | switch (bit) { |
| 354 | case 1000: bitTiming = CO_LSS_BIT_TIMING_1000; break; |
| 355 | case 800: bitTiming = CO_LSS_BIT_TIMING_800; break; |
| 356 | case 500: bitTiming = CO_LSS_BIT_TIMING_500; break; |
| 357 | case 250: bitTiming = CO_LSS_BIT_TIMING_250; break; |
| 358 | case 125: bitTiming = CO_LSS_BIT_TIMING_125; break; |
| 359 | case 50: bitTiming = CO_LSS_BIT_TIMING_50; break; |
| 360 | case 20: bitTiming = CO_LSS_BIT_TIMING_20; break; |
| 361 | case 10: bitTiming = CO_LSS_BIT_TIMING_10; break; |
| 362 | case 0: bitTiming = CO_LSS_BIT_TIMING_AUTO; break; |
| 363 | default: return CO_LSSmaster_ILLEGAL_ARGUMENT; break; |
| 364 | } |
| 365 | |
| 366 | /* Initiate config bit */ |
| 367 | if ((LSSmaster->state == CO_LSSmaster_STATE_CFG_SLECTIVE) && (LSSmaster->command == CO_LSSmaster_COMMAND_WAITING)) { |
| 368 | |
| 369 | LSSmaster->command = CO_LSSmaster_COMMAND_CFG_BIT_TIMING; |
| 370 | LSSmaster->timeoutTimer = 0; |
| 371 | |
| 372 | CO_FLAG_CLEAR(LSSmaster->CANrxNew); |
| 373 | LSSmaster->TXbuff->data[0] = CO_LSS_CFG_BIT_TIMING; |
| 374 | LSSmaster->TXbuff->data[1] = 0; |
| 375 | LSSmaster->TXbuff->data[2] = bitTiming; |
| 376 | (void)memset(&LSSmaster->TXbuff->data[3], 0, sizeof(LSSmaster->TXbuff->data) - 3U); |
| 377 | (void)CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff); |
| 378 | |
| 379 | ret = CO_LSSmaster_WAIT_SLAVE; |
| 380 | } |
| 381 | /* Wait for confirmation */ |
| 382 | else if (LSSmaster->command == CO_LSSmaster_COMMAND_CFG_BIT_TIMING) { |
| 383 | |
| 384 | ret = CO_LSSmaster_configureCheckWait(LSSmaster, timeDifference_us, CO_LSS_CFG_BIT_TIMING); |
| 385 | } else { /* MISRA C 2004 14.10 */ |
| 386 | } |
| 387 | |
| 388 | if ((ret != CO_LSSmaster_INVALID_STATE) && (ret != CO_LSSmaster_WAIT_SLAVE)) { |
| 389 | /* finished */ |
| 390 | LSSmaster->command = CO_LSSmaster_COMMAND_WAITING; |
| 391 | } |
| 392 | return ret; |
| 393 | } |
| 394 | |
| 395 | CO_LSSmaster_return_t |
| 396 | CO_LSSmaster_configureNodeId(CO_LSSmaster_t* LSSmaster, uint32_t timeDifference_us, uint8_t nodeId) { |
no test coverage detected