ENTS-tock
Environmental NeTworked Sensor firmware on Tock OS
Loading...
Searching...
No Matches
main.c
Go to the documentation of this file.
1
12#pragma GCC diagnostic ignored "-Wmissing-prototypes"
13#pragma GCC diagnostic ignored "-Wmissing-declarations"
14
16#include <stdint.h>
17#include <stdio.h>
18#include <string.h>
19#include <unity.h>
20
24void setUp(void) {}
25
29void tearDown(void) {}
30
35 SensorStatus status = SENSOR_OK;
36
37 uint8_t buffer[256];
38 size_t buffer_len = sizeof(buffer);
39
40 // encode
41 SensorMeasurement in = SensorMeasurement_init_zero;
42
43 in.has_meta = true;
44 in.meta.ts = 123;
45 in.meta.logger_id = 456;
46 in.meta.cell_id = 789;
47
48 in.type = SensorType_NONE;
49
50 in.which_value = SensorMeasurement_unsigned_int_tag;
51 in.value.unsigned_int = 1782861989UL;
52
53 status = EncodeSensorMeasurement(&in, buffer, &buffer_len);
54 TEST_ASSERT_EQUAL(SENSOR_OK, status);
55 TEST_ASSERT_GREATER_THAN(0, buffer_len);
56
57 // decode
58 SensorMeasurement out = SensorMeasurement_init_zero;
59
60 status = DecodeSensorMeasurement(buffer, buffer_len, &out);
61 TEST_ASSERT_EQUAL(SENSOR_OK, status);
62
63 // check values
64 TEST_ASSERT_EQUAL(in.has_meta, out.has_meta);
65 TEST_ASSERT_EQUAL(in.meta.ts, out.meta.ts);
66 TEST_ASSERT_EQUAL(in.meta.logger_id, out.meta.logger_id);
67 TEST_ASSERT_EQUAL(in.meta.cell_id, out.meta.cell_id);
68 TEST_ASSERT_EQUAL(in.type, out.type);
69 TEST_ASSERT_EQUAL(in.which_value, out.which_value);
70 TEST_ASSERT_EQUAL(in.value.unsigned_int, out.value.unsigned_int);
71}
72
77 SensorStatus status = SENSOR_OK;
78 uint8_t buffer[512];
79 size_t buffer_len = 0;
80
81 // encode
82 SensorMeasurement in_array[10] = {};
83 size_t len = 10;
84
85 Metadata meta = Metadata_init_zero;
86 meta.ts = 1000;
87 meta.logger_id = 2000;
88 meta.cell_id = 3000;
89
90 for (size_t i = 0; i < len; i++) {
91 SensorMeasurement* in = &in_array[i];
92
93 in->has_meta = true;
94 in->meta.ts = 123 + i;
95 in->meta.logger_id = 456 + i;
96 in->meta.cell_id = 789 + i;
97 in->type = SensorType_NONE;
98
99 in->which_value = SensorMeasurement_unsigned_int_tag;
100 in->value.unsigned_int = 9876543210ULL + i;
101 }
102
103 status = EncodeRepeatedSensorMeasurements(meta, in_array, len, buffer,
104 sizeof(buffer), &buffer_len);
105 TEST_ASSERT_EQUAL(SENSOR_OK, status);
106 TEST_ASSERT_GREATER_THAN(0, buffer_len);
107
108 // decode
109 RepeatedSensorMeasurements rep_out = RepeatedSensorMeasurements_init_zero;
110
111 status = DecodeRepeatedSensorMeasurements(buffer, buffer_len, &rep_out);
112
113 TEST_ASSERT_EQUAL(SENSOR_OK, status);
114 TEST_ASSERT_EQUAL(10, rep_out.measurements_count);
115
116 for (int i = 0; i < 10; i++) {
117 SensorMeasurement* in = &in_array[i];
118 SensorMeasurement* out = &rep_out.measurements[i];
119
120 // check values
121 TEST_ASSERT_EQUAL(in->has_meta, out->has_meta);
122 TEST_ASSERT_EQUAL(in->meta.ts, out->meta.ts);
123 TEST_ASSERT_EQUAL(in->meta.logger_id, out->meta.logger_id);
124 TEST_ASSERT_EQUAL(in->meta.cell_id, out->meta.cell_id);
125 TEST_ASSERT_EQUAL(in->type, out->type);
126 TEST_ASSERT_EQUAL(in->which_value, out->which_value);
127 TEST_ASSERT_EQUAL(in->value.unsigned_int, out->value.unsigned_int);
128 }
129}
130
132 SensorStatus status = SENSOR_OK;
133 uint8_t buffer[512];
134 size_t buffer_len = 0;
135
136 // encode
137 SensorMeasurement in_array[10] = {};
138 size_t len = 10;
139
140 Metadata meta = Metadata_init_zero;
141 // meta.ts = 1000;
142 // meta.logger_id = 2000;
143 // meta.cell_id = 3000;
144
145 for (size_t i = 0; i < len; i++) {
146 SensorMeasurement* in = &in_array[i];
147
148 in->has_meta = true;
149 in->meta.ts = 123;
150 in->meta.logger_id = 456;
151 in->meta.cell_id = 789;
152 in->type = SensorType_POWER_VOLTAGE;
153
154 in->which_value = SensorMeasurement_unsigned_int_tag;
155 in->value.unsigned_int = 9876543210ULL + i;
156 }
157
158 status = EncodeRepeatedSensorMeasurements(meta, in_array, len, buffer,
159 sizeof(buffer), &buffer_len);
160
161 TEST_ASSERT_EQUAL(SENSOR_OK, status);
162 TEST_ASSERT_GREATER_THAN(0, buffer_len);
163
164 // decode
165 RepeatedSensorMeasurements rep_out = RepeatedSensorMeasurements_init_zero;
166
167 status = DecodeRepeatedSensorMeasurements(buffer, buffer_len, &rep_out);
168
169 TEST_ASSERT_EQUAL(SENSOR_OK, status);
170 TEST_ASSERT_EQUAL(10, rep_out.measurements_count);
171
172 for (int i = 0; i < 10; i++) {
173 SensorMeasurement* in = &in_array[i];
174 SensorMeasurement* out = &rep_out.measurements[i];
175
176 // check values
177 TEST_ASSERT_EQUAL(in->has_meta, out->has_meta);
178 TEST_ASSERT_EQUAL(in->meta.ts, out->meta.ts);
179 TEST_ASSERT_EQUAL(in->meta.logger_id, out->meta.logger_id);
180 TEST_ASSERT_EQUAL(in->meta.cell_id, out->meta.cell_id);
181 TEST_ASSERT_EQUAL(in->type, out->type);
182 TEST_ASSERT_EQUAL(in->which_value, out->which_value);
183 TEST_ASSERT_EQUAL(in->value.unsigned_int, out->value.unsigned_int);
184 }
185}
186
188 SensorStatus status = SENSOR_OK;
189
190 Metadata meta = Metadata_init_zero;
191 meta.ts = 1111;
192 meta.logger_id = 2222;
193 meta.cell_id = 3333;
194
195 uint64_t value = 1234567890123456789ULL;
196
197 uint8_t buffer[256];
198 size_t buffer_len = sizeof(buffer);
199 status = EncodeUint32Measurement(meta, value, SensorType_POWER_VOLTAGE,
200 buffer, &buffer_len);
201
202 TEST_ASSERT_EQUAL(SENSOR_OK, status);
203 TEST_ASSERT_GREATER_THAN(0, buffer_len);
204}
205
207 SensorStatus status = SENSOR_OK;
208
209 Metadata meta = Metadata_init_zero;
210 meta.ts = 1111;
211 meta.logger_id = 2222;
212 meta.cell_id = 3333;
213
214 int64_t value = -1234567890123456789LL;
215
216 uint8_t buffer[256];
217 size_t buffer_len = sizeof(buffer);
218 status = EncodeInt32Measurement(meta, value, SensorType_POWER_VOLTAGE, buffer,
219 &buffer_len);
220
221 TEST_ASSERT_EQUAL(SENSOR_OK, status);
222 TEST_ASSERT_GREATER_THAN(0, buffer_len);
223}
224
226 SensorStatus status = SENSOR_OK;
227
228 Metadata meta = Metadata_init_zero;
229 meta.ts = 1111;
230 meta.logger_id = 2222;
231 meta.cell_id = 3333;
232
233 double value = 12345.6789;
234
235 uint8_t buffer[256];
236 size_t buffer_len = sizeof(buffer);
237 status = EncodeDoubleMeasurement(meta, value, SensorType_POWER_VOLTAGE,
238 buffer, &buffer_len);
239
240 TEST_ASSERT_EQUAL(SENSOR_OK, status);
241 TEST_ASSERT_GREATER_THAN(0, buffer_len);
242}
243
245 SensorStatus status = SENSOR_OK;
246
247 // prepare responses
248 RepeatedSensorResponses responses = RepeatedSensorResponses_init_zero;
249 responses.responses_count = 2;
250
251 responses.responses[0].idx = 1;
252 responses.responses[0].error = SensorError_OK;
253
254 responses.responses[1].idx = 2;
255 responses.responses[1].error = SensorError_DECODE;
256
257 // encode
258 uint8_t buffer[256];
259 size_t buffer_len = sizeof(buffer);
260
261 status = EncodeRepeatedSensorResponses(responses, buffer, &buffer_len);
262
263 TEST_ASSERT_EQUAL(SENSOR_OK, status);
264 TEST_ASSERT_GREATER_THAN(0, buffer_len);
265
266 // decode
267 RepeatedSensorResponses decoded = RepeatedSensorResponses_init_zero;
268
269 status = DecodeRepeatedSensorReponses(buffer, buffer_len, &decoded);
270
271 TEST_ASSERT_EQUAL(SENSOR_OK, status);
272 TEST_ASSERT_EQUAL(2, decoded.responses_count);
273
274 TEST_ASSERT_EQUAL(responses.responses[0].idx, decoded.responses[0].idx);
275 TEST_ASSERT_EQUAL(responses.responses[0].error, decoded.responses[0].error);
276
277 TEST_ASSERT_EQUAL(responses.responses[1].idx, decoded.responses[1].idx);
278 TEST_ASSERT_EQUAL(responses.responses[1].error, decoded.responses[1].error);
279}
280
282 SensorStatus status = SENSOR_OK;
283 SensorResponse resp = SensorResponse_init_zero;
284
285 // Top level error (success)
286
287 resp.idx = 0;
288 resp.error = SensorError_OK;
289 status = CheckSensorResponse(&resp);
290 TEST_ASSERT_EQUAL(SENSOR_OK, status);
291
292 // Top level error (failure)
293
294 resp.idx = 0;
295 resp.error = SensorError_GENERAL;
296 status = CheckSensorResponse(&resp);
297 TEST_ASSERT_EQUAL(SENSOR_REUPLOAD, status);
298
299 // Individual measurement (success)
300
301 resp.idx = 1;
302 resp.error = SensorError_OK;
303 status = CheckSensorResponse(&resp);
304 TEST_ASSERT_EQUAL(SENSOR_OK, status);
305
306 // Individual measurement (format)
307 resp.idx = 2;
308 resp.error = SensorError_LOGGER;
309 status = CheckSensorResponse(&resp);
310 TEST_ASSERT_EQUAL(SENSOR_FORMAT, status);
311
312 // Individual measurement (reupload)
313 resp.idx = 3;
314 resp.error = SensorError_INVALID;
315 status = CheckSensorResponse(&resp);
316 TEST_ASSERT_EQUAL(SENSOR_REUPLOAD, status);
317}
318
320 SensorStatus status = SENSOR_OK;
321
322 Metadata meta = Metadata_init_zero;
323 meta.ts = 1000;
324 meta.logger_id = 2000;
325 meta.cell_id = 3000;
326
327 SensorMeasurement in_array[5] = {};
328 size_t len = 5;
329
330 for (size_t i = 0; i < len; i++) {
331 SensorMeasurement* in = &in_array[i];
332
333 in->has_meta = true;
334 in->meta.ts = 123 + i;
335 in->meta.logger_id = 456 + i;
336 in->meta.cell_id = 789 + i;
337 in->type = SensorType_NONE;
338
339 in->which_value = SensorMeasurement_unsigned_int_tag;
340 in->value.unsigned_int = 98765430ULL + i;
341 }
342
343 size_t size = 0;
344 status = RepeatedSensorMeasurementsSize(meta, in_array, len, &size);
345 TEST_ASSERT_EQUAL(SENSOR_OK, status);
346 TEST_ASSERT_GREATER_THAN(0, size);
347}
348
353int main(void) {
354 // Unit testing
355 UNITY_BEGIN();
356
364 RUN_TEST(TestCheckSensorResponse);
366
367 UNITY_END();
368}
int main()
Definition main.c:4
uint8_t buffer[32]
uint8_t i
SensorStatus DecodeSensorMeasurement(const uint8_t *data, const size_t len, SensorMeasurement *meas)
Decodes a sensor measurement from a buffer.
Definition sensor.c:259
SensorStatus EncodeSensorMeasurement(const SensorMeasurement *meas, uint8_t *buffer, size_t *size)
Encodes a single sensor measurement into a buffer.
Definition sensor.c:151
SensorStatus RepeatedSensorMeasurementsSize(Metadata meta, const SensorMeasurement meas[], size_t count, size_t *size)
Gets the size of multiple repeated sensor measurements when encoded.
Definition sensor.c:191
SensorStatus EncodeInt32Measurement(Metadata meta, int32_t value, SensorType type, uint8_t *buffer, size_t *size)
Encodes an int64_t sensor measurement into a buffer.
Definition sensor.c:229
SensorStatus CheckSensorResponse(const SensorResponse *resp)
Checks a single sensor response for errors.
Definition sensor.c:306
SensorStatus EncodeRepeatedSensorMeasurements(Metadata meta, const SensorMeasurement meas[], size_t count, uint8_t *buffer, size_t size, size_t *length)
Encodes multiple sensor measurements into a buffer.
Definition sensor.c:166
SensorStatus EncodeDoubleMeasurement(Metadata meta, double value, SensorType type, uint8_t *buffer, size_t *size)
Encodes a double sensor measurement into a buffer.
Definition sensor.c:244
SensorStatus DecodeRepeatedSensorReponses(const uint8_t *data, const size_t len, RepeatedSensorResponses *resp)
Decodes multiple sensor responses from a buffer.
Definition sensor.c:295
SensorStatus EncodeRepeatedSensorResponses(const RepeatedSensorResponses responses, uint8_t *buffer, size_t *size)
Encodes multiple sensor responses into a buffer.
Definition sensor.c:283
enum _SensorStatus SensorStatus
SensorStatus DecodeRepeatedSensorMeasurements(const uint8_t *data, const size_t len, RepeatedSensorMeasurements *measurements)
Decodes multiple sensor measurements from a buffer.
Definition sensor.c:270
SensorStatus EncodeUint32Measurement(Metadata meta, uint32_t value, SensorType type, uint8_t *buffer, size_t *size)
Encodes a uint64_t sensor measurement into a buffer.
Definition sensor.c:213
@ SENSOR_FORMAT
Definition sensor.h:47
@ SENSOR_REUPLOAD
Definition sensor.h:45
@ SENSOR_OK
Definition sensor.h:41
Library for sensor measurement encoding/decoding.
void setUp(void)
Definition main.c:24
void tearDown(void)
Definition main.c:26
void TestRepeatedSensorMeasurementsOptimize(void)
Definition main.c:131
void TestTranscodeRepeatedSensorMeasurements(void)
Encodes then decodes repeated sensor measurements.
Definition main.c:76
void TestRepeatedSensorMeasurementsSize(void)
Definition main.c:319
void TestRepeatedSensorResponses(void)
Definition main.c:244
void TestEncodeDoubleMeasurement(void)
Definition main.c:225
void TestCheckSensorResponse(void)
Definition main.c:281
void TestEncodeUint32Measurement(void)
Definition main.c:187
void TestEncodeInt32Measurement(void)
Definition main.c:206
void TestTranscodeSensorMeasurement(void)
Encodes then decodes single sensor measurement.
Definition main.c:34