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); |