IgH EtherCAT Master  1.7.0
fsm_soe.c File Reference

EtherCAT SoE state machines. More...

Go to the source code of this file.

Macros

#define EC_SOE_SIZE   0x04
 Size of all SoE headers.
 
#define EC_SOE_HEADER_SIZE   (EC_MBOX_HEADER_SIZE + EC_SOE_SIZE)
 SoE header size.
 
#define EC_SOE_RESPONSE_TIMEOUT   1000
 SoE response timeout [ms].
 

Enumerations

enum  { OPCODE_READ_REQUEST = 0x01, OPCODE_READ_RESPONSE = 0x02, OPCODE_WRITE_REQUEST = 0x03, OPCODE_WRITE_RESPONSE = 0x04 }
 SoE operations. More...
 

Functions

void ec_print_soe_error (const ec_slave_t *slave, uint16_t error_code)
 Outputs an SoE error code.
 
void ec_fsm_soe_print_error (ec_fsm_soe_t *fsm)
 Output information about a failed SoE transfer. More...
 
int ec_fsm_soe_prepare_read (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 Prepare a read operation. More...
 
void ec_fsm_soe_write_next_fragment (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 Write next fragment. More...
 
void ec_fsm_soe_read_start (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 SoE state: READ START. More...
 
void ec_fsm_soe_read_request (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 SoE state: READ REQUEST. More...
 
void ec_fsm_soe_read_response (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 SoE state: READ RESPONSE. More...
 
void ec_fsm_soe_write_start (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 SoE state: WRITE START. More...
 
void ec_fsm_soe_write_request (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 SoE state: WRITE REQUEST. More...
 
void ec_fsm_soe_write_response (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 SoE state: WRITE RESPONSE. More...
 
void ec_fsm_soe_end (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 State: END. More...
 
void ec_fsm_soe_error (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 State: ERROR. More...
 
void ec_fsm_soe_init (ec_fsm_soe_t *fsm)
 Constructor. More...
 
void ec_fsm_soe_clear (ec_fsm_soe_t *fsm)
 Destructor. More...
 
void ec_fsm_soe_transfer (ec_fsm_soe_t *fsm, ec_slave_t *slave, ec_soe_request_t *request)
 Starts to transfer an IDN to/from a slave. More...
 
int ec_fsm_soe_exec (ec_fsm_soe_t *fsm, ec_datagram_t *datagram)
 Executes the current state of the state machine. More...
 
int ec_fsm_soe_success (const ec_fsm_soe_t *fsm)
 Returns, if the state machine terminated with success. More...
 
void ec_fsm_soe_abort (ec_fsm_soe_t *fsm)
 Aborts a running transfer. More...
 
static void ec_fsm_soe_receive (ec_fsm_soe_t *fsm, ec_datagram_t *datagram, void(*state)(ec_fsm_soe_t *, ec_datagram_t *))
 Waits for an SoE response. More...
 
static unsigned long ec_fsm_soe_elapsed_ms (const ec_fsm_soe_t *fsm)
 Time elapsed since the request was sent. More...
 

Variables

const ec_code_msg_t soe_error_codes []
 SoE error codes.
 

Detailed Description

EtherCAT SoE state machines.

Definition in file fsm_soe.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

SoE operations.

Enumerator
OPCODE_READ_REQUEST 

Read request.

OPCODE_READ_RESPONSE 

Read response.

OPCODE_WRITE_REQUEST 

Write request.

OPCODE_WRITE_RESPONSE 

Write response.

Definition at line 38 of file fsm_soe.c.

Function Documentation

◆ ec_fsm_soe_print_error()

void ec_fsm_soe_print_error ( ec_fsm_soe_t *  fsm)

Output information about a failed SoE transfer.

Parameters
fsmFinite state machine

Definition at line 210 of file fsm_soe.c.

◆ ec_fsm_soe_prepare_read()

int ec_fsm_soe_prepare_read ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

Prepare a read operation.

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

Definition at line 268 of file fsm_soe.c.

◆ ec_fsm_soe_write_next_fragment()

void ec_fsm_soe_write_next_fragment ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

Write next fragment.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 506 of file fsm_soe.c.

◆ ec_fsm_soe_read_start()

void ec_fsm_soe_read_start ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

SoE state: READ START.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 303 of file fsm_soe.c.

◆ ec_fsm_soe_read_request()

void ec_fsm_soe_read_request ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

SoE state: READ REQUEST.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 334 of file fsm_soe.c.

◆ ec_fsm_soe_read_response()

void ec_fsm_soe_read_response ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

SoE state: READ RESPONSE.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 388 of file fsm_soe.c.

◆ ec_fsm_soe_write_start()

void ec_fsm_soe_write_start ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

SoE state: WRITE START.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 554 of file fsm_soe.c.

◆ ec_fsm_soe_write_request()

void ec_fsm_soe_write_request ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

SoE state: WRITE REQUEST.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 590 of file fsm_soe.c.

◆ ec_fsm_soe_write_response()

void ec_fsm_soe_write_response ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

SoE state: WRITE RESPONSE.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 649 of file fsm_soe.c.

◆ ec_fsm_soe_end()

void ec_fsm_soe_end ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

State: END.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 760 of file fsm_soe.c.

◆ ec_fsm_soe_error()

void ec_fsm_soe_error ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram 
)

State: ERROR.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 749 of file fsm_soe.c.

◆ ec_fsm_soe_init()

void ec_fsm_soe_init ( ec_fsm_soe_t *  fsm)

Constructor.

Parameters
fsmfinite state machine

Definition at line 105 of file fsm_soe.c.

◆ ec_fsm_soe_clear()

void ec_fsm_soe_clear ( ec_fsm_soe_t *  fsm)

Destructor.

Parameters
fsmfinite state machine

Definition at line 119 of file fsm_soe.c.

◆ ec_fsm_soe_transfer()

void ec_fsm_soe_transfer ( ec_fsm_soe_t *  fsm,
ec_slave_t *  slave,
ec_soe_request_t *  request 
)

Starts to transfer an IDN to/from a slave.

Parameters
fsmState machine.
slaveEtherCAT slave.
requestSoE request.

Definition at line 130 of file fsm_soe.c.

◆ ec_fsm_soe_exec()

int ec_fsm_soe_exec ( ec_fsm_soe_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 152 of file fsm_soe.c.

◆ ec_fsm_soe_success()

int ec_fsm_soe_success ( const ec_fsm_soe_t *  fsm)

Returns, if the state machine terminated with success.

Returns
non-zero if successful.
Parameters
fsmFinite state machine

Definition at line 187 of file fsm_soe.c.

◆ ec_fsm_soe_abort()

void ec_fsm_soe_abort ( ec_fsm_soe_t *  fsm)

Aborts a running transfer.

Releases the mailbox read lock, if the state machine holds it, i. e. if a mailbox check or fetch is in progress.

Parameters
fsmFinite state machine

Definition at line 199 of file fsm_soe.c.

◆ ec_fsm_soe_receive()

static void ec_fsm_soe_receive ( ec_fsm_soe_t *  fsm,
ec_datagram_t *  datagram,
void(*)(ec_fsm_soe_t *, ec_datagram_t *)  state 
)
static

Waits for an SoE response.

Starts the mailbox receive state machine and executes the given response state immediately. The response state is left, as soon as an SoE response is available, or receiving failed.

Parameters
fsmFinite state machine.
datagramDatagram to use.
stateResponse state.

Definition at line 233 of file fsm_soe.c.

◆ ec_fsm_soe_elapsed_ms()

static unsigned long ec_fsm_soe_elapsed_ms ( const ec_fsm_soe_t *  fsm)
static

Time elapsed since the request was sent.

Returns
Elapsed time in milliseconds.
Parameters
fsmFinite state machine.

Definition at line 253 of file fsm_soe.c.