445 ) |
445 ) |
446 { |
446 { |
447 const ec_sync_t *sync; |
447 const ec_sync_t *sync; |
448 const ec_pdo_t *default_pdo; |
448 const ec_pdo_t *default_pdo; |
449 |
449 |
|
450 if (sc->master->debug_level) |
|
451 EC_DBG("Loading default configuration for Pdo 0x%04X in" |
|
452 " config %u:%u.\n", pdo->index, sc->alias, sc->position); |
|
453 |
450 pdo->default_config = 1; |
454 pdo->default_config = 1; |
451 |
455 |
452 if (!sc->slave) { |
456 if (!sc->slave) { |
453 EC_WARN("Failed to load default Pdo configuration for %u:%u:" |
457 EC_WARN("Failed to load default Pdo configuration for %u:%u:" |
454 " Slave not found.\n", sc->alias, sc->position); |
458 " Slave not found.\n", sc->alias, sc->position); |
495 { |
499 { |
496 ec_pdo_mapping_t *pm = &sc->mapping[dir]; |
500 ec_pdo_mapping_t *pm = &sc->mapping[dir]; |
497 ec_pdo_t *pdo; |
501 ec_pdo_t *pdo; |
498 |
502 |
499 if (pm->default_mapping) { |
503 if (pm->default_mapping) { |
|
504 if (sc->master->debug_level) |
|
505 EC_DBG("Clearing default mapping for dir %u, config %u:%u.\n", |
|
506 dir, sc->alias, sc->position); |
500 pm->default_mapping = 0; |
507 pm->default_mapping = 0; |
501 ec_pdo_mapping_clear_pdos(pm); |
508 ec_pdo_mapping_clear_pdos(pm); |
502 } |
509 } |
|
510 |
|
511 if (sc->master->debug_level) |
|
512 EC_DBG("Adding Pdo 0x%04X to mapping for dir %u, config %u:%u.\n", |
|
513 index, dir, sc->alias, sc->position); |
503 |
514 |
504 if (!(pdo = ec_pdo_mapping_add_pdo(pm, index, dir))) |
515 if (!(pdo = ec_pdo_mapping_add_pdo(pm, index, dir))) |
505 return -1; |
516 return -1; |
506 |
517 |
507 ec_slave_config_load_default_pdo_config(sc, pdo); |
518 ec_slave_config_load_default_pdo_config(sc, pdo); |
515 uint8_t entry_bit_length) |
526 uint8_t entry_bit_length) |
516 { |
527 { |
517 ec_direction_t dir; |
528 ec_direction_t dir; |
518 ec_pdo_t *pdo; |
529 ec_pdo_t *pdo; |
519 |
530 |
|
531 if (sc->master->debug_level) |
|
532 EC_DBG("Adding Pdo entry 0x%04X:%u (%u bit) to configuration of Pdo" |
|
533 " 0x%04X, config %u:%u.\n", entry_index, entry_subindex, |
|
534 entry_bit_length, pdo_index, sc->alias, sc->position); |
|
535 |
520 for (dir = EC_DIR_OUTPUT; dir <= EC_DIR_INPUT; dir++) |
536 for (dir = EC_DIR_OUTPUT; dir <= EC_DIR_INPUT; dir++) |
521 if ((pdo = ec_pdo_mapping_find_pdo(&sc->mapping[dir], pdo_index))) |
537 if ((pdo = ec_pdo_mapping_find_pdo(&sc->mapping[dir], pdo_index))) |
522 break; |
538 break; |
523 |
539 |
|
540 if (!pdo) { |
|
541 EC_ERR("Pdo 0x%04X was not found in the mapping of config %u:%u.\n", |
|
542 pdo_index, sc->alias, sc->position); |
|
543 return -1; |
|
544 } |
|
545 |
524 if (pdo->default_config) { |
546 if (pdo->default_config) { |
|
547 if (sc->master->debug_level) |
|
548 EC_DBG("Clearing default configuration of Pdo 0x%04X," |
|
549 " config %u:%u.\n", pdo->index, sc->alias, sc->position); |
525 pdo->default_config = 0; |
550 pdo->default_config = 0; |
526 ec_pdo_clear_entries(pdo); |
551 ec_pdo_clear_entries(pdo); |
527 } |
552 } |
528 |
553 |
529 return ec_pdo_add_entry(pdo, entry_index, entry_subindex, |
554 return ec_pdo_add_entry(pdo, entry_index, entry_subindex, |
544 for (i = 0; i < n_entries; i++) { |
569 for (i = 0; i < n_entries; i++) { |
545 pi = &pdo_infos[i]; |
570 pi = &pdo_infos[i]; |
546 pm = &sc->mapping[pi->dir]; |
571 pm = &sc->mapping[pi->dir]; |
547 |
572 |
548 if (pm->default_mapping) { |
573 if (pm->default_mapping) { |
|
574 if (sc->master->debug_level) |
|
575 EC_DBG("Clearing default mapping for dir %u, config %u:%u.\n", |
|
576 pi->dir, sc->alias, sc->position); |
549 pm->default_mapping = 0; |
577 pm->default_mapping = 0; |
550 ec_pdo_mapping_clear_pdos(pm); |
578 ec_pdo_mapping_clear_pdos(pm); |
551 } |
579 } |
552 |
580 |
553 if (sc->master->debug_level) |
581 if (sc->master->debug_level) |
554 EC_INFO("Adding Pdo 0x%04X to mapping.\n", pi->index); |
582 EC_DBG("Adding Pdo 0x%04X to mapping.\n", pi->index); |
555 |
583 |
556 if (!(pdo = ec_pdo_mapping_add_pdo(pm, pi->dir, pi->index))) |
584 if (!(pdo = ec_pdo_mapping_add_pdo(pm, pi->dir, pi->index))) |
557 return -1; |
585 return -1; |
558 |
586 |
559 if (pi->n_entries && pi->entries) { // configuration provided |
587 if (pi->n_entries && pi->entries) { // configuration provided |
565 if (!ec_pdo_add_entry(pdo, ei->index, ei->subindex, |
593 if (!ec_pdo_add_entry(pdo, ei->index, ei->subindex, |
566 ei->bit_length)) |
594 ei->bit_length)) |
567 return -1; |
595 return -1; |
568 } |
596 } |
569 } else { // use default Pdo configuration |
597 } else { // use default Pdo configuration |
570 if (sc->master->debug_level) |
|
571 EC_DBG(" Using default Pdo configuration.\n"); |
|
572 ec_slave_config_load_default_pdo_config(sc, pdo); |
598 ec_slave_config_load_default_pdo_config(sc, pdo); |
573 } |
599 } |
574 } |
600 } |
575 |
601 |
576 return 0; |
602 return 0; |