Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/******************************************************************************
*
* $Id$
*
* Copyright (C) 2006 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
* as published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* 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 right to use EtherCAT Technology is granted and comes free of
* charge under condition of compatibility of product made by
* Licensee. People intending to distribute/sell products based on the
* code, have to sign an agreement to guarantee that products using
* software based on IgH EtherCAT master stay compatible with the actual
* EtherCAT specification (which are released themselves as an open
* standard) as the (only) precondition to have the right to use EtherCAT
* Technology, IP and trade marks.
*
*****************************************************************************/
/**
\file
EtherCAT master character device IOCTL commands.
*/
/*****************************************************************************/
#ifndef __EC_IOCTL_H__
#define __EC_IOCTL_H__
/*****************************************************************************/
enum {
EC_IOCTL_MASTER,
EC_IOCTL_SLAVE,
EC_IOCTL_SYNC,
EC_IOCTL_PDO,
EC_IOCTL_PDO_ENTRY,
EC_IOCTL_DOMAIN_FMMU,
EC_IOCTL_SET_DEBUG,
EC_IOCTL_SLAVE_STATE,
EC_IOCTL_SDO,
EC_IOCTL_SDO_ENTRY,
};
/*****************************************************************************/
typedef struct {
unsigned int slave_count;
uint8_t mode;
struct {
uint8_t address[6];
uint8_t attached;
unsigned int tx_count;
unsigned int rx_count;
} devices[2];
} ec_ioctl_master_t;
/*****************************************************************************/
#define EC_IOCTL_SLAVE_NAME_SIZE 104
typedef struct {
// input
uint16_t position;
// outputs
uint32_t vendor_id;
uint32_t product_code;
uint32_t revision_number;
uint32_t serial_number;
uint16_t alias;
uint8_t state;
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
char name[EC_IOCTL_SLAVE_NAME_SIZE];
} ec_ioctl_slave_t;
/*****************************************************************************/
typedef struct {
// inputs
uint16_t slave_position;
unsigned int sync_index;
// outputs
uint16_t physical_start_address;
uint16_t default_size;
uint8_t control_register;
uint8_t enable;
uint8_t assign_source;
uint8_t pdo_count;
} ec_ioctl_sync_t;
/*****************************************************************************/
#define EC_IOCTL_PDO_NAME_SIZE 114
typedef struct {
// inputs
uint16_t slave_position;
unsigned int sync_index;
unsigned int pdo_pos;
// outputs
uint8_t dir;
uint16_t index;
uint8_t entry_count;
char name[EC_IOCTL_PDO_NAME_SIZE];
} ec_ioctl_pdo_t;
/*****************************************************************************/
#define EC_IOCTL_PDO_ENTRY_NAME_SIZE 110
typedef struct {
// inputs
uint16_t slave_position;
unsigned int sync_index;
unsigned int pdo_pos;
unsigned int entry_pos;
// outputs
uint16_t index;
uint8_t subindex;
uint8_t bit_length;
char name[EC_IOCTL_PDO_NAME_SIZE];
} ec_ioctl_pdo_entry_t;
/*****************************************************************************/
typedef struct {
// inputs
unsigned int index;
// outputs
unsigned int data_size;
uint32_t logical_base_address;
uint16_t working_counter;
uint16_t expected_working_counter;
unsigned int fmmu_count;
} ec_ioctl_domain_t;
/*****************************************************************************/
typedef struct {
// inputs
unsigned int domain_index;
unsigned int fmmu_index;
// outputs
uint16_t slave_config_alias;
uint16_t slave_config_position;
uint8_t fmmu_dir;
uint32_t logical_address;
unsigned int data_size;
} ec_ioctl_domain_fmmu_t;
/*****************************************************************************/
typedef struct {
// inputs
unsigned int domain_index;
unsigned int data_size;
unsigned char *target;
} ec_ioctl_data_t;
/*****************************************************************************/
typedef struct {
// inputs
uint16_t slave_position;
uint8_t requested_state;
} ec_ioctl_slave_state_t;
/*****************************************************************************/
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#define EC_IOCTL_SDO_NAME_SIZE 121
typedef struct {
// inputs
uint16_t slave_position;
uint16_t sdo_position;
// outputs
uint16_t sdo_index;
uint8_t max_subindex;
char name[EC_IOCTL_SDO_NAME_SIZE];
} ec_ioctl_sdo_t;
/*****************************************************************************/
#define EC_IOCTL_SDO_ENTRY_DESCRIPTION_SIZE 120
typedef struct {
// inputs
uint16_t slave_position;
uint16_t sdo_position;
uint8_t sdo_entry_subindex;
// outputs
uint16_t data_type;
uint16_t bit_length;
char description[EC_IOCTL_SDO_ENTRY_DESCRIPTION_SIZE];
} ec_ioctl_sdo_entry_t;
/*****************************************************************************/