include/ecrt.h
changeset 858 69122084d066
parent 851 2bb18adcd204
child 861 6e3de145421a
--- a/include/ecrt.h	Tue Mar 04 09:20:14 2008 +0000
+++ b/include/ecrt.h	Tue Mar 04 09:57:36 2008 +0000
@@ -131,6 +131,9 @@
 struct ec_domain;
 typedef struct ec_domain ec_domain_t; /**< \see ec_domain */
 
+struct ec_sdo_request;
+typedef struct ec_sdo_request ec_sdo_request_t; /**< \see ec_sdo_request. */
+
 /*****************************************************************************/
 
 /** Bus state.
@@ -248,6 +251,28 @@
                        offset in the process data. */
 } ec_pdo_entry_reg_t;
 
+/*****************************************************************************/
+
+/** Generic request state.
+ */
+typedef enum {
+    EC_REQUEST_QUEUED,
+    EC_REQUEST_IN_PROGRESS,
+    EC_REQUEST_COMPLETE,
+    EC_REQUEST_FAILURE
+} ec_request_state_t;
+
+/*****************************************************************************/
+
+/** Sdo request error.
+ *
+ * This is used as return type of ecrt_sdo_request_error().
+ */
+typedef enum {
+    EC_SDO_REQUEST_SUCCESS, /**< There is no error. */
+    EC_SDO_REQUEST_TIMEOUT, /**< The request timed out. */
+} ec_sdo_request_error_t;
+
 /******************************************************************************
  * Global functions
  *****************************************************************************/
@@ -513,6 +538,18 @@
         uint32_t value /**< Value to set. */
         );
 
+/** Create an Sdo request to exchange Sdos during realtime operation.
+ *
+ * The created Sdo request object is freed automatically when the master is
+ * released.
+ */
+ec_sdo_request_t *ecrt_slave_config_create_sdo_request(
+        ec_slave_config_t *sc, /**< Slave configuration. */
+        uint16_t index, /**< Sdo index. */
+        uint8_t subindex, /**< Sdo subindex. */
+        size_t size /**< Data size to reserve. */
+        );
+
 /** Outputs the state of the slave configuration.
  *
  * Stores the state information in the given \a state structure.
@@ -599,6 +636,62 @@
                                    information. */
         );
 
+/*****************************************************************************
+ * Sdo request methods.
+ ****************************************************************************/
+
+/** Set the timeout for an Sdo request.
+ *
+ * If the request cannot be processed in the specified time, if will be marked
+ * as failed.
+ */
+void ecrt_sdo_request_timeout(
+        ec_sdo_request_t *req, /**< Sdo request. */
+        uint32_t timeout /**< Timeout in milliseconds. */
+        );
+
+/** Access to the Sdo request's data.
+ *
+ * \attention The return value is invalid during (ecrt_sdo_request_state() !=
+ * EC_REQUEST_COMPLETE) a read operation, because the internal Sdo data
+ * memory could be re-allocated.
+ *
+ * \return Pointer to the internal Sdo data memory.
+ */
+uint8_t *ecrt_sdo_request_data(
+        ec_sdo_request_t *req /**< Sdo request. */
+        );
+
+/** Get the current state of the Sdo request.
+ *
+ * \return Request state.
+ */
+ec_request_state_t ecrt_sdo_request_state(
+    const ec_sdo_request_t *req /**< Sdo request. */
+    );
+
+/** Get the error code of the Sdo request.
+ */
+ec_sdo_request_error_t ecrt_sdo_request_error(
+    const ec_sdo_request_t *req /**< Sdo request. */
+    );
+
+/** Schedule an Sdo write operation.
+ */
+void ecrt_sdo_request_write(
+        ec_sdo_request_t *req /**< Sdo request. */
+        );
+
+/** Schedule an Sdo read operation .
+ *
+ * \attention After calling this function, the return value of
+ * ecrt_sdo_request_data() will be invalid until ecrt_sdo_request_state()
+ * is EC_REQUEST_COMPLETE.
+ */
+void ecrt_sdo_request_read(
+        ec_sdo_request_t *req /**< Sdo request. */
+        );
+
 /******************************************************************************
  * Bitwise read/write macros
  *****************************************************************************/