1 /*
2  * Copyright (c) 2022 Rodrigo Peixoto <rodrigopex@gmail.com>
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 
6 #include "messages.h"
7 
8 #include <stdint.h>
9 
10 #include <zephyr/kernel.h>
11 #include <zephyr/logging/log.h>
12 #include <zephyr/zbus/zbus.h>
13 LOG_MODULE_DECLARE(zbus, CONFIG_ZBUS_LOG_LEVEL);
14 
15 ZBUS_CHAN_DEFINE(processed_data_chan, struct sensor_msg, NULL, NULL, ZBUS_OBSERVERS(consumer_sub),
16 		 ZBUS_MSG_INIT(.x = 0, .y = 0, .z = 0));
17 
18 ZBUS_CHAN_DECLARE(raw_data_chan, state_chan);
19 
filter_callback(const struct zbus_channel * chan)20 static void filter_callback(const struct zbus_channel *chan)
21 {
22 	const struct sensor_msg *msg = zbus_chan_const_msg(chan);
23 	struct sensor_msg proc_msg = {0};
24 
25 	if (0 == (msg->x % 2)) {
26 		proc_msg.x = msg->x;
27 	}
28 	if (0 == (msg->y % 2)) {
29 		proc_msg.y = msg->y;
30 	}
31 	if (0 == (msg->z % 2)) {
32 		proc_msg.z = msg->z;
33 	}
34 	LOG_INF(" -|- Filtering data");
35 	zbus_chan_pub(&processed_data_chan, &proc_msg, K_MSEC(200));
36 }
37 
38 ZBUS_LISTENER_DEFINE(filter_lis, filter_callback);
39 
40 ZBUS_SUBSCRIBER_DEFINE(state_change_sub, 5);
41 
main(void)42 int main(void)
43 {
44 	LOG_INF("System started, runtime observers %s allocated",
45 		IS_ENABLED(CONFIG_ZBUS_RUNTIME_OBSERVERS_NODE_ALLOC_DYNAMIC) ? "dynamically"
46 									     : "statically");
47 
48 	const struct zbus_channel *chan;
49 
50 	while (1) {
51 		LOG_INF("Activating filter");
52 		zbus_chan_add_obs(&raw_data_chan, &filter_lis, K_MSEC(200));
53 
54 		zbus_sub_wait(&state_change_sub, &chan, K_FOREVER);
55 
56 		LOG_INF("Deactivating filter");
57 		zbus_chan_rm_obs(&raw_data_chan, &filter_lis, K_MSEC(200));
58 
59 		LOG_INF("Bypass filter");
60 		zbus_chan_add_obs(&raw_data_chan, &consumer_sub, K_MSEC(200));
61 
62 		zbus_sub_wait(&state_change_sub, &chan, K_FOREVER);
63 
64 		LOG_INF("Disable bypass filter");
65 		zbus_chan_rm_obs(&raw_data_chan, &consumer_sub, K_MSEC(200));
66 
67 		zbus_sub_wait(&state_change_sub, &chan, K_FOREVER);
68 	}
69 	return 0;
70 }
71