2016-01-02 03:02:34 -08:00
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
/* Copyright (c) FIRST 2016. 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. */
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
2014-01-06 09:27:51 -05:00
|
|
|
#include <assert.h>
|
2016-05-20 17:30:37 -07:00
|
|
|
#include <jni.h>
|
2016-07-14 00:17:29 -07:00
|
|
|
#include "HAL/cpp/Log.h"
|
2014-01-06 09:27:51 -05:00
|
|
|
|
|
|
|
|
#include "edu_wpi_first_wpilibj_hal_SPIJNI.h"
|
|
|
|
|
|
2016-05-24 00:58:10 -07:00
|
|
|
#include "HAL/SPI.h"
|
2015-11-01 09:11:52 -08:00
|
|
|
#include "HALUtil.h"
|
2018-04-29 23:33:19 -07:00
|
|
|
#include "wpi/jni_util.h"
|
2014-01-06 09:27:51 -05:00
|
|
|
|
2016-10-31 23:04:49 -07:00
|
|
|
using namespace frc;
|
2017-11-14 00:00:45 -08:00
|
|
|
using namespace wpi::java;
|
2016-10-31 23:04:49 -07:00
|
|
|
|
2014-01-06 09:27:51 -05:00
|
|
|
// set the logging level
|
2014-05-30 10:08:29 -04:00
|
|
|
TLogLevel spiJNILogLevel = logWARNING;
|
2014-01-06 09:27:51 -05:00
|
|
|
|
2016-05-20 17:30:37 -07:00
|
|
|
#define SPIJNI_LOG(level) \
|
|
|
|
|
if (level > spiJNILogLevel) \
|
|
|
|
|
; \
|
|
|
|
|
else \
|
|
|
|
|
Log().Get(level)
|
2014-01-06 09:27:51 -05:00
|
|
|
|
2015-11-01 09:11:52 -08:00
|
|
|
extern "C" {
|
|
|
|
|
|
2014-01-06 09:27:51 -05:00
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiInitialize
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (I)V
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiInitialize(
|
2017-05-09 12:12:46 -07:00
|
|
|
JNIEnv *env, jclass, jint port) {
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiInitialize";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
int32_t status = 0;
|
2017-05-09 12:12:46 -07:00
|
|
|
HAL_InitializeSPI(static_cast<HAL_SPIPort>(port), &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
2016-09-29 20:18:40 -07:00
|
|
|
CheckStatusForceThrow(env, status);
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiTransaction
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (ILjava/nio/ByteBuffer;Ljava/nio/ByteBuffer;B)I
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiTransaction(
|
2017-05-09 12:12:46 -07:00
|
|
|
JNIEnv *env, jclass, jint port, jobject dataToSend, jobject dataReceived,
|
2016-05-20 17:30:37 -07:00
|
|
|
jbyte size) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiTransaction";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
uint8_t *dataToSendPtr = nullptr;
|
|
|
|
|
if (dataToSend != 0) {
|
|
|
|
|
dataToSendPtr = (uint8_t *)env->GetDirectBufferAddress(dataToSend);
|
|
|
|
|
}
|
|
|
|
|
uint8_t *dataReceivedPtr =
|
|
|
|
|
(uint8_t *)env->GetDirectBufferAddress(dataReceived);
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Size = " << (jint)size;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "DataToSendPtr = " << dataToSendPtr;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "DataReceivedPtr = " << dataReceivedPtr;
|
2017-05-09 12:12:46 -07:00
|
|
|
jint retVal = HAL_TransactionSPI(static_cast<HAL_SPIPort>(port), dataToSendPtr, dataReceivedPtr, size);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "ReturnValue = " << (jint)retVal;
|
|
|
|
|
return retVal;
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
2017-11-14 00:00:45 -08:00
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
|
|
|
|
* Method: spiTransactionB
|
|
|
|
|
* Signature: (I[B[BB)I
|
|
|
|
|
*/
|
|
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiTransactionB(
|
|
|
|
|
JNIEnv *env, jclass, jint port, jbyteArray dataToSend, jbyteArray dataReceived,
|
|
|
|
|
jbyte size) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiTransactionB";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Size = " << (jint)size;
|
2018-04-29 23:33:19 -07:00
|
|
|
wpi::SmallVector<uint8_t, 128> recvBuf;
|
2017-11-14 00:00:45 -08:00
|
|
|
recvBuf.resize(size);
|
|
|
|
|
jint retVal =
|
|
|
|
|
HAL_TransactionSPI(static_cast<HAL_SPIPort>(port),
|
|
|
|
|
reinterpret_cast<const uint8_t *>(
|
|
|
|
|
JByteArrayRef(env, dataToSend).array().data()),
|
|
|
|
|
recvBuf.data(), size);
|
|
|
|
|
env->SetByteArrayRegion(dataReceived, 0, size,
|
|
|
|
|
reinterpret_cast<const jbyte *>(recvBuf.data()));
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "ReturnValue = " << (jint)retVal;
|
|
|
|
|
return retVal;
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-06 09:27:51 -05:00
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiWrite
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (ILjava/nio/ByteBuffer;B)I
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiWrite(
|
2017-05-09 12:12:46 -07:00
|
|
|
JNIEnv *env, jclass, jint port, jobject dataToSend, jbyte size) {
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiWrite";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
uint8_t *dataToSendPtr = nullptr;
|
|
|
|
|
if (dataToSend != 0) {
|
|
|
|
|
dataToSendPtr = (uint8_t *)env->GetDirectBufferAddress(dataToSend);
|
|
|
|
|
}
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Size = " << (jint)size;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "DataToSendPtr = " << dataToSendPtr;
|
2017-05-09 12:12:46 -07:00
|
|
|
jint retVal = HAL_WriteSPI(static_cast<HAL_SPIPort>(port), dataToSendPtr, size);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "ReturnValue = " << (jint)retVal;
|
|
|
|
|
return retVal;
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
2017-11-14 00:00:45 -08:00
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
|
|
|
|
* Method: spiWriteB
|
|
|
|
|
* Signature: (I[BB)I
|
|
|
|
|
*/
|
|
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiWriteB(
|
|
|
|
|
JNIEnv *env, jclass, jint port, jbyteArray dataToSend, jbyte size) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiWriteB";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Size = " << (jint)size;
|
|
|
|
|
jint retVal = HAL_WriteSPI(static_cast<HAL_SPIPort>(port),
|
|
|
|
|
reinterpret_cast<const uint8_t *>(
|
|
|
|
|
JByteArrayRef(env, dataToSend).array().data()),
|
|
|
|
|
size);
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "ReturnValue = " << (jint)retVal;
|
|
|
|
|
return retVal;
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-06 09:27:51 -05:00
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiRead
|
2017-11-14 00:00:45 -08:00
|
|
|
* Signature: (IZLjava/nio/ByteBuffer;B)I
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiRead(
|
2017-11-14 00:00:45 -08:00
|
|
|
JNIEnv *env, jclass, jint port, jboolean initiate, jobject dataReceived, jbyte size) {
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiRead";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
2017-11-14 00:00:45 -08:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Initiate = " << (jboolean)initiate;
|
2016-05-20 17:30:37 -07:00
|
|
|
uint8_t *dataReceivedPtr =
|
|
|
|
|
(uint8_t *)env->GetDirectBufferAddress(dataReceived);
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Size = " << (jint)size;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "DataReceivedPtr = " << dataReceivedPtr;
|
2017-11-14 00:00:45 -08:00
|
|
|
jint retVal;
|
|
|
|
|
if (initiate) {
|
2018-04-29 23:33:19 -07:00
|
|
|
wpi::SmallVector<uint8_t, 128> sendBuf;
|
2017-11-14 00:00:45 -08:00
|
|
|
sendBuf.resize(size);
|
|
|
|
|
retVal = HAL_TransactionSPI(static_cast<HAL_SPIPort>(port), sendBuf.data(), dataReceivedPtr, size);
|
|
|
|
|
} else {
|
|
|
|
|
retVal = HAL_ReadSPI(static_cast<HAL_SPIPort>(port), (uint8_t *)dataReceivedPtr, size);
|
|
|
|
|
}
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "ReturnValue = " << (jint)retVal;
|
|
|
|
|
return retVal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
|
|
|
|
* Method: spiReadB
|
|
|
|
|
* Signature: (IZ[BB)I
|
|
|
|
|
*/
|
|
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiReadB(
|
|
|
|
|
JNIEnv *env, jclass, jint port, jboolean initiate, jbyteArray dataReceived, jbyte size) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiReadB";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Initiate = " << (jboolean)initiate;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Size = " << (jint)size;
|
|
|
|
|
jint retVal;
|
2018-04-29 23:33:19 -07:00
|
|
|
wpi::SmallVector<uint8_t, 128> recvBuf;
|
2017-11-14 00:00:45 -08:00
|
|
|
recvBuf.resize(size);
|
|
|
|
|
if (initiate) {
|
2018-04-29 23:33:19 -07:00
|
|
|
wpi::SmallVector<uint8_t, 128> sendBuf;
|
2017-11-14 00:00:45 -08:00
|
|
|
sendBuf.resize(size);
|
|
|
|
|
retVal = HAL_TransactionSPI(static_cast<HAL_SPIPort>(port), sendBuf.data(), recvBuf.data(), size);
|
|
|
|
|
} else {
|
|
|
|
|
retVal = HAL_ReadSPI(static_cast<HAL_SPIPort>(port), recvBuf.data(), size);
|
|
|
|
|
}
|
|
|
|
|
env->SetByteArrayRegion(dataReceived, 0, size,
|
|
|
|
|
reinterpret_cast<const jbyte *>(recvBuf.data()));
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "ReturnValue = " << (jint)retVal;
|
|
|
|
|
return retVal;
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiClose
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (I)V
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT void JNICALL
|
2017-05-09 12:12:46 -07:00
|
|
|
Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiClose(JNIEnv *, jclass, jint port) {
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiClose";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
2017-05-09 12:12:46 -07:00
|
|
|
HAL_CloseSPI(static_cast<HAL_SPIPort>(port));
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiSetSpeed
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (II)V
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiSetSpeed(
|
2017-05-09 12:12:46 -07:00
|
|
|
JNIEnv *, jclass, jint port, jint speed) {
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiSetSpeed";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Speed = " << (jint)speed;
|
2017-05-09 12:12:46 -07:00
|
|
|
HAL_SetSPISpeed(static_cast<HAL_SPIPort>(port), speed);
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiSetOpts
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (IIII)V
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiSetOpts(
|
2017-05-09 12:12:46 -07:00
|
|
|
JNIEnv *, jclass, jint port, jint msb_first, jint sample_on_trailing,
|
2016-05-20 17:30:37 -07:00
|
|
|
jint clk_idle_high) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiSetOpts";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "msb_first = " << msb_first;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "sample_on_trailing = " << sample_on_trailing;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "clk_idle_high = " << clk_idle_high;
|
2017-05-09 12:12:46 -07:00
|
|
|
HAL_SetSPIOpts(static_cast<HAL_SPIPort>(port), msb_first, sample_on_trailing, clk_idle_high);
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiSetChipSelectActiveHigh
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (I)V
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT void JNICALL
|
|
|
|
|
Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiSetChipSelectActiveHigh(
|
2017-05-09 12:12:46 -07:00
|
|
|
JNIEnv *env, jclass, jint port) {
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiSetCSActiveHigh";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
int32_t status = 0;
|
2017-05-09 12:12:46 -07:00
|
|
|
HAL_SetSPIChipSelectActiveHigh(static_cast<HAL_SPIPort>(port), &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2014-07-16 16:24:44 -04:00
|
|
|
* Method: spiSetChipSelectActiveLow
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (I)V
|
2014-01-06 09:27:51 -05:00
|
|
|
*/
|
2016-05-20 17:30:37 -07:00
|
|
|
JNIEXPORT void JNICALL
|
|
|
|
|
Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiSetChipSelectActiveLow(
|
2017-05-09 12:12:46 -07:00
|
|
|
JNIEnv *env, jclass, jint port) {
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiSetCSActiveLow";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << (jint)port;
|
|
|
|
|
int32_t status = 0;
|
2017-05-09 12:12:46 -07:00
|
|
|
HAL_SetSPIChipSelectActiveLow(static_cast<HAL_SPIPort>(port), &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2014-01-06 09:27:51 -05:00
|
|
|
}
|
|
|
|
|
|
2015-11-22 11:50:49 -08:00
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiInitAuto
|
|
|
|
|
* Signature: (II)V
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiInitAuto
|
|
|
|
|
(JNIEnv *env, jclass, jint port, jint bufferSize) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiInitAuto";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "BufferSize = " << bufferSize;
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
HAL_InitSPIAuto(static_cast<HAL_SPIPort>(port), bufferSize, &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiFreeAuto
|
2017-05-09 12:12:46 -07:00
|
|
|
* Signature: (I)V
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiFreeAuto
|
|
|
|
|
(JNIEnv *env, jclass, jint port) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiFreeAuto";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
HAL_FreeSPIAuto(static_cast<HAL_SPIPort>(port), &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiStartAutoRate
|
|
|
|
|
* Signature: (ID)V
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiStartAutoRate
|
|
|
|
|
(JNIEnv *env, jclass, jint port, jdouble period) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiStartAutoRate";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Period = " << period;
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
HAL_StartSPIAutoRate(static_cast<HAL_SPIPort>(port), period, &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiStartAutoTrigger
|
|
|
|
|
* Signature: (IIIZZ)V
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiStartAutoTrigger
|
|
|
|
|
(JNIEnv *env, jclass, jint port, jint digitalSourceHandle, jint analogTriggerType, jboolean triggerRising, jboolean triggerFalling) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiStartAutoTrigger";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "DigitalSourceHandle = " << digitalSourceHandle;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "AnalogTriggerType = " << analogTriggerType;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "TriggerRising = " << (jint)triggerRising;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "TriggerFalling = " << (jint)triggerFalling;
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
HAL_StartSPIAutoTrigger(static_cast<HAL_SPIPort>(port), digitalSourceHandle,
|
|
|
|
|
static_cast<HAL_AnalogTriggerType>(analogTriggerType), triggerRising,
|
|
|
|
|
triggerFalling, &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiStopAuto
|
|
|
|
|
* Signature: (I)V
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiStopAuto
|
|
|
|
|
(JNIEnv *env, jclass, jint port) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiStopAuto";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
HAL_StopSPIAuto(static_cast<HAL_SPIPort>(port), &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiSetAutoTransmitData
|
|
|
|
|
* Signature: (I[BI)V
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiSetAutoTransmitData
|
|
|
|
|
(JNIEnv *env, jclass, jint port, jbyteArray dataToSend, jint zeroSize) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiSetAutoTransmitData";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "ZeroSize = " << zeroSize;
|
|
|
|
|
JByteArrayRef jarr(env, dataToSend);
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
HAL_SetSPIAutoTransmitData(static_cast<HAL_SPIPort>(port),
|
|
|
|
|
reinterpret_cast<const uint8_t*>(jarr.array().data()),
|
|
|
|
|
jarr.array().size(), zeroSize, &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiForceAutoRead
|
|
|
|
|
* Signature: (I)V
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiForceAutoRead
|
|
|
|
|
(JNIEnv *env, jclass, jint port) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiForceAutoRead";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
HAL_ForceSPIAutoRead(static_cast<HAL_SPIPort>(port), &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
|
|
|
|
CheckStatus(env, status);
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiReadAutoReceivedData
|
|
|
|
|
* Signature: (ILjava/nio/ByteBuffer;ID)I
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiReadAutoReceivedData__ILjava_nio_ByteBuffer_2ID
|
|
|
|
|
(JNIEnv *env, jclass, jint port, jobject buffer, jint numToRead, jdouble timeout) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiReadAutoReceivedData";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "NumToRead = " << numToRead;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Timeout = " << timeout;
|
|
|
|
|
uint8_t *recvBuf = (uint8_t *)env->GetDirectBufferAddress(buffer);
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
jint retval = HAL_ReadSPIAutoReceivedData(static_cast<HAL_SPIPort>(port), recvBuf, numToRead, timeout, &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
2017-12-13 23:41:37 -08:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Return = " << retval;
|
2016-05-20 17:30:37 -07:00
|
|
|
CheckStatus(env, status);
|
2017-12-13 23:41:37 -08:00
|
|
|
return retval;
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiReadAutoReceivedData
|
|
|
|
|
* Signature: (I[BID)I
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiReadAutoReceivedData__I_3BID
|
|
|
|
|
(JNIEnv *env, jclass, jint port, jbyteArray buffer, jint numToRead, jdouble timeout) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiReadAutoReceivedData";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "NumToRead = " << numToRead;
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Timeout = " << timeout;
|
2018-04-29 23:33:19 -07:00
|
|
|
wpi::SmallVector<uint8_t, 128> recvBuf;
|
2017-12-13 23:41:37 -08:00
|
|
|
recvBuf.resize(numToRead);
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
jint retval = HAL_ReadSPIAutoReceivedData(static_cast<HAL_SPIPort>(port), recvBuf.data(), numToRead, timeout, &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
2017-12-13 23:41:37 -08:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Return = " << retval;
|
|
|
|
|
if (!CheckStatus(env, status)) return retval;
|
|
|
|
|
if (numToRead > 0) {
|
|
|
|
|
env->SetByteArrayRegion(buffer, 0, numToRead,
|
|
|
|
|
reinterpret_cast<const jbyte *>(recvBuf.data()));
|
|
|
|
|
}
|
|
|
|
|
return retval;
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Class: edu_wpi_first_wpilibj_hal_SPIJNI
|
2017-12-13 23:41:37 -08:00
|
|
|
* Method: spiGetAutoDroppedCount
|
|
|
|
|
* Signature: (I)I
|
2015-11-22 11:50:49 -08:00
|
|
|
*/
|
2017-12-13 23:41:37 -08:00
|
|
|
JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_hal_SPIJNI_spiGetAutoDroppedCount
|
|
|
|
|
(JNIEnv *env, jclass, jint port) {
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Calling SPIJNI spiGetAutoDroppedCount";
|
|
|
|
|
SPIJNI_LOG(logDEBUG) << "Port = " << port;
|
2016-05-20 17:30:37 -07:00
|
|
|
int32_t status = 0;
|
2017-12-13 23:41:37 -08:00
|
|
|
auto retval = HAL_GetSPIAutoDroppedCount(static_cast<HAL_SPIPort>(port), &status);
|
2016-05-20 17:30:37 -07:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Status = " << status;
|
2017-12-13 23:41:37 -08:00
|
|
|
SPIJNI_LOG(logDEBUG) << "Return = " << retval;
|
2016-05-20 17:30:37 -07:00
|
|
|
CheckStatus(env, status);
|
2017-12-13 23:41:37 -08:00
|
|
|
return retval;
|
2015-11-22 11:50:49 -08:00
|
|
|
}
|
|
|
|
|
|
2015-11-01 09:11:52 -08:00
|
|
|
} // extern "C"
|