Dawn Framework 1.0
Universal data acquisition framework for embedded systems
test_selector.cxx
1// dawn/tests/prog/test_selector.cxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#include "dawn/prog/selector.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 SEL_CTRL = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 110);
15static constexpr auto SEL_D0 = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 111);
16static constexpr auto SEL_D1 = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 112);
17static constexpr auto SEL_TGT = CIOVirt::objectId(SObjectId::DTYPE_UINT32, false, 113);
18
19static uint32_t g_cfg_ctrl[] = {SEL_CTRL, 0};
20static uint32_t g_cfg_d0[] = {SEL_D0, 0};
21static uint32_t g_cfg_d1[] = {SEL_D1, 0};
22static uint32_t g_cfg_tgt[] = {SEL_TGT, 0};
23
24static uint32_t g_bin_selector[] = {
25 CProgSelector::objectId(0),
26 3,
27 CProgSelector::cfgIdControl(),
28 SEL_CTRL,
29 CProgSelector::cfgIdData(2),
30 SEL_D0,
31 SEL_D1,
32 CProgSelector::cfgIdTarget(),
33 SEL_TGT,
34};
35
36static void test_selector_routes_data()
37{
38 CDescObject ctrlDesc(g_cfg_ctrl);
39 CIOVirt ctrl(ctrlDesc);
40 CDescObject d0Desc(g_cfg_d0);
41 CIOVirt d0(d0Desc);
42 CDescObject d1Desc(g_cfg_d1);
43 CIOVirt d1(d1Desc);
44 CDescObject tgtDesc(g_cfg_tgt);
45 CIOVirt tgt(tgtDesc);
46 CDescObject progDesc(g_bin_selector);
47 CProgSelector prog(progDesc);
48
51
52 TEST_ASSERT_EQUAL(OK, ctrl.init());
53 TEST_ASSERT_EQUAL(OK, d0.init());
54 TEST_ASSERT_EQUAL(OK, d1.init());
55 TEST_ASSERT_EQUAL(OK, tgt.init());
56
57 TEST_ASSERT_EQUAL(OK, ctrl.initialize(1, 1, true));
58 TEST_ASSERT_EQUAL(OK, d0.initialize(1, 1, false));
59 TEST_ASSERT_EQUAL(OK, d1.initialize(1, 1, false));
60 TEST_ASSERT_EQUAL(OK, tgt.initialize(1, 1, false));
61
62 // Pre-load data into data virtIOs
63 in(0) = 0xAAAA;
64 TEST_ASSERT_EQUAL(OK, d0.setData(in));
65 in(0) = 0xBBBB;
66 TEST_ASSERT_EQUAL(OK, d1.setData(in));
67
68 TEST_ASSERT_EQUAL(OK, prog.configure());
69 prog.setObjectMapItem(SEL_CTRL, &ctrl);
70 prog.setObjectMapItem(SEL_D0, &d0);
71 prog.setObjectMapItem(SEL_D1, &d1);
72 prog.setObjectMapItem(SEL_TGT, &tgt);
73 TEST_ASSERT_EQUAL(OK, prog.init());
74 TEST_ASSERT_EQUAL(OK, prog.start());
75
76 // Set control to 0 — route d0 → tgt
77 in(0) = 0;
78 TEST_ASSERT_EQUAL(OK, ctrl.setData(in));
79 TEST_ASSERT_EQUAL(OK, tgt.getData(out, 1));
80 TEST_ASSERT_EQUAL(0xAAAA, out(0));
81
82 // Set control to 1 — route d1 → tgt
83 in(0) = 1;
84 TEST_ASSERT_EQUAL(OK, ctrl.setData(in));
85 TEST_ASSERT_EQUAL(OK, tgt.getData(out, 1));
86 TEST_ASSERT_EQUAL(0xBBBB, out(0));
87
88 // Out-of-range control → no write (tgt keeps previous value)
89 in(0) = 5;
90 TEST_ASSERT_EQUAL(OK, ctrl.setData(in));
91 TEST_ASSERT_EQUAL(OK, tgt.getData(out, 1));
92 TEST_ASSERT_EQUAL(0xBBBB, out(0));
93
94 TEST_ASSERT_EQUAL(OK, prog.stop());
95}
96
97extern "C"
98{
99 int test_prog_selector()
100 {
101 UNITY_BEGIN();
102 DAWN_RUN_TEST(test_selector_routes_data);
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
Data selector: routes one of N data inputs to a target IO based on the value of a control input.
Definition selector.hxx:31
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