# HG changeset patch # User Florian Pose # Date 1141125057 0 # Node ID 0120d62149487231f26d06c3293216f3329f0614 # Parent 044e97bce4bdade91abebbf679533e0bc91b0d50 Code-Dokumentation angepasst. diff -r 044e97bce4bd -r 0120d6214948 master/canopen.c --- a/master/canopen.c Tue Feb 28 09:25:51 2006 +0000 +++ b/master/canopen.c Tue Feb 28 11:10:57 2006 +0000 @@ -115,7 +115,7 @@ /*****************************************************************************/ /** - Schreibt ein CANopen-SDO (service data object). + Liest ein CANopen-SDO (service data object). */ int EtherCAT_rt_canopen_sdo_read(ec_slave_t *slave, /**< EtherCAT-Slave */ @@ -202,6 +202,14 @@ /*****************************************************************************/ +/** + Schweibt ein CANopen-SDO (Variante mit Angabe des Masters und der Adresse). + + Siehe EtherCAT_rt_canopen_sdo_write() + + \return 0 wenn alles ok, < 0 bei Fehler + */ + int EtherCAT_rt_canopen_sdo_addr_write(ec_master_t *master, /**< EtherCAT-Master */ const char *addr, @@ -223,6 +231,14 @@ /*****************************************************************************/ +/** + Liest ein CANopen-SDO (Variante mit Angabe des Masters und der Adresse). + + Siehe EtherCAT_rt_canopen_sdo_read() + + \return 0 wenn alles ok, < 0 bei Fehler + */ + int EtherCAT_rt_canopen_sdo_addr_read(ec_master_t *master, /**< EtherCAT-Slave */ const char *addr, 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); diff -r 044e97bce4bd -r 0120d6214948 master/domain.c --- a/master/domain.c Tue Feb 28 09:25:51 2006 +0000 +++ b/master/domain.c Tue Feb 28 11:10:57 2006 +0000 @@ -62,7 +62,7 @@ /** Registriert ein Feld in einer Domäne. - \returns 0 bei Erfolg, < 0 bei Fehler + \return 0 bei Erfolg, < 0 bei Fehler */ int ec_domain_reg_field(ec_domain_t *domain, /**< Domäne */ @@ -99,7 +99,12 @@ /*****************************************************************************/ /** - \returns 0 bei Erfolg, < 0 bei Fehler + Erzeugt eine Domäne. + + Reserviert den Speicher einer Domäne, berechnet die logischen Adressen der + FMMUs und setzt die Prozessdatenzeiger der registrierten Felder. + + \return 0 bei Erfolg, < 0 bei Fehler */ int ec_domain_alloc(ec_domain_t *domain, /**< Domäne */ @@ -182,7 +187,7 @@ *****************************************************************************/ /** - Registriert einer Domäne ein Datenfeld hinzu. + Registriert ein Datenfeld innerhalb einer Domäne. \return Zeiger auf den Slave bei Erfolg, sonst NULL */ @@ -258,7 +263,7 @@ /*****************************************************************************/ /** - Sendet und empfängt Prozessdaten der angegebenen Domäne + Sendet und empfängt Prozessdaten der angegebenen Domäne. \return 0 bei Erfolg, sonst < 0 */ diff -r 044e97bce4bd -r 0120d6214948 master/frame.c --- a/master/frame.c Tue Feb 28 09:25:51 2006 +0000 +++ b/master/frame.c Tue Feb 28 11:10:57 2006 +0000 @@ -317,7 +317,7 @@ /*****************************************************************************/ /** - Empfängt einen gesendeten Rahmen. + Wertet empfangene Daten zu einem Rahmen aus. \return 0 bei Erfolg, sonst < 0 */ diff -r 044e97bce4bd -r 0120d6214948 master/master.c --- a/master/master.c Tue Feb 28 09:25:51 2006 +0000 +++ b/master/master.c Tue Feb 28 11:10:57 2006 +0000 @@ -112,8 +112,8 @@ /** Öffnet das EtherCAT-Geraet des Masters. - \return 0, wenn alles o.k., < 0, wenn kein Gerät registriert wurde oder - es nicht geoeffnet werden konnte. + \return 0 wenn alles ok, < 0 wenn kein Gerät registriert wurde oder + es nicht geoeffnet werden konnte. */ int ec_master_open(ec_master_t *master /**< Der EtherCAT-Master */) @@ -151,9 +151,12 @@ /*****************************************************************************/ /** - Durchsucht den Bus nach Slaves. - - @return 0 bei Erfolg, sonst < 0 + Durchsucht den EtherCAT-Bus nach Slaves. + + Erstellt ein Array mit allen Slave-Informationen die für den + weiteren Betrieb notwendig sind. + + \return 0 bei Erfolg, sonst < 0 */ int ec_scan_for_slaves(ec_master_t *master /**< EtherCAT-Master */) @@ -234,7 +237,9 @@ /*****************************************************************************/ /** - Gibt von Zeit zu Zeit die Anzahl verlorener Frames aus. + Gibt die Anzahl verlorener Frames aus. + + Die Ausgabe erfolgt gesammelt höchstens einmal pro Sekunde. */ void ec_output_lost_frames(ec_master_t *master /**< EtherCAT-Master */) @@ -426,7 +431,7 @@ Konfiguriert alle Slaves und setzt den Operational-Zustand. Führt die komplette Konfiguration und Aktivierunge aller registrierten - Slaves durch. Setzt Sync-Manager und FMMU's, führt die entsprechenden + Slaves durch. Setzt Sync-Manager und FMMUs, führt die entsprechenden Zustandsübergänge durch, bis der Slave betriebsbereit ist. \return 0 bei Erfolg, sonst < 0 @@ -480,7 +485,7 @@ // Check and reset CRC fault counters ec_slave_check_crc(slave); - // Resetting FMMU's + // Resetting FMMUs if (slave->base_fmmu_count) { memset(data, 0x00, EC_FMMU_SIZE * slave->base_fmmu_count); ec_frame_init_npwr(&frame, master, slave->station_address, 0x0600, diff -r 044e97bce4bd -r 0120d6214948 master/module.c --- a/master/module.c Tue Feb 28 09:25:51 2006 +0000 +++ b/master/module.c Tue Feb 28 11:10:57 2006 +0000 @@ -63,8 +63,8 @@ Initialisiert soviele Master, wie im Parameter ec_master_count angegeben wurde (Default ist 1). - @returns 0, wenn alles o.k., -1 bei ungueltiger Anzahl Master - oder zu wenig Speicher. + \return 0 wenn alles ok, < 0 bei ungültiger Anzahl Master + oder zu wenig Speicher. */ int __init ec_init_module(void) @@ -140,23 +140,22 @@ /** Registeriert das EtherCAT-Geraet fuer einen EtherCAT-Master. - @param master_index Index des EtherCAT-Masters - @param dev Das net_device des EtherCAT-Geraetes - @param isr Funktionszeiger auf die Interrupt-Service-Routine - @param module Zeiger auf das Modul (fuer try_module_lock()) - - @return 0, wenn alles o.k., - < 0, wenn bereits ein Geraet registriert oder das Geraet nicht - geoeffnet werden konnte. + \return 0 wenn alles ok, oder < 0 wenn bereits ein Gerät registriert + oder das Geraet nicht geöffnet werden konnte. */ ec_device_t *EtherCAT_dev_register(unsigned int master_index, - struct net_device *dev, + /**< Index des EtherCAT-Masters */ + struct net_device *net_dev, + /**< net_device des EtherCAT-Gerätes */ irqreturn_t (*isr)(int, void *, struct pt_regs *), - struct module *module) -{ - ec_device_t *ecd; + /**< Interrupt-Service-Routine */ + struct module *module + /**< Zeiger auf das Modul */ + ) +{ + ec_device_t *device; ec_master_t *master; if (master_index >= ec_master_count) { @@ -164,7 +163,7 @@ return NULL; } - if (!dev) { + if (!net_dev) { EC_WARN("Device is NULL!\n"); return NULL; } @@ -176,30 +175,31 @@ return NULL; } - ecd = &master->device; - - if (ec_device_init(ecd, master) < 0) return NULL; - - ecd->dev = dev; - ecd->tx_skb->dev = dev; - ecd->isr = isr; - ecd->module = module; + device = &master->device; + + if (ec_device_init(device, master) < 0) return NULL; + + device->dev = net_dev; + device->tx_skb->dev = net_dev; + device->isr = isr; + device->module = module; master->device_registered = 1; - return ecd; -} - -/*****************************************************************************/ - -/** - Entfernt das EtherCAT-Geraet eines EtherCAT-Masters. - - @param master_index Der Index des EtherCAT-Masters - @param ecd Das EtherCAT-Geraet -*/ - -void EtherCAT_dev_unregister(unsigned int master_index, ec_device_t *ecd) + return device; +} + +/*****************************************************************************/ + +/** + Hebt die Registrierung eines EtherCAT-Gerätes auf. +*/ + +void EtherCAT_dev_unregister(unsigned int master_index, + /**< Index des EtherCAT-Masters */ + ec_device_t *device + /**< EtherCAT-Geraet */ + ) { ec_master_t *master; @@ -210,13 +210,13 @@ master = ec_masters + master_index; - if (!master->device_registered || &master->device != ecd) { + if (!master->device_registered || &master->device != device) { EC_WARN("Unable to unregister device!\n"); return; } master->device_registered = 0; - ec_device_clear(ecd); + ec_device_clear(device); } /****************************************************************************** @@ -230,11 +230,12 @@ Gibt einen Zeiger auf den reservierten EtherCAT-Master zurueck. - @param index Index des gewuenschten Masters - @returns Zeiger auf EtherCAT-Master oder NULL, wenn Parameter ungueltig. -*/ - -ec_master_t *EtherCAT_rt_request_master(unsigned int index) + \return Zeiger auf EtherCAT-Master oder NULL, wenn Parameter ungueltig. +*/ + +ec_master_t *EtherCAT_rt_request_master(unsigned int index + /**< EtherCAT-Master-Index */ + ) { ec_master_t *master; @@ -293,11 +294,9 @@ /** Gibt einen zuvor angeforderten EtherCAT-Master wieder frei. - - @param master Zeiger auf den freizugebenden EtherCAT-Master. -*/ - -void EtherCAT_rt_release_master(ec_master_t *master) +*/ + +void EtherCAT_rt_release_master(ec_master_t *master /**< EtherCAT-Masdter */) { unsigned int i, found; diff -r 044e97bce4bd -r 0120d6214948 master/slave.c --- a/master/slave.c Tue Feb 28 09:25:51 2006 +0000 +++ b/master/slave.c Tue Feb 28 11:10:57 2006 +0000 @@ -58,6 +58,8 @@ /** Liest alle benötigten Informationen aus einem Slave. + + \return 0 wenn alles ok, < 0 bei Fehler. */ int ec_slave_fetch(ec_slave_t *slave /**< EtherCAT-Slave */) @@ -186,7 +188,7 @@ /** Bestätigt einen Fehler beim Zustandswechsel. - FIXME Funktioniert noch nicht... + \todo Funktioniert noch nicht... */ void ec_slave_state_ack(ec_slave_t *slave, @@ -342,6 +344,8 @@ if (slave->fmmus[i].domain == domain && slave->fmmus[i].sync == sync) return 0; + // Neue FMMU reservieren... + if (slave->fmmu_count >= slave->base_fmmu_count) { EC_ERR("Slave %i FMMU limit reached!\n", slave->ring_position); return -1; diff -r 044e97bce4bd -r 0120d6214948 master/types.h --- a/master/types.h Tue Feb 28 09:25:51 2006 +0000 +++ b/master/types.h Tue Feb 28 11:10:57 2006 +0000 @@ -55,7 +55,7 @@ Diese Beschreibung dient zur Konfiguration einer bestimmten Slave-Art. Sie enthält die Konfigurationsdaten für die - Slave-internen Sync-Manager und FMMU's. + Slave-internen Sync-Manager und FMMUs. */ typedef struct ec_slave_type diff -r 044e97bce4bd -r 0120d6214948 rt/msr_module.c --- a/rt/msr_module.c Tue Feb 28 09:25:51 2006 +0000 +++ b/rt/msr_module.c Tue Feb 28 11:10:57 2006 +0000 @@ -132,7 +132,7 @@ goto out_msr_cleanup; } - EtherCAT_rt_master_print(master); + //EtherCAT_rt_master_print(master); printk(KERN_INFO "Registering domain...\n");