diff -r 044e97bce4bd -r 0120d6214948 master/device.c --- a/master/device.c Tue Feb 28 09:25:51 2006 +0000 +++ b/master/device.c Tue Feb 28 11:10:57 2006 +0000 @@ -21,6 +21,8 @@ /** EtherCAT-Geräte-Konstuktor. + + \return 0 wenn alles ok, < 0 bei Fehler (zu wenig Speicher) */ int ec_device_init(ec_device_t *device, /**< EtherCAT-Gerät */ @@ -52,7 +54,7 @@ EtherCAT-Geräte-Destuktor. Gibt den dynamisch allozierten Speicher des - EtherCAT-Gerätes (die beiden Socket-Buffer) wieder frei. + EtherCAT-Gerätes (den Sende-Socket-Buffer) wieder frei. */ void ec_device_clear(ec_device_t *device /**< EtherCAT-Gerät */) @@ -84,11 +86,6 @@ { unsigned int i; - if (!device) { - EC_ERR("Trying to open a NULL device!\n"); - return -1; - } - if (!device->dev) { EC_ERR("No net_device to open!\n"); return -1; @@ -96,16 +93,16 @@ if (device->open) { EC_WARN("Device already opened!\n"); - } - else { - // Device could have received frames before - for (i = 0; i < 4; i++) ec_device_call_isr(device); - - // Reset old device state - device->state = EC_DEVICE_STATE_READY; - - if (device->dev->open(device->dev) == 0) device->open = 1; - } + return 0; + } + + // Device could have received frames before + for (i = 0; i < 4; i++) ec_device_call_isr(device); + + // Reset old device state + device->state = EC_DEVICE_STATE_READY; + + if (device->dev->open(device->dev) == 0) device->open = 1; return device->open ? 0 : -1; } @@ -115,8 +112,8 @@ /** Führt die stop()-Funktion des net_devices aus. - \return 0 bei Erfolg, < 0: Kein Gerät zum Schliessen oder - Schliessen fehlgeschlagen. + \return 0 bei Erfolg, < 0: Kein Gerät zum Schließen oder + Schließen fehlgeschlagen. */ int ec_device_close(ec_device_t *device /**< EtherCAT-Gerät */) @@ -146,25 +143,21 @@ uint8_t *ec_device_prepare(ec_device_t *device /**< EtherCAT-Gerät */) { - // Clear transmit socket buffer and reserve space for Ethernet-II header - skb_trim(device->tx_skb, 0); - skb_reserve(device->tx_skb, ETH_HLEN); - - // Erstmal Speicher für maximal langen Frame reservieren + skb_trim(device->tx_skb, 0); // Auf Länge 0 abschneiden + skb_reserve(device->tx_skb, ETH_HLEN); // Reserve für Ethernet-II-Header + + // Vorerst Speicher für maximal langen Frame reservieren return skb_put(device->tx_skb, EC_MAX_FRAME_SIZE); } /*****************************************************************************/ /** - Sendet einen Rahmen über das EtherCAT-Gerät. - - Kopiert die zu sendenden Daten in den statischen Socket- - Buffer, fügt den Ethernat-II-Header hinzu und ruft die - start_xmit()-Funktion der Netzwerkkarte auf. - - \return 0 bei Erfolg, < 0: Vorheriger Rahmen noch - nicht empfangen, oder kein Speicher mehr vorhanden + Sendet den Inhalt des Socket-Buffers. + + Schneidet den Inhalt des Socket-Buffers auf die (nun bekannte) Größe zu, + fügt den Ethernet-II-Header an und ruft die start_xmit()-Funktion der + Netzwerkkarte auf. */ void ec_device_send(ec_device_t *device, /**< EtherCAT-Gerät */ @@ -173,7 +166,7 @@ { struct ethhdr *eth; - // Framegroesse auf (jetzt bekannte) Laenge abschneiden + // Framegröße auf (jetzt bekannte) Länge abschneiden skb_trim(device->tx_skb, length); // Ethernet-II-Header hinzufuegen @@ -213,7 +206,7 @@ /** Gibt die empfangenen Daten zurück. - \return Adresse auf empfangene Daten. + \return Zeiger auf empfangene Daten. */ uint8_t *ec_device_data(ec_device_t *device) @@ -269,7 +262,7 @@ { EC_DBG(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); ec_data_print(device->tx_skb->data + ETH_HLEN, device->tx_skb->len); - EC_DBG("------------------------------------------------\n"); + EC_DBG("--------------------------------------\n"); ec_data_print_diff(device->tx_skb->data + ETH_HLEN, device->rx_data, device->rx_data_size); EC_DBG("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); @@ -344,6 +337,8 @@ /** Prüft, ob das Net-Device \a dev zum registrierten EtherCAT-Gerät gehört. + + \return 0 wenn nein, nicht-null wenn ja. */ int EtherCAT_dev_is_ec(const ec_device_t *device, /**< EtherCAT-Gerät */ @@ -355,7 +350,16 @@ /*****************************************************************************/ -void EtherCAT_dev_receive(ec_device_t *device, const void *data, size_t size) +/** + Nimmt einen Empfangenen Rahmen entgegen. + + Kopiert die empfangenen Daten in den Receive-Buffer. +*/ + +void EtherCAT_dev_receive(ec_device_t *device, /**< EtherCAT-Gerät */ + const void *data, /**< Zeiger auf empfangene Daten */ + size_t size /**< Größe der empfangenen Daten */ + ) { // Copy received data to ethercat-device buffer memcpy(device->rx_data, data, size);