summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFan Yang <[email protected]>2023-05-17 17:40:18 +0800
committerGitHub <[email protected]>2023-05-17 17:40:18 +0800
commit48557de14897afb0965695d272d07f83f0b08c42 (patch)
tree5a423e6603cac828c53b96d1345c9b0c0e154f84
parent065a3e1b3aaebe18361d51124c6aa2246a97b008 (diff)
[include][src] Add API to get object name and thread name (#7507)
Signed-off-by: Fan YANG <[email protected]> Co-authored-by: Man, Jianting (Meco) <[email protected]>
-rw-r--r--include/rtthread.h3
-rw-r--r--src/object.c24
-rw-r--r--src/thread.c18
3 files changed, 45 insertions, 0 deletions
diff --git a/include/rtthread.h b/include/rtthread.h
index 45bbacdf3d..5d44164f51 100644
--- a/include/rtthread.h
+++ b/include/rtthread.h
@@ -60,6 +60,7 @@ void rt_object_delete(rt_object_t object);
rt_bool_t rt_object_is_systemobject(rt_object_t object);
rt_uint8_t rt_object_get_type(rt_object_t object);
rt_object_t rt_object_find(const char *name, rt_uint8_t type);
+rt_err_t rt_object_get_name(rt_object_t object, char *name, rt_uint8_t name_size);
#ifdef RT_USING_HEAP
/* custom object */
@@ -169,6 +170,8 @@ void rt_thread_wakeup_set(struct rt_thread *thread, rt_wakeup_func_t func, void*
#endif
void rt_thread_timeout(void *parameter);
+rt_err_t rt_thread_get_name(rt_thread_t thread, char *name, rt_uint8_t name_size);
+
#ifdef RT_USING_SIGNALS
void rt_thread_alloc_sig(rt_thread_t tid);
void rt_thread_free_sig(rt_thread_t tid);
diff --git a/src/object.c b/src/object.c
index 04e0a03551..d1815f7e23 100644
--- a/src/object.c
+++ b/src/object.c
@@ -635,6 +635,30 @@ rt_object_t rt_object_find(const char *name, rt_uint8_t type)
return RT_NULL;
}
+/**
+ * @brief This function will return the name of the specified object container
+ *
+ * @param object the specified object to be get name
+ * @param name buffer to store the object name string
+ * @param name_size maximum size of the buffer to store object name
+ *
+ * @return -RT_EINVAL if any parameter is invalid or RT_EOK if the operation is successfully executed
+ *
+ * @note this function shall not be invoked in interrupt status
+ */
+rt_err_t rt_object_get_name(rt_object_t object, char *name, rt_uint8_t name_size)
+{
+ rt_err_t result = -RT_EINVAL;
+ if ((object != RT_NULL) && (name != RT_NULL) && (name_size != 0U))
+ {
+ const char *obj_name = object->name;
+ (void) rt_strncpy(name, obj_name, (rt_size_t)name_size);
+ result = RT_EOK;
+ }
+
+ return result;
+}
+
#ifdef RT_USING_HEAP
/**
* This function will create a custom object
diff --git a/src/thread.c b/src/thread.c
index 133289738e..ad82a13550 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -1142,4 +1142,22 @@ rt_thread_t rt_thread_find(char *name)
RTM_EXPORT(rt_thread_find);
+/**
+ * @brief This function will return the name of the specified thread
+ *
+ * @note Please don't invoke this function in interrupt status
+ *
+ * @param thread the thread to retrieve thread name
+ * @param name buffer to store the thread name string
+ * @param name_size maximum size of the buffer to store the thread name
+ *
+ * @return If the return value is RT_EOK, the function is successfully executed
+ * If the return value is -RT_EINVAL, it means this operation failed
+ */
+rt_err_t rt_thread_get_name(rt_thread_t thread, char *name, rt_uint8_t name_size)
+{
+ return (thread == RT_NULL) ? -RT_EINVAL : rt_object_get_name(&thread->parent, name, name_size);
+}
+RTM_EXPORT(rt_thread_get_name);
+
/**@}*/