--- 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
*****************************************************************************/