equal
deleted
inserted
replaced
81 } |
81 } |
82 |
82 |
83 /*****************************************************************************/ |
83 /*****************************************************************************/ |
84 |
84 |
85 /** |
85 /** |
86 Liest alle benŽötigten Informationen aus einem Slave. |
86 Liest alle benötigten Informationen aus einem Slave. |
87 |
87 |
88 \return 0 wenn alles ok, < 0 bei Fehler. |
88 \return 0 wenn alles ok, < 0 bei Fehler. |
89 */ |
89 */ |
90 |
90 |
91 int ec_slave_fetch(ec_slave_t *slave /**< EtherCAT-Slave */) |
91 int ec_slave_fetch(ec_slave_t *slave /**< EtherCAT-Slave */) |
180 EC_ERR("SII-read failed on slave %i!\n", slave->ring_position); |
180 EC_ERR("SII-read failed on slave %i!\n", slave->ring_position); |
181 return -1; |
181 return -1; |
182 } |
182 } |
183 |
183 |
184 // Der Slave legt die Informationen des Slave-Information-Interface |
184 // Der Slave legt die Informationen des Slave-Information-Interface |
185 // in das Datenregister und lŽöscht daraufhin ein Busy-Bit. Solange |
185 // in das Datenregister und löscht daraufhin ein Busy-Bit. Solange |
186 // den Status auslesen, bis das Bit weg ist. |
186 // den Status auslesen, bis das Bit weg ist. |
187 |
187 |
188 start = get_cycles(); |
188 start = get_cycles(); |
189 timeout = (cycles_t) 100 * cpu_khz; // 100ms |
189 timeout = (cycles_t) 100 * cpu_khz; // 100ms |
190 |
190 |
249 EC_ERR("SII-write failed on slave %i!\n", slave->ring_position); |
249 EC_ERR("SII-write failed on slave %i!\n", slave->ring_position); |
250 return -1; |
250 return -1; |
251 } |
251 } |
252 |
252 |
253 // Der Slave legt die Informationen des Slave-Information-Interface |
253 // Der Slave legt die Informationen des Slave-Information-Interface |
254 // in das Datenregister und lŽöscht daraufhin ein Busy-Bit. Solange |
254 // in das Datenregister und löscht daraufhin ein Busy-Bit. Solange |
255 // den Status auslesen, bis das Bit weg ist. |
255 // den Status auslesen, bis das Bit weg ist. |
256 |
256 |
257 start = get_cycles(); |
257 start = get_cycles(); |
258 timeout = (cycles_t) 100 * cpu_khz; // 100ms |
258 timeout = (cycles_t) 100 * cpu_khz; // 100ms |
259 |
259 |
404 |
404 |
405 string_count = data[0]; |
405 string_count = data[0]; |
406 offset = 1; |
406 offset = 1; |
407 for (i = 0; i < string_count; i++) { |
407 for (i = 0; i < string_count; i++) { |
408 size = data[offset]; |
408 size = data[offset]; |
409 // Speicher fŽür String-Objekt und Daten in einem Rutsch allozieren |
409 // Speicher für String-Objekt und Daten in einem Rutsch allozieren |
410 if (!(string = (ec_slave_string_t *) kmalloc(sizeof(ec_slave_string_t) |
410 if (!(string = (ec_slave_string_t *) kmalloc(sizeof(ec_slave_string_t) |
411 + size + 1, |
411 + size + 1, |
412 GFP_KERNEL))) { |
412 GFP_KERNEL))) { |
413 EC_ERR("Failed to allocate string memory.\n"); |
413 EC_ERR("Failed to allocate string memory.\n"); |
414 return -1; |
414 return -1; |
485 } |
485 } |
486 |
486 |
487 /*****************************************************************************/ |
487 /*****************************************************************************/ |
488 |
488 |
489 /** |
489 /** |
490 BestŽätigt einen Fehler beim Zustandswechsel. |
490 Bestätigt einen Fehler beim Zustandswechsel. |
491 |
491 |
492 \todo Funktioniert noch nicht... |
492 \todo Funktioniert noch nicht... |
493 */ |
493 */ |
494 |
494 |
495 void ec_slave_state_ack(ec_slave_t *slave, |
495 void ec_slave_state_ack(ec_slave_t *slave, |
496 /**< Slave, dessen Zustand geŽändert werden soll */ |
496 /**< Slave, dessen Zustand geändert werden soll */ |
497 uint8_t state |
497 uint8_t state |
498 /**< Alter Zustand */ |
498 /**< Alter Zustand */ |
499 ) |
499 ) |
500 { |
500 { |
501 ec_command_t command; |
501 ec_command_t command; |
549 } |
549 } |
550 |
550 |
551 /*****************************************************************************/ |
551 /*****************************************************************************/ |
552 |
552 |
553 /** |
553 /** |
554 ŽÄndert den Zustand eines Slaves. |
554 Ändert den Zustand eines Slaves. |
555 |
555 |
556 \return 0 bei Erfolg, sonst < 0 |
556 \return 0 bei Erfolg, sonst < 0 |
557 */ |
557 */ |
558 |
558 |
559 int ec_slave_state_change(ec_slave_t *slave, |
559 int ec_slave_state_change(ec_slave_t *slave, |
560 /**< Slave, dessen Zustand geŽändert werden soll */ |
560 /**< Slave, dessen Zustand geändert werden soll */ |
561 uint8_t state |
561 uint8_t state |
562 /**< Neuer Zustand */ |
562 /**< Neuer Zustand */ |
563 ) |
563 ) |
564 { |
564 { |
565 ec_command_t command; |
565 ec_command_t command; |
616 |
616 |
617 /** |
617 /** |
618 Merkt eine FMMU-Konfiguration vor. |
618 Merkt eine FMMU-Konfiguration vor. |
619 |
619 |
620 Die FMMU wird so konfiguriert, dass sie den gesamten Datenbereich des |
620 Die FMMU wird so konfiguriert, dass sie den gesamten Datenbereich des |
621 entsprechenden Sync-Managers abdeckt. FŽür jede DomŽäne werden separate |
621 entsprechenden Sync-Managers abdeckt. Für jede Domäne werden separate |
622 FMMUs konfiguriert. |
622 FMMUs konfiguriert. |
623 |
623 |
624 Wenn die entsprechende FMMU bereits konfiguriert ist, wird dies als |
624 Wenn die entsprechende FMMU bereits konfiguriert ist, wird dies als |
625 Erfolg zurŽückgegeben. |
625 Erfolg zurückgegeben. |
626 |
626 |
627 \return 0 bei Erfolg, sonst < 0 |
627 \return 0 bei Erfolg, sonst < 0 |
628 */ |
628 */ |
629 |
629 |
630 int ec_slave_set_fmmu(ec_slave_t *slave, /**< EtherCAT-Slave */ |
630 int ec_slave_set_fmmu(ec_slave_t *slave, /**< EtherCAT-Slave */ |
631 const ec_domain_t *domain, /**< DomŽäne */ |
631 const ec_domain_t *domain, /**< Domäne */ |
632 const ec_sync_t *sync /**< Sync-Manager */ |
632 const ec_sync_t *sync /**< Sync-Manager */ |
633 ) |
633 ) |
634 { |
634 { |
635 unsigned int i; |
635 unsigned int i; |
636 |
636 |
656 } |
656 } |
657 |
657 |
658 /*****************************************************************************/ |
658 /*****************************************************************************/ |
659 |
659 |
660 /** |
660 /** |
661 Gibt alle Informationen Žüber einen EtherCAT-Slave aus. |
661 Gibt alle Informationen über einen EtherCAT-Slave aus. |
662 */ |
662 */ |
663 |
663 |
664 void ec_slave_print(const ec_slave_t *slave /**< EtherCAT-Slave */) |
664 void ec_slave_print(const ec_slave_t *slave /**< EtherCAT-Slave */) |
665 { |
665 { |
666 EC_INFO("--- EtherCAT slave information ---\n"); |
666 EC_INFO("--- EtherCAT slave information ---\n"); |
699 } |
699 } |
700 |
700 |
701 /*****************************************************************************/ |
701 /*****************************************************************************/ |
702 |
702 |
703 /** |
703 /** |
704 Gibt die ZŽählerstŽände der CRC-Fault-Counter aus und setzt diese zurŽück. |
704 Gibt die ZŽählerstände der CRC-Fault-Counter aus und setzt diese zurück. |
705 |
705 |
706 \return 0 bei Erfolg, sonst < 0 |
706 \return 0 bei Erfolg, sonst < 0 |
707 */ |
707 */ |
708 |
708 |
709 int ec_slave_check_crc(ec_slave_t *slave /**< EtherCAT-Slave */) |
709 int ec_slave_check_crc(ec_slave_t *slave /**< EtherCAT-Slave */) |