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