mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-02-06 03:41:52 +08:00
166 lines
5.4 KiB
C++
166 lines
5.4 KiB
C++
/*****************************************************************************
|
|
*
|
|
* $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 <stdexcept>
|
|
#include <sstream>
|
|
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 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
|