/***************************************************************************** * * $Id$ * * Copyright (C) 2006-2009 Florian Pose, Ingenieurgemeinschaft IgH * * This file is part of the IgH EtherCAT Master. * * The IgH EtherCAT Master is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version 2, as * published by the Free Software Foundation. * * The IgH EtherCAT Master is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along * with the IgH EtherCAT Master; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * --- * * The license mentioned above concerns the source code only. Using the * EtherCAT technology and brand is only permitted in compliance with the * industrial property and similar rights of Beckhoff Automation GmbH. * ****************************************************************************/ #ifndef __MASTER_DEVICE_H__ #define __MASTER_DEVICE_H__ #include #include using namespace std; #include "ecrt.h" #include "ioctl.h" /****************************************************************************/ class MasterDeviceException: public runtime_error { friend class MasterDevice; protected: /** Constructor with string parameter. */ MasterDeviceException( const string &s /**< Message. */ ): runtime_error(s) {} /** Constructor with stringstream parameter. */ MasterDeviceException( const stringstream &s /**< Message. */ ): runtime_error(s.str()) {} }; /****************************************************************************/ class MasterDeviceSdoAbortException: public MasterDeviceException { friend class MasterDevice; public: uint32_t abortCode; protected: /** Constructor with abort code parameter. */ MasterDeviceSdoAbortException(uint32_t code): MasterDeviceException("SDO transfer aborted.") { abortCode = code; }; }; /****************************************************************************/ class MasterDeviceSoeException: public MasterDeviceException { friend class MasterDevice; public: uint16_t errorCode; protected: /** Constructor with error code parameter. */ MasterDeviceSoeException(uint16_t code): MasterDeviceException("SoE transfer aborted.") { errorCode = code; }; }; /****************************************************************************/ class MasterDevice { public: MasterDevice(unsigned int = 0U); ~MasterDevice(); void setIndex(unsigned int); unsigned int getIndex() const; enum Permissions {Read, ReadWrite}; void open(Permissions); void close(); void getModule(ec_ioctl_module_t *); void getMaster(ec_ioctl_master_t *); void getConfig(ec_ioctl_config_t *, unsigned int); void getConfigPdo(ec_ioctl_config_pdo_t *, unsigned int, uint8_t, uint16_t); void getConfigPdoEntry(ec_ioctl_config_pdo_entry_t *, unsigned int, uint8_t, uint16_t, uint8_t); void getConfigSdo(ec_ioctl_config_sdo_t *, unsigned int, unsigned int); void getConfigIdn(ec_ioctl_config_idn_t *, unsigned int, unsigned int); void getConfigFlag(ec_ioctl_config_flag_t *, unsigned int, unsigned int); void getDomain(ec_ioctl_domain_t *, unsigned int); void getFmmu(ec_ioctl_domain_fmmu_t *, unsigned int, unsigned int); void getData(ec_ioctl_domain_data_t *, unsigned int, unsigned int, unsigned char *); void getSlave(ec_ioctl_slave_t *, uint16_t); void getSync(ec_ioctl_slave_sync_t *, uint16_t, uint8_t); void getPdo(ec_ioctl_slave_sync_pdo_t *, uint16_t, uint8_t, uint8_t); void getPdoEntry(ec_ioctl_slave_sync_pdo_entry_t *, uint16_t, uint8_t, uint8_t, uint8_t); void getSdo(ec_ioctl_slave_sdo_t *, uint16_t, uint16_t); void getSdoEntry(ec_ioctl_slave_sdo_entry_t *, uint16_t, int, uint8_t); void readSii(ec_ioctl_slave_sii_t *); void writeSii(ec_ioctl_slave_sii_t *); void readReg(ec_ioctl_slave_reg_t *); void writeReg(ec_ioctl_slave_reg_t *); void setDebug(unsigned int); void rescan(); void sdoDownload(ec_ioctl_slave_sdo_download_t *); void sdoUpload(ec_ioctl_slave_sdo_upload_t *); void requestState(uint16_t, uint8_t); void readFoe(ec_ioctl_slave_foe_t *); void writeFoe(ec_ioctl_slave_foe_t *); #ifdef EC_EOE void getEoeHandler(ec_ioctl_eoe_handler_t *, uint16_t); #endif void readSoe(ec_ioctl_slave_soe_read_t *); void writeSoe(ec_ioctl_slave_soe_write_t *); unsigned int getMasterCount() const {return masterCount;} private: unsigned int index; unsigned int masterCount; int fd; }; /****************************************************************************/ inline unsigned int MasterDevice::getIndex() const { return index; } /****************************************************************************/ #endif