Files
microros_turntable_controller/src/microros/microros_node.hpp
2025-08-23 12:57:32 +02:00

41 lines
1.1 KiB
C++

#pragma once
#include <zephyr/sys/slist.h>
#include <rcl/rcl.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <rosidl_runtime_c/message_type_support_struct.h>
#include <zephyr/kernel.h>
class MicrorosExecutor {
private:
const char *node_name;
rcl_allocator_t allocator;
rclc_executor_t executor;
rcl_node_t node;
rclc_support_t support;
sys_slist_t publishers_head;
sys_slist_t subscribers_head;
struct publisher_node {
rcl_publisher_t publisher;
sys_snode_t node; // embedded Zephyr list node
};
struct subscription_node {
rcl_subscription_t subscription;
sys_snode_t node; // embedded Zephyr list node
};
public:
MicrorosExecutor(const char *name);
~MicrorosExecutor(void);
bool connect(void);
bool execute(void);
rcl_publisher_t* add_publisher(const rosidl_message_type_support_t *type_support, const char *topic_name);
rcl_subscription_t* add_subscription(const rosidl_message_type_support_t *type_support, const char *topic_name, void* msg, rclc_callback_t callback);
};