IgH EtherCAT Master  1.6.0-rc1
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

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 63 of file fsm_foe.c.

Function Documentation

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 235 of file fsm_foe.c.

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 280 of file fsm_foe.c.

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 638 of file fsm_foe.c.

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 675 of file fsm_foe.c.

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 1067 of file fsm_foe.c.

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 1080 of file fsm_foe.c.

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 219 of file fsm_foe.c.

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 205 of file fsm_foe.c.

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 546 of file fsm_foe.c.

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 705 of file fsm_foe.c.

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 351 of file fsm_foe.c.

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 414 of file fsm_foe.c.

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 452 of file fsm_foe.c.

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 593 of file fsm_foe.c.

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 784 of file fsm_foe.c.

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 844 of file fsm_foe.c.

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 882 of file fsm_foe.c.

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 1014 of file fsm_foe.c.

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 317 of file fsm_foe.c.

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 751 of file fsm_foe.c.

void ec_fsm_foe_init ( ec_fsm_foe_t fsm)

Constructor.

Parameters
fsmfinite state machine

Definition at line 106 of file fsm_foe.c.

void ec_fsm_foe_clear ( ec_fsm_foe_t fsm)

Destructor.

Parameters
fsmfinite state machine

Definition at line 118 of file fsm_foe.c.

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 128 of file fsm_foe.c.

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 162 of file fsm_foe.c.

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 171 of file fsm_foe.c.