From 1c05315e960ea1c68351cf3416e4c6a26f1c4fbd Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Tue, 11 Apr 2006 14:39:17 +0000 Subject: [PATCH] Now fetching port physical layer from EEPROM --- master/slave.c | 23 ++++++++++++++++++++++- master/slave.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/master/slave.c b/master/slave.c index e5474c21..5a844eae 100644 --- a/master/slave.c +++ b/master/slave.c @@ -124,6 +124,7 @@ int ec_slave_init(ec_slave_t *slave, /**< EtherCAT-Slave */ slave->dl_link[i] = 0; slave->dl_loop[i] = 0; slave->dl_signal[i] = 0; + slave->sii_physical_layer[i] = 0xFF; } return 0; @@ -619,6 +620,8 @@ int ec_slave_fetch_general(ec_slave_t *slave, /**< EtherCAT-Slave */ const uint8_t *data /**< Kategorie-Daten */ ) { + unsigned int i; + if (ec_slave_locate_string(slave, data[0], &slave->eeprom_group)) return -1; if (ec_slave_locate_string(slave, data[1], &slave->eeprom_name)) @@ -626,6 +629,9 @@ int ec_slave_fetch_general(ec_slave_t *slave, /**< EtherCAT-Slave */ if (ec_slave_locate_string(slave, data[3], &slave->eeprom_desc)) return -1; + for (i = 0; i < 4; i++) + slave->sii_physical_layer[i] = (data[4] & (0x03 << (i * 2))) >> (i * 2); + return 0; } @@ -1011,7 +1017,22 @@ void ec_slave_print(const ec_slave_t *slave, /**< EtherCAT-Slave */ EC_INFO(" Data link status:\n"); for (i = 0; i < 4; i++) { - EC_INFO(" Port %i: link %s, loop %s, %s\n", i, + EC_INFO(" Port %i (", i); + switch (slave->sii_physical_layer[i]) { + case 0x00: + printk("EBUS"); + break; + case 0x01: + printk("100BASE-TX"); + break; + case 0x02: + printk("100BASE-FX"); + break; + default: + printk("unknown"); + } + printk(")\n"); + EC_INFO(" link %s, loop %s, %s\n", slave->dl_link[i] ? "up" : "down", slave->dl_loop[i] ? "closed" : "open", slave->dl_signal[i] ? "signal detected" : "no signal"); diff --git a/master/slave.h b/master/slave.h index baf93041..468d159a 100644 --- a/master/slave.h +++ b/master/slave.h @@ -222,6 +222,7 @@ struct ec_slave uint16_t sii_tx_mailbox_offset; /**< Adresse der Mailbox (Slave->Master) */ uint16_t sii_tx_mailbox_size; /**< Adresse der Mailbox (Slave->Master) */ uint16_t sii_mailbox_protocols; /**< Unterstützte Mailbox-Protokolle */ + uint8_t sii_physical_layer[4]; /**< Uebertragungsarten der Ports */ const ec_slave_type_t *type; /**< Zeiger auf die Beschreibung des Slave-Typs */ -- GitLab