228 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
229 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
229 |
230 |
230 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
231 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
231 EC_ERR("Failed to read number of assigned PDOs for SM%u" |
232 EC_ERR("Failed to read number of assigned PDOs for SM%u" |
232 " of slave %u.\n", fsm->sync_index, fsm->slave->ring_position); |
233 " of slave %u.\n", fsm->sync_index, fsm->slave->ring_position); |
233 fsm->state = ec_fsm_pdo_state_error; |
234 ec_fsm_pdo_read_action_next_sync(fsm); |
234 return; |
235 return; |
235 } |
236 } |
236 |
237 |
237 if (fsm->request.data_size != sizeof(uint8_t)) { |
238 if (fsm->request.data_size != sizeof(uint8_t)) { |
238 EC_ERR("Invalid data size %u returned when uploading SDO 0x%04X:%02X " |
239 EC_ERR("Invalid data size %u returned when uploading SDO 0x%04X:%02X " |
239 "from slave %u.\n", fsm->request.data_size, |
240 "from slave %u.\n", fsm->request.data_size, |
240 fsm->request.index, fsm->request.subindex, |
241 fsm->request.index, fsm->request.subindex, |
241 fsm->slave->ring_position); |
242 fsm->slave->ring_position); |
242 fsm->state = ec_fsm_pdo_state_error; |
243 ec_fsm_pdo_read_action_next_sync(fsm); |
243 return; |
244 return; |
244 } |
245 } |
245 fsm->pdo_count = EC_READ_U8(fsm->request.data); |
246 fsm->pdo_count = EC_READ_U8(fsm->request.data); |
246 |
247 |
247 if (fsm->slave->master->debug_level) |
248 if (fsm->slave->master->debug_level) |
270 return; |
271 return; |
271 } |
272 } |
272 |
273 |
273 // finished reading PDO configuration |
274 // finished reading PDO configuration |
274 |
275 |
275 if (ec_pdo_list_copy(&fsm->sync->pdos, &fsm->pdos)) { |
276 ec_pdo_list_copy(&fsm->sync->pdos, &fsm->pdos); |
276 fsm->state = ec_fsm_pdo_state_error; |
|
277 return; |
|
278 } |
|
279 |
|
280 ec_pdo_list_clear_pdos(&fsm->pdos); |
277 ec_pdo_list_clear_pdos(&fsm->pdos); |
281 |
278 |
282 // next sync manager |
279 // next sync manager |
283 ec_fsm_pdo_read_action_next_sync(fsm); |
280 ec_fsm_pdo_read_action_next_sync(fsm); |
284 } |
281 } |
294 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
291 if (ec_fsm_coe_exec(fsm->fsm_coe)) return; |
295 |
292 |
296 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
293 if (!ec_fsm_coe_success(fsm->fsm_coe)) { |
297 EC_ERR("Failed to read index of assigned PDO %u from SM%u.\n", |
294 EC_ERR("Failed to read index of assigned PDO %u from SM%u.\n", |
298 fsm->pdo_pos, fsm->sync_index); |
295 fsm->pdo_pos, fsm->sync_index); |
299 fsm->state = ec_fsm_pdo_state_error; |
296 ec_fsm_pdo_read_action_next_sync(fsm); |
300 return; |
297 return; |
301 } |
298 } |
302 |
299 |
303 if (fsm->request.data_size != sizeof(uint16_t)) { |
300 if (fsm->request.data_size != sizeof(uint16_t)) { |
304 EC_ERR("Invalid data size %u returned when uploading SDO 0x%04X:%02X " |
301 EC_ERR("Invalid data size %u returned when uploading SDO 0x%04X:%02X " |
305 "from slave %u.\n", fsm->request.data_size, |
302 "from slave %u.\n", fsm->request.data_size, |
306 fsm->request.index, fsm->request.subindex, |
303 fsm->request.index, fsm->request.subindex, |
307 fsm->slave->ring_position); |
304 fsm->slave->ring_position); |
308 fsm->state = ec_fsm_pdo_state_error; |
305 ec_fsm_pdo_read_action_next_sync(fsm); |
309 return; |
306 return; |
310 } |
307 } |
311 |
308 |
312 if (!(fsm->pdo = (ec_pdo_t *) |
309 if (!(fsm->pdo = (ec_pdo_t *) |
313 kmalloc(sizeof(ec_pdo_t), GFP_KERNEL))) { |
310 kmalloc(sizeof(ec_pdo_t), GFP_KERNEL))) { |
314 EC_ERR("Failed to allocate PDO.\n"); |
311 EC_ERR("Failed to allocate PDO.\n"); |
315 fsm->state = ec_fsm_pdo_state_error; |
312 ec_fsm_pdo_read_action_next_sync(fsm); |
316 return; |
313 return; |
317 } |
314 } |
318 |
315 |
319 ec_pdo_init(fsm->pdo); |
316 ec_pdo_init(fsm->pdo); |
320 fsm->pdo->index = EC_READ_U16(fsm->request.data); |
317 fsm->pdo->index = EC_READ_U16(fsm->request.data); |