Dawn Framework 1.0
Universal data acquisition framework for embedded systems
sysinfo.cxx
1// dawn/src/io/sysinfo.cxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#include "dawn/io/sysinfo.hxx"
7
8#include <fixedmath.h>
9#include <sys/sysinfo.h>
10
11using namespace dawn;
12
14{
17 {
18 DAWNERR("CPULOAD requires DTYPE_FLOAT or DTYPE_UB16\n");
19 return -EINVAL;
20 }
21
22 return OK;
23}
24
26{
27 return dim;
28}
29
30CIOSysinfo::~CIOSysinfo()
31{
32}
33
34size_t CIOSysinfo::getDataDim(uint16_t cls) const
35{
36 switch (cls)
37 {
39 {
40 return 1;
41 }
42
44 {
45 return 3;
46 }
47
48 default:
49 {
50 DAWNERR("Invalid sysinfo class %d\n", cls);
51 return 0;
52 }
53 }
54}
55
56int CIOSysinfo::getDataImpl(IODataCmn &data, size_t len)
57{
58 struct sysinfo sys_info;
59
60 // No batch supported
61
62 if (len != 1)
63 {
64 return -ENOTSUP;
65 }
66
67 /* Get system info */
68
69 sysinfo(&sys_info);
70
71 switch (getCls())
72 {
74 {
75 uint64_t *tmp = static_cast<uint64_t *>(data.getDataPtr());
76
77 *tmp = sys_info.uptime;
78 break;
79 }
80
82 {
83 switch (getDtype())
84 {
86 {
87 float *tmp = static_cast<float *>(data.getDataPtr());
88 float f_load = 1.0f / (1 << SI_LOAD_SHIFT);
89
90 tmp[0] = (float)sys_info.loads[0] * f_load;
91 tmp[1] = (float)sys_info.loads[1] * f_load;
92 tmp[2] = (float)sys_info.loads[2] * f_load;
93
94 break;
95 }
96
98 {
99 DAWNASSERT(SI_LOAD_SHIFT == 16, "Invalid system configuration");
100
101 ub16_t *tmp = static_cast<ub16_t *>(data.getDataPtr());
102
103 tmp[0] = sys_info.loads[0];
104 tmp[1] = sys_info.loads[1];
105 tmp[2] = sys_info.loads[2];
106
107 break;
108 }
109
110 default:
111 {
112 DAWNERR("Unsupported data type %d for CPULOAD\n", getDtype());
113 return -EINVAL;
114 }
115 }
116 break;
117 }
118
119 default:
120 {
121 return -EINVAL;
122 }
123 }
124
125 return OK;
126}
127
129{
130 UNUSED(data);
131
132 return -ENOTSUP;
133}
134
136{
137 switch (getCls())
138 {
140 {
141 return sizeof(uint64_t) * dim;
142 }
143
145 {
146 return sizeof(float) * dim;
147 }
148
149 default:
150 {
151 return 0;
152 }
153 }
154}
@ IO_CLASS_SYSTEM_UPTIME
System uptime.
Definition common.hxx:150
@ IO_CLASS_SYSTEM_CPULOAD
CPU load.
Definition common.hxx:151
int getDataImpl(IODataCmn &data, size_t len)
Get data implementation (override in derived classes).
Definition sysinfo.cxx:56
int setDataImpl(IODataCmn &data)
Set data implementation (override in derived classes).
Definition sysinfo.cxx:128
size_t getDataDim() const
Get data vector dimension.
Definition sysinfo.cxx:25
size_t getDataSize() const
Get data size in bytes.
Definition sysinfo.cxx:135
int init()
One-time initialize object after bindings are resolved.
Definition sysinfo.cxx:13
uint16_t getCls() const
Get object class field.
Definition object.cxx:170
uint8_t getDtype() const
Get data type field.
Definition object.cxx:175
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
Base interface for I/O data buffers (static and dynamic).
Definition idata.hxx:21
virtual void * getDataPtr(size_t batch=0)=0
Get pointer to data only (skips timestamp if present).
@ DTYPE_FLOAT
IEEE 754 single-precision floating point (32-bit).
Definition objectid.hxx:112
@ DTYPE_UB16
Unsigned 16.16 fixed-point (32-bit).
Definition objectid.hxx:132