master/fsm_coe.h
branchstable-1.5
changeset 2498 9cdd7669dc0b
parent 1562 5c249f469b81
equal deleted inserted replaced
2497:505cf41488a4 2498:9cdd7669dc0b
    49 
    49 
    50 /** Finite state machines for the CANopen over EtherCAT protocol.
    50 /** Finite state machines for the CANopen over EtherCAT protocol.
    51  */
    51  */
    52 struct ec_fsm_coe {
    52 struct ec_fsm_coe {
    53     ec_slave_t *slave; /**< slave the FSM runs on */
    53     ec_slave_t *slave; /**< slave the FSM runs on */
    54     ec_datagram_t *datagram; /**< datagram used in the state machine */
       
    55     unsigned int retries; /**< retries upon datagram timeout */
    54     unsigned int retries; /**< retries upon datagram timeout */
    56 
    55 
    57     void (*state)(ec_fsm_coe_t *); /**< CoE state function */
    56     void (*state)(ec_fsm_coe_t *, ec_datagram_t *); /**< CoE state function */
       
    57     ec_datagram_t *datagram; /**< Datagram used in last step. */
    58     unsigned long jiffies_start; /**< CoE timestamp. */
    58     unsigned long jiffies_start; /**< CoE timestamp. */
    59     ec_sdo_t *sdo; /**< current SDO */
    59     ec_sdo_t *sdo; /**< current SDO */
    60     uint8_t subindex; /**< current subindex */
    60     uint8_t subindex; /**< current subindex */
    61     ec_sdo_request_t *request; /**< SDO request */
    61     ec_sdo_request_t *request; /**< SDO request */
    62     uint32_t complete_size; /**< Used when segmenting. */
    62     uint32_t complete_size; /**< Used when segmenting. */
    63     uint8_t toggle; /**< toggle bit for segment commands */
    63     uint8_t toggle; /**< toggle bit for segment commands */
    64     uint32_t offset; /**< Data offset during segmented download. */
    64     uint32_t offset; /**< Data offset during segmented download. */
    65     uint32_t remaining; /**< Remaining bytes during segmented download. */
    65     uint32_t remaining; /**< Remaining bytes during segmented download. */
       
    66     size_t segment_size; /**< Current segment size. */
    66 };
    67 };
    67 
    68 
    68 /*****************************************************************************/
    69 /*****************************************************************************/
    69 
    70 
    70 void ec_fsm_coe_init(ec_fsm_coe_t *, ec_datagram_t *);
    71 void ec_fsm_coe_init(ec_fsm_coe_t *);
    71 void ec_fsm_coe_clear(ec_fsm_coe_t *);
    72 void ec_fsm_coe_clear(ec_fsm_coe_t *);
    72 
    73 
    73 void ec_fsm_coe_dictionary(ec_fsm_coe_t *, ec_slave_t *);
    74 void ec_fsm_coe_dictionary(ec_fsm_coe_t *, ec_slave_t *);
    74 void ec_fsm_coe_transfer(ec_fsm_coe_t *, ec_slave_t *, ec_sdo_request_t *);
    75 void ec_fsm_coe_transfer(ec_fsm_coe_t *, ec_slave_t *, ec_sdo_request_t *);
    75 
    76 
    76 int ec_fsm_coe_exec(ec_fsm_coe_t *);
    77 int ec_fsm_coe_exec(ec_fsm_coe_t *, ec_datagram_t *);
    77 int ec_fsm_coe_success(ec_fsm_coe_t *);
    78 int ec_fsm_coe_success(const ec_fsm_coe_t *);
    78 
    79 
    79 /*****************************************************************************/
    80 /*****************************************************************************/
    80 
    81 
    81 #endif
    82 #endif