Files
allwpilib/hal/src/main/native/cpp/jni/EncoderJNI.cpp

393 lines
9.9 KiB
C++

/*----------------------------------------------------------------------------*/
/* Copyright (c) 2016-2020 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#include <jni.h>
#include <cassert>
#include "HALUtil.h"
#include "edu_wpi_first_hal_EncoderJNI.h"
#include "hal/Encoder.h"
#include "hal/Errors.h"
using namespace hal;
extern "C" {
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: initializeEncoder
* Signature: (IIIIZI)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_EncoderJNI_initializeEncoder
(JNIEnv* env, jclass, jint digitalSourceHandleA, jint analogTriggerTypeA,
jint digitalSourceHandleB, jint analogTriggerTypeB,
jboolean reverseDirection, jint encodingType)
{
int32_t status = 0;
auto encoder = HAL_InitializeEncoder(
(HAL_Handle)digitalSourceHandleA,
(HAL_AnalogTriggerType)analogTriggerTypeA,
(HAL_Handle)digitalSourceHandleB,
(HAL_AnalogTriggerType)analogTriggerTypeB, reverseDirection,
(HAL_EncoderEncodingType)encodingType, &status);
CheckStatusForceThrow(env, status);
return (jint)encoder;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: freeEncoder
* Signature: (I)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_freeEncoder
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
HAL_FreeEncoder((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: setEncoderSimDevice
* Signature: (II)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_setEncoderSimDevice
(JNIEnv* env, jclass, jint handle, jint device)
{
HAL_SetEncoderSimDevice((HAL_EncoderHandle)handle,
(HAL_SimDeviceHandle)device);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoder
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoder
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jint returnValue = HAL_GetEncoder((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderRaw
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderRaw
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jint returnValue = HAL_GetEncoderRaw((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncodingScaleFactor
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncodingScaleFactor
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jint returnValue =
HAL_GetEncoderEncodingScale((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: resetEncoder
* Signature: (I)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_resetEncoder
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
HAL_ResetEncoder((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderPeriod
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderPeriod
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
double returnValue = HAL_GetEncoderPeriod((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: setEncoderMaxPeriod
* Signature: (ID)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_setEncoderMaxPeriod
(JNIEnv* env, jclass, jint id, jdouble value)
{
int32_t status = 0;
HAL_SetEncoderMaxPeriod((HAL_EncoderHandle)id, value, &status);
CheckStatus(env, status);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderStopped
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderStopped
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jboolean returnValue = HAL_GetEncoderStopped((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderDirection
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderDirection
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jboolean returnValue =
HAL_GetEncoderDirection((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderDistance
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderDistance
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jdouble returnValue = HAL_GetEncoderDistance((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderRate
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderRate
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jdouble returnValue = HAL_GetEncoderRate((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: setEncoderMinRate
* Signature: (ID)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_setEncoderMinRate
(JNIEnv* env, jclass, jint id, jdouble value)
{
int32_t status = 0;
HAL_SetEncoderMinRate((HAL_EncoderHandle)id, value, &status);
CheckStatus(env, status);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: setEncoderDistancePerPulse
* Signature: (ID)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_setEncoderDistancePerPulse
(JNIEnv* env, jclass, jint id, jdouble value)
{
int32_t status = 0;
HAL_SetEncoderDistancePerPulse((HAL_EncoderHandle)id, value, &status);
CheckStatus(env, status);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: setEncoderReverseDirection
* Signature: (IZ)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_setEncoderReverseDirection
(JNIEnv* env, jclass, jint id, jboolean value)
{
int32_t status = 0;
HAL_SetEncoderReverseDirection((HAL_EncoderHandle)id, value, &status);
CheckStatus(env, status);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: setEncoderSamplesToAverage
* Signature: (II)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_setEncoderSamplesToAverage
(JNIEnv* env, jclass, jint id, jint value)
{
int32_t status = 0;
HAL_SetEncoderSamplesToAverage((HAL_EncoderHandle)id, value, &status);
if (status == PARAMETER_OUT_OF_RANGE) {
ThrowBoundaryException(env, value, 1, 127);
return;
}
CheckStatus(env, status);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderSamplesToAverage
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderSamplesToAverage
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jint returnValue =
HAL_GetEncoderSamplesToAverage((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: setEncoderIndexSource
* Signature: (IIII)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_hal_EncoderJNI_setEncoderIndexSource
(JNIEnv* env, jclass, jint id, jint digitalSourceHandle,
jint analogTriggerType, jint type)
{
int32_t status = 0;
HAL_SetEncoderIndexSource((HAL_EncoderHandle)id,
(HAL_Handle)digitalSourceHandle,
(HAL_AnalogTriggerType)analogTriggerType,
(HAL_EncoderIndexingType)type, &status);
CheckStatus(env, status);
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderFPGAIndex
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderFPGAIndex
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jint returnValue = HAL_GetEncoderFPGAIndex((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderEncodingScale
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderEncodingScale
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jint returnValue =
HAL_GetEncoderEncodingScale((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderDecodingScaleFactor
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderDecodingScaleFactor
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jdouble returnValue =
HAL_GetEncoderDecodingScaleFactor((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderDistancePerPulse
* Signature: (I)D
*/
JNIEXPORT jdouble JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderDistancePerPulse
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jdouble returnValue =
HAL_GetEncoderDistancePerPulse((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
/*
* Class: edu_wpi_first_hal_EncoderJNI
* Method: getEncoderEncodingType
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_EncoderJNI_getEncoderEncodingType
(JNIEnv* env, jclass, jint id)
{
int32_t status = 0;
jint returnValue = HAL_GetEncoderEncodingType((HAL_EncoderHandle)id, &status);
CheckStatus(env, status);
return returnValue;
}
} // extern "C"