Removed 'sdo' field from ec_sdo_request_t; Exported

ec_sdo_request_\(init_read|clear\)().
This commit is contained in:
Florian Pose 2007-09-19 17:25:48 +00:00
parent eb6e709e57
commit 0fe3931b47
4 changed files with 13 additions and 21 deletions

View File

@ -51,10 +51,6 @@ ssize_t ec_show_sdo_entry_attribute(struct kobject *, struct attribute *,
void ec_sdo_clear(struct kobject *);
void ec_sdo_entry_clear(struct kobject *);
void ec_sdo_request_init_read(ec_sdo_request_t *, ec_sdo_t *,
ec_sdo_entry_t *);
void ec_sdo_request_clear(ec_sdo_request_t *);
/*****************************************************************************/
/** \cond */
@ -367,12 +363,11 @@ ssize_t ec_sdo_entry_read_value(ec_sdo_entry_t *entry, /**< SDO entry */
char *buffer /**< target buffer */
)
{
ec_sdo_t *sdo = entry->sdo;
ec_master_t *master = sdo->slave->master;
ec_master_t *master = entry->sdo->slave->master;
off_t off = 0;
ec_sdo_request_t request;
ec_sdo_request_init_read(&request, sdo, entry);
ec_sdo_request_init_read(&request, entry);
// schedule request.
down(&master->sdo_sem);
@ -431,11 +426,9 @@ ssize_t ec_show_sdo_entry_attribute(struct kobject *kobj, /**< kobject */
*/
void ec_sdo_request_init_read(ec_sdo_request_t *req, /**< SDO request */
ec_sdo_t *sdo, /**< SDO */
ec_sdo_entry_t *entry /**< SDO entry */
)
{
req->sdo = sdo;
req->entry = entry;
req->data = NULL;
req->size = 0;

View File

@ -109,7 +109,6 @@ ec_sdo_data_t;
typedef struct
{
struct list_head list; /**< list item */
ec_sdo_t *sdo;
ec_sdo_entry_t *entry;
uint8_t *data; /**< pointer to SDO data */
size_t size; /**< size of SDO data */
@ -125,6 +124,9 @@ void ec_sdo_destroy(ec_sdo_t *);
int ec_sdo_entry_init(ec_sdo_entry_t *, uint8_t, ec_sdo_t *);
void ec_sdo_entry_destroy(ec_sdo_entry_t *);
void ec_sdo_request_init_read(ec_sdo_request_t *, ec_sdo_entry_t *);
void ec_sdo_request_clear(ec_sdo_request_t *);
/*****************************************************************************/
#endif

View File

@ -1158,13 +1158,12 @@ void ec_fsm_coe_up_start(ec_fsm_coe_t *fsm /**< finite state machine */)
ec_slave_t *slave = fsm->slave;
ec_master_t *master = slave->master;
ec_sdo_request_t *request = fsm->request;
ec_sdo_t *sdo = request->sdo;
ec_sdo_entry_t *entry = request->entry;
uint8_t *data;
if (master->debug_level)
EC_DBG("Uploading SDO 0x%04X:%i from slave %i.\n",
sdo->index, entry->subindex, slave->ring_position);
entry->sdo->index, entry->subindex, slave->ring_position);
if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 10))) {
fsm->state = ec_fsm_coe_error;
@ -1173,7 +1172,7 @@ void ec_fsm_coe_up_start(ec_fsm_coe_t *fsm /**< finite state machine */)
EC_WRITE_U16(data, 0x2 << 12); // SDO request
EC_WRITE_U8 (data + 2, 0x2 << 5); // initiate upload request
EC_WRITE_U16(data + 3, sdo->index);
EC_WRITE_U16(data + 3, entry->sdo->index);
EC_WRITE_U8 (data + 5, entry->subindex);
memset(data + 6, 0x00, 4);
@ -1289,7 +1288,6 @@ void ec_fsm_coe_up_response(ec_fsm_coe_t *fsm /**< finite state machine */)
uint8_t *data, mbox_prot;
size_t rec_size, data_size;
ec_sdo_request_t *request = fsm->request;
ec_sdo_t *sdo = request->sdo;
ec_sdo_entry_t *entry = request->entry;
uint32_t complete_size;
unsigned int expedited, size_specified;
@ -1340,7 +1338,7 @@ void ec_fsm_coe_up_response(ec_fsm_coe_t *fsm /**< finite state machine */)
if (EC_READ_U16(data) >> 12 == 0x2 && // SDO request
EC_READ_U8 (data + 2) >> 5 == 0x4) { // abort SDO transfer request
EC_ERR("SDO upload 0x%04X:%X aborted on slave %i.\n",
sdo->index, entry->subindex, slave->ring_position);
entry->sdo->index, entry->subindex, slave->ring_position);
ec_canopen_abort_msg(EC_READ_U32(data + 6));
fsm->state = ec_fsm_coe_error;
return;
@ -1348,9 +1346,9 @@ void ec_fsm_coe_up_response(ec_fsm_coe_t *fsm /**< finite state machine */)
if (EC_READ_U16(data) >> 12 != 0x3 || // SDO response
EC_READ_U8 (data + 2) >> 5 != 0x2 || // upload response
EC_READ_U16(data + 3) != sdo->index || // index
EC_READ_U16(data + 3) != entry->sdo->index || // index
EC_READ_U8 (data + 5) != entry->subindex) { // subindex
EC_ERR("SDO upload 0x%04X:%X failed:\n", sdo->index, entry->subindex);
EC_ERR("SDO upload 0x%04X:%X failed:\n", entry->sdo->index, entry->subindex);
EC_ERR("Invalid SDO upload response at slave %i!\n",
slave->ring_position);
ec_print_data(data, rec_size);
@ -1531,7 +1529,6 @@ void ec_fsm_coe_up_seg_response(ec_fsm_coe_t *fsm /**< finite state machine */)
uint8_t *data, mbox_prot;
size_t rec_size, data_size;
ec_sdo_request_t *request = fsm->request;
ec_sdo_t *sdo = request->sdo;
ec_sdo_entry_t *entry = request->entry;
uint32_t seg_size;
unsigned int last_segment;
@ -1582,7 +1579,7 @@ void ec_fsm_coe_up_seg_response(ec_fsm_coe_t *fsm /**< finite state machine */)
if (EC_READ_U16(data) >> 12 == 0x2 && // SDO request
EC_READ_U8 (data + 2) >> 5 == 0x4) { // abort SDO transfer request
EC_ERR("SDO upload 0x%04X:%X aborted on slave %i.\n",
sdo->index, entry->subindex, slave->ring_position);
entry->sdo->index, entry->subindex, slave->ring_position);
ec_canopen_abort_msg(EC_READ_U32(data + 6));
fsm->state = ec_fsm_coe_error;
return;
@ -1590,7 +1587,7 @@ void ec_fsm_coe_up_seg_response(ec_fsm_coe_t *fsm /**< finite state machine */)
if (EC_READ_U16(data) >> 12 != 0x3 || // SDO response
EC_READ_U8 (data + 2) >> 5 != 0x0) { // upload segment response
EC_ERR("SDO upload 0x%04X:%X failed:\n", sdo->index, entry->subindex);
EC_ERR("SDO upload 0x%04X:%X failed:\n", entry->sdo->index, entry->subindex);
EC_ERR("Invalid SDO upload segment response at slave %i!\n",
slave->ring_position);
ec_print_data(data, rec_size);

View File

@ -382,7 +382,7 @@ int ec_fsm_master_action_process_sdo(
request->state = EC_REQUEST_IN_PROGRESS;
up(&master->sdo_sem);
slave = request->sdo->slave;
slave = request->entry->sdo->slave;
if (slave->current_state == EC_SLAVE_STATE_INIT ||
slave->online_state == EC_SLAVE_OFFLINE ||
slave->error_flag) {