master/fsm_pdo.c
changeset 1472 6ca667095c67
parent 1363 11c0b2caa253
child 1507 68e89abadd19
equal deleted inserted replaced
1471:2ec173081b7f 1472:6ca667095c67
   212     }
   212     }
   213 
   213 
   214     if (slave->master->debug_level)
   214     if (slave->master->debug_level)
   215         EC_DBG("Reading of PDO configuration finished.\n");
   215         EC_DBG("Reading of PDO configuration finished.\n");
   216 
   216 
       
   217     ec_pdo_list_clear_pdos(&fsm->pdos);
   217     fsm->state = ec_fsm_pdo_state_end;
   218     fsm->state = ec_fsm_pdo_state_end;
   218 }
   219 }
   219 
   220 
   220 /*****************************************************************************/
   221 /*****************************************************************************/
   221 
   222 
   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);
   342         return;
   339         return;
   343 
   340 
   344     if (!ec_fsm_pdo_entry_success(&fsm->fsm_pdo_entry)) {
   341     if (!ec_fsm_pdo_entry_success(&fsm->fsm_pdo_entry)) {
   345         EC_ERR("Failed to read mapped PDO entries for PDO 0x%04X.\n",
   342         EC_ERR("Failed to read mapped PDO entries for PDO 0x%04X.\n",
   346                 fsm->pdo->index);
   343                 fsm->pdo->index);
   347         fsm->state = ec_fsm_pdo_state_error;
   344         ec_fsm_pdo_read_action_next_sync(fsm);
   348         return;
   345         return;
   349     }
   346     }
   350 
   347 
   351     // next PDO
   348     // next PDO
   352     fsm->pdo_pos++;
   349     fsm->pdo_pos++;