master/fsm_slave.c
branchredundancy
changeset 2268 5e1d3c9430e0
parent 2099 e485694c6427
child 2304 1b0372eede04
equal deleted inserted replaced
2267:2d36f36a433c 2268:5e1d3c9430e0
   201         // Start SDO transfer
   201         // Start SDO transfer
   202         fsm->sdo_request = &request->req;
   202         fsm->sdo_request = &request->req;
   203         fsm->state = ec_fsm_slave_state_sdo_request;
   203         fsm->state = ec_fsm_slave_state_sdo_request;
   204         ec_fsm_coe_transfer(&fsm->fsm_coe, slave, &request->req);
   204         ec_fsm_coe_transfer(&fsm->fsm_coe, slave, &request->req);
   205         ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately
   205         ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately
   206         ec_master_queue_external_datagram(fsm->slave->master,fsm->datagram);
   206         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
       
   207                 EC_DEVICE_MAIN);
   207         return 1;
   208         return 1;
   208     }
   209     }
   209     return 0;
   210     return 0;
   210 }
   211 }
   211 
   212 
   218         )
   219         )
   219 {
   220 {
   220     ec_slave_t *slave = fsm->slave;
   221     ec_slave_t *slave = fsm->slave;
   221     ec_sdo_request_t *request = fsm->sdo_request;
   222     ec_sdo_request_t *request = fsm->sdo_request;
   222 
   223 
   223     if (ec_fsm_coe_exec(&fsm->fsm_coe))
   224     if (ec_fsm_coe_exec(&fsm->fsm_coe)) {
   224     {
   225         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
   225         ec_master_queue_external_datagram(fsm->slave->master,fsm->datagram);
   226                 EC_DEVICE_MAIN);
   226         return;
   227         return;
   227     }
   228     }
   228     if (!ec_fsm_coe_success(&fsm->fsm_coe)) {
   229     if (!ec_fsm_coe_success(&fsm->fsm_coe)) {
   229         EC_SLAVE_ERR(slave, "Failed to process SDO request.\n");
   230         EC_SLAVE_ERR(slave, "Failed to process SDO request.\n");
   230         request->state = EC_INT_REQUEST_FAILURE;
   231         request->state = EC_INT_REQUEST_FAILURE;
   275 
   276 
   276         fsm->foe_request = &request->req;
   277         fsm->foe_request = &request->req;
   277         fsm->state = ec_fsm_slave_state_foe_request;
   278         fsm->state = ec_fsm_slave_state_foe_request;
   278         ec_fsm_foe_transfer(&fsm->fsm_foe, slave, &request->req);
   279         ec_fsm_foe_transfer(&fsm->fsm_foe, slave, &request->req);
   279         ec_fsm_foe_exec(&fsm->fsm_foe);
   280         ec_fsm_foe_exec(&fsm->fsm_foe);
   280         ec_master_queue_external_datagram(fsm->slave->master,fsm->datagram);
   281         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
       
   282                 EC_DEVICE_MAIN);
   281         return 1;
   283         return 1;
   282     }
   284     }
   283     return 0;
   285     return 0;
   284 }
   286 }
   285 
   287 
   292         )
   294         )
   293 {
   295 {
   294     ec_slave_t *slave = fsm->slave;
   296     ec_slave_t *slave = fsm->slave;
   295     ec_foe_request_t *request = fsm->foe_request;
   297     ec_foe_request_t *request = fsm->foe_request;
   296 
   298 
   297     if (ec_fsm_foe_exec(&fsm->fsm_foe))
   299     if (ec_fsm_foe_exec(&fsm->fsm_foe)) {
   298     {
   300         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
   299         ec_master_queue_external_datagram(fsm->slave->master,fsm->datagram);
   301                 EC_DEVICE_MAIN);
   300         return;
   302         return;
   301     }
   303     }
   302 
   304 
   303     if (!ec_fsm_foe_success(&fsm->fsm_foe)) {
   305     if (!ec_fsm_foe_success(&fsm->fsm_foe)) {
   304         EC_SLAVE_ERR(slave, "Failed to handle FoE request.\n");
   306         EC_SLAVE_ERR(slave, "Failed to handle FoE request.\n");
   362         // Start SoE transfer
   364         // Start SoE transfer
   363         fsm->soe_request = &req->req;
   365         fsm->soe_request = &req->req;
   364         fsm->state = ec_fsm_slave_state_soe_request;
   366         fsm->state = ec_fsm_slave_state_soe_request;
   365         ec_fsm_soe_transfer(&fsm->fsm_soe, slave, &req->req);
   367         ec_fsm_soe_transfer(&fsm->fsm_soe, slave, &req->req);
   366         ec_fsm_soe_exec(&fsm->fsm_soe); // execute immediately
   368         ec_fsm_soe_exec(&fsm->fsm_soe); // execute immediately
   367         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram);
   369         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
       
   370                 EC_DEVICE_MAIN);
   368         return 1;
   371         return 1;
   369     }
   372     }
   370     return 0;
   373     return 0;
   371 }
   374 }
   372 
   375 
   380 {
   383 {
   381     ec_slave_t *slave = fsm->slave;
   384     ec_slave_t *slave = fsm->slave;
   382     ec_soe_request_t *request = fsm->soe_request;
   385     ec_soe_request_t *request = fsm->soe_request;
   383 
   386 
   384     if (ec_fsm_soe_exec(&fsm->fsm_soe)) {
   387     if (ec_fsm_soe_exec(&fsm->fsm_soe)) {
   385         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram);
   388         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
       
   389                 EC_DEVICE_MAIN);
   386         return;
   390         return;
   387     }
   391     }
   388 
   392 
   389     if (!ec_fsm_soe_success(&fsm->fsm_soe)) {
   393     if (!ec_fsm_soe_success(&fsm->fsm_soe)) {
   390         EC_SLAVE_ERR(slave, "Failed to process SoE request.\n");
   394         EC_SLAVE_ERR(slave, "Failed to process SoE request.\n");