master/sdo_request.c
changeset 880 f6212c54a5e3
parent 869 6c2f4130ed46
child 881 c5ac0ab2d6cf
--- a/master/sdo_request.c	Thu Apr 03 13:34:13 2008 +0000
+++ b/master/sdo_request.c	Thu Apr 03 14:08:08 2008 +0000
@@ -69,6 +69,7 @@
     req->mem_size = 0;
     req->data_size = 0;
     req->dir = EC_DIR_OUTPUT;
+    req->timeout = 0; // no timeout
     req->state = EC_REQUEST_INIT;
 }
 
@@ -160,12 +161,25 @@
     return 0;
 }
 
+/*****************************************************************************/
+
+/** Checks, if the timeout was exceeded.
+ *
+ * \return non-zero if the timeout was exceeded, else zero.
+ */
+int ec_sdo_request_timed_out(const ec_sdo_request_t *req /**< Sdo request. */)
+{
+    return req->timeout
+        && jiffies - req->start_jiffies > HZ * req->timeout / 1000;
+}
+
 /*****************************************************************************
  * Realtime interface.
  ****************************************************************************/
 
 void ecrt_sdo_request_timeout(ec_sdo_request_t *req, uint32_t timeout)
 {
+    req->timeout = timeout;
 }
 
 /*****************************************************************************/
@@ -195,6 +209,7 @@
 {
     req->dir = EC_DIR_INPUT;
     req->state = EC_REQUEST_QUEUED;
+    req->start_jiffies = jiffies;
 }
 
 /*****************************************************************************/
@@ -203,6 +218,7 @@
 {
     req->dir = EC_DIR_OUTPUT;
     req->state = EC_REQUEST_QUEUED;
+    req->start_jiffies = jiffies;
 }
 
 /*****************************************************************************/