master/fsm_slave.c
branchredundancy
changeset 2374 e898451c054a
parent 2304 1b0372eede04
child 2419 fdb85a806585
equal deleted inserted replaced
2373:593272e5a169 2374:e898451c054a
   204         // Start SDO transfer
   204         // Start SDO transfer
   205         fsm->sdo_request = &request->req;
   205         fsm->sdo_request = &request->req;
   206         fsm->state = ec_fsm_slave_state_sdo_request;
   206         fsm->state = ec_fsm_slave_state_sdo_request;
   207         ec_fsm_coe_transfer(&fsm->fsm_coe, slave, &request->req);
   207         ec_fsm_coe_transfer(&fsm->fsm_coe, slave, &request->req);
   208         ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately
   208         ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately
   209         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
   209         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram);
   210                 EC_DEVICE_MAIN);
       
   211         return 1;
   210         return 1;
   212     }
   211     }
   213     return 0;
   212     return 0;
   214 }
   213 }
   215 
   214 
   223 {
   222 {
   224     ec_slave_t *slave = fsm->slave;
   223     ec_slave_t *slave = fsm->slave;
   225     ec_sdo_request_t *request = fsm->sdo_request;
   224     ec_sdo_request_t *request = fsm->sdo_request;
   226 
   225 
   227     if (ec_fsm_coe_exec(&fsm->fsm_coe)) {
   226     if (ec_fsm_coe_exec(&fsm->fsm_coe)) {
   228         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
   227         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram);
   229                 EC_DEVICE_MAIN);
       
   230         return;
   228         return;
   231     }
   229     }
   232     if (!ec_fsm_coe_success(&fsm->fsm_coe)) {
   230     if (!ec_fsm_coe_success(&fsm->fsm_coe)) {
   233         EC_SLAVE_ERR(slave, "Failed to process SDO request.\n");
   231         EC_SLAVE_ERR(slave, "Failed to process SDO request.\n");
   234         request->state = EC_INT_REQUEST_FAILURE;
   232         request->state = EC_INT_REQUEST_FAILURE;
   279 
   277 
   280         fsm->foe_request = &request->req;
   278         fsm->foe_request = &request->req;
   281         fsm->state = ec_fsm_slave_state_foe_request;
   279         fsm->state = ec_fsm_slave_state_foe_request;
   282         ec_fsm_foe_transfer(&fsm->fsm_foe, slave, &request->req);
   280         ec_fsm_foe_transfer(&fsm->fsm_foe, slave, &request->req);
   283         ec_fsm_foe_exec(&fsm->fsm_foe);
   281         ec_fsm_foe_exec(&fsm->fsm_foe);
   284         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
   282         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram);
   285                 EC_DEVICE_MAIN);
       
   286         return 1;
   283         return 1;
   287     }
   284     }
   288     return 0;
   285     return 0;
   289 }
   286 }
   290 
   287 
   298 {
   295 {
   299     ec_slave_t *slave = fsm->slave;
   296     ec_slave_t *slave = fsm->slave;
   300     ec_foe_request_t *request = fsm->foe_request;
   297     ec_foe_request_t *request = fsm->foe_request;
   301 
   298 
   302     if (ec_fsm_foe_exec(&fsm->fsm_foe)) {
   299     if (ec_fsm_foe_exec(&fsm->fsm_foe)) {
   303         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
   300         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram);
   304                 EC_DEVICE_MAIN);
       
   305         return;
   301         return;
   306     }
   302     }
   307 
   303 
   308     if (!ec_fsm_foe_success(&fsm->fsm_foe)) {
   304     if (!ec_fsm_foe_success(&fsm->fsm_foe)) {
   309         EC_SLAVE_ERR(slave, "Failed to handle FoE request.\n");
   305         EC_SLAVE_ERR(slave, "Failed to handle FoE request.\n");
   367         // Start SoE transfer
   363         // Start SoE transfer
   368         fsm->soe_request = &req->req;
   364         fsm->soe_request = &req->req;
   369         fsm->state = ec_fsm_slave_state_soe_request;
   365         fsm->state = ec_fsm_slave_state_soe_request;
   370         ec_fsm_soe_transfer(&fsm->fsm_soe, slave, &req->req);
   366         ec_fsm_soe_transfer(&fsm->fsm_soe, slave, &req->req);
   371         ec_fsm_soe_exec(&fsm->fsm_soe); // execute immediately
   367         ec_fsm_soe_exec(&fsm->fsm_soe); // execute immediately
   372         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
   368         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram);
   373                 EC_DEVICE_MAIN);
       
   374         return 1;
   369         return 1;
   375     }
   370     }
   376     return 0;
   371     return 0;
   377 }
   372 }
   378 
   373 
   386 {
   381 {
   387     ec_slave_t *slave = fsm->slave;
   382     ec_slave_t *slave = fsm->slave;
   388     ec_soe_request_t *request = fsm->soe_request;
   383     ec_soe_request_t *request = fsm->soe_request;
   389 
   384 
   390     if (ec_fsm_soe_exec(&fsm->fsm_soe)) {
   385     if (ec_fsm_soe_exec(&fsm->fsm_soe)) {
   391         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram,
   386         ec_master_queue_external_datagram(fsm->slave->master, fsm->datagram);
   392                 EC_DEVICE_MAIN);
       
   393         return;
   387         return;
   394     }
   388     }
   395 
   389 
   396     if (!ec_fsm_soe_success(&fsm->fsm_soe)) {
   390     if (!ec_fsm_soe_success(&fsm->fsm_soe)) {
   397         EC_SLAVE_ERR(slave, "Failed to process SoE request.\n");
   391         EC_SLAVE_ERR(slave, "Failed to process SoE request.\n");