From c48a2cc612cdf0e377f60eca583b3c01cc965c48 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Wed, 19 Sep 2007 17:25:48 +0000 Subject: [PATCH] Removed 'sdo' field from ec_sdo_request_t; Exported ec_sdo_request_\(init_read|clear\)(). --- master/canopen.c | 11 ++--------- master/canopen.h | 4 +++- master/fsm_coe.c | 17 +++++++---------- master/fsm_master.c | 2 +- 4 files changed, 13 insertions(+), 21 deletions(-) diff --git a/master/canopen.c b/master/canopen.c index 7de0897f..718c652c 100644 --- a/master/canopen.c +++ b/master/canopen.c @@ -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; diff --git a/master/canopen.h b/master/canopen.h index e6d2bf32..43e18eac 100644 --- a/master/canopen.h +++ b/master/canopen.h @@ -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 diff --git a/master/fsm_coe.c b/master/fsm_coe.c index fdb800f0..d514922c 100644 --- a/master/fsm_coe.c +++ b/master/fsm_coe.c @@ -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); diff --git a/master/fsm_master.c b/master/fsm_master.c index 1a375fa4..5488bef6 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -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) { -- GitLab