master/fsm_master.c
changeset 1336 e27b37e80a99
parent 1335 09c6fce1ae45
child 1337 0253c74d0940
equal deleted inserted replaced
1335:09c6fce1ae45 1336:e27b37e80a99
   491                 ec_master_foe_request_t, list);
   491                 ec_master_foe_request_t, list);
   492         list_del_init(&request->list); // dequeue
   492         list_del_init(&request->list); // dequeue
   493         request->req.state = EC_REQUEST_BUSY;
   493         request->req.state = EC_REQUEST_BUSY;
   494         slave = request->slave;
   494         slave = request->slave;
   495 
   495 
   496         EC_DBG("---- Master read command from queue ----\n");
       
   497         // found pending FOE write operation. execute it!
       
   498         if (master->debug_level)
   496         if (master->debug_level)
   499             EC_DBG("Writing FOE data to slave %u...\n",
   497             EC_DBG("Processing FoE request for slave %u.\n",
   500                     request->slave->ring_position);
   498                     slave->ring_position);
   501 
   499 
   502         fsm->foe_request = &request->req;
   500         fsm->foe_request = &request->req;
   503         fsm->slave = slave;
   501         fsm->slave = slave;
   504         fsm->state = ec_fsm_master_state_foe_request;
   502         fsm->state = ec_fsm_master_state_foe_request;
   505         ec_fsm_foe_transfer(&fsm->fsm_foe, slave, &request->req);
   503         ec_fsm_foe_transfer(&fsm->fsm_foe, slave, &request->req);
   506         //(&fsm->fsm_foe, request->slave, request->offset, request->words);
       
   507         ec_fsm_foe_exec(&fsm->fsm_foe);
   504         ec_fsm_foe_exec(&fsm->fsm_foe);
   508         return 1;
   505         return 1;
   509     }
   506     }
   510 
   507 
   511     return 0;
   508     return 0;
   524     ec_master_t *master = fsm->master;
   521     ec_master_t *master = fsm->master;
   525     ec_slave_t *slave;
   522     ec_slave_t *slave;
   526 
   523 
   527     // Check for pending SDO requests
   524     // Check for pending SDO requests
   528     if (ec_fsm_master_action_process_sdo(fsm))
   525     if (ec_fsm_master_action_process_sdo(fsm))
       
   526         return;
       
   527 
       
   528     // Check for pending FoE requests
       
   529     if (ec_fsm_master_action_process_foe(fsm))
   529         return;
   530         return;
   530 
   531 
   531     // check, if slaves have an SDO dictionary to read out.
   532     // check, if slaves have an SDO dictionary to read out.
   532     for (slave = master->slaves;
   533     for (slave = master->slaves;
   533             slave < master->slaves + master->slave_count;
   534             slave < master->slaves + master->slave_count;
   910 {
   911 {
   911     ec_master_t *master = fsm->master;
   912     ec_master_t *master = fsm->master;
   912     ec_foe_request_t *request = fsm->foe_request;
   913     ec_foe_request_t *request = fsm->foe_request;
   913     ec_slave_t *slave = fsm->slave;
   914     ec_slave_t *slave = fsm->slave;
   914 
   915 
   915     if (ec_fsm_foe_exec(&fsm->fsm_foe)) return;
   916     if (ec_fsm_foe_exec(&fsm->fsm_foe))
       
   917         return;
   916 
   918 
   917     if (!ec_fsm_foe_success(&fsm->fsm_foe)) {
   919     if (!ec_fsm_foe_success(&fsm->fsm_foe)) {
   918         EC_ERR("Failed to handle FOE request to slave %u.\n",
   920         EC_ERR("Failed to handle FoE request to slave %u.\n",
   919                 slave->ring_position);
   921                 slave->ring_position);
   920         request->state = EC_INT_REQUEST_FAILURE;
   922         request->state = EC_INT_REQUEST_FAILURE;
   921         wake_up(&master->foe_queue);
   923         wake_up(&master->foe_queue);
   922         ec_fsm_master_restart(fsm);
   924         ec_fsm_master_restart(fsm);
   923         return;
   925         return;
   924     }
   926     }
   925 
   927 
   926     // finished writing FOE
   928     // finished transferring FoE
   927     if (master->debug_level)
   929     if (master->debug_level)
   928         EC_DBG("Finished writing %u words of FOE data to slave %u.\n",
   930         EC_DBG("Successfully transferred %u bytes of FoE data from/to"
   929                 request->data_size, slave->ring_position);
   931                 " slave %u.\n", request->data_size, slave->ring_position);
   930 
   932 
   931     request->state = EC_INT_REQUEST_SUCCESS;
   933     request->state = EC_INT_REQUEST_SUCCESS;
   932     wake_up(&master->foe_queue);
   934     wake_up(&master->foe_queue);
   933 
   935 
   934     ec_fsm_master_restart(fsm);
   936     ec_fsm_master_restart(fsm);