master/fsm_slave.c
changeset 1598 5ad4eb4963a6
parent 1597 491dea6f4fd7
child 1601 a784812c787f
equal deleted inserted replaced
1597:491dea6f4fd7 1598:5ad4eb4963a6
   140     ec_master_t *master = slave->master;
   140     ec_master_t *master = slave->master;
   141     ec_master_sdo_request_t *request, *next;
   141     ec_master_sdo_request_t *request, *next;
   142 
   142 
   143     // search the first external request to be processed
   143     // search the first external request to be processed
   144     list_for_each_entry_safe(request, next, &slave->slave_sdo_requests, list) {
   144     list_for_each_entry_safe(request, next, &slave->slave_sdo_requests, list) {
       
   145 
       
   146         if (slave->current_state == EC_SLAVE_STATE_INIT) {
       
   147             EC_WARN("Postponing SDO request, slave %u is in INIT.\n",
       
   148                     slave->ring_position);
       
   149             return 0;
       
   150         }
   145         list_del_init(&request->list); // dequeue
   151         list_del_init(&request->list); // dequeue
   146         request->req.state = EC_INT_REQUEST_BUSY;
   152         request->req.state = EC_INT_REQUEST_BUSY;
   147 
       
   148         if (slave->current_state == EC_SLAVE_STATE_INIT) {
       
   149             EC_ERR("Discarding SDO request, slave %u is in INIT.\n",
       
   150                     slave->ring_position);
       
   151             request->req.state = EC_INT_REQUEST_FAILURE;
       
   152             wake_up(&slave->sdo_queue);
       
   153             continue;
       
   154         }
       
   155 
   153 
   156         // Found pending SDO request. Execute it!
   154         // Found pending SDO request. Execute it!
   157         if (master->debug_level)
   155         if (master->debug_level)
   158             EC_DBG("Processing SDO request for slave %u...\n",
   156             EC_DBG("Processing SDO request for slave %u...\n",
   159                     slave->ring_position);
   157                     slave->ring_position);