IgH EtherCAT Master  1.6.9
fsm_foe.c File Reference

EtherCAT FoE state machines. More...

Go to the source code of this file.

Macros

#define EC_FSM_FOE_TIMEOUT   3000
 Maximum time in ms to wait for responses when reading out the dictionary.
#define EC_FOE_HEADER_SIZE   6
 Size of the FoE header.

Enumerations

enum  {
  EC_FOE_OPCODE_RRQ = 1 , EC_FOE_OPCODE_WRQ = 2 , EC_FOE_OPCODE_DATA = 3 , EC_FOE_OPCODE_ACK = 4 ,
  EC_FOE_OPCODE_ERR = 5 , EC_FOE_OPCODE_BUSY = 6
}
 FoE OpCodes. More...

Functions

int ec_foe_prepare_data_send (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Sends a file or the next fragment.
int ec_foe_prepare_wrq_send (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Prepare a write request (WRQ) with filename.
int ec_foe_prepare_rrq_send (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Prepare a read request (RRQ) with filename.
int ec_foe_prepare_send_ack (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Prepare to send an acknowledge.
void ec_foe_set_tx_error (ec_fsm_foe_t *fsm, uint32_t errorcode)
 Set an error code and go to the send error state.
void ec_foe_set_rx_error (ec_fsm_foe_t *fsm, uint32_t errorcode)
 Set an error code and go to the receive error state.
void ec_fsm_foe_end (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: END.
void ec_fsm_foe_error (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: ERROR.
void ec_fsm_foe_state_wrq_sent (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: WRQ SENT.
void ec_fsm_foe_state_rrq_sent (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: RRQ SENT.
void ec_fsm_foe_state_ack_check (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Check for acknowledge.
void ec_fsm_foe_state_ack_read (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Acknowledge a read operation.
void ec_fsm_foe_state_data_sent (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: WRQ SENT.
void ec_fsm_foe_state_data_check (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Check for data.
void ec_fsm_foe_state_data_read (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Start reading data.
void ec_fsm_foe_state_sent_ack (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Sent an acknowledge.
void ec_fsm_foe_write_start (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Initializes the FoE write state machine.
void ec_fsm_foe_read_start (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Starting state for read operations.
void ec_fsm_foe_init (ec_fsm_foe_t *fsm)
 Constructor.
void ec_fsm_foe_clear (ec_fsm_foe_t *fsm)
 Destructor.
int ec_fsm_foe_exec (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Executes the current state of the state machine.
int ec_fsm_foe_success (const ec_fsm_foe_t *fsm)
 Returns, if the state machine terminated with success.
void ec_fsm_foe_transfer (ec_fsm_foe_t *fsm, ec_slave_t *slave, ec_foe_request_t *request)
 Prepares an FoE transfer.

Detailed Description

EtherCAT FoE state machines.

Definition in file fsm_foe.c.

Macro Definition Documentation

◆ EC_FSM_FOE_TIMEOUT

#define EC_FSM_FOE_TIMEOUT   3000

Maximum time in ms to wait for responses when reading out the dictionary.

Definition at line 39 of file fsm_foe.c.

◆ EC_FOE_HEADER_SIZE

#define EC_FOE_HEADER_SIZE   6

Size of the FoE header.

Definition at line 43 of file fsm_foe.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

FoE OpCodes.

Enumerator
EC_FOE_OPCODE_RRQ 

Read request.

EC_FOE_OPCODE_WRQ 

Write request.

EC_FOE_OPCODE_DATA 

Data.

EC_FOE_OPCODE_ACK 

Acknowledge.

EC_FOE_OPCODE_ERR 

Error.

EC_FOE_OPCODE_BUSY 

Busy.

Definition at line 54 of file fsm_foe.c.

Function Documentation

◆ ec_foe_prepare_data_send()

int ec_foe_prepare_data_send ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Sends a file or the next fragment.

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

Definition at line 224 of file fsm_foe.c.

◆ ec_foe_prepare_wrq_send()

int ec_foe_prepare_wrq_send ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Prepare a write request (WRQ) with filename.

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

Definition at line 265 of file fsm_foe.c.

◆ ec_foe_prepare_rrq_send()

int ec_foe_prepare_rrq_send ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Prepare a read request (RRQ) with filename.

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

Definition at line 542 of file fsm_foe.c.

◆ ec_foe_prepare_send_ack()

int ec_foe_prepare_send_ack ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Prepare to send an acknowledge.

Returns
Zero on success, otherwise a negative error code.
Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 576 of file fsm_foe.c.

◆ ec_foe_set_tx_error()

void ec_foe_set_tx_error ( ec_fsm_foe_t * fsm,
uint32_t errorcode )

Set an error code and go to the send error state.

Parameters
fsmFoE statemachine.
errorcodeFoE error code.

Definition at line 893 of file fsm_foe.c.

◆ ec_foe_set_rx_error()

void ec_foe_set_rx_error ( ec_fsm_foe_t * fsm,
uint32_t errorcode )

Set an error code and go to the receive error state.

Parameters
fsmFoE statemachine.
errorcodeFoE error code.

Definition at line 906 of file fsm_foe.c.

◆ ec_fsm_foe_end()

void ec_fsm_foe_end ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

State: END.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 208 of file fsm_foe.c.

◆ ec_fsm_foe_error()

void ec_fsm_foe_error ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

State: ERROR.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 194 of file fsm_foe.c.

◆ ec_fsm_foe_state_wrq_sent()

void ec_fsm_foe_state_wrq_sent ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

State: WRQ SENT.

Checks is the previous transmit datagram succeded and sends the next fragment, if necessary.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 464 of file fsm_foe.c.

◆ ec_fsm_foe_state_rrq_sent()

void ec_fsm_foe_state_rrq_sent ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

State: RRQ SENT.

Checks is the previous transmit datagram succeeded and sends the next fragment, if necessary.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 602 of file fsm_foe.c.

◆ ec_fsm_foe_state_ack_check()

void ec_fsm_foe_state_ack_check ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Check for acknowledge.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 332 of file fsm_foe.c.

◆ ec_fsm_foe_state_ack_read()

void ec_fsm_foe_state_ack_read ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Acknowledge a read operation.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 384 of file fsm_foe.c.

◆ ec_fsm_foe_state_data_sent()

void ec_fsm_foe_state_data_sent ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

State: WRQ SENT.

Checks is the previous transmit datagram succeded and sends the next fragment, if necessary.

Parameters
fsmFoe statemachine.
datagramDatagram to use.

Definition at line 505 of file fsm_foe.c.

◆ ec_fsm_foe_state_data_check()

void ec_fsm_foe_state_data_check ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Check for data.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 673 of file fsm_foe.c.

◆ ec_fsm_foe_state_data_read()

void ec_fsm_foe_state_data_read ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Start reading data.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 723 of file fsm_foe.c.

◆ ec_fsm_foe_state_sent_ack()

void ec_fsm_foe_state_sent_ack ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Sent an acknowledge.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 847 of file fsm_foe.c.

◆ ec_fsm_foe_write_start()

void ec_fsm_foe_write_start ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Initializes the FoE write state machine.

Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 298 of file fsm_foe.c.

◆ ec_fsm_foe_read_start()

void ec_fsm_foe_read_start ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Starting state for read operations.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 640 of file fsm_foe.c.

◆ ec_fsm_foe_init()

void ec_fsm_foe_init ( ec_fsm_foe_t * fsm)

Constructor.

Parameters
fsmfinite state machine

Definition at line 95 of file fsm_foe.c.

◆ ec_fsm_foe_clear()

void ec_fsm_foe_clear ( ec_fsm_foe_t * fsm)

Destructor.

Parameters
fsmfinite state machine

Definition at line 107 of file fsm_foe.c.

◆ ec_fsm_foe_exec()

int ec_fsm_foe_exec ( ec_fsm_foe_t * fsm,
ec_datagram_t * datagram )

Executes the current state of the state machine.

Returns
1, if the datagram was used, else 0.
Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 117 of file fsm_foe.c.

◆ ec_fsm_foe_success()

int ec_fsm_foe_success ( const ec_fsm_foe_t * fsm)

Returns, if the state machine terminated with success.

Returns
non-zero if successful.
Parameters
fsmFinite state machine

Definition at line 151 of file fsm_foe.c.

◆ ec_fsm_foe_transfer()

void ec_fsm_foe_transfer ( ec_fsm_foe_t * fsm,
ec_slave_t * slave,
ec_foe_request_t * request )

Prepares an FoE transfer.

Parameters
fsmState machine.
slaveEtherCAT slave.
requestSdo request.

Definition at line 160 of file fsm_foe.c.