From 341eb78b8490995fb20c353b1101257bdb662f20 Mon Sep 17 00:00:00 2001
From: Florian Pose <fp@igh-essen.com>
Date: Tue, 25 Apr 2006 12:04:04 +0000
Subject: [PATCH] Locking callback interface.

---
 include/ecrt.h  |  3 +++
 master/master.c | 22 ++++++++++++++++++++++
 master/master.h |  3 +++
 3 files changed, 28 insertions(+)

diff --git a/include/ecrt.h b/include/ecrt.h
index 5a43de8b..e69b0140 100644
--- a/include/ecrt.h
+++ b/include/ecrt.h
@@ -88,6 +88,9 @@ void ecrt_release_master(ec_master_t *master);
  *  Master methods
  *****************************************************************************/
 
+void ecrt_master_callbacks(ec_master_t *master, int (*request_cb)(void *),
+                           void (*release_cb)(void *), void *cb_data);
+
 ec_domain_t *ecrt_master_create_domain(ec_master_t *master);
 
 int ecrt_master_activate(ec_master_t *master);
diff --git a/master/master.c b/master/master.c
index bc6c9844..56db490d 100644
--- a/master/master.c
+++ b/master/master.c
@@ -208,6 +208,10 @@ void ec_master_reset(ec_master_t *master /**< EtherCAT master */)
     master->stats.t_last = 0;
 
     master->mode = EC_MASTER_MODE_IDLE;
+
+    master->request_cb = NULL;
+    master->release_cb = NULL;
+    master->cb_data = NULL;
 }
 
 /*****************************************************************************/
@@ -1409,6 +1413,24 @@ ec_slave_t *ecrt_master_get_slave(const ec_master_t *master, /**< Master */
 
 /*****************************************************************************/
 
+/**
+   Sets the locking callbacks.
+   \ingroup RealtimeInterface
+*/
+
+void ecrt_master_callbacks(ec_master_t *master, /**< EtherCAT master */
+                           int (*request_cb)(void *), /**< request lock CB */
+                           void (*release_cb)(void *), /**< release lock CB */
+                           void *cb_data /**< data parameter */
+                           )
+{
+    master->request_cb = request_cb;
+    master->release_cb = release_cb;
+    master->cb_data = cb_data;
+}
+
+/*****************************************************************************/
+
 /**
    Sets the debug level of the master.
    The following levels are valid:
diff --git a/master/master.h b/master/master.h
index 788a7459..e036d3b5 100644
--- a/master/master.h
+++ b/master/master.h
@@ -98,6 +98,9 @@ struct ec_master
     unsigned int reserved; /**< true, if the master is reserved for RT */
     struct timer_list freerun_timer; /**< timer object for free run mode */
     ec_master_mode_t mode; /**< master mode */
+    int (*request_cb)(void *); /**< lock request callback */
+    void (*release_cb)(void *); /**< lock release callback */
+    void *cb_data; /**< data parameter of locking callbacks */
 };
 
 /*****************************************************************************/
-- 
GitLab