master/fsm_master.h
branchstable-1.3
changeset 1744 7bc131b92039
parent 1739 5fcbd29151d2
child 1746 72e7507b3f1b
equal deleted inserted replaced
1743:1a7067207637 1744:7bc131b92039
    49 
    49 
    50 #include "fsm_slave.h"
    50 #include "fsm_slave.h"
    51 
    51 
    52 /*****************************************************************************/
    52 /*****************************************************************************/
    53 
    53 
       
    54 /**
       
    55  * EEPROM write request.
       
    56  */
       
    57 
       
    58 typedef struct
       
    59 {
       
    60     struct list_head list;
       
    61     ec_slave_t *slave;
       
    62     off_t offset;
       
    63     size_t size;
       
    64     const uint16_t *words;
       
    65     ec_request_state_t state;
       
    66 }
       
    67 ec_eeprom_write_request_t;
       
    68 
       
    69 /*****************************************************************************/
       
    70 
    54 typedef struct ec_fsm_master ec_fsm_master_t; /**< \see ec_fsm_master */
    71 typedef struct ec_fsm_master ec_fsm_master_t; /**< \see ec_fsm_master */
    55 
    72 
    56 /**
    73 /**
    57    Finite state machine of an EtherCAT master.
    74    Finite state machine of an EtherCAT master.
    58 */
    75 */
    62     ec_master_t *master; /**< master the FSM runs on */
    79     ec_master_t *master; /**< master the FSM runs on */
    63     ec_datagram_t *datagram; /**< datagram used in the state machine */
    80     ec_datagram_t *datagram; /**< datagram used in the state machine */
    64     unsigned int retries; /**< retries on datagram timeout. */
    81     unsigned int retries; /**< retries on datagram timeout. */
    65 
    82 
    66     void (*state)(ec_fsm_master_t *); /**< master state function */
    83     void (*state)(ec_fsm_master_t *); /**< master state function */
       
    84     int idle; /**< state machine is in idle phase */
       
    85     unsigned long scan_jiffies; /**< beginning of slave scanning */
    67     unsigned int slaves_responding; /**< number of responding slaves */
    86     unsigned int slaves_responding; /**< number of responding slaves */
    68     unsigned int topology_change_pending; /**< bus topology changed */
    87     unsigned int topology_change_pending; /**< bus topology changed */
    69     ec_slave_state_t slave_states; /**< states of responding slaves */
    88     ec_slave_state_t slave_states; /**< states of responding slaves */
    70     unsigned int validate; /**< non-zero, if validation to do */
    89     unsigned int validate; /**< non-zero, if validation to do */
       
    90     unsigned int tainted; /**< non-zero, if the current bus topology does
       
    91                             not meet the initial conditions */
       
    92     unsigned int config_error; /**< error during slave configuration */
    71     ec_slave_t *slave; /**< current slave */
    93     ec_slave_t *slave; /**< current slave */
       
    94     ec_eeprom_write_request_t *eeprom_request; /**< EEPROM write request */
       
    95     off_t eeprom_index; /**< index to EEPROM write request data */
    72     ec_sdo_request_t *sdo_request; /**< SDO request to process */
    96     ec_sdo_request_t *sdo_request; /**< SDO request to process */
    73     uint16_t sii_offset; 
       
    74 
    97 
    75     ec_fsm_slave_t fsm_slave; /**< slave state machine */
    98     ec_fsm_slave_t fsm_slave; /**< slave state machine */
    76     ec_fsm_sii_t fsm_sii; /**< SII state machine */
    99     ec_fsm_sii_t fsm_sii; /**< SII state machine */
    77     ec_fsm_change_t fsm_change; /**< State change state machine */
   100     ec_fsm_change_t fsm_change; /**< State change state machine */
    78     ec_fsm_coe_t fsm_coe; /**< CoE state machine */
   101     ec_fsm_coe_t fsm_coe; /**< CoE state machine */
    82 
   105 
    83 void ec_fsm_master_init(ec_fsm_master_t *, ec_master_t *, ec_datagram_t *);
   106 void ec_fsm_master_init(ec_fsm_master_t *, ec_master_t *, ec_datagram_t *);
    84 void ec_fsm_master_clear(ec_fsm_master_t *);
   107 void ec_fsm_master_clear(ec_fsm_master_t *);
    85 
   108 
    86 int ec_fsm_master_exec(ec_fsm_master_t *);
   109 int ec_fsm_master_exec(ec_fsm_master_t *);
    87 int ec_fsm_master_running(ec_fsm_master_t *);
   110 int ec_fsm_master_running(const ec_fsm_master_t *);
    88 int ec_fsm_master_success(ec_fsm_master_t *);
   111 int ec_fsm_master_idle(const ec_fsm_master_t *);
    89 
   112 
    90 /*****************************************************************************/
   113 /*****************************************************************************/
    91 
   114 
    92 #endif
   115 #endif