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