--- a/master/device.c Tue Feb 28 13:07:05 2006 +0000
+++ b/master/device.c Thu Mar 02 11:19:27 2006 +0000
@@ -39,6 +39,7 @@
device->isr = NULL;
device->module = NULL;
device->error_reported = 0;
+ device->link_state = 0; // down
if ((device->tx_skb = dev_alloc_skb(ETH_HLEN + EC_MAX_FRAME_SIZE)) == NULL) {
EC_ERR("Error allocating device socket buffer!\n");
@@ -101,6 +102,7 @@
// Reset old device state
device->state = EC_DEVICE_STATE_READY;
+ device->link_state = 0;
if (device->dev->open(device->dev) == 0) device->open = 1;
@@ -166,6 +168,10 @@
{
struct ethhdr *eth;
+ if (unlikely(!device->link_state)) { // Link down
+ return;
+ }
+
// Framegröße auf (jetzt bekannte) Länge abschneiden
skb_trim(device->tx_skb, length);
@@ -375,9 +381,26 @@
/*****************************************************************************/
+/**
+ Setzt einen neuen Verbindungszustand.
+*/
+
+void EtherCAT_dev_link_state(ec_device_t *device, /**< EtherCAT-Gerät */
+ uint8_t state /**< Verbindungszustand */
+ )
+{
+ if (state != device->link_state) {
+ device->link_state = state;
+ EC_INFO("Link state changed to %s.\n", (state ? "UP" : "DOWN"));
+ }
+}
+
+/*****************************************************************************/
+
EXPORT_SYMBOL(EtherCAT_dev_is_ec);
EXPORT_SYMBOL(EtherCAT_dev_state);
EXPORT_SYMBOL(EtherCAT_dev_receive);
+EXPORT_SYMBOL(EtherCAT_dev_link_state);
/*****************************************************************************/