Code-Dokumentation angepasst.
--- 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,
--- 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);
--- 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
*/
--- 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
*/
--- 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,
--- 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;
--- 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;
--- 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
--- 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");