RobotCore 1.0
WPILib port to raspberry Pi
Loading...
Searching...
No Matches
DataLog.java
1// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
4
5package org.wpilib.datalog;
6
7import java.nio.ByteBuffer;
8import java.util.HashSet;
9import java.util.Set;
10import java.util.concurrent.ConcurrentHashMap;
11import java.util.concurrent.ConcurrentMap;
12import org.wpilib.util.WPIUtilJNI;
13import org.wpilib.util.protobuf.Protobuf;
14import org.wpilib.util.struct.Struct;
15
30public class DataLog implements AutoCloseable {
36 protected DataLog(long impl) {
37 m_impl = impl;
38 }
39
41 public void flush() {
42 DataLogJNI.flush(m_impl);
43 }
44
49 public void pause() {
50 DataLogJNI.pause(m_impl);
51 }
52
54 public void resume() {
55 DataLogJNI.resume(m_impl);
56 }
57
59 public void stop() {
60 DataLogJNI.stop(m_impl);
61 }
62
69 public boolean hasSchema(String name) {
70 return m_schemaMap.containsKey(name);
71 }
72
85 public void addSchema(String name, String type, byte[] schema, long timestamp) {
86 if (m_schemaMap.putIfAbsent(name, 1) != null) {
87 return;
88 }
89 DataLogJNI.addSchema(m_impl, name, type, schema, timestamp);
90 }
91
103 public void addSchema(String name, String type, byte[] schema) {
104 addSchema(name, type, schema, 0);
105 }
106
119 public void addSchema(String name, String type, String schema, long timestamp) {
120 if (m_schemaMap.putIfAbsent(name, 1) != null) {
121 return;
122 }
123 DataLogJNI.addSchemaString(m_impl, name, type, schema, timestamp);
124 }
125
137 public void addSchema(String name, String type, String schema) {
138 addSchema(name, type, schema, 0);
139 }
140
148 public void addSchema(Protobuf<?, ?> proto, long timestamp) {
149 final long actualTimestamp = timestamp == 0 ? WPIUtilJNI.now() : timestamp;
150 proto.forEachDescriptor(
151 this::hasSchema,
152 (typeString, schema) ->
153 addSchema(typeString, "proto:FileDescriptorProto", schema, actualTimestamp));
154 }
155
162 public void addSchema(Protobuf<?, ?> proto) {
163 addSchema(proto, 0);
164 }
165
173 public void addSchema(Struct<?> struct, long timestamp) {
174 addSchemaImpl(struct, timestamp == 0 ? WPIUtilJNI.now() : timestamp, new HashSet<>());
175 }
176
183 public void addSchema(Struct<?> struct) {
184 addSchema(struct, 0);
185 }
186
199 public int start(String name, String type, String metadata, long timestamp) {
200 return DataLogJNI.start(m_impl, name, type, metadata, timestamp);
201 }
202
214 public int start(String name, String type, String metadata) {
215 return start(name, type, metadata, 0);
216 }
217
228 public int start(String name, String type) {
229 return start(name, type, "");
230 }
231
238 public void finish(int entry, long timestamp) {
239 DataLogJNI.finish(m_impl, entry, timestamp);
240 }
241
247 public void finish(int entry) {
248 finish(entry, 0);
249 }
250
258 public void setMetadata(int entry, String metadata, long timestamp) {
259 DataLogJNI.setMetadata(m_impl, entry, metadata, timestamp);
260 }
261
268 public void setMetadata(int entry, String metadata) {
269 setMetadata(entry, metadata, 0);
270 }
271
272 @Override
273 public void close() {
274 DataLogJNI.close(m_impl);
275 m_impl = 0;
276 }
277
285 public void appendRaw(int entry, byte[] data, long timestamp) {
286 appendRaw(entry, data, 0, data.length, timestamp);
287 }
288
298 public void appendRaw(int entry, byte[] data, int start, int len, long timestamp) {
299 DataLogJNI.appendRaw(m_impl, entry, data, start, len, timestamp);
300 }
301
309 public void appendRaw(int entry, ByteBuffer data, long timestamp) {
310 int pos = data.position();
311 appendRaw(entry, data, pos, data.limit() - pos, timestamp);
312 }
313
323 public void appendRaw(int entry, ByteBuffer data, int start, int len, long timestamp) {
324 DataLogJNI.appendRaw(m_impl, entry, data, start, len, timestamp);
325 }
326
334 public void appendBoolean(int entry, boolean value, long timestamp) {
335 DataLogJNI.appendBoolean(m_impl, entry, value, timestamp);
336 }
337
345 public void appendInteger(int entry, long value, long timestamp) {
346 DataLogJNI.appendInteger(m_impl, entry, value, timestamp);
347 }
348
356 public void appendFloat(int entry, float value, long timestamp) {
357 DataLogJNI.appendFloat(m_impl, entry, value, timestamp);
358 }
359
367 public void appendDouble(int entry, double value, long timestamp) {
368 DataLogJNI.appendDouble(m_impl, entry, value, timestamp);
369 }
370
378 public void appendString(int entry, String value, long timestamp) {
379 DataLogJNI.appendString(m_impl, entry, value, timestamp);
380 }
381
389 public void appendBooleanArray(int entry, boolean[] arr, long timestamp) {
390 DataLogJNI.appendBooleanArray(m_impl, entry, arr, timestamp);
391 }
392
400 public void appendIntegerArray(int entry, long[] arr, long timestamp) {
401 DataLogJNI.appendIntegerArray(m_impl, entry, arr, timestamp);
402 }
403
411 public void appendFloatArray(int entry, float[] arr, long timestamp) {
412 DataLogJNI.appendFloatArray(m_impl, entry, arr, timestamp);
413 }
414
422 public void appendDoubleArray(int entry, double[] arr, long timestamp) {
423 DataLogJNI.appendDoubleArray(m_impl, entry, arr, timestamp);
424 }
425
433 public void appendStringArray(int entry, String[] arr, long timestamp) {
434 DataLogJNI.appendStringArray(m_impl, entry, arr, timestamp);
435 }
436
442 public long getImpl() {
443 return m_impl;
444 }
445
446 private void addSchemaImpl(Struct<?> struct, long timestamp, Set<String> seen) {
447 String typeString = struct.getTypeString();
448 if (hasSchema(typeString)) {
449 return;
450 }
451 if (!seen.add(typeString)) {
452 throw new UnsupportedOperationException(typeString + ": circular reference with " + seen);
453 }
454 for (Struct<?> inner : struct.getNested()) {
455 addSchemaImpl(inner, timestamp, seen);
456 }
457 addSchema(typeString, "structschema", struct.getSchema(), timestamp);
458 seen.remove(typeString);
459 }
460
462 protected long m_impl;
463
464 private final ConcurrentMap<String, Integer> m_schemaMap = new ConcurrentHashMap<>();
465}
int start(String name, String type, String metadata)
Definition DataLog.java:214
int start(String name, String type)
Definition DataLog.java:228
void appendRaw(int entry, byte[] data, long timestamp)
Definition DataLog.java:285
int start(String name, String type, String metadata, long timestamp)
Definition DataLog.java:199
void appendStringArray(int entry, String[] arr, long timestamp)
Definition DataLog.java:433
void appendRaw(int entry, ByteBuffer data, long timestamp)
Definition DataLog.java:309
void appendRaw(int entry, ByteBuffer data, int start, int len, long timestamp)
Definition DataLog.java:323
void appendBoolean(int entry, boolean value, long timestamp)
Definition DataLog.java:334
void appendDoubleArray(int entry, double[] arr, long timestamp)
Definition DataLog.java:422
void setMetadata(int entry, String metadata)
Definition DataLog.java:268
void addSchema(String name, String type, String schema)
Definition DataLog.java:137
void appendBooleanArray(int entry, boolean[] arr, long timestamp)
Definition DataLog.java:389
void finish(int entry, long timestamp)
Definition DataLog.java:238
void appendFloatArray(int entry, float[] arr, long timestamp)
Definition DataLog.java:411
boolean hasSchema(String name)
Definition DataLog.java:69
void addSchema(Protobuf<?, ?> proto)
Definition DataLog.java:162
void appendRaw(int entry, byte[] data, int start, int len, long timestamp)
Definition DataLog.java:298
void addSchema(Struct<?> struct)
Definition DataLog.java:183
void addSchema(String name, String type, byte[] schema, long timestamp)
Definition DataLog.java:85
void appendString(int entry, String value, long timestamp)
Definition DataLog.java:378
void appendFloat(int entry, float value, long timestamp)
Definition DataLog.java:356
void addSchema(Struct<?> struct, long timestamp)
Definition DataLog.java:173
void finish(int entry)
Definition DataLog.java:247
void addSchema(String name, String type, String schema, long timestamp)
Definition DataLog.java:119
void addSchema(Protobuf<?, ?> proto, long timestamp)
Definition DataLog.java:148
void appendDouble(int entry, double value, long timestamp)
Definition DataLog.java:367
void appendIntegerArray(int entry, long[] arr, long timestamp)
Definition DataLog.java:400
void addSchema(String name, String type, byte[] schema)
Definition DataLog.java:103
void setMetadata(int entry, String metadata, long timestamp)
Definition DataLog.java:258
void appendInteger(int entry, long value, long timestamp)
Definition DataLog.java:345
default void forEachDescriptor(Predicate< String > exists, BiConsumer< String, byte[]> fn)
default Struct<?>[] getNested()
Definition Struct.java:88
default String getTypeString()
Definition Struct.java:65