Directory: | ./ |
---|---|
File: | pdserv/src/lib/Signal.cpp |
Date: | 2025-08-17 04:10:43 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 23 | 23 | 100.0% |
Branches: | 2 | 4 | 50.0% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /***************************************************************************** | ||
2 | * | ||
3 | * Copyright 2010 Richard Hacker (lerichi at gmx dot net) | ||
4 | * | ||
5 | * This file is part of the pdserv library. | ||
6 | * | ||
7 | * The pdserv library is free software: you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU Lesser General Public License as published | ||
9 | * by the Free Software Foundation, either version 3 of the License, or (at | ||
10 | * your option) any later version. | ||
11 | * | ||
12 | * The pdserv library is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
14 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public | ||
15 | * License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU Lesser General Public License | ||
18 | * along with the pdserv library. If not, see <http://www.gnu.org/licenses/>. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "../Debug.h" | ||
23 | |||
24 | #include "../SessionTask.h" | ||
25 | #include "Signal.h" | ||
26 | #include "Main.h" | ||
27 | #include "SessionTaskData.h" | ||
28 | #include "../DataType.h" | ||
29 | |||
30 | ////////////////////////////////////////////////////////////////////// | ||
31 | const size_t Signal::dataTypeIndex[PdServ::DataType::maxWidth+1] = { | ||
32 | 3 /*0*/, 3 /*1*/, 2 /*2*/, 3 /*3*/, | ||
33 | 1 /*4*/, 3 /*5*/, 3 /*6*/, 3 /*7*/, 0 /*8*/ | ||
34 | }; | ||
35 | |||
36 | ////////////////////////////////////////////////////////////////////// | ||
37 | 942 | Signal::Signal( Task *task, | |
38 | size_t index, | ||
39 | unsigned int decimation, | ||
40 | const char *path, | ||
41 | const PdServ::DataType& dtype, | ||
42 | const void *addr, | ||
43 | size_t ndims, | ||
44 | 942 | const size_t *dim): | |
45 | PdServ::Signal(path, task, decimation, dtype, ndims, dim), | ||
46 | task(task), | ||
47 | addr(reinterpret_cast<const char *>(addr)), | ||
48 |
2/4✓ Branch 5 taken 942 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 942 times.
✗ Branch 10 not taken.
|
942 | index(index) |
49 | { | ||
50 | 942 | read_cb = copy; | |
51 | 942 | } | |
52 | |||
53 | ////////////////////////////////////////////////////////////////////// | ||
54 | 47 | void Signal::subscribe(PdServ::SessionTask *st) const | |
55 | { | ||
56 | // log_debug("%s", path.c_str()); | ||
57 | 47 | st->sessionTaskData->subscribe(this); | |
58 | 47 | } | |
59 | |||
60 | ////////////////////////////////////////////////////////////////////// | ||
61 | 44 | void Signal::unsubscribe(PdServ::SessionTask *st) const | |
62 | { | ||
63 | // log_debug("%s", path.c_str()); | ||
64 | 44 | st->sessionTaskData->unsubscribe(this); | |
65 | 44 | } | |
66 | |||
67 | ////////////////////////////////////////////////////////////////////// | ||
68 | 57 | int Signal::getValue(const PdServ::Session* /*session*/, | |
69 | void *dest, struct timespec *t) const | ||
70 | { | ||
71 | 57 | return task->main->getValue(this, dest, t); | |
72 | } | ||
73 | |||
74 | ////////////////////////////////////////////////////////////////////// | ||
75 | 1179 | const char *Signal::getValue(const PdServ::SessionTask* st) const | |
76 | { | ||
77 | 1179 | return st->sessionTaskData->getValue(this); | |
78 | } | ||
79 | |||
80 | ////////////////////////////////////////////////////////////////////// | ||
81 | 57 | void Signal::pollValue(void* dst, struct timespec* mtime) const | |
82 | { | ||
83 | 57 | task->getCurrentTime(mtime); | |
84 | |||
85 | 114 | read_cb(reinterpret_cast<const struct pdvariable*>( | |
86 | static_cast<const Variable*>(this)), | ||
87 | 57 | dst, addr, memSize, mtime, priv_data); | |
88 | 57 | } | |
89 | |||
90 | ////////////////////////////////////////////////////////////////////// | ||
91 | 57 | int Signal::copy(const struct pdvariable *, | |
92 | void *buf, const void *src, size_t len, | ||
93 | struct timespec*, void *) | ||
94 | { | ||
95 | // cout << __PRETTY_FUNCTION__ << checkOnly << endl; | ||
96 | 57 | std::copy( reinterpret_cast<const char*>(src), | |
97 | reinterpret_cast<const char*>(src)+len, | ||
98 | reinterpret_cast<char*>(buf)); | ||
99 | |||
100 | 57 | return 0; | |
101 | } | ||
102 |