--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/ec_command.h Fri Oct 21 11:21:42 2005 +0000
@@ -0,0 +1,93 @@
+/****************************************************************
+ *
+ * e c _ c o m m a n d . h
+ *
+ * Struktur für ein EtherCAT-Kommando.
+ *
+ * $Date$
+ * $Author$
+ *
+ ***************************************************************/
+
+#ifndef _EC_COMMAND_H_
+#define _EC_COMMAND_H_
+
+#include "ec_globals.h"
+
+/**
+ Status eines EtherCAT-Kommandos.
+*/
+
+typedef enum
+{
+ ECAT_CS_READY, ECAT_CS_SENT, ECAT_CS_RECEIVED
+}
+EtherCAT_command_state_t;
+
+/**
+ EtherCAT-Adresse.
+
+ Im EtherCAT-Rahmen sind 4 Bytes für die Adresse reserviert, die
+ ja nach Kommandoty eine andere bedeutung haben: Bei Autoinkrement-
+ befehlen sind die ersten zwei Bytes die (negative)
+ Autoinkrement-Adresse, bei Knoten-adressierten Befehlen entsprechen
+ sie der Knotenadresse. Das dritte und vierte Byte entspricht in
+ diesen Fällen der physikalischen Speicheradresse auf dem Slave.
+ Bei einer logischen Adressierung entsprechen alle vier Bytes
+ der logischen Adresse.
+*/
+
+typedef union
+{
+ struct
+ {
+ union
+ {
+ short pos; /**< (Negative) Ring-Position des Slaves */
+ unsigned short node; /**< Konfigurierte Knotenadresse */
+ }
+ dev;
+
+ unsigned short mem; /**< Physikalische Speicheradresse im Slave */
+ }
+ phy;
+
+ unsigned long logical; /**< Logische Adresse */
+ unsigned char raw[4]; /**< Rohdaten für die generierung des Frames */
+}
+EtherCAT_address_t;
+
+/***************************************************************/
+
+/**
+ EtherCAT-Kommando.
+*/
+
+typedef struct EtherCAT_command
+{
+ EtherCAT_cmd_type_t type; /**< Typ des Kommandos (APRD, NPWR, etc...) */
+ EtherCAT_address_t address; /**< Adresse des/der Empfänger */
+ unsigned int data_length; /**< Länge der zu sendenden und/oder empfangenen Daten */
+
+ struct EtherCAT_command *next; /**< (Für den Master) Zeiger auf nächstes Kommando
+ in der Liste */
+
+ EtherCAT_command_state_t state; /**< Zustand des Kommandos (bereit, gesendet, etc...) */
+ unsigned char index; /**< Kommando-Index, mit der das Kommando gesendet wurde (wird
+ vom Master beim Senden gesetzt. */
+ unsigned int working_counter; /**< Working-Counter bei Empfang (wird vom Master gesetzt) */
+
+ unsigned char data[ECAT_FRAME_BUFFER_SIZE]; /**< Kommandodaten */
+
+ unsigned char reserved; /**< Markiert, das das Kommando gerade benutzt wird */
+}
+EtherCAT_command_t;
+
+/***************************************************************/
+
+void EtherCAT_command_init(EtherCAT_command_t *);
+void EtherCAT_command_clear(EtherCAT_command_t *);
+
+/***************************************************************/
+
+#endif