455 {
457
459 PRINT(
"*** INFO: sendDataTimeout %d" PRINT_EOL,
size);
460 }
461
463 return 0;
464
465
471 }
472
473
474
475
482
483
484#if !EFI_UNIT_TEST
486 size_t numFcReceived = 0;
487 while (numFcReceived < 3) {
488
490 efiPrintf("IsoTp: Flow Control frame not received");
491
492 return 0;
493 }
495
496
498
499 continue;
500 }
501
502
503 numFcReceived++;
505
506 if (flowStatus == CAN_FLOW_STATUS_ABORT) {
507 efiPrintf("IsoTp: Flow Control ABORT");
508
509 return -4;
510 }
511
512 if (flowStatus == CAN_FLOW_STATUS_WAIT_MORE) {
513
514 if (numFcReceived < 3) {
515 continue;
516 }
517
518 return -5;
519 }
520
521 if (flowStatus != CAN_FLOW_STATUS_OK) {
522 efiPrintf("IsoTp: Flow Control unknown Status %d", flowStatus);
523
524 return -6;
525 }
526
529 if (blockSize != 0 || minSeparationTime != 0) {
530
531 efiPrintf("IsoTp: Flow Control fields not supported");
532
533 return -7;
534 }
535
536 break;
537 }
538#endif
539
540
541 uint8_t idx = 1;
544
546 header.
index = ((idx++) & 0x0f);
549 if (numSent < 1)
550 break;
553 }
555}
int sendFrame(const IsoTpFrameHeader &header, const uint8_t *data, int num, can_sysinterval_t timeout)
size_t isoHeaderByteIndex
fifo_buffer_sync< CANRxFrame, ISOTP_RX_QUEUE_LEN > rxFifoBuf
static constexpr engine_configuration_s * engineConfiguration
@ ISO_TP_FRAME_CONSECUTIVE
@ ISO_TP_FRAME_FLOW_CONTROL
uint8_t data8[8]
Frame data.