IgH EtherCAT Master  1.6.0-rc1
fsm_coe.c File Reference

EtherCAT CoE state machines. More...

Go to the source code of this file.

Macros

#define EC_FSM_COE_DICT_TIMEOUT   1000
 Maximum time in ms to wait for responses when reading out the dictionary.
 
#define EC_COE_DOWN_REQ_HEADER_SIZE   10
 CoE download request header size.
 
#define EC_COE_DOWN_SEG_REQ_HEADER_SIZE   3
 CoE download segment request header size.
 
#define EC_COE_DOWN_SEG_MIN_DATA_SIZE   7
 Minimum size of download segment.
 
#define DEBUG_RETRIES   0
 Enable debug output for CoE retries.
 
#define DEBUG_LONG   0
 Enable warning output if transfers take too long.
 

Functions

void ec_fsm_coe_dict_start (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT START. More...
 
void ec_fsm_coe_dict_request (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT REQUEST. More...
 
void ec_fsm_coe_dict_check (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT CHECK. More...
 
void ec_fsm_coe_dict_response (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT RESPONSE. More...
 
void ec_fsm_coe_dict_response_data (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT RESPONSE DATA. More...
 
void ec_fsm_coe_dict_desc_request (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT DESC REQUEST. More...
 
void ec_fsm_coe_dict_desc_check (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT DESC CHECK. More...
 
void ec_fsm_coe_dict_desc_response (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT DESC RESPONSE. More...
 
void ec_fsm_coe_dict_desc_response_data (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT DESC RESPONSE DATA. More...
 
void ec_fsm_coe_dict_entry_request (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT ENTRY REQUEST. More...
 
void ec_fsm_coe_dict_entry_check (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT ENTRY CHECK. More...
 
void ec_fsm_coe_dict_entry_response (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT ENTRY RESPONSE. More...
 
void ec_fsm_coe_dict_entry_response_data (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DICT ENTRY RESPONSE DATA. More...
 
void ec_fsm_coe_down_start (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DOWN START. More...
 
void ec_fsm_coe_down_request (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DOWN REQUEST. More...
 
void ec_fsm_coe_down_check (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DOWN CHECK. More...
 
void ec_fsm_coe_down_response (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DOWN RESPONSE. More...
 
void ec_fsm_coe_down_response_data (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DOWN RESPONSE DATA. More...
 
void ec_fsm_coe_down_seg_check (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DOWN SEG CHECK. More...
 
void ec_fsm_coe_down_seg_response (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DOWN SEG RESPONSE. More...
 
void ec_fsm_coe_down_seg_response_data (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: DOWN SEG RESPONSE DATA. More...
 
void ec_fsm_coe_up_start (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP START. More...
 
void ec_fsm_coe_up_request (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP REQUEST. More...
 
void ec_fsm_coe_up_check (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP CHECK. More...
 
void ec_fsm_coe_up_response (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP RESPONSE. More...
 
void ec_fsm_coe_up_response_data (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP RESPONSE DATA. More...
 
void ec_fsm_coe_up_seg_request (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP REQUEST. More...
 
void ec_fsm_coe_up_seg_check (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP CHECK. More...
 
void ec_fsm_coe_up_seg_response (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP RESPONSE. More...
 
void ec_fsm_coe_up_seg_response_data (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 CoE state: UP RESPONSE DATA. More...
 
void ec_fsm_coe_end (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 State: END. More...
 
void ec_fsm_coe_error (ec_fsm_coe_t *fsm, ec_datagram_t *datagram )
 State: ERROR. More...
 
void ec_canopen_abort_msg (const ec_slave_t *slave, uint32_t abort_code)
 Outputs an SDO abort message. More...
 
void ec_fsm_coe_init (ec_fsm_coe_t *fsm)
 Constructor. More...
 
void ec_fsm_coe_clear (ec_fsm_coe_t *fsm)
 Destructor. More...
 
void ec_fsm_coe_dictionary (ec_fsm_coe_t *fsm, ec_slave_t *slave)
 Starts reading a slaves' SDO dictionary. More...
 
void ec_fsm_coe_transfer (ec_fsm_coe_t *fsm, ec_slave_t *slave, ec_sdo_request_t *request)
 Starts to transfer an SDO to/from a slave. More...
 
int ec_fsm_coe_exec (ec_fsm_coe_t *fsm, ec_datagram_t *datagram)
 Executes the current state of the state machine. More...
 
int ec_fsm_coe_success (const ec_fsm_coe_t *fsm)
 Returns, if the state machine terminated with success. More...
 
int ec_fsm_coe_check_emergency (ec_fsm_coe_t *fsm, const uint8_t *data, size_t size)
 Check if the received data are a CoE emergency request. More...
 
int ec_fsm_coe_prepare_dict (ec_fsm_coe_t *fsm, ec_datagram_t *datagram)
 Prepare a dictionary request. More...
 
int ec_fsm_coe_dict_prepare_desc (ec_fsm_coe_t *fsm, ec_datagram_t *datagram)
 Prepare an object description request. More...
 
int ec_fsm_coe_dict_prepare_entry (ec_fsm_coe_t *fsm, ec_datagram_t *datagram)
 Prepare an entry description request. More...
 
int ec_fsm_coe_prepare_down_start (ec_fsm_coe_t *fsm, ec_datagram_t *datagram)
 Prepare a donwnload request. More...
 
void ec_fsm_coe_down_prepare_segment_request (ec_fsm_coe_t *fsm, ec_datagram_t *datagram)
 Prepare a download segment request. More...
 
int ec_fsm_coe_prepare_up (ec_fsm_coe_t *fsm, ec_datagram_t *datagram)
 Prepare an upload request. More...
 
void ec_fsm_coe_up_prepare_segment_request (ec_fsm_coe_t *fsm, ec_datagram_t *datagram)
 Prepare an SDO upload segment request. More...
 

Variables

const ec_code_msg_t sdo_abort_messages []
 SDO abort messages. More...
 

Detailed Description

EtherCAT CoE state machines.

Definition in file fsm_coe.c.

Function Documentation

void ec_fsm_coe_dict_start ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT START.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 347 of file fsm_coe.c.

void ec_fsm_coe_dict_request ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT REQUEST.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 379 of file fsm_coe.c.

void ec_fsm_coe_dict_check ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT CHECK.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 426 of file fsm_coe.c.

void ec_fsm_coe_dict_response ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT RESPONSE.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 523 of file fsm_coe.c.

void ec_fsm_coe_dict_response_data ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT RESPONSE DATA.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 567 of file fsm_coe.c.

void ec_fsm_coe_dict_desc_request ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT DESC REQUEST.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 717 of file fsm_coe.c.

void ec_fsm_coe_dict_desc_check ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT DESC CHECK.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 767 of file fsm_coe.c.

void ec_fsm_coe_dict_desc_response ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT DESC RESPONSE.

Todo:
Timeout behavior
Parameters
fsmFinite state machine
datagramDatagram to use.

Definition at line 867 of file fsm_coe.c.

void ec_fsm_coe_dict_desc_response_data ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT DESC RESPONSE DATA.

Parameters
fsmFinite state machine
datagramDatagram to use.

Definition at line 911 of file fsm_coe.c.

void ec_fsm_coe_dict_entry_request ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT ENTRY REQUEST.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1040 of file fsm_coe.c.

void ec_fsm_coe_dict_entry_check ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT ENTRY CHECK.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1089 of file fsm_coe.c.

void ec_fsm_coe_dict_entry_response ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT ENTRY RESPONSE.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1159 of file fsm_coe.c.

void ec_fsm_coe_dict_entry_response_data ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DICT ENTRY RESPONSE DATA.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1203 of file fsm_coe.c.

void ec_fsm_coe_down_start ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DOWN START.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1471 of file fsm_coe.c.

void ec_fsm_coe_down_request ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DOWN REQUEST.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1522 of file fsm_coe.c.

void ec_fsm_coe_down_check ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DOWN CHECK.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1597 of file fsm_coe.c.

void ec_fsm_coe_down_response ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DOWN RESPONSE.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1734 of file fsm_coe.c.

void ec_fsm_coe_down_response_data ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DOWN RESPONSE DATA.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1779 of file fsm_coe.c.

void ec_fsm_coe_down_seg_check ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DOWN SEG CHECK.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1894 of file fsm_coe.c.

void ec_fsm_coe_down_seg_response ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DOWN SEG RESPONSE.

Todo:
Timeout behavior
Parameters
fsmFinite state machine
datagramDatagram to use.

Definition at line 1964 of file fsm_coe.c.

void ec_fsm_coe_down_seg_response_data ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: DOWN SEG RESPONSE DATA.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2010 of file fsm_coe.c.

void ec_fsm_coe_up_start ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP START.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2171 of file fsm_coe.c.

void ec_fsm_coe_up_request ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP REQUEST.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2203 of file fsm_coe.c.

void ec_fsm_coe_up_check ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP CHECK.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2278 of file fsm_coe.c.

void ec_fsm_coe_up_response ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP RESPONSE.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2380 of file fsm_coe.c.

void ec_fsm_coe_up_response_data ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP RESPONSE DATA.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2427 of file fsm_coe.c.

void ec_fsm_coe_up_seg_request ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP REQUEST.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2616 of file fsm_coe.c.

void ec_fsm_coe_up_seg_check ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP CHECK.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2665 of file fsm_coe.c.

void ec_fsm_coe_up_seg_response ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP RESPONSE.

Todo:
Timeout behavior
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2738 of file fsm_coe.c.

void ec_fsm_coe_up_seg_response_data ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

CoE state: UP RESPONSE DATA.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2786 of file fsm_coe.c.

void ec_fsm_coe_end ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

State: END.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2937 of file fsm_coe.c.

void ec_fsm_coe_error ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

State: ERROR.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2924 of file fsm_coe.c.

void ec_canopen_abort_msg ( const ec_slave_t slave,
uint32_t  abort_code 
)

Outputs an SDO abort message.

Parameters
slaveSlave.
abort_codeAbort code to search for.

Definition at line 155 of file fsm_coe.c.

void ec_fsm_coe_init ( ec_fsm_coe_t fsm)

Constructor.

Parameters
fsmFinite state machine

Definition at line 177 of file fsm_coe.c.

void ec_fsm_coe_clear ( ec_fsm_coe_t fsm)

Destructor.

Parameters
fsmFinite state machine

Definition at line 189 of file fsm_coe.c.

void ec_fsm_coe_dictionary ( ec_fsm_coe_t fsm,
ec_slave_t slave 
)

Starts reading a slaves' SDO dictionary.

Parameters
fsmFinite state machine
slaveEtherCAT slave

Definition at line 199 of file fsm_coe.c.

void ec_fsm_coe_transfer ( ec_fsm_coe_t fsm,
ec_slave_t slave,
ec_sdo_request_t request 
)

Starts to transfer an SDO to/from a slave.

Parameters
fsmState machine.
slaveEtherCAT slave.
requestSDO request.

Definition at line 212 of file fsm_coe.c.

int ec_fsm_coe_exec ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

Executes the current state of the state machine.

Returns
1 if the state machine is still in progress, else 0.
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 235 of file fsm_coe.c.

int ec_fsm_coe_success ( const ec_fsm_coe_t fsm)

Returns, if the state machine terminated with success.

Returns
non-zero if successful.
Parameters
fsmFinite state machine

Definition at line 268 of file fsm_coe.c.

int ec_fsm_coe_check_emergency ( ec_fsm_coe_t fsm,
const uint8_t *  data,
size_t  size 
)

Check if the received data are a CoE emergency request.

If the check is positive, the emergency request is output.

Returns
The data were an emergency request.
Parameters
fsmFinite state machine
dataCoE mailbox data.
sizeCoE mailbox data size.

Definition at line 283 of file fsm_coe.c.

int ec_fsm_coe_prepare_dict ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

Prepare a dictionary request.

Returns
Zero on success, otherwise a negative error code.
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 321 of file fsm_coe.c.

int ec_fsm_coe_dict_prepare_desc ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

Prepare an object description request.

Returns
Zero on success, otherwise a negative error code.
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 494 of file fsm_coe.c.

int ec_fsm_coe_dict_prepare_entry ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

Prepare an entry description request.

Returns
Zero on success, otherwise a negative error code.
Parameters
fsmFinite state machine
datagramDatagram to use.

Definition at line 836 of file fsm_coe.c.

int ec_fsm_coe_prepare_down_start ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

Prepare a donwnload request.

Returns
Zero on success, otherwise a negative error code.
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1376 of file fsm_coe.c.

void ec_fsm_coe_down_prepare_segment_request ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

Prepare a download segment request.

Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 1668 of file fsm_coe.c.

int ec_fsm_coe_prepare_up ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

Prepare an upload request.

Returns
Zero on success, otherwise a negative error code.
Parameters
fsmFinite state machine.
datagramDatagram to use.

Definition at line 2134 of file fsm_coe.c.

void ec_fsm_coe_up_prepare_segment_request ( ec_fsm_coe_t fsm,
ec_datagram_t datagram 
)

Prepare an SDO upload segment request.

Parameters
fsmFinite state machine
datagramDatagram to use.

Definition at line 2348 of file fsm_coe.c.

Variable Documentation

const ec_code_msg_t sdo_abort_messages[]

SDO abort messages.

The "abort SDO transfer request" supplies an abort code, which can be translated to clear text. This table does the mapping of the codes and messages.

Definition at line 114 of file fsm_coe.c.