diff -r 0066de7a456d -r 080b46eb6e2d master/device.c --- 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); /*****************************************************************************/