// Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. #include #include "edu_wpi_first_util_datalog_DataLogJNI.h" #include "wpi/DataLog.h" #include "wpi/jni_util.h" using namespace wpi::java; using namespace wpi::log; extern "C" { /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: create * Signature: (Ljava/lang/String;Ljava/lang/String;DLjava/lang/String;)J */ JNIEXPORT jlong JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_create (JNIEnv* env, jclass, jstring dir, jstring filename, jdouble period, jstring extraHeader) { return reinterpret_cast(new DataLog{JStringRef{env, dir}, JStringRef{env, filename}, period, JStringRef{env, extraHeader}}); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: setFilename * Signature: (JLjava/lang/String;)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_setFilename (JNIEnv* env, jclass, jlong impl, jstring filename) { if (impl == 0) { return; } reinterpret_cast(impl)->SetFilename(JStringRef{env, filename}); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: flush * Signature: (J)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_flush (JNIEnv*, jclass, jlong impl) { if (impl == 0) { return; } reinterpret_cast(impl)->Flush(); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: pause * Signature: (J)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_pause (JNIEnv*, jclass, jlong impl) { if (impl == 0) { return; } reinterpret_cast(impl)->Pause(); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: resume * Signature: (J)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_resume (JNIEnv*, jclass, jlong impl) { if (impl == 0) { return; } reinterpret_cast(impl)->Resume(); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: start * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)I */ JNIEXPORT jint JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_start (JNIEnv* env, jclass, jlong impl, jstring name, jstring type, jstring metadata, jlong timestamp) { if (impl == 0) { return 0; } return reinterpret_cast(impl)->Start( JStringRef{env, name}, JStringRef{env, type}, JStringRef{env, metadata}, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: finish * Signature: (JIJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_finish (JNIEnv*, jclass, jlong impl, jint entry, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->Finish(entry, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: setMetadata * Signature: (JILjava/lang/String;J)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_setMetadata (JNIEnv* env, jclass, jlong impl, jint entry, jstring metadata, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->SetMetadata( entry, JStringRef{env, metadata}, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: close * Signature: (J)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_close (JNIEnv*, jclass, jlong impl) { delete reinterpret_cast(impl); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendRaw * Signature: (JI[BJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendRaw (JNIEnv* env, jclass, jlong impl, jint entry, jbyteArray value, jlong timestamp) { if (impl == 0) { return; } JByteArrayRef cvalue{env, value}; reinterpret_cast(impl)->AppendRaw( entry, {reinterpret_cast(cvalue.array().data()), cvalue.size()}, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendBoolean * Signature: (JIZJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendBoolean (JNIEnv*, jclass, jlong impl, jint entry, jboolean value, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->AppendBoolean(entry, value, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendInteger * Signature: (JIJJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendInteger (JNIEnv*, jclass, jlong impl, jint entry, jlong value, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->AppendInteger(entry, value, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendFloat * Signature: (JIFJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendFloat (JNIEnv*, jclass, jlong impl, jint entry, jfloat value, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->AppendFloat(entry, value, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendDouble * Signature: (JIDJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendDouble (JNIEnv*, jclass, jlong impl, jint entry, jdouble value, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->AppendDouble(entry, value, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendString * Signature: (JILjava/lang/String;J)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendString (JNIEnv* env, jclass, jlong impl, jint entry, jstring value, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->AppendString(entry, JStringRef{env, value}, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendBooleanArray * Signature: (JI[ZJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendBooleanArray (JNIEnv* env, jclass, jlong impl, jint entry, jbooleanArray value, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->AppendBooleanArray( entry, JBooleanArrayRef{env, value}, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendIntegerArray * Signature: (JI[JJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendIntegerArray (JNIEnv* env, jclass, jlong impl, jint entry, jlongArray value, jlong timestamp) { if (impl == 0) { return; } JLongArrayRef jarr{env, value}; if constexpr (sizeof(jlong) == sizeof(int64_t)) { reinterpret_cast(impl)->AppendIntegerArray( entry, {reinterpret_cast(jarr.array().data()), jarr.array().size()}, timestamp); } else { wpi::SmallVector arr; arr.reserve(jarr.size()); for (auto v : jarr.array()) { arr.push_back(v); } reinterpret_cast(impl)->AppendIntegerArray(entry, arr, timestamp); } } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendFloatArray * Signature: (JI[FJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendFloatArray (JNIEnv* env, jclass, jlong impl, jint entry, jfloatArray value, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->AppendFloatArray( entry, JFloatArrayRef{env, value}, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendDoubleArray * Signature: (JI[DJ)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendDoubleArray (JNIEnv* env, jclass, jlong impl, jint entry, jdoubleArray value, jlong timestamp) { if (impl == 0) { return; } reinterpret_cast(impl)->AppendDoubleArray( entry, JDoubleArrayRef{env, value}, timestamp); } /* * Class: edu_wpi_first_util_datalog_DataLogJNI * Method: appendStringArray * Signature: (JI[Ljava/lang/Object;J)V */ JNIEXPORT void JNICALL Java_edu_wpi_first_util_datalog_DataLogJNI_appendStringArray (JNIEnv* env, jclass, jlong impl, jint entry, jobjectArray value, jlong timestamp) { if (impl == 0) { return; } size_t len = env->GetArrayLength(value); std::vector arr; arr.reserve(len); for (size_t i = 0; i < len; ++i) { JLocal elem{ env, static_cast(env->GetObjectArrayElement(value, i))}; if (!elem) { return; } arr.emplace_back(JStringRef{env, elem}.str()); } reinterpret_cast(impl)->AppendStringArray(entry, arr, timestamp); } } // extern "C"