Safe API Framework
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Toggle main menu visibility
Loading...
Searching...
No Matches
sapi_ipc_pubsub.c
Go to the documentation of this file.
1
6
7
#include "
safeapi/oal/ipc/sapi_ipc_pubsub.h
"
8
#include "
safeapi/utils/lifecycle/sapi_lifecycle.h
"
9
#include "safeapi/log.h"
10
11
/* Implementation stubs - actual implementation would use base IPC layer */
12
14
16
18
20
22
23
25
sapi_status_t
sapi_ipc_pubsub_topic_create
(
sapi_ipc_pubsub_topic_t
*topic_out,
26
const
sapi_ipc_pubsub_topic_config_t
*config)
27
{
28
sapi_status_t
lifecycle_status;
29
30
if
(topic_out == NULL || config == NULL) {
31
return
SAPI_STATUS_INVALID_PARAM
;
32
}
33
34
if
(config->
message_size
== 0 || config->
max_subscribers
== 0) {
35
return
SAPI_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 =
sapi_lifecycle_check_setup_allowed
();
41
if
(lifecycle_status !=
SAPI_STATUS_OK
)
42
{
43
return
lifecycle_status;
44
}
45
46
SAPI_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
SAPI_STATUS_OK
;
51
}
52
53
sapi_status_t
sapi_ipc_pubsub_publish
(
sapi_ipc_pubsub_topic_t
topic,
54
const
void
*message,
55
size_t
message_size)
56
{
57
if
(topic == NULL || message == NULL) {
58
return
SAPI_STATUS_INVALID_PARAM
;
59
}
60
61
SAPI_LOG_DEBUG(
"Publishing message to topic (%zu bytes)"
, message_size);
62
63
/* TODO: Deliver message to all subscribers */
64
return
SAPI_STATUS_OK
;
65
}
66
67
sapi_status_t
sapi_ipc_pubsub_topic_destroy
(
sapi_ipc_pubsub_topic_t
topic)
68
{
69
if
(topic == NULL) {
70
return
SAPI_STATUS_INVALID_PARAM
;
71
}
72
73
SAPI_LOG_INFO(
"Destroying pub-sub topic"
);
74
return
SAPI_STATUS_OK
;
75
}
76
77
sapi_status_t
sapi_ipc_pubsub_subscribe
(
sapi_ipc_pubsub_subscriber_t
*subscriber_out,
78
const
sapi_ipc_pubsub_subscriber_config_t
*config)
79
{
80
if
(subscriber_out == NULL || config == NULL) {
81
return
SAPI_STATUS_INVALID_PARAM
;
82
}
83
84
if
(config->
topic
== NULL || config->
queue_depth
== 0) {
85
return
SAPI_STATUS_INVALID_PARAM
;
86
}
87
88
SAPI_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
SAPI_STATUS_OK
;
93
}
94
95
sapi_status_t
sapi_ipc_pubsub_receive
(
sapi_ipc_pubsub_subscriber_t
subscriber,
96
void
*message_out,
97
size_t
message_size,
98
sapi_duration_ms_t
timeout_ms)
99
{
100
if
(subscriber == NULL || message_out == NULL) {
101
return
SAPI_STATUS_INVALID_PARAM
;
102
}
103
104
/* TODO: Receive from subscriber queue with timeout */
105
return
SAPI_STATUS_TIMEOUT
;
106
}
107
108
sapi_status_t
sapi_ipc_pubsub_unsubscribe
(
sapi_ipc_pubsub_subscriber_t
subscriber)
109
{
110
if
(subscriber == NULL) {
111
return
SAPI_STATUS_INVALID_PARAM
;
112
}
113
114
SAPI_LOG_INFO(
"Unsubscribing from topic"
);
115
return
SAPI_STATUS_OK
;
116
}
sapi_lifecycle_check_setup_allowed
sapi_status_t sapi_lifecycle_check_setup_allowed(void)
Convenience check for a setup-only constructor: call this as one of the first checks in any function ...
Definition
sapi_lifecycle.c:40
sapi_status_t
sapi_status_t
Common result/status codes.
Definition
sapi_status.h:27
SAPI_STATUS_TIMEOUT
@ SAPI_STATUS_TIMEOUT
Definition
sapi_status.h:32
SAPI_STATUS_INVALID_PARAM
@ SAPI_STATUS_INVALID_PARAM
Definition
sapi_status.h:29
SAPI_STATUS_OK
@ SAPI_STATUS_OK
Definition
sapi_status.h:28
sapi_duration_ms_t
uint32_t sapi_duration_ms_t
Definition
sapi_types.h:27
sapi_ipc_pubsub.h
IPC Publish-Subscribe Pattern (one-to-many broadcasting).
sapi_ipc_pubsub_subscribe
sapi_status_t sapi_ipc_pubsub_subscribe(sapi_ipc_pubsub_subscriber_t *subscriber_out, const sapi_ipc_pubsub_subscriber_config_t *config)
Subscribe to a topic.
Definition
sapi_ipc_pubsub.c:77
sapi_ipc_pubsub_topic_create
sapi_status_t sapi_ipc_pubsub_topic_create(sapi_ipc_pubsub_topic_t *topic_out, const sapi_ipc_pubsub_topic_config_t *config)
Create a publish-subscribe topic.
Definition
sapi_ipc_pubsub.c:25
sapi_ipc_pubsub_receive
sapi_status_t sapi_ipc_pubsub_receive(sapi_ipc_pubsub_subscriber_t subscriber, void *message_out, size_t message_size, sapi_duration_ms_t timeout_ms)
Receive a message from subscribed topic (blocking with timeout).
Definition
sapi_ipc_pubsub.c:95
sapi_ipc_pubsub_unsubscribe
sapi_status_t sapi_ipc_pubsub_unsubscribe(sapi_ipc_pubsub_subscriber_t subscriber)
Unsubscribe from a topic.
Definition
sapi_ipc_pubsub.c:108
sapi_ipc_pubsub_subscriber_t
struct sapi_ipc_pubsub_subscriber_s * sapi_ipc_pubsub_subscriber_t
Subscriber handle for receiving from a topic.
Definition
sapi_ipc_pubsub.h:142
sapi_ipc_pubsub_topic_t
struct sapi_ipc_pubsub_topic_s * sapi_ipc_pubsub_topic_t
Publish-subscribe topic handle.
Definition
sapi_ipc_pubsub.h:65
sapi_ipc_pubsub_topic_destroy
sapi_status_t sapi_ipc_pubsub_topic_destroy(sapi_ipc_pubsub_topic_t topic)
Destroy a publish-subscribe topic.
Definition
sapi_ipc_pubsub.c:67
sapi_ipc_pubsub_publish
sapi_status_t sapi_ipc_pubsub_publish(sapi_ipc_pubsub_topic_t topic, const void *message, size_t message_size)
Publish a message to all subscribers on a topic.
Definition
sapi_ipc_pubsub.c:53
sapi_lifecycle.h
Process-wide application setup-phase lock (ADR-026).
sapi_ipc_pubsub_subscriber_config_t
Configuration for a subscriber.
Definition
sapi_ipc_pubsub.h:147
sapi_ipc_pubsub_subscriber_config_t::subscriber_name
const char * subscriber_name
Definition
sapi_ipc_pubsub.h:148
sapi_ipc_pubsub_subscriber_config_t::queue_depth
size_t queue_depth
Definition
sapi_ipc_pubsub.h:150
sapi_ipc_pubsub_subscriber_config_t::topic
sapi_ipc_pubsub_topic_t topic
Definition
sapi_ipc_pubsub.h:149
sapi_ipc_pubsub_topic_config_t
Configuration for a pub-sub topic.
Definition
sapi_ipc_pubsub.h:70
sapi_ipc_pubsub_topic_config_t::max_subscribers
size_t max_subscribers
Definition
sapi_ipc_pubsub.h:73
sapi_ipc_pubsub_topic_config_t::message_size
size_t message_size
Definition
sapi_ipc_pubsub.h:72
sapi_ipc_pubsub_topic_config_t::topic_name
const char * topic_name
Definition
sapi_ipc_pubsub.h:71
src
oal
ipc
sapi_ipc_pubsub.c
Generated by
1.18.0