drivers/ec_command.h
changeset 0 05c992bf5847
child 2 b0a7a4745bf9
equal deleted inserted replaced
-1:000000000000 0:05c992bf5847
       
     1 /****************************************************************
       
     2  *
       
     3  *  e c _ c o m m a n d . h
       
     4  *
       
     5  *  Struktur für ein EtherCAT-Kommando.
       
     6  *
       
     7  *  $Date$
       
     8  *  $Author$
       
     9  *
       
    10  ***************************************************************/
       
    11 
       
    12 #ifndef _EC_COMMAND_H_
       
    13 #define _EC_COMMAND_H_
       
    14 
       
    15 #include "ec_globals.h"
       
    16 
       
    17 /**
       
    18    Status eines EtherCAT-Kommandos.
       
    19 */
       
    20 
       
    21 typedef enum
       
    22 {
       
    23   ECAT_CS_READY, ECAT_CS_SENT, ECAT_CS_RECEIVED
       
    24 }
       
    25 EtherCAT_command_state_t;
       
    26 
       
    27 /**
       
    28    EtherCAT-Adresse.
       
    29 
       
    30    Im EtherCAT-Rahmen sind 4 Bytes für die Adresse reserviert, die
       
    31    ja nach Kommandoty eine andere bedeutung haben: Bei Autoinkrement-
       
    32    befehlen sind die ersten zwei Bytes die (negative)
       
    33    Autoinkrement-Adresse, bei Knoten-adressierten Befehlen entsprechen
       
    34    sie der Knotenadresse. Das dritte und vierte Byte entspricht in
       
    35    diesen Fällen der physikalischen Speicheradresse auf dem Slave.
       
    36    Bei einer logischen Adressierung entsprechen alle vier Bytes
       
    37    der logischen Adresse.
       
    38 */
       
    39 
       
    40 typedef union
       
    41 {
       
    42   struct
       
    43   {
       
    44     union
       
    45     {
       
    46       short pos; /**< (Negative) Ring-Position des Slaves */
       
    47       unsigned short node; /**< Konfigurierte Knotenadresse */
       
    48     }
       
    49     dev;
       
    50 
       
    51     unsigned short mem; /**< Physikalische Speicheradresse im Slave */
       
    52   }
       
    53   phy;
       
    54 
       
    55   unsigned long logical; /**< Logische Adresse */
       
    56   unsigned char raw[4]; /**< Rohdaten für die generierung des Frames */
       
    57 }
       
    58 EtherCAT_address_t;
       
    59 
       
    60 /***************************************************************/
       
    61 
       
    62 /**
       
    63    EtherCAT-Kommando.
       
    64 */
       
    65 
       
    66 typedef struct EtherCAT_command
       
    67 {
       
    68   EtherCAT_cmd_type_t type; /**< Typ des Kommandos (APRD, NPWR, etc...) */
       
    69   EtherCAT_address_t address; /**< Adresse des/der Empfänger */
       
    70   unsigned int data_length; /**< Länge der zu sendenden und/oder empfangenen Daten */
       
    71 
       
    72   struct EtherCAT_command *next; /**< (Für den Master) Zeiger auf nächstes Kommando
       
    73                                     in der Liste */
       
    74 
       
    75   EtherCAT_command_state_t state; /**< Zustand des Kommandos (bereit, gesendet, etc...) */
       
    76   unsigned char index; /**< Kommando-Index, mit der das Kommando gesendet wurde (wird
       
    77                           vom Master beim Senden gesetzt. */
       
    78   unsigned int working_counter; /**< Working-Counter bei Empfang (wird vom Master gesetzt) */
       
    79 
       
    80   unsigned char data[ECAT_FRAME_BUFFER_SIZE]; /**< Kommandodaten */
       
    81 
       
    82   unsigned char reserved; /**< Markiert, das das Kommando gerade benutzt wird */
       
    83 }
       
    84 EtherCAT_command_t;
       
    85 
       
    86 /***************************************************************/
       
    87 
       
    88 void EtherCAT_command_init(EtherCAT_command_t *);
       
    89 void EtherCAT_command_clear(EtherCAT_command_t *);
       
    90 
       
    91 /***************************************************************/
       
    92 
       
    93 #endif