From 8a0fc7278351b559652837149fb067131262a093 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Wed, 20 Dec 2017 09:08:50 +0000 Subject: Added new API function to factory. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11149 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/common/oslib/src/chfactory.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'os/common/oslib/src') diff --git a/os/common/oslib/src/chfactory.c b/os/common/oslib/src/chfactory.c index 5d1d6091e..5067a016c 100644 --- a/os/common/oslib/src/chfactory.c +++ b/os/common/oslib/src/chfactory.c @@ -326,6 +326,37 @@ registered_object_t *chFactoryFindObject(const char *name) { return rop; } +/** + * @brief Retrieves a registered object by pointer. + * @post A reference to the registered object is returned with the + * reference counter increased by one. + * + * @param[in] objp pointer to the object to be retrieved + * + * @return The reference to the found registered object. + * @retval NULL if a registered object with the specified name + * does not exist. + * + * @api + */ +registered_object_t *chFactoryFindObjectByPointer(void *objp) { + registered_object_t *rop = (registered_object_t *)ch_factory.obj_list.next; + + F_LOCK(); + + while ((void *)rop != (void *)&ch_factory.obj_list) { + if (rop->objp == objp) { + rop->element.refs++; + return rop; + } + rop = (registered_object_t *)rop->element.next; + } + + F_UNLOCK(); + + return NULL; +} + /** * @brief Releases a registered object. * @details The reference counter of the registered object is decreased -- cgit v1.2.3