master/fsm_coe_map.c
changeset 1045 c4fd73507076
parent 1044 0d73427db362
child 1053 0cb9604cbaa7
equal deleted inserted replaced
1044:0d73427db362 1045:c4fd73507076
    59 void ec_fsm_coe_map_action_next_pdo(ec_fsm_coe_map_t *);
    59 void ec_fsm_coe_map_action_next_pdo(ec_fsm_coe_map_t *);
    60 void ec_fsm_coe_map_action_next_pdo_entry(ec_fsm_coe_map_t *);
    60 void ec_fsm_coe_map_action_next_pdo_entry(ec_fsm_coe_map_t *);
    61 
    61 
    62 /*****************************************************************************/
    62 /*****************************************************************************/
    63 
    63 
       
    64 /** Sdo upload timeout in ms for reading Pdo assigment/mapping.
       
    65  */
       
    66 #define EC_FSM_COE_MAP_UPLOAD_TIMEOUT 3000
       
    67 
       
    68 /*****************************************************************************/
       
    69 
    64 /**
    70 /**
    65    Constructor.
    71    Constructor.
    66 */
    72 */
    67 
    73 
    68 void ec_fsm_coe_map_init(
    74 void ec_fsm_coe_map_init(
    71         )
    77         )
    72 {
    78 {
    73     fsm->fsm_coe = fsm_coe;
    79     fsm->fsm_coe = fsm_coe;
    74     fsm->state = NULL;
    80     fsm->state = NULL;
    75     ec_sdo_request_init(&fsm->request);
    81     ec_sdo_request_init(&fsm->request);
       
    82     fsm->request.response_timeout = EC_FSM_COE_MAP_UPLOAD_TIMEOUT;
    76     ec_pdo_list_init(&fsm->pdos);
    83     ec_pdo_list_init(&fsm->pdos);
    77 }
    84 }
    78 
    85 
    79 /*****************************************************************************/
    86 /*****************************************************************************/
    80 
    87 
   180                     fsm->sync->index, slave->ring_position);
   187                     fsm->sync->index, slave->ring_position);
   181 
   188 
   182         ec_pdo_list_clear_pdos(&fsm->pdos);
   189         ec_pdo_list_clear_pdos(&fsm->pdos);
   183 
   190 
   184         ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, 0);
   191         ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, 0);
   185         fsm->request.response_timeout = 10000;
       
   186         ecrt_sdo_request_read(&fsm->request);
   192         ecrt_sdo_request_read(&fsm->request);
   187         fsm->state = ec_fsm_coe_map_state_pdo_count;
   193         fsm->state = ec_fsm_coe_map_state_pdo_count;
   188         ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
   194         ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
   189         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   195         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   190         return;
   196         return;
   245         )
   251         )
   246 {
   252 {
   247     if (fsm->sync_subindex <= fsm->sync_subindices) {
   253     if (fsm->sync_subindex <= fsm->sync_subindices) {
   248         ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index,
   254         ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index,
   249                 fsm->sync_subindex);
   255                 fsm->sync_subindex);
   250         fsm->request.response_timeout = 5000;
       
   251         ecrt_sdo_request_read(&fsm->request);
   256         ecrt_sdo_request_read(&fsm->request);
   252         fsm->state = ec_fsm_coe_map_state_pdo;
   257         fsm->state = ec_fsm_coe_map_state_pdo;
   253         ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
   258         ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
   254         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   259         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   255         return;
   260         return;
   312         EC_DBG("  Pdo 0x%04X.\n", fsm->pdo->index);
   317         EC_DBG("  Pdo 0x%04X.\n", fsm->pdo->index);
   313 
   318 
   314     list_add_tail(&fsm->pdo->list, &fsm->pdos.list);
   319     list_add_tail(&fsm->pdo->list, &fsm->pdos.list);
   315 
   320 
   316     ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0);
   321     ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0);
   317     fsm->request.response_timeout = 5000;
       
   318     ecrt_sdo_request_read(&fsm->request);
   322     ecrt_sdo_request_read(&fsm->request);
   319     fsm->state = ec_fsm_coe_map_state_pdo_entry_count;
   323     fsm->state = ec_fsm_coe_map_state_pdo_entry_count;
   320     ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
   324     ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
   321     ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   325     ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   322 }
   326 }
   368         ec_fsm_coe_map_t *fsm /**< finite state machine */
   372         ec_fsm_coe_map_t *fsm /**< finite state machine */
   369         )
   373         )
   370 {
   374 {
   371     if (fsm->pdo_subindex <= fsm->pdo_subindices) {
   375     if (fsm->pdo_subindex <= fsm->pdo_subindices) {
   372         ec_sdo_request_address(&fsm->request, fsm->pdo->index, fsm->pdo_subindex);
   376         ec_sdo_request_address(&fsm->request, fsm->pdo->index, fsm->pdo_subindex);
   373         fsm->request.response_timeout = 5000;
       
   374         ecrt_sdo_request_read(&fsm->request);
   377         ecrt_sdo_request_read(&fsm->request);
   375         fsm->state = ec_fsm_coe_map_state_pdo_entry;
   378         fsm->state = ec_fsm_coe_map_state_pdo_entry;
   376         ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
   379         ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
   377         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   380         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   378         return;
   381         return;