You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/10/01 17:48:54 UTC
(nuttx-apps) 01/09: apps/uorb: change nuttx/list to posix queue
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
commit 44239f11ff580361ae7cb91b2565afbb19bdafdb
Author: dongjiuzhu1 <do...@xiaomi.com>
AuthorDate: Wed Apr 3 20:35:37 2024 +0800
apps/uorb: change nuttx/list to posix queue
Signed-off-by: dongjiuzhu1 <do...@xiaomi.com>
---
system/uorb/listener.c | 92 ++++++++++++++++++++++++++++++--------------------
1 file changed, 55 insertions(+), 37 deletions(-)
diff --git a/system/uorb/listener.c b/system/uorb/listener.c
index 6f4af7808..2a2f77f88 100644
--- a/system/uorb/listener.c
+++ b/system/uorb/listener.c
@@ -22,11 +22,10 @@
* Included Files
****************************************************************************/
-#include <nuttx/list.h>
-
#include <ctype.h>
#include <errno.h>
#include <dirent.h>
+#include <inttypes.h>
#include <poll.h>
#include <signal.h>
#include <stdio.h>
@@ -34,6 +33,7 @@
#include <string.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
+#include <sys/queue.h>
#include <unistd.h>
#include <fcntl.h>
@@ -53,31 +53,35 @@
struct listen_object_s
{
- struct list_node node; /* Node of object info list */
- struct orb_object object; /* Object id */
- orb_abstime timestamp; /* Time of lastest generation */
- unsigned long generation; /* Latest generation */
- FAR FILE *file;
+ SLIST_ENTRY(listen_object_s) node; /* Node of object info list */
+
+ struct orb_object object; /* Object id */
+ orb_abstime timestamp; /* Time of lastest generation */
+ unsigned long generation; /* Latest generation */
+ FAR FILE *file;
};
+SLIST_HEAD(listen_list_s, listen_object_s);
+
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
static int listener_get_state(FAR struct orb_object *object,
FAR struct orb_state *state);
-static int listener_add_object(FAR struct list_node *objlist,
+static int listener_add_object(FAR struct listen_list_s *objlist,
FAR struct orb_object *object);
-static void listener_delete_object_list(FAR struct list_node *objlist);
-static int listener_generate_object_list(FAR struct list_node *objlist,
+static void listener_delete_object_list(FAR struct listen_list_s *objlist);
+static int listener_generate_object_list(FAR struct listen_list_s *objlist,
FAR const char *filter);
static int listener_print(FAR const struct orb_metadata *meta, int fd);
-static void listener_monitor(FAR struct list_node *objlist, int nb_objects,
- float topic_rate, int topic_latency,
- int nb_msgs, int timeout, bool record);
-static int listener_update(FAR struct list_node *objlist,
+static void listener_monitor(FAR struct listen_list_s *objlist,
+ int nb_objects, float topic_rate,
+ int topic_latency, int nb_msgs,
+ int timeout, bool record);
+static int listener_update(FAR struct listen_list_s *objlist,
FAR struct orb_object *object);
-static void listener_top(FAR struct list_node *objlist,
+static void listener_top(FAR struct listen_list_s *objlist,
FAR const char *filter,
bool only_once);
static int listener_create_dir(FAR char *dir, size_t size);
@@ -215,7 +219,7 @@ static int listener_get_state(FAR struct orb_object *object,
* 0 on success, otherwise return negative errno.
****************************************************************************/
-static int listener_add_object(FAR struct list_node *objlist,
+static int listener_add_object(FAR struct listen_list_s *objlist,
FAR struct orb_object *object)
{
FAR struct listen_object_s *tmp;
@@ -234,7 +238,7 @@ static int listener_add_object(FAR struct list_node *objlist,
tmp->timestamp = orb_absolute_time();
tmp->generation = ret < 0 ? 0 : state.generation;
tmp->file = NULL;
- list_add_tail(objlist, &tmp->node);
+ SLIST_INSERT_HEAD(objlist, tmp, node);
return 0;
}
@@ -252,7 +256,7 @@ static int listener_add_object(FAR struct list_node *objlist,
* 0 on success.
****************************************************************************/
-static int listener_update(FAR struct list_node *objlist,
+static int listener_update(FAR struct listen_list_s *objlist,
FAR struct orb_object *object)
{
FAR struct listen_object_s *old = NULL;
@@ -261,7 +265,7 @@ static int listener_update(FAR struct list_node *objlist,
/* Check wether object already exist in old list */
- list_for_every_entry(objlist, tmp, struct listen_object_s, node)
+ SLIST_FOREACH(tmp, objlist, node)
{
if (tmp->object.meta == object->meta &&
tmp->object.instance == object->instance)
@@ -335,18 +339,18 @@ static int listener_update(FAR struct list_node *objlist,
* None.
****************************************************************************/
-static void listener_delete_object_list(FAR struct list_node *objlist)
+static void listener_delete_object_list(FAR struct listen_list_s *objlist)
{
FAR struct listen_object_s *tmp;
- FAR struct listen_object_s *next;
- list_for_every_entry_safe(objlist, tmp, next, struct listen_object_s, node)
+ while (!SLIST_EMPTY(objlist))
{
- list_delete(&tmp->node);
+ tmp = SLIST_FIRST(objlist);
+ SLIST_REMOVE_HEAD(objlist, node);
free(tmp);
}
- list_initialize(objlist);
+ SLIST_INIT(objlist);
}
/****************************************************************************
@@ -364,7 +368,7 @@ static void listener_delete_object_list(FAR struct list_node *objlist)
* Negative errno on failure.
****************************************************************************/
-static int listener_generate_object_list(FAR struct list_node *objlist,
+static int listener_generate_object_list(FAR struct listen_list_s *objlist,
FAR const char *filter)
{
FAR struct dirent *entry;
@@ -570,9 +574,10 @@ static int listener_record(FAR const struct orb_metadata *meta, int fd,
* None
****************************************************************************/
-static void listener_monitor(FAR struct list_node *objlist, int nb_objects,
- float topic_rate, int topic_latency,
- int nb_msgs, int timeout, bool record)
+static void listener_monitor(FAR struct listen_list_s *objlist,
+ int nb_objects, float topic_rate,
+ int topic_latency, int nb_msgs,
+ int timeout, bool record)
{
FAR struct pollfd *fds;
char path[PATH_MAX];
@@ -599,7 +604,7 @@ static void listener_monitor(FAR struct list_node *objlist, int nb_objects,
/* Prepare pollfd for all objects */
- list_for_every_entry(objlist, tmp, struct listen_object_s, node)
+ SLIST_FOREACH(tmp, objlist, node)
{
int fd;
@@ -634,7 +639,7 @@ static void listener_monitor(FAR struct list_node *objlist, int nb_objects,
listener_create_dir(path, sizeof(path));
dir = path + strlen(path);
- list_for_every_entry(objlist, tmp, struct listen_object_s, node)
+ SLIST_FOREACH(tmp, objlist, node)
{
sprintf(dir, "%s%d.csv", tmp->object.meta->o_name,
tmp->object.instance);
@@ -664,7 +669,7 @@ static void listener_monitor(FAR struct list_node *objlist, int nb_objects,
if (poll(&fds[0], nb_objects, timeout * 1000) > 0)
{
i = 0;
- list_for_every_entry(objlist, tmp, struct listen_object_s, node)
+ SLIST_FOREACH(tmp, objlist, node)
{
if (fds[i].revents & POLLIN)
{
@@ -706,7 +711,7 @@ static void listener_monitor(FAR struct list_node *objlist, int nb_objects,
}
i = 0;
- list_for_every_entry(objlist, tmp, struct listen_object_s, node)
+ SLIST_FOREACH(tmp, objlist, node)
{
if (fds[i].fd < 0)
{
@@ -757,7 +762,20 @@ static void listener_monitor(FAR struct list_node *objlist, int nb_objects,
* None.
****************************************************************************/
-static void listener_top(FAR struct list_node *objlist,
+static size_t listen_length(FAR struct listen_list_s *objlist)
+{
+ struct listen_object_s *tmp;
+ size_t count = 0;
+
+ SLIST_FOREACH(tmp, objlist, node)
+ {
+ count++;
+ }
+
+ return count;
+}
+
+static void listener_top(FAR struct listen_list_s *objlist,
FAR const char *filter,
bool only_once)
{
@@ -791,7 +809,7 @@ static void listener_top(FAR struct list_node *objlist,
uorbinfo_raw("\033[H"); /* move cursor to top left corner */
}
- uorbinfo_raw("\033[K" "current objects: %zu", list_length(objlist));
+ uorbinfo_raw("\033[K" "current objects: %zu", listen_length(objlist));
uorbinfo_raw("\033[K" "%-*s INST #SUB RATE #Q SIZE",
ORB_MAX_PRINT_NAME - 2, "NAME");
@@ -820,8 +838,8 @@ static void exit_handler(int signo)
int main(int argc, FAR char *argv[])
{
- struct list_node objlist;
FAR struct listen_object_s *tmp;
+ struct listen_list_s objlist;
float topic_rate = 0;
int topic_latency = 0;
int nb_msgs = 0;
@@ -904,7 +922,7 @@ int main(int argc, FAR char *argv[])
/* Alloc list and exec command */
- list_initialize(&objlist);
+ SLIST_INIT(&objlist);
ret = listener_generate_object_list(&objlist, filter);
if (ret <= 0)
{
@@ -918,7 +936,7 @@ int main(int argc, FAR char *argv[])
else
{
uorbinfo_raw("\nMointor objects num:%d", ret);
- list_for_every_entry(&objlist, tmp, struct listen_object_s, node)
+ SLIST_FOREACH(tmp, &objlist, node)
{
uorbinfo_raw("object_name:%s, object_instance:%d",
tmp->object.meta->o_name,