| 530 | } |
| 531 | |
| 532 | CO_LSSmaster_return_t |
| 533 | CO_LSSmaster_InquireLssAddress(CO_LSSmaster_t* LSSmaster, uint32_t timeDifference_us, CO_LSS_address_t* lssAddress) { |
| 534 | CO_LSSmaster_return_t ret = CO_LSSmaster_INVALID_STATE; |
| 535 | uint8_t next = CO_LSSmaster_COMMAND_WAITING; |
| 536 | |
| 537 | if ((LSSmaster == NULL) || (lssAddress == NULL)) { |
| 538 | return CO_LSSmaster_ILLEGAL_ARGUMENT; |
| 539 | } |
| 540 | |
| 541 | /* Check for reply */ |
| 542 | if (LSSmaster->command == CO_LSSmaster_COMMAND_INQUIRE_VENDOR) { |
| 543 | |
| 544 | ret = CO_LSSmaster_inquireCheckWait(LSSmaster, timeDifference_us, CO_LSS_INQUIRE_VENDOR, |
| 545 | &lssAddress->identity.vendorID); |
| 546 | if (ret == CO_LSSmaster_OK) { |
| 547 | /* Start next request */ |
| 548 | next = CO_LSSmaster_COMMAND_INQUIRE_PRODUCT; |
| 549 | ret = CO_LSSmaster_WAIT_SLAVE; |
| 550 | } |
| 551 | } else if (LSSmaster->command == CO_LSSmaster_COMMAND_INQUIRE_PRODUCT) { |
| 552 | |
| 553 | ret = CO_LSSmaster_inquireCheckWait(LSSmaster, timeDifference_us, CO_LSS_INQUIRE_PRODUCT, |
| 554 | &lssAddress->identity.productCode); |
| 555 | if (ret == CO_LSSmaster_OK) { |
| 556 | /* Start next request */ |
| 557 | next = CO_LSSmaster_COMMAND_INQUIRE_REV; |
| 558 | ret = CO_LSSmaster_WAIT_SLAVE; |
| 559 | } |
| 560 | } else if (LSSmaster->command == CO_LSSmaster_COMMAND_INQUIRE_REV) { |
| 561 | |
| 562 | ret = CO_LSSmaster_inquireCheckWait(LSSmaster, timeDifference_us, CO_LSS_INQUIRE_REV, |
| 563 | &lssAddress->identity.revisionNumber); |
| 564 | if (ret == CO_LSSmaster_OK) { |
| 565 | /* Start next request */ |
| 566 | next = CO_LSSmaster_COMMAND_INQUIRE_SERIAL; |
| 567 | ret = CO_LSSmaster_WAIT_SLAVE; |
| 568 | } |
| 569 | } else if (LSSmaster->command == CO_LSSmaster_COMMAND_INQUIRE_SERIAL) { |
| 570 | |
| 571 | ret = CO_LSSmaster_inquireCheckWait(LSSmaster, timeDifference_us, CO_LSS_INQUIRE_SERIAL, |
| 572 | &lssAddress->identity.serialNumber); |
| 573 | } else { /* MISRA C 2004 14.10 */ |
| 574 | } |
| 575 | |
| 576 | /* Check for next request */ |
| 577 | if ((LSSmaster->state == CO_LSSmaster_STATE_CFG_SLECTIVE) || (LSSmaster->state == CO_LSSmaster_STATE_CFG_GLOBAL)) { |
| 578 | if (LSSmaster->command == CO_LSSmaster_COMMAND_WAITING) { |
| 579 | |
| 580 | LSSmaster->command = CO_LSSmaster_COMMAND_INQUIRE_VENDOR; |
| 581 | LSSmaster->timeoutTimer = 0; |
| 582 | |
| 583 | ret = CO_LSSmaster_inquireInitiate(LSSmaster, CO_LSS_INQUIRE_VENDOR); |
| 584 | } else if (next == CO_LSSmaster_COMMAND_INQUIRE_PRODUCT) { |
| 585 | LSSmaster->command = CO_LSSmaster_COMMAND_INQUIRE_PRODUCT; |
| 586 | LSSmaster->timeoutTimer = 0; |
| 587 | |
| 588 | ret = CO_LSSmaster_inquireInitiate(LSSmaster, CO_LSS_INQUIRE_PRODUCT); |
| 589 | } else if (next == CO_LSSmaster_COMMAND_INQUIRE_REV) { |
no test coverage detected