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); + /**@}*/