MCPcopy Create free account
hub / github.com/CANopenNode/CANopenNode / CO_LSSmaster_configureBitTiming

Function CO_LSSmaster_configureBitTiming

305/CO_LSSmaster.c:344–393  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

342}
343
344CO_LSSmaster_return_t
345CO_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
395CO_LSSmaster_return_t
396CO_LSSmaster_configureNodeId(CO_LSSmaster_t* LSSmaster, uint32_t timeDifference_us, uint8_t nodeId) {

Callers 1

CO_gateway_ascii.cFile · 0.85

Calls 2

CO_CANsendFunction · 0.85

Tested by

no test coverage detected