Replaced ec_fsm_coe_\(upload\|download\)() with ec_fsm_coe_transfer();
reading and writing access possible.
This commit is contained in:
parent
e90dab2a4e
commit
57094eaf48
2
TODO
2
TODO
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -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 *);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue