master/master.h
author Florian Pose <fp@igh-essen.com>
Tue, 14 Feb 2006 14:50:20 +0000
changeset 68 a452700db994
parent 64 ea6ccf12c612
child 73 9f4ea66d89a3
permissions -rw-r--r--
Neue ASCII-Adressierung und Code-Dokumantation.
/******************************************************************************
 *
 *  m a s t e r . h
 *
 *  Struktur für einen EtherCAT-Master.
 *
 *  $Id$
 *
 *****************************************************************************/

#ifndef _EC_MASTER_H_
#define _EC_MASTER_H_

#include "device.h"
#include "slave.h"
#include "command.h"
#include "domain.h"

/*****************************************************************************/

/**
   EtherCAT-Master

   Verwaltet die EtherCAT-Slaves und kommuniziert mit
   dem zugewiesenen EtherCAT-Gerät.
*/

struct ec_master
{
  ec_slave_t *bus_slaves; /**< Array von Slaves auf dem Bus */
  unsigned int bus_slaves_count; /**< Anzahl Slaves auf dem Bus */
  ec_device_t device; /**< EtherCAT-Gerät */
  unsigned int device_registered; /**< Ein Geraet hat sich registriert. */
  unsigned char command_index; /**< Aktueller Kommando-Index */
  unsigned char tx_data[EC_FRAME_SIZE]; /**< Statischer Speicher
                                           für zu sendende Daten */
  unsigned int tx_data_length; /**< Länge der Daten im Sendespeicher */
  unsigned char rx_data[EC_FRAME_SIZE]; /**< Statische Speicher für
                                           eine Kopie des Rx-Buffers
                                           im EtherCAT-Gerät */
  unsigned int rx_data_length; /**< Länge der Daten im Empfangsspeicher */
  ec_domain_t domains[EC_MAX_DOMAINS]; /** Prozessdatendomänen */
  unsigned int domain_count;
  int debug_level; /**< Debug-Level im Master-Code */
  unsigned int bus_time; /**< Letzte Bus-Zeit in Mikrosekunden */
  unsigned int frames_lost; /**< Anzahl verlorene Frames */
  unsigned long t_lost_output; /*<< Timer-Ticks bei der letzten Ausgabe von
                                 verlorenen Frames */
};

/*****************************************************************************/

// Master creation and deletion
void ec_master_init(ec_master_t *);
void ec_master_clear(ec_master_t *);
void ec_master_reset(ec_master_t *);

// Registration of devices
int ec_master_open(ec_master_t *);
void ec_master_close(ec_master_t *);

// Slave management
int ec_scan_for_slaves(ec_master_t *);
ec_slave_t *ec_address(const ec_master_t *, const char *);

// Data
int ec_simple_send_receive(ec_master_t *, ec_command_t *);

/*****************************************************************************/

#endif

/* Emacs-Konfiguration
;;; Local Variables: ***
;;; c-basic-offset:2 ***
;;; End: ***
*/