diff -r af21f0bdc7c9 -r 2b9c78543663 master/fsm_coe.h --- a/master/fsm_coe.h Thu Sep 06 14:21:02 2012 +0200 +++ b/master/fsm_coe.h Mon Nov 03 15:20:05 2014 +0100 @@ -39,7 +39,6 @@ #include "globals.h" #include "datagram.h" -#include "mailbox.h" #include "slave.h" #include "sdo.h" #include "sdo_request.h" @@ -52,10 +51,10 @@ */ struct ec_fsm_coe { ec_slave_t *slave; /**< slave the FSM runs on */ - ec_mailbox_t *mbox; /**< mailbox used in the state machine */ unsigned int retries; /**< retries upon datagram timeout */ - void (*state)(ec_fsm_coe_t *); /**< CoE state function */ + void (*state)(ec_fsm_coe_t *, ec_datagram_t *); /**< CoE state function */ + ec_datagram_t *datagram; /**< Datagram used in last step. */ unsigned long jiffies_start; /**< CoE timestamp. */ ec_sdo_t *sdo; /**< current SDO */ uint8_t subindex; /**< current subindex */ @@ -64,18 +63,19 @@ uint8_t toggle; /**< toggle bit for segment commands */ uint32_t offset; /**< Data offset during segmented download. */ uint32_t remaining; /**< Remaining bytes during segmented download. */ + size_t segment_size; /**< Current segment size. */ }; /*****************************************************************************/ -void ec_fsm_coe_init(ec_fsm_coe_t *, ec_mailbox_t *); +void ec_fsm_coe_init(ec_fsm_coe_t *); void ec_fsm_coe_clear(ec_fsm_coe_t *); void ec_fsm_coe_dictionary(ec_fsm_coe_t *, ec_slave_t *); void ec_fsm_coe_transfer(ec_fsm_coe_t *, ec_slave_t *, ec_sdo_request_t *); -int ec_fsm_coe_exec(ec_fsm_coe_t *); -int ec_fsm_coe_success(ec_fsm_coe_t *); +int ec_fsm_coe_exec(ec_fsm_coe_t *, ec_datagram_t *); +int ec_fsm_coe_success(const ec_fsm_coe_t *); /*****************************************************************************/