Expose the underlying shared memory buffers from ShmEventLoop
For advanced use cases, this is handy to set up these memory regions
specially.
Change-Id: I7e858d3af5f3fa51f980e0e4cab5dfcfa7b83fd9
diff --git a/aos/events/shm_event_loop.h b/aos/events/shm_event_loop.h
index 52bb338..fa870b8 100644
--- a/aos/events/shm_event_loop.h
+++ b/aos/events/shm_event_loop.h
@@ -3,6 +3,8 @@
#include <vector>
+#include "absl/types/span.h"
+
#include "aos/events/epoll.h"
#include "aos/events/event_loop.h"
#include "aos/events/event_loop_generated.h"
@@ -68,8 +70,20 @@
int priority() const override { return priority_; }
+ // Returns the epoll loop used to run the event loop.
internal::EPoll *epoll() { return &epoll_; }
+ // Returns the local mapping of the shared memory used by the watcher on the
+ // specified channel. A watcher must be created on this channel before calling
+ // this.
+ absl::Span<char> GetWatcherSharedMemory(const Channel *channel);
+
+ // Returns the local mapping of the shared memory used by the provided Sender
+ template <typename T>
+ absl::Span<char> GetSenderSharedMemory(aos::Sender<T> *sender) const {
+ return GetShmSenderSharedMemory(GetRawSender(sender));
+ }
+
private:
friend class internal::WatcherState;
friend class internal::TimerHandlerState;
@@ -82,6 +96,9 @@
// Returns the TID of the event loop.
pid_t GetTid() override;
+ // Private method to access the shared memory mapping of a ShmSender
+ absl::Span<char> GetShmSenderSharedMemory(const aos::RawSender *sender) const;
+
std::vector<std::function<void()>> on_run_;
int priority_ = 0;
std::string name_;
@@ -90,7 +107,6 @@
internal::EPoll epoll_;
};
-
} // namespace aos
#endif // AOS_EVENTS_SHM_EVENT_LOOP_H_