IgH EtherCAT Master  1.5.2
fsm_foe.c File Reference

EtherCAT FoE state machines. More...

Go to the source code of this file.

Macros

#define EC_FSM_FOE_TIMEOUT_JIFFIES   (3 * HZ)
 Maximum time in jiffies 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. More...
 
int ec_foe_prepare_wrq_send (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Prepare a write request (WRQ) with filename. More...
 
int ec_foe_prepare_rrq_send (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Prepare a read request (RRQ) with filename. More...
 
int ec_foe_prepare_send_ack (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Prepare to send an acknowledge. More...
 
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. More...
 
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. More...
 
void ec_fsm_foe_end (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: END. More...
 
void ec_fsm_foe_error (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: ERROR. More...
 
void ec_fsm_foe_state_wrq_sent (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: WRQ SENT. More...
 
void ec_fsm_foe_state_rrq_sent (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: RRQ SENT. More...
 
void ec_fsm_foe_state_ack_check (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Check for acknowledge. More...
 
void ec_fsm_foe_state_ack_read (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Acknowledge a read operation. More...
 
void ec_fsm_foe_state_ack_read_data (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Process a read operation. More...
 
void ec_fsm_foe_state_data_sent (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 State: WRQ SENT. More...
 
void ec_fsm_foe_state_data_check (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Check for data. More...
 
void ec_fsm_foe_state_data_read (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Start reading data. More...
 
void ec_fsm_foe_state_data_read_data (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Process a read data operation. More...
 
void ec_fsm_foe_state_sent_ack (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Sent an acknowledge. More...
 
void ec_fsm_foe_write_start (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Initializes the FoE write state machine. More...
 
void ec_fsm_foe_read_start (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Starting state for read operations. More...
 
void ec_fsm_foe_init (ec_fsm_foe_t *fsm)
 Constructor. More...
 
void ec_fsm_foe_clear (ec_fsm_foe_t *fsm)
 Destructor. More...
 
int ec_fsm_foe_exec (ec_fsm_foe_t *fsm, ec_datagram_t *datagram)
 Executes the current state of the state machine. More...
 
int ec_fsm_foe_success (const ec_fsm_foe_t *fsm)
 Returns, if the state machine terminated with success. More...
 
void ec_fsm_foe_transfer (ec_fsm_foe_t *fsm, ec_slave_t *slave, ec_foe_request_t *request)
 Prepares an FoE transfer. More...
 

Detailed Description

EtherCAT FoE state machines.

Definition in 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 62 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 213 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 256 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 617 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 654 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 1054 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 1067 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 197 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 183 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 525 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 684 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 329 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 392 of file fsm_foe.c.

◆ ec_fsm_foe_state_ack_read_data()

void ec_fsm_foe_state_ack_read_data ( ec_fsm_foe_t fsm,
ec_datagram_t datagram 
)

Process a read operation.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 430 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 572 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 770 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 830 of file fsm_foe.c.

◆ ec_fsm_foe_state_data_read_data()

void ec_fsm_foe_state_data_read_data ( ec_fsm_foe_t fsm,
ec_datagram_t datagram 
)

Process a read data operation.

Parameters
fsmFoE statemachine.
datagramDatagram to use.

Definition at line 868 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 1001 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 288 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 730 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 105 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 117 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 state machine is still in progress, else 0.
Parameters
fsmfinite state machine
datagramDatagram to use.

Definition at line 127 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.