Safe API Framework
0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Toggle main menu visibility
Loading...
Searching...
No Matches
rte_ipc_pubsub.c
Go to the documentation of this file.
1
6
7
#include "
rte/oal/ipc/rte_ipc_pubsub.h
"
8
#include "
rte/utils/lifecycle/rte_lifecycle.h
"
9
#include "rte/log.h"
10
11
/* Implementation stubs - actual implementation would use base IPC layer */
12
14
16
18
20
22
23
25
rte_status_t
rte_ipc_pubsub_topic_create
(
rte_ipc_pubsub_topic_t
*topic_out,
26
const
rte_ipc_pubsub_topic_config_t
*config)
27
{
28
rte_status_t
lifecycle_status;
29
30
if
(topic_out == NULL || config == NULL) {
31
return
RTE_STATUS_INVALID_PARAM
;
32
}
33
34
if
(config->
message_size
== 0 || config->
max_subscribers
== 0) {
35
return
RTE_STATUS_INVALID_PARAM
;
36
}
37
38
/* REQ-LIFECYCLE-001 (ADR-026): a pub-sub topic is a setup-only resource -
39
* refuse once the application's setup phase has been locked. */
40
lifecycle_status =
rte_lifecycle_check_setup_allowed
();
41
if
(lifecycle_status !=
RTE_STATUS_OK
)
42
{
43
return
lifecycle_status;
44
}
45
46
RTE_LOG_INFO(
"Creating pub-sub topic: %s (msg_sz=%zu, max_sub=%zu)"
,
47
config->
topic_name
, config->
message_size
, config->
max_subscribers
);
48
49
/* TODO: Implement topic creation */
50
return
RTE_STATUS_OK
;
51
}
52
53
rte_status_t
rte_ipc_pubsub_publish
(
rte_ipc_pubsub_topic_t
topic,
54
const
void
*message,
55
size_t
message_size)
56
{
57
if
(topic == NULL || message == NULL) {
58
return
RTE_STATUS_INVALID_PARAM
;
59
}
60
61
RTE_LOG_DEBUG(
"Publishing message to topic (%zu bytes)"
, message_size);
62
63
/* TODO: Deliver message to all subscribers */
64
return
RTE_STATUS_OK
;
65
}
66
67
rte_status_t
rte_ipc_pubsub_topic_destroy
(
rte_ipc_pubsub_topic_t
topic)
68
{
69
if
(topic == NULL) {
70
return
RTE_STATUS_INVALID_PARAM
;
71
}
72
73
RTE_LOG_INFO(
"Destroying pub-sub topic"
);
74
return
RTE_STATUS_OK
;
75
}
76
77
rte_status_t
rte_ipc_pubsub_subscribe
(
rte_ipc_pubsub_subscriber_t
*subscriber_out,
78
const
rte_ipc_pubsub_subscriber_config_t
*config)
79
{
80
if
(subscriber_out == NULL || config == NULL) {
81
return
RTE_STATUS_INVALID_PARAM
;
82
}
83
84
if
(config->
topic
== NULL || config->
queue_depth
== 0) {
85
return
RTE_STATUS_INVALID_PARAM
;
86
}
87
88
RTE_LOG_INFO(
"Subscribing: %s to topic (queue_depth=%zu)"
,
89
config->
subscriber_name
, config->
queue_depth
);
90
91
/* TODO: Register subscriber and create queue */
92
return
RTE_STATUS_OK
;
93
}
94
95
rte_status_t
rte_ipc_pubsub_receive
(
rte_ipc_pubsub_subscriber_t
subscriber,
96
void
*message_out,
97
size_t
message_size,
98
rte_duration_ms_t
timeout_ms)
99
{
100
if
(subscriber == NULL || message_out == NULL) {
101
return
RTE_STATUS_INVALID_PARAM
;
102
}
103
104
/* TODO: Receive from subscriber queue with timeout */
105
return
RTE_STATUS_TIMEOUT
;
106
}
107
108
rte_status_t
rte_ipc_pubsub_unsubscribe
(
rte_ipc_pubsub_subscriber_t
subscriber)
109
{
110
if
(subscriber == NULL) {
111
return
RTE_STATUS_INVALID_PARAM
;
112
}
113
114
RTE_LOG_INFO(
"Unsubscribing from topic"
);
115
return
RTE_STATUS_OK
;
116
}
rte_lifecycle_check_setup_allowed
rte_status_t rte_lifecycle_check_setup_allowed(void)
Convenience check for a setup-only constructor: call this as one of the first checks in any function ...
Definition
rte_lifecycle.c:41
rte_status_t
rte_status_t
Common result/status codes.
Definition
rte_status.h:27
RTE_STATUS_OK
@ RTE_STATUS_OK
Definition
rte_status.h:28
RTE_STATUS_INVALID_PARAM
@ RTE_STATUS_INVALID_PARAM
Definition
rte_status.h:29
RTE_STATUS_TIMEOUT
@ RTE_STATUS_TIMEOUT
Definition
rte_status.h:32
rte_duration_ms_t
uint32_t rte_duration_ms_t
Definition
rte_types.h:27
rte_ipc_pubsub.h
IPC Publish-Subscribe Pattern (one-to-many broadcasting).
rte_ipc_pubsub_topic_destroy
rte_status_t rte_ipc_pubsub_topic_destroy(rte_ipc_pubsub_topic_t topic)
Destroy a publish-subscribe topic.
Definition
rte_ipc_pubsub.c:67
rte_ipc_pubsub_receive
rte_status_t rte_ipc_pubsub_receive(rte_ipc_pubsub_subscriber_t subscriber, void *message_out, size_t message_size, rte_duration_ms_t timeout_ms)
Receive a message from subscribed topic (blocking with timeout).
Definition
rte_ipc_pubsub.c:95
rte_ipc_pubsub_subscriber_t
struct rte_ipc_pubsub_subscriber_s * rte_ipc_pubsub_subscriber_t
Subscriber handle for receiving from a topic.
Definition
rte_ipc_pubsub.h:142
rte_ipc_pubsub_unsubscribe
rte_status_t rte_ipc_pubsub_unsubscribe(rte_ipc_pubsub_subscriber_t subscriber)
Unsubscribe from a topic.
Definition
rte_ipc_pubsub.c:108
rte_ipc_pubsub_topic_t
struct rte_ipc_pubsub_topic_s * rte_ipc_pubsub_topic_t
Publish-subscribe topic handle.
Definition
rte_ipc_pubsub.h:65
rte_ipc_pubsub_subscribe
rte_status_t rte_ipc_pubsub_subscribe(rte_ipc_pubsub_subscriber_t *subscriber_out, const rte_ipc_pubsub_subscriber_config_t *config)
Subscribe to a topic.
Definition
rte_ipc_pubsub.c:77
rte_ipc_pubsub_topic_create
rte_status_t rte_ipc_pubsub_topic_create(rte_ipc_pubsub_topic_t *topic_out, const rte_ipc_pubsub_topic_config_t *config)
Create a publish-subscribe topic.
Definition
rte_ipc_pubsub.c:25
rte_ipc_pubsub_publish
rte_status_t rte_ipc_pubsub_publish(rte_ipc_pubsub_topic_t topic, const void *message, size_t message_size)
Publish a message to all subscribers on a topic.
Definition
rte_ipc_pubsub.c:53
rte_lifecycle.h
Process-wide application setup-phase lock (ADR-026).
rte_ipc_pubsub_subscriber_config_t
Configuration for a subscriber.
Definition
rte_ipc_pubsub.h:147
rte_ipc_pubsub_subscriber_config_t::topic
rte_ipc_pubsub_topic_t topic
Definition
rte_ipc_pubsub.h:149
rte_ipc_pubsub_subscriber_config_t::subscriber_name
const char * subscriber_name
Definition
rte_ipc_pubsub.h:148
rte_ipc_pubsub_subscriber_config_t::queue_depth
size_t queue_depth
Definition
rte_ipc_pubsub.h:150
rte_ipc_pubsub_topic_config_t
Configuration for a pub-sub topic.
Definition
rte_ipc_pubsub.h:70
rte_ipc_pubsub_topic_config_t::message_size
size_t message_size
Definition
rte_ipc_pubsub.h:72
rte_ipc_pubsub_topic_config_t::max_subscribers
size_t max_subscribers
Definition
rte_ipc_pubsub.h:73
rte_ipc_pubsub_topic_config_t::topic_name
const char * topic_name
Definition
rte_ipc_pubsub.h:71
src
oal
ipc
rte_ipc_pubsub.c
Generated by
1.18.0