Dawn Framework 1.0
Universal data acquisition framework for embedded systems
test_switch.cxx
1// dawn/tests/prog/test_switch.cxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#include "dawn/prog/switch.hxx"
7#include "test_common.hxx"
8
9#include "dawn/io/sdata.hxx"
10#include "dawn/io/virt.hxx"
11
12using namespace dawn;
13
14static constexpr auto SW_IN0 = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 100);
15static constexpr auto SW_IN1 = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 101);
16static constexpr auto SW_TGT = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 102);
17
18static uint32_t g_cfg_in0[] = {SW_IN0, 0};
19static uint32_t g_cfg_in1[] = {SW_IN1, 0};
20static uint32_t g_cfg_tgt[] = {SW_TGT, 0};
21
22// Switch: both inputs must equal 1 to output onCmd=0x42 (arbitrary test
23// value), otherwise 0x00.
24static uint32_t g_bin_switch[] = {
25 CProgSwitch::objectId(0),
26 2,
27 CProgSwitch::cfgIdInputs(4),
28 SW_IN0,
29 1, // match value for in0
30 SW_IN1,
31 1, // match value for in1
32 CProgSwitch::cfgIdTarget(),
33 SW_TGT,
34 0x42, // onCmd
35 0x00, // offCmd
36};
37
38static void test_switch_and_gate()
39{
40 CDescObject i0Desc(g_cfg_in0);
41 CIOVirt in0(i0Desc);
42 CDescObject i1Desc(g_cfg_in1);
43 CIOVirt in1(i1Desc);
44 CDescObject tDesc(g_cfg_tgt);
45 CIOVirt tgt(tDesc);
46 CDescObject progDesc(g_bin_switch);
47 CProgSwitch prog(progDesc);
48
51
52 TEST_ASSERT_EQUAL(OK, in0.init());
53 TEST_ASSERT_EQUAL(OK, in1.init());
54 TEST_ASSERT_EQUAL(OK, tgt.init());
55 TEST_ASSERT_EQUAL(OK, in0.initialize(1, 1, true));
56 TEST_ASSERT_EQUAL(OK, in1.initialize(1, 1, true));
57 TEST_ASSERT_EQUAL(OK, tgt.initialize(1, 1, false));
58
59 TEST_ASSERT_EQUAL(OK, prog.configure());
60 prog.setObjectMapItem(SW_IN0, &in0);
61 prog.setObjectMapItem(SW_IN1, &in1);
62 prog.setObjectMapItem(SW_TGT, &tgt);
63 TEST_ASSERT_EQUAL(OK, prog.init());
64 TEST_ASSERT_EQUAL(OK, prog.start());
65
66 // Neither matches yet → offCmd
67 in(0) = 0;
68 TEST_ASSERT_EQUAL(OK, in0.setData(in));
69 TEST_ASSERT_EQUAL(OK, in1.setData(in));
70 TEST_ASSERT_EQUAL(OK, tgt.getData(out, 1));
71 TEST_ASSERT_EQUAL(0x00, out(0) & 0xff);
72
73 // Partial match (only in0=1) → still off
74 in(0) = 1;
75 TEST_ASSERT_EQUAL(OK, in0.setData(in));
76 in(0) = 0;
77 TEST_ASSERT_EQUAL(OK, in1.setData(in));
78 TEST_ASSERT_EQUAL(OK, tgt.getData(out, 1));
79 TEST_ASSERT_EQUAL(0x00, out(0) & 0xff);
80
81 // Both match → onCmd
82 in(0) = 1;
83 TEST_ASSERT_EQUAL(OK, in0.setData(in));
84 TEST_ASSERT_EQUAL(OK, in1.setData(in));
85 TEST_ASSERT_EQUAL(OK, tgt.getData(out, 1));
86 TEST_ASSERT_EQUAL(0x42, out(0) & 0xff);
87
88 // Drop in0 → offCmd
89 in(0) = 0;
90 TEST_ASSERT_EQUAL(OK, in0.setData(in));
91 TEST_ASSERT_EQUAL(OK, tgt.getData(out, 1));
92 TEST_ASSERT_EQUAL(0x00, out(0) & 0xff);
93
94 TEST_ASSERT_EQUAL(OK, prog.stop());
95}
96
97extern "C"
98{
99 int test_prog_switch()
100 {
101 UNITY_BEGIN();
102 DAWN_RUN_TEST(test_switch_and_gate);
103 return UNITY_END();
104 }
105}
Descriptor wrapper for individual object configuration.
Virtual I/O type for user-provided data and callbacks.
Definition virt.hxx:26
Multi-input AND-gate switch: writes on/off commands to a target IO when all control inputs match thei...
Definition switch.hxx:32
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
@ DTYPE_UINT32
Unsigned 32-bit integer (0 to 4294967295).
Definition objectid.hxx:96
Static (compile-time) I/O data buffer (no timestamp).
Definition sdata.hxx:39