Replaced ec_fsm_coe_\(upload\|download\)() with ec_fsm_coe_transfer();

reading and writing access possible.
This commit is contained in:
Florian Pose 2008-03-04 10:18:02 +00:00
parent e90dab2a4e
commit 57094eaf48
11 changed files with 33 additions and 37 deletions

2
TODO
View File

@ -8,8 +8,6 @@ $Id$
Version 1.4.0:
* Realtime interface changes:
- SDO access.
* Mailbox handler
* READMEs for examples.
* Remove get_cycles() calls and references to cpu_khz to increase

View File

@ -180,10 +180,10 @@ void ec_fsm_coe_dictionary(ec_fsm_coe_t *fsm, /**< finite state machine */
/*****************************************************************************/
/**
Starts to download an Sdo to a slave.
Starts to transfer an Sdo to/from a slave.
*/
void ec_fsm_coe_download(
void ec_fsm_coe_transfer(
ec_fsm_coe_t *fsm, /**< State machine. */
ec_slave_t *slave, /**< EtherCAT slave. */
ec_sdo_request_t *request /**< Sdo request. */
@ -191,23 +191,10 @@ void ec_fsm_coe_download(
{
fsm->slave = slave;
fsm->request = request;
fsm->state = ec_fsm_coe_down_start;
}
/*****************************************************************************/
/**
Starts to upload an Sdo from a slave.
*/
void ec_fsm_coe_upload(ec_fsm_coe_t *fsm, /**< finite state machine */
ec_slave_t *slave, /**< EtherCAT slave */
ec_sdo_request_t *request /**< Sdo request */
)
{
fsm->slave = slave;
fsm->request = request;
fsm->state = ec_fsm_coe_up_start;
if (request->dir == EC_DIR_OUTPUT)
fsm->state = ec_fsm_coe_down_start;
else
fsm->state = ec_fsm_coe_up_start;
}
/*****************************************************************************/

View File

@ -73,8 +73,7 @@ void ec_fsm_coe_init(ec_fsm_coe_t *, ec_datagram_t *);
void ec_fsm_coe_clear(ec_fsm_coe_t *);
void ec_fsm_coe_dictionary(ec_fsm_coe_t *, ec_slave_t *);
void ec_fsm_coe_download(ec_fsm_coe_t *, ec_slave_t *, ec_sdo_request_t *);
void ec_fsm_coe_upload(ec_fsm_coe_t *, ec_slave_t *, ec_sdo_request_t *);
void ec_fsm_coe_transfer(ec_fsm_coe_t *, ec_slave_t *, ec_sdo_request_t *);
int ec_fsm_coe_exec(ec_fsm_coe_t *);
int ec_fsm_coe_success(ec_fsm_coe_t *);

View File

@ -184,7 +184,7 @@ void ec_fsm_coe_map_action_next_dir(
ec_sdo_request_address(&fsm->request, fsm->sync_sdo_index, 0);
ecrt_sdo_request_read(&fsm->request);
fsm->state = ec_fsm_coe_map_state_pdo_count;
ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
return;
}
@ -240,7 +240,7 @@ void ec_fsm_coe_map_action_next_pdo(
fsm->sync_subindex);
ecrt_sdo_request_read(&fsm->request);
fsm->state = ec_fsm_coe_map_state_pdo;
ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
return;
}
@ -297,7 +297,7 @@ void ec_fsm_coe_map_state_pdo(
ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0);
ecrt_sdo_request_read(&fsm->request);
fsm->state = ec_fsm_coe_map_state_pdo_entry_count;
ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
}
@ -344,7 +344,7 @@ void ec_fsm_coe_map_action_next_pdo_entry(
ec_sdo_request_address(&fsm->request, fsm->pdo->index, fsm->pdo_subindex);
ecrt_sdo_request_read(&fsm->request);
fsm->state = ec_fsm_coe_map_state_pdo_entry;
ec_fsm_coe_upload(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
return;
}

View File

@ -402,7 +402,7 @@ int ec_fsm_master_action_process_sdo(
fsm->sdo_request = req;
fsm->slave = slave;
fsm->state = ec_fsm_master_state_sdo_request;
ec_fsm_coe_upload(&fsm->fsm_coe, slave, req);
ec_fsm_coe_transfer(&fsm->fsm_coe, slave, req);
ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately
return 1;
}
@ -444,7 +444,7 @@ int ec_fsm_master_action_process_sdo(
fsm->sdo_request = &request->req;
fsm->slave = slave;
fsm->state = ec_fsm_master_state_sdo_request;
ec_fsm_coe_upload(&fsm->fsm_coe, slave, &request->req);
ec_fsm_coe_transfer(&fsm->fsm_coe, slave, &request->req);
ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately
return 1;
}

View File

@ -220,7 +220,7 @@ void ec_fsm_pdo_config_next_pdo(
fsm->pdo->index);
fsm->state = ec_fsm_pdo_config_state_zero_count;
ec_fsm_coe_download(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
}
@ -260,7 +260,7 @@ void ec_fsm_pdo_config_add_entry(
value, fsm->entry_count);
fsm->state = ec_fsm_pdo_config_state_add_entry;
ec_fsm_coe_download(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
}
@ -326,7 +326,7 @@ void ec_fsm_pdo_config_state_add_entry(
fsm->entry_count);
fsm->state = ec_fsm_pdo_config_state_entry_count;
ec_fsm_coe_download(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
return;
}

View File

@ -210,7 +210,7 @@ void ec_fsm_pdo_mapping_next_dir(
EC_DBG("Setting Pdo count to zero for SM%u.\n", fsm->sync->index);
fsm->state = ec_fsm_pdo_mapping_state_zero_count;
ec_fsm_coe_download(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
return;
}
@ -254,7 +254,7 @@ void ec_fsm_pdo_mapping_add_pdo(
fsm->pdo->index, fsm->pdo_count);
fsm->state = ec_fsm_pdo_mapping_state_add_pdo;
ec_fsm_coe_download(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
}
@ -320,7 +320,7 @@ void ec_fsm_pdo_mapping_state_add_pdo(
fsm->pdo_count);
fsm->state = ec_fsm_pdo_mapping_state_pdo_count;
ec_fsm_coe_download(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
return;
}

View File

@ -451,7 +451,7 @@ void ec_fsm_slave_config_enter_sdo_conf(ec_fsm_slave_config_t *fsm /**< slave st
fsm->request = list_entry(fsm->slave->config->sdo_configs.next,
ec_sdo_request_t, list);
ecrt_sdo_request_write(fsm->request);
ec_fsm_coe_download(&fsm->fsm_coe, fsm->slave, fsm->request);
ec_fsm_coe_transfer(&fsm->fsm_coe, fsm->slave, fsm->request);
ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately
}
@ -480,7 +480,7 @@ void ec_fsm_slave_config_state_sdo_conf(
fsm->request = list_entry(fsm->request->list.next, ec_sdo_request_t,
list);
ecrt_sdo_request_write(fsm->request);
ec_fsm_coe_download(&fsm->fsm_coe, fsm->slave, fsm->request);
ec_fsm_coe_transfer(&fsm->fsm_coe, fsm->slave, fsm->request);
ec_fsm_coe_exec(&fsm->fsm_coe); // execute immediately
return;
}

View File

@ -57,6 +57,7 @@ void ec_sdo_request_init(
req->data = NULL;
req->mem_size = 0;
req->data_size = 0;
req->dir = EC_DIR_OUTPUT;
req->state = EC_REQUEST_COMPLETE;
}
@ -181,6 +182,7 @@ ec_sdo_request_error_t ecrt_sdo_request_error(const ec_sdo_request_t *req)
void ecrt_sdo_request_read(ec_sdo_request_t *req)
{
req->dir = EC_DIR_INPUT;
req->state = EC_REQUEST_QUEUED;
}
@ -188,6 +190,7 @@ void ecrt_sdo_request_read(ec_sdo_request_t *req)
void ecrt_sdo_request_write(ec_sdo_request_t *req)
{
req->dir = EC_DIR_OUTPUT;
req->state = EC_REQUEST_QUEUED;
}
@ -199,3 +202,5 @@ EXPORT_SYMBOL(ecrt_sdo_request_state);
EXPORT_SYMBOL(ecrt_sdo_request_error);
EXPORT_SYMBOL(ecrt_sdo_request_read);
EXPORT_SYMBOL(ecrt_sdo_request_write);
/*****************************************************************************/

View File

@ -58,6 +58,9 @@ struct ec_sdo_request {
uint8_t *data; /**< Pointer to Sdo data. */
size_t mem_size; /**< Size of Sdo data memory. */
size_t data_size; /**< Size of Sdo data. */
ec_direction_t dir; /**< Direction. EC_DIR_OUTPUT means downloading to
the slave, EC_DIR_INPUT means uploading from the
slave. */
ec_request_state_t state; /**< Sdo request state. */
};

View File

@ -709,6 +709,10 @@ ec_sdo_request_t *ecrt_slave_config_create_sdo_request(ec_slave_config_t *sc,
kfree(req);
return NULL;
}
// prepare data for optional writing
memset(req->data, 0x00, size);
req->data_size = size;
list_add_tail(&req->list, &sc->sdo_requests);
return req;