master/slave.c
changeset 122 132c3ffc8dea
parent 121 1cd6f7a47b72
child 123 4d5dc58d48e2
equal deleted inserted replaced
121:1cd6f7a47b72 122:132c3ffc8dea
    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 */)