master/fsm_coe_map.c
changeset 852 ab439cbc7a81
parent 849 4b712ec8929d
child 854 f4f53be425ac
equal deleted inserted replaced
851:2bb18adcd204 852:ab439cbc7a81
    68 void ec_fsm_coe_map_init(
    68 void ec_fsm_coe_map_init(
    69         ec_fsm_coe_map_t *fsm, /**< finite state machine */
    69         ec_fsm_coe_map_t *fsm, /**< finite state machine */
    70         ec_fsm_coe_t *fsm_coe /**< CoE state machine to use */
    70         ec_fsm_coe_t *fsm_coe /**< CoE state machine to use */
    71         )
    71         )
    72 {
    72 {
       
    73     fsm->fsm_coe = fsm_coe;
    73     fsm->state = NULL;
    74     fsm->state = NULL;
    74     fsm->fsm_coe = fsm_coe;
    75     ec_sdo_request_init(&fsm->request);
    75     ec_pdo_mapping_init(&fsm->mapping);
    76     ec_pdo_mapping_init(&fsm->mapping);
    76 }
    77 }
    77 
    78 
    78 /*****************************************************************************/
    79 /*****************************************************************************/
    79 
    80 
    81    Destructor.
    82    Destructor.
    82 */
    83 */
    83 
    84 
    84 void ec_fsm_coe_map_clear(ec_fsm_coe_map_t *fsm /**< finite state machine */)
    85 void ec_fsm_coe_map_clear(ec_fsm_coe_map_t *fsm /**< finite state machine */)
    85 {
    86 {
       
    87     ec_sdo_request_clear(&fsm->request);
    86     ec_pdo_mapping_clear(&fsm->mapping);
    88     ec_pdo_mapping_clear(&fsm->mapping);
    87 }
    89 }
    88 
    90 
    89 /*****************************************************************************/
    91 /*****************************************************************************/
    90 
    92 
   177             EC_DBG("Reading Pdo mapping of sync manager %u of slave %u.\n",
   179             EC_DBG("Reading Pdo mapping of sync manager %u of slave %u.\n",
   178                     fsm->sync->index, slave->ring_position);
   180                     fsm->sync->index, slave->ring_position);
   179 
   181 
   180         ec_pdo_mapping_clear_pdos(&fsm->mapping);
   182         ec_pdo_mapping_clear_pdos(&fsm->mapping);
   181 
   183 
   182         ec_sdo_request_init(&fsm->request, fsm->sync_sdo_index, 0);
   184         ec_sdo_request_read(&fsm->request, fsm->sync_sdo_index, 0);
   183         fsm->state = ec_fsm_coe_map_state_pdo_count;
   185         fsm->state = ec_fsm_coe_map_state_pdo_count;
   184         ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
   186         ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
   185         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   187         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   186         return;
   188         return;
   187     }
   189     }
   231 void ec_fsm_coe_map_action_next_pdo(
   233 void ec_fsm_coe_map_action_next_pdo(
   232         ec_fsm_coe_map_t *fsm /**< finite state machine */
   234         ec_fsm_coe_map_t *fsm /**< finite state machine */
   233         )
   235         )
   234 {
   236 {
   235     if (fsm->sync_subindex <= fsm->sync_subindices) {
   237     if (fsm->sync_subindex <= fsm->sync_subindices) {
   236         ec_sdo_request_init(&fsm->request, fsm->sync_sdo_index,
   238         ec_sdo_request_read(&fsm->request, fsm->sync_sdo_index,
   237                 fsm->sync_subindex);
   239                 fsm->sync_subindex);
   238         fsm->state = ec_fsm_coe_map_state_pdo;
   240         fsm->state = ec_fsm_coe_map_state_pdo;
   239         ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
   241         ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
   240         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   242         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   241         return;
   243         return;
   288     if (fsm->slave->master->debug_level)
   290     if (fsm->slave->master->debug_level)
   289         EC_DBG("  Pdo 0x%04X.\n", fsm->pdo->index);
   291         EC_DBG("  Pdo 0x%04X.\n", fsm->pdo->index);
   290 
   292 
   291     list_add_tail(&fsm->pdo->list, &fsm->mapping.pdos);
   293     list_add_tail(&fsm->pdo->list, &fsm->mapping.pdos);
   292 
   294 
   293     ec_sdo_request_init(&fsm->request, fsm->pdo->index, 0);
   295     ec_sdo_request_read(&fsm->request, fsm->pdo->index, 0);
   294     fsm->state = ec_fsm_coe_map_state_pdo_entry_count;
   296     fsm->state = ec_fsm_coe_map_state_pdo_entry_count;
   295     ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
   297     ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
   296     ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   298     ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   297 }
   299 }
   298 
   300 
   334 void ec_fsm_coe_map_action_next_pdo_entry(
   336 void ec_fsm_coe_map_action_next_pdo_entry(
   335         ec_fsm_coe_map_t *fsm /**< finite state machine */
   337         ec_fsm_coe_map_t *fsm /**< finite state machine */
   336         )
   338         )
   337 {
   339 {
   338     if (fsm->pdo_subindex <= fsm->pdo_subindices) {
   340     if (fsm->pdo_subindex <= fsm->pdo_subindices) {
   339         ec_sdo_request_init(&fsm->request, fsm->pdo->index, fsm->pdo_subindex);
   341         ec_sdo_request_read(&fsm->request, fsm->pdo->index, fsm->pdo_subindex);
   340         fsm->state = ec_fsm_coe_map_state_pdo_entry;
   342         fsm->state = ec_fsm_coe_map_state_pdo_entry;
   341         ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
   343         ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
   342         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   344         ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
   343         return;
   345         return;
   344     }
   346     }