00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00034
00035
00036 #ifndef __EC_MASTER_GLOBALS_H__
00037 #define __EC_MASTER_GLOBALS_H__
00038
00039 #include "../globals.h"
00040 #include "../include/ecrt.h"
00041
00042
00043
00044
00045
00047 #define EC_IO_TIMEOUT 500
00048
00050 #define EC_SDO_INJECTION_TIMEOUT 10000
00051
00056 #define EC_BYTE_TRANSMISSION_TIME_NS 80
00057
00059 #define EC_FSM_RETRIES 3
00060
00063 #define EC_WAIT_SDO_DICT 3
00064
00066 #define EC_STATE_STRING_SIZE 32
00067
00069 #define EC_MAX_SII_SIZE 4096
00070
00072 #define EC_RATE_COUNT 3
00073
00074
00075
00076
00077
00079 #define EC_FRAME_HEADER_SIZE 2
00080
00082 #define EC_DATAGRAM_HEADER_SIZE 10
00083
00085 #define EC_DATAGRAM_FOOTER_SIZE 2
00086
00088 #define EC_ADDR_LEN 4
00089
00091 #define EC_MAX_DATA_SIZE (ETH_DATA_LEN - EC_FRAME_HEADER_SIZE \
00092 - EC_DATAGRAM_HEADER_SIZE - EC_DATAGRAM_FOOTER_SIZE)
00093
00095 #define EC_MBOX_HEADER_SIZE 6
00096
00098 #define EC_FIRST_SII_CATEGORY_OFFSET 0x40
00099
00101 #define EC_SYNC_PAGE_SIZE 8
00102
00104 #define EC_MAX_FMMUS 16
00105
00107 #define EC_FMMU_PAGE_SIZE 16
00108
00110 #define EC_SYNC_SIGNAL_COUNT 2
00111
00116 #define EC_DATAGRAM_NAME_SIZE 20
00117
00123 #define EC_SLAVE_STATE_MASK 0x0F
00124
00127 typedef enum {
00128 EC_SLAVE_STATE_UNKNOWN = 0x00,
00130 EC_SLAVE_STATE_INIT = 0x01,
00132 EC_SLAVE_STATE_PREOP = 0x02,
00134 EC_SLAVE_STATE_BOOT = 0x03,
00136 EC_SLAVE_STATE_SAFEOP = 0x04,
00138 EC_SLAVE_STATE_OP = 0x08,
00140 EC_SLAVE_STATE_ACK_ERR = 0x10
00142 } ec_slave_state_t;
00143
00146 enum {
00147 EC_MBOX_AOE = 0x01,
00148 EC_MBOX_EOE = 0x02,
00149 EC_MBOX_COE = 0x04,
00150 EC_MBOX_FOE = 0x08,
00151 EC_MBOX_SOE = 0x10,
00152 EC_MBOX_VOE = 0x20
00153 };
00154
00157 typedef struct {
00158 uint8_t enable_sdo : 1;
00159 uint8_t enable_sdo_info : 1;
00160 uint8_t enable_pdo_assign : 1;
00161 uint8_t enable_pdo_configuration : 1;
00162 uint8_t enable_upload_at_startup : 1;
00163 uint8_t enable_sdo_complete_access : 1;
00164 } ec_sii_coe_details_t;
00165
00168 typedef struct {
00169 uint8_t enable_safeop : 1;
00170 uint8_t enable_not_lrw : 1;
00171 } ec_sii_general_flags_t;
00172
00175 typedef enum {
00176 EC_DC_32,
00177 EC_DC_64
00178
00179 } ec_slave_dc_range_t;
00180
00183 typedef struct {
00184 uint32_t cycle_time;
00185 int32_t shift_time;
00186 } ec_sync_signal_t;
00187
00192 enum {
00193 EC_SDO_ENTRY_ACCESS_PREOP,
00194 EC_SDO_ENTRY_ACCESS_SAFEOP,
00195 EC_SDO_ENTRY_ACCESS_OP,
00196 EC_SDO_ENTRY_ACCESS_COUNT
00197 };
00198
00201 typedef enum {
00202 EC_DEVICE_MAIN,
00203 EC_DEVICE_BACKUP
00204 } ec_device_index_t;
00205
00206 extern const char *ec_device_names[2];
00207
00208
00209
00217 #define EC_INFO(fmt, args...) \
00218 printk(KERN_INFO "EtherCAT: " fmt, ##args)
00219
00227 #define EC_ERR(fmt, args...) \
00228 printk(KERN_ERR "EtherCAT ERROR: " fmt, ##args)
00229
00237 #define EC_WARN(fmt, args...) \
00238 printk(KERN_WARNING "EtherCAT WARNING: " fmt, ##args)
00239
00247 #define EC_DBG(fmt, args...) \
00248 printk(KERN_DEBUG "EtherCAT DEBUG: " fmt, ##args)
00249
00250
00251
00254 #define EC_ABS(X) ((X) >= 0 ? (X) : -(X))
00255
00256
00257
00258 extern char *ec_master_version_str;
00259
00260
00261
00262 unsigned int ec_master_count(void);
00263 void ec_print_data(const uint8_t *, size_t);
00264 void ec_print_data_diff(const uint8_t *, const uint8_t *, size_t);
00265 size_t ec_state_string(uint8_t, char *, uint8_t);
00266 ssize_t ec_mac_print(const uint8_t *, char *);
00267 int ec_mac_is_zero(const uint8_t *);
00268
00269 ec_master_t *ecrt_request_master_err(unsigned int);
00270
00271
00272
00278 typedef struct {
00279 uint32_t code;
00280 const char *message;
00281 } ec_code_msg_t;
00282
00283
00284
00290 typedef enum {
00291 EC_INT_REQUEST_INIT,
00292 EC_INT_REQUEST_QUEUED,
00293 EC_INT_REQUEST_BUSY,
00294 EC_INT_REQUEST_SUCCESS,
00295 EC_INT_REQUEST_FAILURE
00296 } ec_internal_request_state_t;
00297
00298
00299
00300 extern const ec_request_state_t ec_request_state_translation_table[];
00301
00302
00303
00306 typedef enum {
00307 EC_ORIG_INTERNAL,
00308 EC_ORIG_EXTERNAL
00309 } ec_origin_t;
00310
00311
00312
00313 typedef struct ec_slave ec_slave_t;
00315
00316
00317 #endif